From 5cbd9fd950efa47d5b2bd72616d326f980f6c1ac Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 16 Oct 2023 22:28:02 +0200 Subject: [PATCH 001/218] Don't use voronoi generation in variable xy distance calculations But instead calculate for each point the closest point on the "other" layer. Unfortunatly this means a nest for loop, looping through all points of the current layer, and for each of those points looping through all points of the other layer. This could mean a decrease in performance, but code is a lot more managable. CURA-11098 --- src/support.cpp | 207 ++++++++++++++++++++---------------------------- 1 file changed, 87 insertions(+), 120 deletions(-) diff --git a/src/support.cpp b/src/support.cpp index 188f2b486d..d4f5414e72 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -9,7 +9,6 @@ #include "SkeletalTrapezoidation.h" #include "Slice.h" #include "infill.h" -#include "infill/ImageBasedDensityProvider.h" #include "infill/SierpinskiFillProvider.h" #include "infill/UniformDensityProvider.h" #include "progress/Progress.h" @@ -824,6 +823,14 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const Settings& infill_settings, const LayerIndex layer_idx) { + // When the setting X/Y overrides Z is enabled, the X/Y distance is not constant, walls overhang angle. To + // do this we calculate a _natural X/Y distance_. This is the X/Y distance a support structure would have + // from the wall angled at the overhang angle with a vertical distance from the wall equal to the support + // Z distance. + // + // This natural X/Y distance is used to define a mapping from overhang angle to X/Y distance. This mapping is + // a linear mapping where at the overhang angle the X/Y distance is the natural X/Y distance and at 90 degrees + // the X/Y distance is the X/Y distance setting. The X/Y distance is _always_ capped at the maximum X/Y distance. const auto& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const Simplify simplify{ mesh_group_settings }; const auto layer_thickness = mesh_group_settings.get("layer_height"); @@ -833,161 +840,121 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto xy_distance = static_cast(mesh_group_settings.get("support_xy_distance")); const auto xy_distance_overhang = infill_settings.get("support_xy_distance_overhang"); - constexpr coord_t snap_radius = 10; - constexpr coord_t close_dist = snap_radius + 5; // needs to be larger than the snap radius! - constexpr coord_t search_radius = 0; + constexpr auto close_dist = 20; auto layer_current = simplify.polygon(storage.layers[layer_idx].getOutlines().offset(-close_dist).offset(close_dist)); - // sparse grid for storing the offset distances at each point. For each point there can be multiple offset - // values as multiple may be calculated when multiple layers are used for z-smoothing of the offsets. - // The average of all offset dists is taken for the used varying offset. To account for this the commutative - // offset, and the number of offsets $n$ are stored simultaneously. The final offset used is then commutative - // equal to commutative_offset / n. using point_pair_t = std::pair; - using grid_t = SparsePointGridInclusive; - grid_t offset_dist_at_point{ snap_radius }; + using poly_point_key = std::tuple; + + // We calculate the slope for each point at multiple layers. This is to average out local variations in the + // slope. We need at least two layers to calculate the slope; one above the current layer and one below. + // This is because the bottom layer uses _support_distance_bot_ and the top layer uses _support_distance_top_ + // for the z-distance, and we want to take in both these values into account when creating the xy-distance poly. + struct z_delta_poly_t { + double support_distance; + double delta_z; + Polygons layer_delta; + }; - // Collection of the various areas we used to calculate the areas for. This is a combination - // - the support distance (this is the support top distance for overhang areas, and support - // bottom thickness for sloped areas) - // - of the delta z between the current layer and layer below (this can vary between the areas - // when we use multiple layers for z-smoothing) - // - the polygon delta; the xy-distance is calculated separately for overhang and sloped areas. - // here either the slope or overhang area is stored - std::vector> z_distances_layer_deltas; + std::vector z_distances_layer_deltas; - constexpr LayerIndex layer_index_offset{ 1 }; + // We only use two compare-layers for the slope calculation. A layer $layer_index_offset$ layers below and + // a layer $layer_index_offset$ layers above the current layer. + const size_t layer_index_offset = 1; const LayerIndex layer_idx_below{ std::max(LayerIndex{ layer_idx - layer_index_offset }, LayerIndex{ 0 }) }; if (layer_idx_below != layer_idx) { - auto layer_below = simplify.polygon(storage.layers[layer_idx_below].getOutlines().offset(-close_dist).offset(close_dist)); - - z_distances_layer_deltas.emplace_back(support_distance_top, static_cast(layer_index_offset * layer_thickness), layer_current.difference(layer_below)); - - z_distances_layer_deltas.emplace_back(support_distance_bot, static_cast(layer_index_offset * layer_thickness), layer_below.difference(layer_current)); + const auto layer_below = simplify.polygon(storage.layers[layer_idx_below].getOutlines().offset(-close_dist).offset(close_dist)); + z_distances_layer_deltas.emplace_back(z_delta_poly_t { + .support_distance = support_distance_bot, + .delta_z = -static_cast(layer_index_offset * layer_thickness), + .layer_delta = layer_below, + }); } const LayerIndex layer_idx_above{ std::min(LayerIndex{ layer_idx + layer_index_offset }, LayerIndex{ storage.layers.size() - 1 }) }; if (layer_idx_above != layer_idx) { - auto layer_above = simplify.polygon(storage.layers[layer_idx_below].getOutlines().offset(-close_dist).offset(close_dist)); - - z_distances_layer_deltas.emplace_back(support_distance_bot, static_cast(layer_index_offset * layer_thickness), layer_current.difference(layer_above)); - - z_distances_layer_deltas.emplace_back(support_distance_top, static_cast(layer_index_offset * layer_thickness), layer_above.difference(layer_current)); + const auto layer_above = simplify.polygon(storage.layers[layer_idx_above].getOutlines().offset(-close_dist).offset(close_dist)); + z_distances_layer_deltas.emplace_back(z_delta_poly_t { + .support_distance = support_distance_top, + .delta_z = static_cast(layer_index_offset * layer_thickness), + .layer_delta = layer_above, + }); } - for (auto& [support_distance, delta_z, layer_delta_] : z_distances_layer_deltas) + // Initialize the offset_dist_at_point map with all the points in the current layer. + // This map is used to store the variation in X/Y distance at each point, per + // compare-layer. The distances calculated for each layer are averaged to get the + // final X/Y distance. + std::map offset_dist_at_point; + for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { - const auto xy_distance_natural = support_distance * std::tan(overhang_angle); - - // perform a close operation to remove narrow areas; these cannot easily be turned into a voronoi diagram - // we might "miss" some vertices in the resulting git map, this is not a problem - auto layer_delta = layer_delta_.offset(-close_dist).offset(close_dist); - - if (layer_delta.empty()) + for (auto [current_point_idx, current_point] : current_poly | ranges::views::enumerate) { - continue; + offset_dist_at_point.insert({ { current_poly_idx, current_point_idx }, { 0, 0 } }); } + } - // grid for storing the "slope" (wall overhang area at that specific point in the polygon) - grid_t slope_at_point{ snap_radius }; - - // construct a voronoi diagram. The slope is calculated based - // on the edge length from the boundary to the center edge(s) - std::vector segments; - for (auto [poly_idx, poly] : layer_delta | ranges::views::enumerate) - { - for (auto [point_idx, _p] : poly | ranges::views::enumerate) - { - segments.emplace_back(&layer_delta, poly_idx, point_idx); - } - } - - boost::polygon::voronoi_diagram vonoroi_diagram; - boost::polygon::construct_voronoi(segments.begin(), segments.end(), &vonoroi_diagram); - - for (const auto& edge : vonoroi_diagram.edges()) - { - if (edge.is_infinite()) - { - continue; - } - - auto p0 = VoronoiUtils::p(edge.vertex0()); - auto p1 = VoronoiUtils::p(edge.vertex1()); - - // skip edges that move "outside" the polygon; - // these are st edges that are inside polygon-holes - if (! layer_delta.inside(p0) && ! layer_delta.inside(p1)) - { - continue; - } - - auto dist_to_center_edge = static_cast(cura::vSize(p0 - p1)); - - if (dist_to_center_edge < snap_radius) - { - continue; - } - - // p0 to p1 is the distance to the center between the two polygons; two times - // this distance is (approximately) the distance between the boundaries - auto dist_to_boundary = 2. * dist_to_center_edge; - auto slope = dist_to_boundary / delta_z; - - auto nearby_vals = slope_at_point.getNearbyVals(p0, search_radius); - auto n = ranges::accumulate(nearby_vals | views::get(&point_pair_t::first), 0); - auto cumulative_slope = ranges::accumulate(nearby_vals | views::get(&point_pair_t::second), 0.); - - n += 1; - cumulative_slope += slope; - - // update cumulative_slope in sparse grid - slope_at_point.insert(p0, { n, cumulative_slope }); - } + for (const auto& z_delta_poly : z_distances_layer_deltas) + { + const auto support_distance = z_delta_poly.support_distance; + const auto delta_z = z_delta_poly.delta_z; + const auto layer_delta = z_delta_poly.layer_delta; + const auto xy_distance_natural = support_distance * std::tan(overhang_angle); - for (const auto& poly : layer_current) + for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { - for (const auto& point : poly) + for (auto [current_point_idx, current_point] : current_poly | ranges::views::enumerate) { - auto nearby_vals = slope_at_point.getNearbyVals(point, search_radius); - auto n = ranges::accumulate(nearby_vals | views::get(&point_pair_t::first), 0); - auto cumulative_slope = ranges::accumulate(nearby_vals | views::get(&point_pair_t::second), 0.); + auto min_dist2 = std::numeric_limits::max(); + Point min_point; - if (n != 0) + for (auto delta_poly : layer_delta) { - auto slope = cumulative_slope / static_cast(n); - auto wall_angle = std::atan(slope); - auto ratio = std::min(wall_angle / overhang_angle, 1.); + constexpr auto window_size = 2; + const auto view = ranges::views::concat(delta_poly, (delta_poly | ranges::views::take(window_size -1))) // wrap around to make sure all line segments are included + | ranges::views::sliding(window_size); // sliding window of size 2 to get start/end of line segment - auto xy_distance_varying = std::lerp(xy_distance, xy_distance_natural, ratio); + for (auto window : view) + { + const auto delta_point = window[0]; + const auto delta_point_next = window[1]; - auto nearby_vals_offset_dist = offset_dist_at_point.getNearbyVals(point, search_radius); + const auto dist2 = LinearAlg2D::getDist2FromLineSegment(delta_point, current_point, delta_point_next); - // update and insert cumulative varying xy distance in one go - offset_dist_at_point.insert( - point, - { ranges::accumulate(nearby_vals_offset_dist | views::get(&point_pair_t::first), 0) + 1, - ranges::accumulate(nearby_vals_offset_dist | views::get(&point_pair_t::second), 0.) + xy_distance_varying }); + if (dist2 < min_dist2) + { + min_dist2 = dist2; + min_point = LinearAlg2D::getClosestOnLineSegment(current_point, delta_point, delta_point_next); + } + } } + + const auto min_dist = std::sqrt(min_dist2); + const auto slope = min_dist / delta_z; + const auto wall_angle = std::atan(std::abs(slope)); + const auto ratio = wall_angle / overhang_angle; + const auto xy_distance_varying = std::lerp(xy_distance, xy_distance_natural, ratio); + + const poly_point_key key = { current_poly_idx, current_point_idx }; + const auto [n, commutative_offset] = offset_dist_at_point.at(key); + offset_dist_at_point.at(key) = { n + 1, commutative_offset + xy_distance_varying }; } } } std::vector varying_offsets; - for (const auto& poly : layer_current) + + for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { - for (const auto& point : poly) + for (auto [current_point_idx, _current_point] : current_poly | ranges::views::enumerate) { - auto nearby_vals = offset_dist_at_point.getNearbyVals(point, search_radius); - - auto n = ranges::accumulate(nearby_vals | views::get(&point_pair_t::first), 0); - auto cumulative_offset_dist = ranges::accumulate(nearby_vals | views::get(&point_pair_t::second), 0.); + const auto [n, commutative_offset] = offset_dist_at_point.at({ current_poly_idx, current_point_idx }); - double offset_dist{}; + double offset_dist; if (n == 0) { // if there are no offset dists generated for a vertex $p$ this must mean that vertex $p$ was not @@ -998,8 +965,8 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st } else { - auto avg_offset_dist = cumulative_offset_dist / static_cast(n); - offset_dist = avg_offset_dist; + // Take average of all dists generated for vertex $p$. + offset_dist = commutative_offset / static_cast(n); } varying_offsets.push_back(static_cast(offset_dist)); From f9804e05a768866bda27ab2676796dcb306e33fc Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 16 Oct 2023 23:39:35 +0200 Subject: [PATCH 002/218] Add missing imports CURA-11098 --- src/support.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/support.cpp b/src/support.cpp index d4f5414e72..f9ae636335 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -30,6 +30,9 @@ #include #include #include +#include +#include +#include #include #include From a464be1e9a2520adaef365a2376cf39f2e004330 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Thu, 19 Oct 2023 10:44:26 +0000 Subject: [PATCH 003/218] Applied clang-format. --- src/support.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/support.cpp b/src/support.cpp index f9ae636335..5d46c3f9db 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -24,15 +24,15 @@ #include "utils/views/get.h" #include +#include #include #include #include #include #include -#include -#include #include #include +#include #include #include @@ -854,7 +854,8 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st // slope. We need at least two layers to calculate the slope; one above the current layer and one below. // This is because the bottom layer uses _support_distance_bot_ and the top layer uses _support_distance_top_ // for the z-distance, and we want to take in both these values into account when creating the xy-distance poly. - struct z_delta_poly_t { + struct z_delta_poly_t + { double support_distance; double delta_z; Polygons layer_delta; @@ -870,7 +871,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st if (layer_idx_below != layer_idx) { const auto layer_below = simplify.polygon(storage.layers[layer_idx_below].getOutlines().offset(-close_dist).offset(close_dist)); - z_distances_layer_deltas.emplace_back(z_delta_poly_t { + z_distances_layer_deltas.emplace_back(z_delta_poly_t{ .support_distance = support_distance_bot, .delta_z = -static_cast(layer_index_offset * layer_thickness), .layer_delta = layer_below, @@ -881,7 +882,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st if (layer_idx_above != layer_idx) { const auto layer_above = simplify.polygon(storage.layers[layer_idx_above].getOutlines().offset(-close_dist).offset(close_dist)); - z_distances_layer_deltas.emplace_back(z_delta_poly_t { + z_distances_layer_deltas.emplace_back(z_delta_poly_t{ .support_distance = support_distance_top, .delta_z = static_cast(layer_index_offset * layer_thickness), .layer_delta = layer_above, @@ -918,8 +919,9 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st for (auto delta_poly : layer_delta) { constexpr auto window_size = 2; - const auto view = ranges::views::concat(delta_poly, (delta_poly | ranges::views::take(window_size -1))) // wrap around to make sure all line segments are included - | ranges::views::sliding(window_size); // sliding window of size 2 to get start/end of line segment + const auto view + = ranges::views::concat(delta_poly, (delta_poly | ranges::views::take(window_size - 1))) // wrap around to make sure all line segments are included + | ranges::views::sliding(window_size); // sliding window of size 2 to get start/end of line segment for (auto window : view) { From ea0436eef5093967832cbaec052a19c30cac132c Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 31 Oct 2023 20:24:27 +0100 Subject: [PATCH 004/218] Update conanfile.py --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index b498c3b84d..b3e464843a 100644 --- a/conanfile.py +++ b/conanfile.py @@ -40,7 +40,7 @@ class CuraEngineConan(ConanFile): def set_version(self): if not self.version: - self.version = "5.6.0-alpha" + self.version = "5.6.0-beta.1" def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) From 13a059ec1b33d7a920a3d41c477659b413511f92 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 2 Nov 2023 16:49:22 +0100 Subject: [PATCH 005/218] Detailed timing logging for layer export CURA-11255 --- include/FffGcodeWriter.h | 11 +++++-- include/LayerPlanBuffer.h | 9 +++--- include/progress/Progress.h | 46 ++++++++++++++------------ include/utils/gettime.h | 61 ++++++++++++++--------------------- src/FffGcodeWriter.cpp | 42 ++++++++++++++++-------- src/MeshGroup.cpp | 15 ++++++--- src/Scene.cpp | 13 +++++--- src/progress/Progress.cpp | 64 ++++++++++++++++++++++--------------- src/slicer.cpp | 18 +++++------ src/utils/gettime.cpp | 24 ++++++++++---- 10 files changed, 175 insertions(+), 128 deletions(-) diff --git a/include/FffGcodeWriter.h b/include/FffGcodeWriter.h index 7e5908e136..d63547692e 100644 --- a/include/FffGcodeWriter.h +++ b/include/FffGcodeWriter.h @@ -14,6 +14,7 @@ #include "settings/PathConfigStorage.h" //For the MeshPathConfigs subclass. #include "utils/ExtrusionLine.h" //Processing variable-width paths. #include "utils/NoCopy.h" +#include "utils/gettime.h" namespace cura { @@ -25,7 +26,6 @@ class SliceDataStorage; class SliceMeshStorage; class SliceLayer; class SliceLayerPart; -class TimeKeeper; /*! * Secondary stage in Fused Filament Fabrication processing: The generated polygons are used in the gcode generation. @@ -139,6 +139,13 @@ class FffGcodeWriter : public NoCopy void writeGCode(SliceDataStorage& storage, TimeKeeper& timeKeeper); private: + struct ProcessLayerResult + { + LayerPlan* layer_plan; + double total_elapsed_time; + TimeKeeper::RegisteredTimes stages_times; + }; + /*! * \brief Set the FffGcodeWriter::fan_speed_layer_time_settings by * retrieving all settings from the global/per-meshgroup settings. @@ -210,7 +217,7 @@ class FffGcodeWriter : public NoCopy * \param total_layers The total number of layers. * \return The layer plans */ - LayerPlan& processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const; + ProcessLayerResult processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const; /*! * This function checks whether prime blob should happen for any extruder on the first layer. diff --git a/include/LayerPlanBuffer.h b/include/LayerPlanBuffer.h index 8898137b87..2b1ce8cefc 100644 --- a/include/LayerPlanBuffer.h +++ b/include/LayerPlanBuffer.h @@ -4,6 +4,9 @@ #ifndef LAYER_PLAN_BUFFER_H #define LAYER_PLAN_BUFFER_H +#include +#include + #include "ExtruderPlan.h" #include "LayerPlan.h" #include "Preheat.h" @@ -11,9 +14,6 @@ #include "settings/Settings.h" #include "settings/types/Duration.h" -#include -#include - namespace cura { @@ -36,7 +36,6 @@ class GCodeExport; class LayerPlanBuffer { friend class LayerPlan; - friend class LayerPlanBuffer; GCodeExport& gcode; Preheat preheat_config; //!< the nozzle and material temperature settings for each extruder train. @@ -215,4 +214,4 @@ class LayerPlanBuffer } // namespace cura -#endif // LAYER_PLAN_BUFFER_H \ No newline at end of file +#endif // LAYER_PLAN_BUFFER_H diff --git a/include/progress/Progress.h b/include/progress/Progress.h index 6b9c83d532..4a513d94a2 100644 --- a/include/progress/Progress.h +++ b/include/progress/Progress.h @@ -1,58 +1,62 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PROGRESS_H #define PROGRESS_H #include +#include "utils/gettime.h" + namespace cura { -class TimeKeeper; +struct LayerIndex; #define N_PROGRESS_STAGES 7 /*! * Class for handling the progress bar and the progress logging. - * + * * The progress bar is based on a single slicing of a rather large model which needs some complex support; * the relative timing of each stage is currently based on that of the slicing of dragon_65_tilted_large.stl */ -class Progress +class Progress { public: /*! - * The stage in the whole slicing process + * The stage in the whole slicing process */ enum class Stage : unsigned int { - START = 0, - SLICING = 1, - PARTS = 2, - INSET_SKIN = 3, - SUPPORT = 4, - EXPORT = 5, - FINISH = 6 + START = 0, + SLICING = 1, + PARTS = 2, + INSET_SKIN = 3, + SUPPORT = 4, + EXPORT = 5, + FINISH = 6 }; + private: - static double times [N_PROGRESS_STAGES]; //!< Time estimates per stage + static double times[N_PROGRESS_STAGES]; //!< Time estimates per stage static std::string names[N_PROGRESS_STAGES]; //!< name of each stage - static double accumulated_times [N_PROGRESS_STAGES]; //!< Time past before each stage + static double accumulated_times[N_PROGRESS_STAGES]; //!< Time past before each stage static double total_timing; //!< An estimate of the total time /*! * Give an estimate between 0 and 1 of how far the process is. - * + * * \param stage The current stage of processing * \param stage_process How far we currently are in the \p stage * \return An estimate of the overall progress. */ static float calcOverallProgress(Stage stage, float stage_progress); + public: static void init(); //!< Initialize some values needed in a fast computation of the progress /*! * Message progress over the CommandSocket and to the terminal (if the command line arg '-p' is provided). - * + * * \param stage The current stage of processing * \param progress_in_stage Any number giving the progress within the stage * \param progress_in_stage_max The maximal value of \p progress_in_stage @@ -60,13 +64,15 @@ class Progress static void messageProgress(Stage stage, int progress_in_stage, int progress_in_stage_max); /*! * Message the progress stage over the command socket. - * + * * \param stage The current stage * \param timeKeeper The stapwatch keeping track of the timings for each stage (optional) */ static void messageProgressStage(Stage stage, TimeKeeper* timeKeeper); + + static void messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages); }; -} // name space cura -#endif//PROGRESS_H +} // namespace cura +#endif // PROGRESS_H diff --git a/include/utils/gettime.h b/include/utils/gettime.h index 319f5d750c..0f011360ad 100644 --- a/include/utils/gettime.h +++ b/include/utils/gettime.h @@ -4,55 +4,42 @@ #ifndef GETTIME_H #define GETTIME_H -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN 1 -#include -#else -#ifdef USE_CPU_TIME -#include -#endif - -#include -#include -#include -#endif +#include +#include +#include + +#include namespace cura { -static inline double getTime() -{ -#ifdef _WIN32 - return double(GetTickCount()) / 1000.0; -#else // not __WIN32 -#if USE_CPU_TIME // Use cpu usage time if available, otherwise wall clock time - struct rusage usage; -#ifdef DEBUG - int ret = getrusage(RUSAGE_SELF, &usage); - assert(ret == 0); - ((void)ret); -#else - getrusage(RUSAGE_SELF, &usage); -#endif - double user_time = double(usage.ru_utime.tv_sec) + double(usage.ru_utime.tv_usec) / 1000000.0; - double sys_time = double(usage.ru_stime.tv_sec) + double(usage.ru_stime.tv_usec) / 1000000.0; - return user_time + sys_time; -#else // not USE_CPU_TIME - struct timeval tv; - gettimeofday(&tv, nullptr); - return double(tv.tv_sec) + double(tv.tv_usec) / 1000000.0; -#endif // USE_CPU_TIME -#endif // __WIN32 -} class TimeKeeper { +public: + struct RegisteredTime + { + std::string stage; + double duration; + }; + + using RegisteredTimes = std::vector; + private: - double startTime; + spdlog::stopwatch watch; + double start_time; + RegisteredTimes registered_times; public: TimeKeeper(); double restart(); + + void registerTime(const std::string& stage, double threshold = 0.01); + + const RegisteredTimes& getRegisteredTimes() const + { + return registered_times; + } }; } // namespace cura diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index b99161c1a2..a42d12889d 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -7,6 +7,7 @@ #include // numeric_limits #include #include +#include #include #include @@ -168,15 +169,15 @@ void FffGcodeWriter::writeGCode(SliceDataStorage& storage, TimeKeeper& time_keep total_layers, [&storage, total_layers, this](int layer_nr) { - return &processLayer(storage, layer_nr, total_layers); + return std::make_optional(processLayer(storage, layer_nr, total_layers)); }, - [this, total_layers](LayerPlan* gcode_layer) + [this, total_layers](std::optional result_opt) { - Progress::messageProgress(Progress::Stage::EXPORT, std::max(LayerIndex{ 0 }, gcode_layer->getLayerNr()) + 1, total_layers); - layer_plan_buffer.handle(*gcode_layer, gcode); + const ProcessLayerResult& result = result_opt.value(); + Progress::messageProgressLayer(result.layer_plan->getLayerNr(), total_layers, result.total_elapsed_time, result.stages_times); + layer_plan_buffer.handle(*result.layer_plan, gcode); }); - layer_plan_buffer.flush(); Progress::messageProgressStage(Progress::Stage::FINISH, &time_keeper); @@ -945,9 +946,11 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) } } -LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const +FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const { spdlog::debug("GcodeWriter processing layer {} of {}", layer_nr, total_layers); + TimeKeeper time_keeper; + spdlog::stopwatch timer_total; const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; coord_t layer_thickness = mesh_group_settings.get("layer_height"); @@ -1032,6 +1035,7 @@ LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIn comb_offset_from_outlines, first_outer_wall_line_width, avoid_distance); + time_keeper.registerTime("Init"); if (include_helper_parts) { @@ -1040,11 +1044,15 @@ LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIn if (storage.skirt_brim[extruder_nr].size() > 0) { processSkirtBrim(storage, gcode_layer, extruder_nr, layer_nr); + time_keeper.registerTime("Skirt/brim"); } // handle shield(s) first in a layer so that chances are higher that the other nozzle is wiped (for the ooze shield) processOozeShield(storage, gcode_layer); + time_keeper.registerTime("Ooze shield"); + processDraftShield(storage, gcode_layer); + time_keeper.registerTime("Draft shield"); } const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr; @@ -1065,10 +1073,12 @@ LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIn if (extruder_nr != extruder_order.front() || (extruder_order.size() == 1 && layer_nr >= 0) || extruder_nr == 0) { setExtruder_addPrime(storage, gcode_layer, extruder_nr); + time_keeper.registerTime("Prime tower pre"); } if (include_helper_parts && (extruder_nr == support_infill_extruder_nr || extruder_nr == support_roof_extruder_nr || extruder_nr == support_bottom_extruder_nr)) { addSupportToGCode(storage, gcode_layer, extruder_nr); + time_keeper.registerTime("Supports"); } if (layer_nr >= 0) { @@ -1088,6 +1098,7 @@ LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIn { addMeshLayerToGCode(storage, mesh, extruder_nr, mesh_config, gcode_layer); } + time_keeper.registerTime(fmt::format("Mesh {}", mesh_idx)); } } // Always print a prime tower before switching extruder. Unless: @@ -1096,12 +1107,17 @@ LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIn if (extruder_nr != extruder_order.back() && layer_nr >= 0) { setExtruder_addPrime(storage, gcode_layer, extruder_nr); + time_keeper.registerTime("Prime tower post"); } } gcode_layer.applyModifyPlugin(); + time_keeper.registerTime("Modify plugin"); + gcode_layer.applyBackPressureCompensation(); - return gcode_layer; + time_keeper.registerTime("Back pressure comp."); + + return { &gcode_layer, timer_total.elapsed().count(), time_keeper.getRegisteredTimes() }; } bool FffGcodeWriter::getExtruderNeedPrimeBlobDuringFirstLayer(const SliceDataStorage& storage, const size_t extruder_nr) const @@ -2036,8 +2052,8 @@ bool FffGcodeWriter::processSingleLayerInfill( else // So walls_generated must be true. { std::vector* start_paths = &wall_tool_paths[rand() % wall_tool_paths.size()]; - while (start_paths->empty() || (*start_paths)[0].empty()) // We know for sure (because walls_generated) that one of them is not empty. So randomise until we hit it. - // Should almost always be very quick. + while (start_paths->empty() || (*start_paths)[0].empty()) // We know for sure (because walls_generated) that one of them is not empty. So randomise until we hit + // it. Should almost always be very quick. { start_paths = &wall_tool_paths[rand() % wall_tool_paths.size()]; } @@ -2169,8 +2185,8 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( } else // this layer is the 1st layer above the layer whose infill we're printing { - // add this layer's skin region without subtracting the overlap but still make a gap between this skin region and what has been accumulated so far - // we do this so that these skin region edges will definitely have infill walls below them + // add this layer's skin region without subtracting the overlap but still make a gap between this skin region and what has been accumulated so + // far we do this so that these skin region edges will definitely have infill walls below them // looking from the side, if the combined regions so far look like this... // @@ -2201,8 +2217,8 @@ bool FffGcodeWriter::partitionInfillBySkinAbove( } } - // the shrink/expand here is to remove regions of infill below skin that are narrower than the width of the infill walls otherwise the infill walls could merge and form a - // bump + // the shrink/expand here is to remove regions of infill below skin that are narrower than the width of the infill walls otherwise the infill walls could merge and form + // a bump infill_below_skin = skin_above_combined.intersection(part.infill_area_per_combine_per_density.back().front()).offset(-infill_line_width).offset(infill_line_width); constexpr bool remove_small_holes_from_infill_below_skin = true; diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index 1516e64190..84ef4d4923 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -1,6 +1,8 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include "MeshGroup.h" + #include #include #include @@ -10,7 +12,6 @@ #include #include -#include "MeshGroup.h" #include "settings/types/Ratio.h" //For the shrinkage percentage and scale factor. #include "utils/FMatrix4x3.h" //To transform the input meshes for shrinkage compensation and to align in command line mode. #include "utils/floatpoint.h" //To accept incoming meshes with floating point vertices. @@ -48,7 +49,8 @@ Point3 MeshGroup::min() const Point3 ret(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); for (const Mesh& mesh : meshes) { - if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. + if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") + || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. { continue; } @@ -69,7 +71,8 @@ Point3 MeshGroup::max() const Point3 ret(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); for (const Mesh& mesh : meshes) { - if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. + if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") + || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. { continue; } @@ -112,7 +115,9 @@ void MeshGroup::finalize() } mesh.translate(mesh_offset + meshgroup_offset); } - scaleFromBottom(settings.get("material_shrinkage_percentage_xy"), settings.get("material_shrinkage_percentage_z")); // Compensate for the shrinkage of the material. + scaleFromBottom( + settings.get("material_shrinkage_percentage_xy"), + settings.get("material_shrinkage_percentage_z")); // Compensate for the shrinkage of the material. for (const auto& [idx, mesh] : meshes | ranges::views::enumerate) { scripta::log(fmt::format("mesh_{}", idx), mesh, SectionType::NA); @@ -285,7 +290,7 @@ bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const FMa if (loadMeshSTL(&mesh, filename, transformation)) // Load it! If successful... { meshgroup->meshes.push_back(mesh); - spdlog::info("loading '{}' took {:3} seconds", filename, load_timer.restart()); + spdlog::info("loading '{}' took {:03.3f} seconds", filename, load_timer.restart()); return true; } } diff --git a/src/Scene.cpp b/src/Scene.cpp index ff4baf9adc..ac50185b6d 100644 --- a/src/Scene.cpp +++ b/src/Scene.cpp @@ -1,11 +1,12 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include "Scene.h" + #include #include "Application.h" #include "FffProcessor.h" //To start a slice. -#include "Scene.h" #include "communication/Communication.h" //To flush g-code and layer view when we're done. #include "progress/Progress.h" #include "sliceDataStorage.h" @@ -13,7 +14,9 @@ namespace cura { -Scene::Scene(const size_t num_mesh_groups) : mesh_groups(num_mesh_groups), current_mesh_group(mesh_groups.begin()) +Scene::Scene(const size_t num_mesh_groups) + : mesh_groups(num_mesh_groups) + , current_mesh_group(mesh_groups.begin()) { for (MeshGroup& mesh_group : mesh_groups) { @@ -78,7 +81,7 @@ void Scene::processMeshGroup(MeshGroup& mesh_group) if (empty) { Progress::messageProgress(Progress::Stage::FINISH, 1, 1); // 100% on this meshgroup - spdlog::info("Total time elapsed {:3}s.", time_keeper_total.restart()); + spdlog::info("Total time elapsed {:03.3f}s", time_keeper_total.restart()); return; } @@ -94,7 +97,7 @@ void Scene::processMeshGroup(MeshGroup& mesh_group) Progress::messageProgress(Progress::Stage::FINISH, 1, 1); // 100% on this meshgroup Application::getInstance().communication->flushGCode(); Application::getInstance().communication->sendOptimizedLayerData(); - spdlog::info("Total time elapsed {:3}s.\n", time_keeper_total.restart()); + spdlog::info("Total time elapsed {:03.3f}s\n", time_keeper_total.restart()); } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index 62687044c6..fb3331bc02 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -1,49 +1,40 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "progress/Progress.h" + #include #include #include "Application.h" //To get the communication channel to send progress through. #include "communication/Communication.h" //To send progress through the communication channel. -#include "progress/Progress.h" #include "utils/gettime.h" namespace cura { double Progress::times[] = { - 0.0, // START = 0, - 5.269, // SLICING = 1, - 1.533, // PARTS = 2, + 0.0, // START = 0, + 5.269, // SLICING = 1, + 1.533, // PARTS = 2, 71.811, // INSET_SKIN = 3 - 51.009, // SUPPORT = 4, - 154.62, // EXPORT = 5, - 0.1 // FINISH = 6 -}; -std::string Progress::names [] = -{ - "start", - "slice", - "layerparts", - "inset+skin", - "support", - "export", - "process" + 51.009, // SUPPORT = 4, + 154.62, // EXPORT = 5, + 0.1 // FINISH = 6 }; +std::string Progress::names[] = { "start", "slice", "layerparts", "inset+skin", "support", "export", "process" }; -double Progress::accumulated_times [N_PROGRESS_STAGES] = {-1}; +double Progress::accumulated_times[N_PROGRESS_STAGES] = { -1 }; double Progress::total_timing = -1; float Progress::calcOverallProgress(Stage stage, float stage_progress) { assert(stage_progress <= 1.0); assert(stage_progress >= 0.0); - return ( accumulated_times[(int)stage] + stage_progress * times[(int)stage] ) / total_timing; + return (accumulated_times[(int)stage] + stage_progress * times[(int)stage]) / total_timing; } - void Progress::init() { double accumulated_time = 0; @@ -59,8 +50,6 @@ void Progress::messageProgress(Progress::Stage stage, int progress_in_stage, int { float percentage = calcOverallProgress(stage, float(progress_in_stage) / float(progress_in_stage_max)); Application::getInstance().communication->sendProgress(percentage); - - // logProgress(names[(int)stage].c_str(), progress_in_stage, progress_in_stage_max, percentage); FIXME: use different sink } void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keeper) @@ -69,13 +58,13 @@ void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keep { if ((int)stage > 0) { - spdlog::info("Progress: {} accomplished in {:3}s", names[(int)stage - 1], time_keeper->restart()); + spdlog::info("Progress: {} accomplished in {:03.3f}s", names[(int)stage - 1], time_keeper->restart()); } else { time_keeper->restart(); } - + if ((int)stage < (int)Stage::FINISH) { spdlog::info("Starting {}...", names[(int)stage]); @@ -83,4 +72,29 @@ void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keep } } -}// namespace cura \ No newline at end of file +void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages) +{ + messageProgress(Stage::EXPORT, std::max(layer_nr.value, LayerIndex::value_type(0)) + 1, total_layers); + + spdlog::info("+---- Layer export [{}] accomplished in {:03.3f}s", layer_nr.value, total_time); + + size_t padding = 0; + auto iterator_max_size = std::max_element( + stages.begin(), + stages.end(), + [](const TimeKeeper::RegisteredTime& time1, const TimeKeeper::RegisteredTime& time2) + { + return time1.stage.size() < time2.stage.size(); + }); + if (iterator_max_size != stages.end()) + { + padding = iterator_max_size->stage.size(); + + for (const TimeKeeper::RegisteredTime& time : stages) + { + spdlog::info("| *{}:{} {:03.3f}s", time.stage, std::string(padding - time.stage.size(), ' '), time.duration); + } + } +} + +} // namespace cura diff --git a/src/slicer.cpp b/src/slicer.cpp index 6b1ac7ea4d..f5127833bc 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -3,6 +3,13 @@ #include "slicer.h" +#include // remove_if +#include +#include + +#include +#include + #include "Application.h" #include "Slice.h" #include "plugins/slots.h" @@ -15,13 +22,6 @@ #include "utils/gettime.h" #include "utils/section_type.h" -#include -#include - -#include // remove_if -#include -#include - namespace cura { @@ -825,11 +825,11 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c buildSegments(*mesh, zbbox, slicing_tolerance, layers); - spdlog::info("Slice of mesh took {:3} seconds", slice_timer.restart()); + spdlog::info("Slice of mesh took {:03.3f} seconds", slice_timer.restart()); makePolygons(*i_mesh, slicing_tolerance, layers); scripta::log("sliced_polygons", layers, SectionType::NA); - spdlog::info("Make polygons took {:3} seconds", slice_timer.restart()); + spdlog::info("Make polygons took {:03.3f} seconds", slice_timer.restart()); } void Slicer::buildSegments(const Mesh& mesh, const std::vector>& zbbox, const SlicingTolerance& slicing_tolerance, std::vector& layers) diff --git a/src/utils/gettime.cpp b/src/utils/gettime.cpp index bfd665abaa..a7d8303857 100644 --- a/src/utils/gettime.cpp +++ b/src/utils/gettime.cpp @@ -1,21 +1,31 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/gettime.h" +#include + namespace cura { - + TimeKeeper::TimeKeeper() { - restart(); } double TimeKeeper::restart() { - double ret = getTime() - startTime; - startTime = getTime(); + double ret = watch.elapsed().count(); + watch.reset(); return ret; } -}//namespace cura \ No newline at end of file +void TimeKeeper::registerTime(const std::string& stage, double threshold) +{ + double duration = restart(); + if (duration >= threshold) + { + registered_times.emplace_back(RegisteredTime{ stage, duration }); + } +} + +} // namespace cura From a58cb53efd3dd441c083218ad27ad073ccc36af2 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 2 Nov 2023 17:56:38 +0100 Subject: [PATCH 006/218] Allow scripta to construct layermap with raft See: https://github.com/Ultimaker/Scripta/pull/7 --- src/slicer.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/slicer.cpp b/src/slicer.cpp index 6b1ac7ea4d..62e8e3d57d 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -819,7 +819,15 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c TimeKeeper slice_timer; layers = buildLayersWithHeight(slice_layer_count, slicing_tolerance, initial_layer_thickness, thickness, use_variable_layer_heights, adaptive_layers); - scripta::setAll(layers); + scripta::setAll(layers, + static_cast(mesh->settings.get("adhesion_type")), + mesh->settings.get("raft_surface_layers"), + mesh->settings.get("raft_surface_thickness"), + mesh->settings.get("raft_interface_layers"), + mesh->settings.get("raft_interface_thickness"), + mesh->settings.get("raft_base_thickness"), + mesh->settings.get("raft_airgap"), + mesh->settings.get("layer_0_z_overlap")); std::vector> zbbox = buildZHeightsForFaces(*mesh); From db79053f1166ab383a5beb71c8d9b41c64ccc36c Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Fri, 3 Nov 2023 11:00:24 +0000 Subject: [PATCH 007/218] Applied clang-format. --- src/slicer.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/slicer.cpp b/src/slicer.cpp index 485a1d5ed5..2758d133f0 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -819,15 +819,16 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c TimeKeeper slice_timer; layers = buildLayersWithHeight(slice_layer_count, slicing_tolerance, initial_layer_thickness, thickness, use_variable_layer_heights, adaptive_layers); - scripta::setAll(layers, - static_cast(mesh->settings.get("adhesion_type")), - mesh->settings.get("raft_surface_layers"), - mesh->settings.get("raft_surface_thickness"), - mesh->settings.get("raft_interface_layers"), - mesh->settings.get("raft_interface_thickness"), - mesh->settings.get("raft_base_thickness"), - mesh->settings.get("raft_airgap"), - mesh->settings.get("layer_0_z_overlap")); + scripta::setAll( + layers, + static_cast(mesh->settings.get("adhesion_type")), + mesh->settings.get("raft_surface_layers"), + mesh->settings.get("raft_surface_thickness"), + mesh->settings.get("raft_interface_layers"), + mesh->settings.get("raft_interface_thickness"), + mesh->settings.get("raft_base_thickness"), + mesh->settings.get("raft_airgap"), + mesh->settings.get("layer_0_z_overlap")); std::vector> zbbox = buildZHeightsForFaces(*mesh); From bca565bdfe97ebc874989f362c24bb3f879dc2cd Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 7 Nov 2023 10:54:47 +0100 Subject: [PATCH 008/218] Time report improvements CURA-11255 --- include/progress/Progress.h | 14 ++++++++++- src/progress/Progress.cpp | 50 +++++++++++++++++++++++++------------ 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/include/progress/Progress.h b/include/progress/Progress.h index 4a513d94a2..619632a1f0 100644 --- a/include/progress/Progress.h +++ b/include/progress/Progress.h @@ -43,6 +43,7 @@ class Progress static std::string names[N_PROGRESS_STAGES]; //!< name of each stage static double accumulated_times[N_PROGRESS_STAGES]; //!< Time past before each stage static double total_timing; //!< An estimate of the total time + static std::optional first_skipped_layer; //!< The index of the layer for which we skipped time reporting /*! * Give an estimate between 0 and 1 of how far the process is. * @@ -62,6 +63,7 @@ class Progress * \param progress_in_stage_max The maximal value of \p progress_in_stage */ static void messageProgress(Stage stage, int progress_in_stage, int progress_in_stage_max); + /*! * Message the progress stage over the command socket. * @@ -70,7 +72,17 @@ class Progress */ static void messageProgressStage(Stage stage, TimeKeeper* timeKeeper); - static void messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages); + /*! + * Message the layer progress over the command socket and into logging output. + * + * \param layer_nr The processed layer number + * \param total_layers The total number of layers to be processed + * \param total_time The total layer processing time, in seconds + * \param stage The detailed stages time reporting for this layer + * \param skip_threshold The time threshold under which we consider that the full layer time reporting should be skipped + * because it is not relevant + */ + static void messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages, double skip_threshold = 0.1); }; diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index fb3331bc02..85194808b0 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -5,6 +5,7 @@ #include +#include #include #include "Application.h" //To get the communication channel to send progress through. @@ -27,6 +28,7 @@ std::string Progress::names[] = { "start", "slice", "layerparts", "inset+skin", double Progress::accumulated_times[N_PROGRESS_STAGES] = { -1 }; double Progress::total_timing = -1; +std::optional Progress::first_skipped_layer{}; float Progress::calcOverallProgress(Stage stage, float stage_progress) { @@ -72,27 +74,43 @@ void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keep } } -void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages) +void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, double total_time, const TimeKeeper::RegisteredTimes& stages, double skip_threshold) { - messageProgress(Stage::EXPORT, std::max(layer_nr.value, LayerIndex::value_type(0)) + 1, total_layers); - - spdlog::info("+---- Layer export [{}] accomplished in {:03.3f}s", layer_nr.value, total_time); - - size_t padding = 0; - auto iterator_max_size = std::max_element( - stages.begin(), - stages.end(), - [](const TimeKeeper::RegisteredTime& time1, const TimeKeeper::RegisteredTime& time2) + if (total_time < skip_threshold) + { + if (! first_skipped_layer) { - return time1.stage.size() < time2.stage.size(); - }); - if (iterator_max_size != stages.end()) + first_skipped_layer = layer_nr; + } + } + else { - padding = iterator_max_size->stage.size(); + if (first_skipped_layer) + { + spdlog::info("Skipped time reporting for layers [{}...{}]", first_skipped_layer.value().value, layer_nr.value); + first_skipped_layer.reset(); + } + + messageProgress(Stage::EXPORT, std::max(layer_nr.value, LayerIndex::value_type(0)) + 1, total_layers); - for (const TimeKeeper::RegisteredTime& time : stages) + spdlog::info("┌ Layer export [{}] accomplished in {:03.3f}s", layer_nr.value, total_time); + + size_t padding = 0; + auto iterator_max_size = std::max_element( + stages.begin(), + stages.end(), + [](const TimeKeeper::RegisteredTime& time1, const TimeKeeper::RegisteredTime& time2) + { + return time1.stage.size() < time2.stage.size(); + }); + if (iterator_max_size != stages.end()) { - spdlog::info("| *{}:{} {:03.3f}s", time.stage, std::string(padding - time.stage.size(), ' '), time.duration); + padding = iterator_max_size->stage.size(); + + for (auto [index, time] : stages | ranges::view::enumerate) + { + spdlog::info("{}── {}:{} {:03.3f}s", index < stages.size() - 1 ? "├" : "└", time.stage, std::string(padding - time.stage.size(), ' '), time.duration); + } } } } From c07a0a170867b3c90dcb88c6800927d1afcce041 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 7 Nov 2023 12:32:17 +0100 Subject: [PATCH 009/218] Fix unit test --- tests/integration/SlicePhaseTest.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 34e46dc809..75d66899b8 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -1,6 +1,10 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include + +#include + #include "Application.h" // To set up a slice with settings. #include "Slice.h" // To set up a scene to slice. #include "slicer.h" // Starts the slicing phase that we want to test. @@ -8,8 +12,6 @@ #include "utils/FMatrix4x3.h" // To load STL files. #include "utils/polygon.h" // Creating polygons to compare to sliced layers. #include "utils/polygonUtils.h" // Comparing similarity of polygons. -#include -#include namespace cura { @@ -35,6 +37,13 @@ class SlicePhaseTest : public testing::Test scene.settings.add("slicing_tolerance", "middle"); scene.settings.add("layer_height_0", "0.2"); scene.settings.add("layer_height", "0.1"); + scene.settings.add("layer_0_z_overlap", "0.0"); + scene.settings.add("raft_airgap", "0.0"); + scene.settings.add("raft_base_thickness", "0.2"); + scene.settings.add("raft_interface_thickness", "0.2"); + scene.settings.add("raft_interface_layers", "1"); + scene.settings.add("raft_surface_thickness", "0.2"); + scene.settings.add("raft_surface_layers", "1"); scene.settings.add("magic_mesh_surface_mode", "normal"); scene.settings.add("meshfix_extensive_stitching", "false"); scene.settings.add("meshfix_keep_open_polygons", "false"); @@ -51,6 +60,7 @@ class SlicePhaseTest : public testing::Test scene.settings.add("anti_overhang_mesh", "false"); scene.settings.add("cutting_mesh", "false"); scene.settings.add("infill_mesh", "false"); + scene.settings.add("adhesion_type", "none"); } }; @@ -121,7 +131,8 @@ TEST_F(SlicePhaseTest, Cylinder1000) const FMatrix4x3 transformation; // Path to cylinder1000.stl is relative to CMAKE_CURRENT_SOURCE_DIR/tests. - ASSERT_TRUE(loadMeshIntoMeshGroup(&mesh_group, std::filesystem::path(__FILE__).parent_path().append("resources/cylinder1000.stl").string().c_str(), transformation, scene.settings)); + ASSERT_TRUE( + loadMeshIntoMeshGroup(&mesh_group, std::filesystem::path(__FILE__).parent_path().append("resources/cylinder1000.stl").string().c_str(), transformation, scene.settings)); EXPECT_EQ(mesh_group.meshes.size(), 1); Mesh& cylinder_mesh = mesh_group.meshes[0]; @@ -162,4 +173,4 @@ TEST_F(SlicePhaseTest, Cylinder1000) } } -} // namespace cura \ No newline at end of file +} // namespace cura From 3cfce8350ba204f0229a85907ca575e1522089d6 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 8 Nov 2023 10:13:43 +0100 Subject: [PATCH 010/218] Add missing include `optional` --- src/progress/Progress.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index 85194808b0..d0c3e9203a 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -1,9 +1,10 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "progress/Progress.h" #include +#include #include #include From 138d6cdefcce91b4bc5fa8e379ec322b756c2eb9 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 8 Nov 2023 10:14:31 +0100 Subject: [PATCH 011/218] Use correct namespace for `ranges::views` --- src/progress/Progress.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index d0c3e9203a..6af743785d 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -108,7 +108,7 @@ void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, do { padding = iterator_max_size->stage.size(); - for (auto [index, time] : stages | ranges::view::enumerate) + for (auto [index, time] : stages | ranges::views::enumerate) { spdlog::info("{}── {}:{} {:03.3f}s", index < stages.size() - 1 ? "├" : "└", time.stage, std::string(padding - time.stage.size(), ' '), time.duration); } From eeb93cfaa3bd7466a4b519206cc3e51423dd13a6 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 8 Nov 2023 10:47:28 +0100 Subject: [PATCH 012/218] Refactor Progress class and improve type safety This refactor cleans up the Progress class and enhances type safety. It replaces raw C-style arrays with std::array, which guarantees type safety and prevents out-of-bound access. The type of several variables and methods has also been changed from int and float to size_t and double to increase precision. --- include/progress/Progress.h | 26 +++++++++++++++++------- src/progress/Progress.cpp | 40 +++++++++++++------------------------ 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/include/progress/Progress.h b/include/progress/Progress.h index 619632a1f0..ae829867bb 100644 --- a/include/progress/Progress.h +++ b/include/progress/Progress.h @@ -1,10 +1,13 @@ -// Copyright (c) 2018 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher #ifndef PROGRESS_H #define PROGRESS_H +#include #include +#include +#include #include "utils/gettime.h" @@ -13,7 +16,7 @@ namespace cura struct LayerIndex; -#define N_PROGRESS_STAGES 7 +static constexpr size_t N_PROGRESS_STAGES = 7; /*! * Class for handling the progress bar and the progress logging. @@ -39,9 +42,18 @@ class Progress }; private: - static double times[N_PROGRESS_STAGES]; //!< Time estimates per stage - static std::string names[N_PROGRESS_STAGES]; //!< name of each stage - static double accumulated_times[N_PROGRESS_STAGES]; //!< Time past before each stage + static constexpr std::array times{ + 0.0, // START = 0, + 5.269, // SLICING = 1, + 1.533, // PARTS = 2, + 71.811, // INSET_SKIN = 3 + 51.009, // SUPPORT = 4, + 154.62, // EXPORT = 5, + 0.1 // FINISH = 6 + }; + + static constexpr std::array names{ "start", "slice", "layerparts", "inset+skin", "support", "export", "process" }; + static std::array accumulated_times; //!< Time past before each stage static double total_timing; //!< An estimate of the total time static std::optional first_skipped_layer; //!< The index of the layer for which we skipped time reporting /*! @@ -51,7 +63,7 @@ class Progress * \param stage_process How far we currently are in the \p stage * \return An estimate of the overall progress. */ - static float calcOverallProgress(Stage stage, float stage_progress); + static double calcOverallProgress(Stage stage, double stage_progress); public: static void init(); //!< Initialize some values needed in a fast computation of the progress diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index 6af743785d..be6a688813 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -15,62 +15,50 @@ namespace cura { - -double Progress::times[] = { - 0.0, // START = 0, - 5.269, // SLICING = 1, - 1.533, // PARTS = 2, - 71.811, // INSET_SKIN = 3 - 51.009, // SUPPORT = 4, - 154.62, // EXPORT = 5, - 0.1 // FINISH = 6 -}; -std::string Progress::names[] = { "start", "slice", "layerparts", "inset+skin", "support", "export", "process" }; - -double Progress::accumulated_times[N_PROGRESS_STAGES] = { -1 }; +std::array Progress::accumulated_times = { -1 }; double Progress::total_timing = -1; std::optional Progress::first_skipped_layer{}; -float Progress::calcOverallProgress(Stage stage, float stage_progress) +double Progress::calcOverallProgress(Stage stage, double stage_progress) { assert(stage_progress <= 1.0); assert(stage_progress >= 0.0); - return (accumulated_times[(int)stage] + stage_progress * times[(int)stage]) / total_timing; + return (accumulated_times.at(static_cast(stage)) + stage_progress * times.at(static_cast(stage))) / total_timing; } void Progress::init() { double accumulated_time = 0; - for (int stage = 0; stage < N_PROGRESS_STAGES; stage++) + for (size_t stage = 0; stage < N_PROGRESS_STAGES; stage++) { - accumulated_times[(int)stage] = accumulated_time; - accumulated_time += times[(int)stage]; + accumulated_times.at(static_cast(stage)) = accumulated_time; + accumulated_time += times.at(static_cast(stage)); } total_timing = accumulated_time; } void Progress::messageProgress(Progress::Stage stage, int progress_in_stage, int progress_in_stage_max) { - float percentage = calcOverallProgress(stage, float(progress_in_stage) / float(progress_in_stage_max)); - Application::getInstance().communication->sendProgress(percentage); + double percentage = calcOverallProgress(stage, static_cast(progress_in_stage / static_cast(progress_in_stage_max))); + Application::getInstance().communication->sendProgress(static_cast(percentage)); } void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keeper) { - if (time_keeper) + if (time_keeper != nullptr) { - if ((int)stage > 0) + if (static_cast(stage) > 0) { - spdlog::info("Progress: {} accomplished in {:03.3f}s", names[(int)stage - 1], time_keeper->restart()); + spdlog::info("Progress: {} accomplished in {:03.3f}s", names.at(static_cast(stage) - 1), time_keeper->restart()); } else { time_keeper->restart(); } - if ((int)stage < (int)Stage::FINISH) + if (static_cast(stage) < static_cast(Stage::FINISH)) { - spdlog::info("Starting {}...", names[(int)stage]); + spdlog::info("Starting {}...", names.at(static_cast(stage))); } } } @@ -108,7 +96,7 @@ void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, do { padding = iterator_max_size->stage.size(); - for (auto [index, time] : stages | ranges::views::enumerate) + for (const auto& [index, time] : stages | ranges::views::enumerate) { spdlog::info("{}── {}:{} {:03.3f}s", index < stages.size() - 1 ? "├" : "└", time.stage, std::string(padding - time.stage.size(), ' '), time.duration); } From 0c3e9d0c492d15068f8afe9aa2743e5e068e7cbd Mon Sep 17 00:00:00 2001 From: jellespijker Date: Wed, 8 Nov 2023 11:22:57 +0000 Subject: [PATCH 013/218] Applied clang-format. --- include/progress/Progress.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/progress/Progress.h b/include/progress/Progress.h index ae829867bb..c1e20cc6c7 100644 --- a/include/progress/Progress.h +++ b/include/progress/Progress.h @@ -5,9 +5,9 @@ #define PROGRESS_H #include +#include #include #include -#include #include "utils/gettime.h" From 961e1007f25a1365b913fc4b02fe0199534f0d5d Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 8 Nov 2023 14:59:55 +0100 Subject: [PATCH 014/218] Fix prime tower when only raft has multi-material CURA-11291 --- src/PrimeTower.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 3883822adc..f8fac03b10 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -103,7 +103,7 @@ void PrimeTower::generateGroundpoly() void PrimeTower::generatePaths(const SliceDataStorage& storage) { would_have_actual_tower - = storage.max_print_height_second_to_last_extruder >= 0; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + = storage.max_print_height_second_to_last_extruder >= -Raft::getTotalExtraLayers() + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. if (would_have_actual_tower && enabled) { generatePaths_denseInfill(); From 103a8bab4b68d57b48e4bfb25c2e64ebe1c38204 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 8 Nov 2023 14:00:35 +0000 Subject: [PATCH 015/218] Applied clang-format. --- src/PrimeTower.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index f8fac03b10..8b4ddba358 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -102,8 +102,8 @@ void PrimeTower::generateGroundpoly() void PrimeTower::generatePaths(const SliceDataStorage& storage) { - would_have_actual_tower - = storage.max_print_height_second_to_last_extruder >= -Raft::getTotalExtraLayers() + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + would_have_actual_tower = storage.max_print_height_second_to_last_extruder + >= -Raft::getTotalExtraLayers() + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. if (would_have_actual_tower && enabled) { generatePaths_denseInfill(); From 67b8052d3dd704ed184d28fe3b163d91ed1dcbdf Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 8 Nov 2023 15:23:13 +0100 Subject: [PATCH 016/218] Fix weird sign-issue CURA-11291 --- src/PrimeTower.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 8b4ddba358..71fc15635e 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -102,8 +102,9 @@ void PrimeTower::generateGroundpoly() void PrimeTower::generatePaths(const SliceDataStorage& storage) { - would_have_actual_tower = storage.max_print_height_second_to_last_extruder - >= -Raft::getTotalExtraLayers() + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + const int raft_total_extra_layers = Raft::getTotalExtraLayers(); + would_have_actual_tower + = storage.max_print_height_second_to_last_extruder >= -raft_total_extra_layers + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. if (would_have_actual_tower && enabled) { generatePaths_denseInfill(); From 7dd21fe878058f9cab8e8489e9e38cb978f53dd2 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 8 Nov 2023 14:23:56 +0000 Subject: [PATCH 017/218] Applied clang-format. --- src/PrimeTower.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 71fc15635e..8890ff7b13 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -103,8 +103,8 @@ void PrimeTower::generateGroundpoly() void PrimeTower::generatePaths(const SliceDataStorage& storage) { const int raft_total_extra_layers = Raft::getTotalExtraLayers(); - would_have_actual_tower - = storage.max_print_height_second_to_last_extruder >= -raft_total_extra_layers + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + would_have_actual_tower = storage.max_print_height_second_to_last_extruder + >= -raft_total_extra_layers + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. if (would_have_actual_tower && enabled) { generatePaths_denseInfill(); From d5097479ba10903be9c7f2f9a6fb5bdb6f7bd277 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 9 Nov 2023 14:24:17 +0100 Subject: [PATCH 018/218] Fix possibly wrong disallowed areas computation CURA-11293 --- src/sliceDataStorage.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index fbd4a5d1a9..2d45da94f2 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -560,9 +560,14 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const Polygons disallowed_areas = mesh_group_settings.get("machine_disallowed_areas"); disallowed_areas = disallowed_areas.unionPolygons(); // union overlapping disallowed areas - for (PolygonRef poly : disallowed_areas) - for (Point& p : poly) - p = Point(machine_size.max.x / 2 + p.X, machine_size.max.y / 2 - p.Y); // apparently the frontend stores the disallowed areas in a different coordinate system + + // The disallowed areas are always expressed in buildplate-centered coordinates + if (! mesh_group_settings.get("machine_center_is_zero")) + { + for (PolygonRef poly : disallowed_areas) + for (Point& p : poly) + p = Point(machine_size.max.x / 2 + p.X, machine_size.max.y / 2 - p.Y); + } std::vector extruder_is_used = getExtrudersUsed(); From 5f3b59aea5ab78b7552c7c61ed14865f3f79b6a0 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 9 Nov 2023 15:50:57 +0100 Subject: [PATCH 019/218] Update src/sliceDataStorage.cpp Co-authored-by: Casper Lamboo --- src/sliceDataStorage.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 2d45da94f2..026aa9b9ea 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -565,8 +565,12 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const if (! mesh_group_settings.get("machine_center_is_zero")) { for (PolygonRef poly : disallowed_areas) + { for (Point& p : poly) + { p = Point(machine_size.max.x / 2 + p.X, machine_size.max.y / 2 - p.Y); + } + } } std::vector extruder_is_used = getExtrudersUsed(); From 52ee9bc8d827724a36b1fd47f10c534bba1a9300 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 9 Nov 2023 16:30:41 +0100 Subject: [PATCH 020/218] Better code documentation CURA-11293 --- src/sliceDataStorage.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 026aa9b9ea..0dddecb5b7 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -561,7 +561,8 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const Polygons disallowed_areas = mesh_group_settings.get("machine_disallowed_areas"); disallowed_areas = disallowed_areas.unionPolygons(); // union overlapping disallowed areas - // The disallowed areas are always expressed in buildplate-centered coordinates + // The disallowed areas are expressed in buildplate-centered coordinates, but the models + // may be expressed in front-left-centered coordinantes, so in this case we need to translate them if (! mesh_group_settings.get("machine_center_is_zero")) { for (PolygonRef poly : disallowed_areas) From 723f66e01ab7aa405d1abae0daeb0a3fd9d07221 Mon Sep 17 00:00:00 2001 From: Remco Burema <41987080+rburema@users.noreply.github.com> Date: Fri, 10 Nov 2023 11:34:16 +0100 Subject: [PATCH 021/218] Should be '+0' instead. To align with the behaviour before the raft fix. CURA-11291 --- src/PrimeTower.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 8890ff7b13..d2761327eb 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -104,7 +104,7 @@ void PrimeTower::generatePaths(const SliceDataStorage& storage) { const int raft_total_extra_layers = Raft::getTotalExtraLayers(); would_have_actual_tower = storage.max_print_height_second_to_last_extruder - >= -raft_total_extra_layers + 1; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + >= -raft_total_extra_layers; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. if (would_have_actual_tower && enabled) { generatePaths_denseInfill(); From c1ff1277ac528de0b48e5c75a9224cf8f89b1403 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 11 Nov 2023 09:26:28 +0100 Subject: [PATCH 022/218] set version and requirements from conandata This will allow for easier handling in the workflows Contribute to CURA-10831 --- conandata.yml | 5 +++++ conanfile.py | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) create mode 100644 conandata.yml diff --git a/conandata.yml b/conandata.yml new file mode 100644 index 0000000000..55f6e19c5f --- /dev/null +++ b/conandata.yml @@ -0,0 +1,5 @@ +version: "5.6.0-beta.1" +requirements: + - "arcus/5.3.0" + - "curaengine_grpc_definitions/(latest)@ultimaker/testing" + - "scripta/0.1.0@ultimaker/testing" \ No newline at end of file diff --git a/conanfile.py b/conanfile.py index b3e464843a..850a3a51b5 100644 --- a/conanfile.py +++ b/conanfile.py @@ -40,7 +40,7 @@ class CuraEngineConan(ConanFile): def set_version(self): if not self.version: - self.version = "5.6.0-beta.1" + self.version = self.conan_data["version"] def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) @@ -81,11 +81,13 @@ def build_requirements(self): self.test_requires("benchmark/1.7.0") def requirements(self): - if self.options.enable_arcus: - self.requires("arcus/5.3.0") + for req in self.conan_data["requirements"]: + if "arcus" in req and not self.options.enable_arcus: + continue + self.requires(req) + self.requires("asio-grpc/2.6.0") self.requires("grpc/1.50.1") - self.requires("curaengine_grpc_definitions/(latest)@ultimaker/testing") self.requires("clipper/6.4.2") self.requires("boost/1.82.0") self.requires("rapidjson/1.1.0") @@ -93,7 +95,6 @@ def requirements(self): self.requires("spdlog/1.10.0") self.requires("fmt/9.0.0") self.requires("range-v3/0.12.0") - self.requires("scripta/0.1.0@ultimaker/testing") self.requires("neargye-semver/0.3.0") self.requires("protobuf/3.21.9") self.requires("zlib/1.2.12") @@ -124,15 +125,14 @@ def generate(self): if len(dep.cpp_info.bindirs) > 0: copy(self, "*.dll", dep.cpp_info.bindirs[0], self.build_folder) if not self.conf.get("tools.build:skip_test", False, check_type=bool): - test_path = path.join(self.build_folder, "tests") + test_path = path.join(self.build_folder, "tests") if not path.exists(test_path): mkdir(self, test_path) if len(dep.cpp_info.libdirs) > 0: - copy(self, "*.dylib", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) - copy(self, "*.dll", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) + copy(self, "*.dylib", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) + copy(self, "*.dll", dep.cpp_info.libdirs[0], path.join(self.build_folder, "tests")) if len(dep.cpp_info.bindirs) > 0: - copy(self, "*.dll", dep.cpp_info.bindirs[0], path.join(self.build_folder, "tests")) - + copy(self, "*.dll", dep.cpp_info.bindirs[0], path.join(self.build_folder, "tests")) def layout(self): cmake_layout(self) @@ -146,9 +146,9 @@ def build(self): def package(self): ext = ".exe" if self.settings.os == "Windows" else "" - copy(self, f"CuraEngine{ext}", src = self.build_folder, dst = path.join(self.package_folder, "bin")) - copy(self, f"_CuraEngine.*", src = self.build_folder, dst = path.join(self.package_folder, "lib")) - copy(self, "LICENSE*", src = self.source_folder, dst = path.join(self.package_folder, "license")) + copy(self, f"CuraEngine{ext}", src=self.build_folder, dst=path.join(self.package_folder, "bin")) + copy(self, f"_CuraEngine.*", src=self.build_folder, dst=path.join(self.package_folder, "lib")) + copy(self, "LICENSE*", src=self.source_folder, dst=path.join(self.package_folder, "license")) def package_info(self): ext = ".exe" if self.settings.os == "Windows" else "" From d1ebd0822fdabe8a39e2afdfef4b5eb9e506865a Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 11 Nov 2023 09:28:16 +0100 Subject: [PATCH 023/218] Use versioning workflow from cura-workflows Contribute to CURA-10831 --- .github/workflows/benchmark.yml | 2 +- .github/workflows/conan-package.yml | 2 +- .github/workflows/gcodeanalyzer.yml | 2 +- .github/workflows/unit-test.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index e3b80ad8ce..074024add1 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -61,7 +61,7 @@ jobs: conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 749c67ac9d..54e2b3283f 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -58,7 +58,7 @@ on: jobs: conan-recipe-version: - uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 123aa31d1b..7225acde20 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -57,7 +57,7 @@ jobs: conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 04e325df79..46789942e1 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -47,7 +47,7 @@ env: jobs: conan-recipe-version: - uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine From 692be2ed9cc9a03cec00c60000328d1b4cc68b3d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 11 Nov 2023 11:36:28 +0100 Subject: [PATCH 024/218] Allow for a release dispatch Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 48 +++++++++-------------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 54e2b3283f..982c473af7 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -19,6 +19,11 @@ on: default: false type: boolean description: 'Create latest alias' + create_release: + required: true + default: false + type: boolean + description: 'Create a conan-package-release' create_binaries_windows: required: true default: false @@ -50,17 +55,18 @@ on: branches: - main - 'CURA-*' - - '[1-9].[0-9]*' - - '[1-9].[0-9][0-9]*' + - '[0-9].[0-9]*' + - '[0-9].[0-9][0-9]*' tags: - - '[1-9]+.[0-9]+.[0-9]*' - - '[1-9]+.[0-9]+.[0-9]' + - '[0-9]+.[0-9]+.[0-9]*' + - '[0-9]+.[0-9]+.[0-9]' jobs: conan-recipe-version: uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine + release: ${{ inputs.create_release }} conan-package-export: needs: [ conan-recipe-version ] @@ -69,7 +75,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} runs_on: 'ubuntu-22.04' - python_version: '3.11.x' + python_version: '3.12.x' conan_logging_level: 'info' secrets: inherit @@ -83,7 +89,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 3 runs_on: 'macos-11' - python_version: '3.11.x' + python_version: '3.12.x' conan_logging_level: 'info' secrets: inherit @@ -97,7 +103,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 4 runs_on: 'windows-2022' - python_version: '3.11.x' + python_version: '3.12.x' conan_config_branch: '' conan_logging_level: 'info' secrets: inherit @@ -112,32 +118,6 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 2 runs_on: 'ubuntu-22.04' - python_version: '3.11.x' + python_version: '3.12.x' conan_logging_level: 'info' secrets: inherit - - notify-export: - if: ${{ always() }} - needs: [ conan-recipe-version, conan-package-export ] - - uses: ultimaker/cura/.github/workflows/notify.yml@main - with: - success: ${{ contains(join(needs.*.result, ','), 'success') }} - success_title: "New Conan recipe exported in ${{ github.repository }}" - success_body: "Exported ${{ needs.conan-recipe-version.outputs.recipe_id_full }}" - failure_title: "Failed to export Conan Export in ${{ github.repository }}" - failure_body: "Failed to exported ${{ needs.conan-recipe-version.outputs.recipe_id_full }}" - secrets: inherit - - notify-create: - if: ${{ always() && ((github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || (github.event_name == 'workflow_dispatch' && inputs.create_binaries_linux)) }} - needs: [ conan-recipe-version, conan-package-create-macos, conan-package-create-windows, conan-package-create-linux ] - - uses: ultimaker/cura/.github/workflows/notify.yml@main - with: - success: ${{ contains(join(needs.*.result, ','), 'success') }} - success_title: "New binaries created in ${{ github.repository }}" - success_body: "Created binaries for ${{ needs.conan-recipe-version.outputs.recipe_id_full }}" - failure_title: "Failed to create binaries in ${{ github.repository }}" - failure_body: "Failed to created binaries for ${{ needs.conan-recipe-version.outputs.recipe_id_full }}" - secrets: inherit From 6070e31b62588b8617f57c79fe54a13e588488b4 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 11 Nov 2023 11:39:41 +0100 Subject: [PATCH 025/218] Allow for a release dispatch Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 982c473af7..edd877b50e 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -66,7 +66,7 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine - release: ${{ inputs.create_release }} + release: ${{ github.event.inputs.create_release == 'true' }} conan-package-export: needs: [ conan-recipe-version ] From 5f5bb15245e4c4b513a884feffaeb8d86fdf160d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sat, 11 Nov 2023 11:44:10 +0100 Subject: [PATCH 026/218] use python 3.11 Conan still uses the `imp` module Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index edd877b50e..46e22a1e98 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -75,7 +75,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} runs_on: 'ubuntu-22.04' - python_version: '3.12.x' + python_version: '3.11.x' conan_logging_level: 'info' secrets: inherit @@ -89,7 +89,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 3 runs_on: 'macos-11' - python_version: '3.12.x' + python_version: '3.11.x' conan_logging_level: 'info' secrets: inherit @@ -103,7 +103,7 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 4 runs_on: 'windows-2022' - python_version: '3.12.x' + python_version: '3.11.x' conan_config_branch: '' conan_logging_level: 'info' secrets: inherit @@ -118,6 +118,6 @@ jobs: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} build_id: 2 runs_on: 'ubuntu-22.04' - python_version: '3.12.x' + python_version: '3.11.x' conan_logging_level: 'info' secrets: inherit From fdffc4f77e126d10b62836c9d138b75089f0e0ad Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 13 Nov 2023 10:47:07 +0100 Subject: [PATCH 027/218] Add extruder start/end gcode duration settings CURA-11099 --- src/gcodeExport.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 2ef08a0474..a3efbe2a52 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -1254,8 +1254,8 @@ void GCodeExport::startExtruder(const size_t new_extruder) assert(getCurrentExtrudedVolume() == 0.0 && "Just after an extruder switch we haven't extruded anything yet!"); resetExtrusionValue(); // zero the E value on the new extruder, just to be sure - const std::string start_code = Application::getInstance().current_slice->scene.extruders[new_extruder].settings.get("machine_extruder_start_code"); - + const auto extruder_settings = Application::getInstance().current_slice->scene.extruders[new_extruder].settings; + const auto start_code = extruder_settings.get("machine_extruder_start_code"); if (! start_code.empty()) { if (relative_extrusion) @@ -1271,6 +1271,9 @@ void GCodeExport::startExtruder(const size_t new_extruder) } } + const auto start_code_duration = extruder_settings.get("machine_extruder_start_code_duration"); + estimateCalculator.addTime(start_code_duration); + Application::getInstance().communication->setExtruderForSend(Application::getInstance().current_slice->scene.extruders[new_extruder]); Application::getInstance().communication->sendCurrentPosition(getPositionXY()); @@ -1302,7 +1305,7 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re resetExtrusionValue(); // zero the E value on the old extruder, so that the current_e_value is registered on the old extruder - const std::string end_code = old_extruder_settings.get("machine_extruder_end_code"); + const auto end_code = old_extruder_settings.get("machine_extruder_end_code"); if (! end_code.empty()) { @@ -1319,6 +1322,9 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re } } + const auto end_code_duration = old_extruder_settings.get("machine_extruder_end_code_duration"); + estimateCalculator.addTime(end_code_duration); + startExtruder(new_extruder); } From df83ec631562e80e443a22fba26bab4fd151efa2 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 13 Nov 2023 09:47:52 +0000 Subject: [PATCH 028/218] Applied clang-format. --- src/gcodeExport.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index a3efbe2a52..629f7b824b 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -3,6 +3,13 @@ #include "gcodeExport.h" +#include +#include +#include +#include + +#include + #include "Application.h" //To send layer view data. #include "ExtruderTrain.h" #include "PrintFeature.h" @@ -14,13 +21,6 @@ #include "utils/Date.h" #include "utils/string.h" // MMtoStream, PrecisionedDouble -#include - -#include -#include -#include -#include - namespace cura { From d0967630600fe8aba8c577c85f491316caacaa22 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 14 Nov 2023 08:51:57 +0100 Subject: [PATCH 029/218] Use the export workflow from the runner Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 5 +---- .github/workflows/requirements-runner.txt | 0 2 files changed, 1 insertion(+), 4 deletions(-) create mode 100644 .github/workflows/requirements-runner.txt diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 46e22a1e98..5045075ba5 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -70,13 +70,10 @@ jobs: conan-package-export: needs: [ conan-recipe-version ] - uses: ultimaker/cura/.github/workflows/conan-recipe-export.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-export.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} - runs_on: 'ubuntu-22.04' - python_version: '3.11.x' - conan_logging_level: 'info' secrets: inherit conan-package-create-macos: diff --git a/.github/workflows/requirements-runner.txt b/.github/workflows/requirements-runner.txt new file mode 100644 index 0000000000..e69de29bb2 From a875046e28fb18b3c87f59f4d6260e5cfe129e53 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 14 Nov 2023 15:45:51 +0100 Subject: [PATCH 030/218] Fix unit-tests. There's still a failure happening _sometimes_ (sigh) but that isn't related to the current ticket as far as I can see. part of CURA-11099 --- tests/GCodeExportTest.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index 3fb07c9be9..0fd1bdba28 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -459,14 +459,21 @@ TEST_F(GCodeExportTest, SwitchExtruderSimple) scene.extruders.emplace_back(0, nullptr); ExtruderTrain& train1 = scene.extruders.back(); + train1.settings.add("machine_extruder_start_code", ";FIRST EXTRUDER START G-CODE!"); train1.settings.add("machine_extruder_end_code", ";FIRST EXTRUDER END G-CODE!"); + train1.settings.add("machine_extruder_start_code_duration", "0.0"); + train1.settings.add("machine_extruder_end_code_duration", "0.0"); train1.settings.add("machine_firmware_retract", "True"); train1.settings.add("retraction_enable", "True"); + scene.extruders.emplace_back(1, nullptr); ExtruderTrain& train2 = scene.extruders.back(); + train2.settings.add("machine_extruder_start_code", ";SECOND EXTRUDER START G-CODE!"); train2.settings.add("machine_extruder_end_code", ";SECOND EXTRUDER END G-CODE!"); + train2.settings.add("machine_extruder_start_code_duration", "0.0"); + train2.settings.add("machine_extruder_end_code_duration", "0.0"); train2.settings.add("machine_firmware_retract", "True"); train2.settings.add("retraction_enable", "True"); From cb98990de7186a6fd86adeaa8c404a8780d0c0f6 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 14 Nov 2023 17:06:03 +0100 Subject: [PATCH 031/218] Use cura-workflows workflows for creating conan-package Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 5045075ba5..df1f7a46f4 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -51,7 +51,6 @@ on: - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/conan-package.yml' - - '.github/worflows/requirements-conan-package.txt' branches: - main - 'CURA-*' @@ -77,44 +76,28 @@ jobs: secrets: inherit conan-package-create-macos: - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || (github.event_name == 'workflow_dispatch' && inputs.create_binaries_macos) }} needs: [ conan-recipe-version, conan-package-export ] - uses: ultimaker/cura/.github/workflows/conan-package-create.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@CURA-10831 with: project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - build_id: 3 - runs_on: 'macos-11' - python_version: '3.11.x' - conan_logging_level: 'info' secrets: inherit conan-package-create-windows: - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true' )) || (github.event_name == 'workflow_dispatch' && inputs.create_binaries_windows) }} needs: [ conan-recipe-version, conan-package-export ] - uses: ultimaker/cura/.github/workflows/conan-package-create.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@CURA-10831 with: project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - build_id: 4 - runs_on: 'windows-2022' - python_version: '3.11.x' - conan_config_branch: '' - conan_logging_level: 'info' secrets: inherit conan-package-create-linux: - if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) || (github.event_name == 'workflow_dispatch' && inputs.create_binaries_linux) }} needs: [ conan-recipe-version, conan-package-export ] - uses: ultimaker/cura/.github/workflows/conan-package-create.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@CURA-10831 with: project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - build_id: 2 - runs_on: 'ubuntu-22.04' - python_version: '3.11.x' - conan_logging_level: 'info' secrets: inherit From 9ca8cc452c64785d7e5d997ceafe5cc329e015c0 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 14 Nov 2023 17:07:30 +0100 Subject: [PATCH 032/218] use correct workflow inputs Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index df1f7a46f4..77f504b763 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -80,8 +80,8 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@CURA-10831 with: - project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit conan-package-create-windows: @@ -89,8 +89,8 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@CURA-10831 with: - project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit conan-package-create-linux: @@ -98,6 +98,6 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@CURA-10831 with: - project_name: ${{ needs.conan-recipe-version.outputs.project_name }} recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit From 372085310355658469e389962d3f27a03215f963 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 14 Nov 2023 17:21:30 +0100 Subject: [PATCH 033/218] remove `latest` from create workflow This is already done during the export Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 77f504b763..2b301984c6 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -81,7 +81,6 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit conan-package-create-windows: @@ -90,7 +89,6 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit conan-package-create-linux: @@ -99,5 +97,4 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} - recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} secrets: inherit From 37bcc9a255c3ade1c7fb4ac0a5ff826cf95a3187 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 14 Nov 2023 17:48:27 +0100 Subject: [PATCH 034/218] Also run on PP branches Contribute to CURA-10831 --- .github/workflows/conan-package.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 2b301984c6..d103e091f6 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -54,6 +54,7 @@ on: branches: - main - 'CURA-*' + - 'PP-*' - '[0-9].[0-9]*' - '[0-9].[0-9][0-9]*' tags: From bad8af44b1129f2a4f52b645c62c1c8db24f6818 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 15 Nov 2023 13:59:01 +0100 Subject: [PATCH 035/218] set version to 5.7.0-alpha Contribute to CURA-10831 --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index b3e464843a..6221b6c38a 100644 --- a/conanfile.py +++ b/conanfile.py @@ -40,7 +40,7 @@ class CuraEngineConan(ConanFile): def set_version(self): if not self.version: - self.version = "5.6.0-beta.1" + self.version = "5.7.0-alpha" def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) From 80cb837ec97f8cbcab144bc4611485a685a4931d Mon Sep 17 00:00:00 2001 From: Thomas Rahm <67757218+ThomasRahm@users.noreply.github.com> Date: Mon, 20 Nov 2023 08:34:13 +0100 Subject: [PATCH 036/218] Fix tree support fake roof for large areas --- include/sliceDataStorage.h | 3 ++- src/TreeSupportTipGenerator.cpp | 2 +- src/sliceDataStorage.cpp | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index 6db1cd605a..56a3e264c6 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -243,7 +243,8 @@ class SupportLayer const coord_t support_line_width, const coord_t wall_line_count, const coord_t grow_layer_above = 0, - const bool unionAll = false); + const bool unionAll = false, + const coord_t custom_line_distance = 0); }; class SupportStorage diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index 094a819544..8227a3b001 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -1165,7 +1165,7 @@ void TreeSupportTipGenerator::generateTips( if (use_fake_roof) { storage.support.supportLayers[layer_idx] - .fillInfillParts(layer_idx, support_roof_drawn, config.support_line_width, support_roof_line_distance, config.maximum_move_distance); + .fillInfillParts(layer_idx, support_roof_drawn, config.support_line_width, 0, config.maximum_move_distance, false, support_roof_line_distance); placed_support_lines_support_areas[layer_idx].add(TreeSupportUtils::generateSupportInfillLines( support_roof_drawn[layer_idx], config, diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 0dddecb5b7..03cd345f01 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -721,7 +721,8 @@ void SupportLayer::fillInfillParts( const coord_t support_line_width, const coord_t wall_line_count, const coord_t grow_layer_above /*has default 0*/, - const bool unionAll /*has default false*/) + const bool unionAll /*has default false*/, + const coord_t custom_line_distance /*has default 0*/) { const Polygons& support_this_layer = support_fill_per_layer[layer_nr]; const Polygons& support_layer_above @@ -732,7 +733,7 @@ void SupportLayer::fillInfillParts( { for (const PolygonsPart& island_outline : support_areas.splitIntoParts(unionAll)) { - support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count); + support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count, custom_line_distance); } use_fractional_config = false; } From f0b9c259f68b2fa423f38bc8eea6d630e142db9e Mon Sep 17 00:00:00 2001 From: Thomas Rahm <67757218+ThomasRahm@users.noreply.github.com> Date: Mon, 20 Nov 2023 08:40:16 +0100 Subject: [PATCH 037/218] Add documentation for the new parameter introduced in previous commit. Also added documentation for the custom_line_distance variable of SupportInfillPart --- include/SupportInfillPart.h | 2 +- include/sliceDataStorage.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/SupportInfillPart.h b/include/SupportInfillPart.h index 1767847cb7..7b1c94c8f0 100644 --- a/include/SupportInfillPart.h +++ b/include/SupportInfillPart.h @@ -33,7 +33,7 @@ class SupportInfillPart // for infill_areas[x][n], x means the density level and n means the thickness std::vector wall_toolpaths; //!< Any walls go here, not in the areas, where they could be combined vertically (don't combine walls). Binned by inset_idx. - coord_t custom_line_distance; + coord_t custom_line_distance;//!< The distance between support infill lines. 0 means use the default line distance instead. bool use_fractional_config; //!< Request to use the configuration used to fill a partial layer height here, instead of the normal full layer height configuration. SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate = 0, coord_t custom_line_distance = 0); diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index 56a3e264c6..e4cef05de3 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -236,6 +236,7 @@ class SupportLayer * \param wall_line_count Wall-line count around the fill. * \param grow_layer_above (optional, default to 0) In cases where support shrinks per layer up, an appropriate offset may be nescesary. * \param unionAll (optional, default to false) Wether to 'union all' for the split into parts bit. + * \param custom_line_distance (optional, default to 0) Distance between lines of the infill pattern. custom_line_distance of 0 means use the default instead. */ void fillInfillParts( const LayerIndex layer_nr, From 5a4ca90594f965b6a5e6af626a5c508185277162 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 11:57:44 +0100 Subject: [PATCH 038/218] Fixed basic code compilation warnings --- conanfile.py | 4 ++-- include/plugins/metadata.h | 18 +++++++++++++++--- include/settings/types/LayerIndex.h | 11 +++++++++-- src/TreeSupportTipGenerator.cpp | 2 +- src/progress/Progress.cpp | 4 ++-- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/conanfile.py b/conanfile.py index b3e464843a..6b4d5ecf66 100644 --- a/conanfile.py +++ b/conanfile.py @@ -90,8 +90,8 @@ def requirements(self): self.requires("boost/1.82.0") self.requires("rapidjson/1.1.0") self.requires("stb/20200203") - self.requires("spdlog/1.10.0") - self.requires("fmt/9.0.0") + self.requires("spdlog/1.12.0") + self.requires("fmt/10.1.1") self.requires("range-v3/0.12.0") self.requires("scripta/0.1.0@ultimaker/testing") self.requires("neargye-semver/0.3.0") diff --git a/include/plugins/metadata.h b/include/plugins/metadata.h index af3e210342..f7d8036260 100644 --- a/include/plugins/metadata.h +++ b/include/plugins/metadata.h @@ -4,15 +4,17 @@ #ifndef CURAENGINE_INCLUDE_PLUGINS_METADATA_H #define CURAENGINE_INCLUDE_PLUGINS_METADATA_H -#include "cura/plugins/v0/slot_id.pb.h" -#include "plugins/types.h" - #include #include #include #include #include +#include + +#include "cura/plugins/v0/slot_id.pb.h" +#include "plugins/types.h" + namespace cura::plugins { @@ -34,4 +36,14 @@ struct slot_metadata } // namespace cura::plugins +namespace cura::plugins::v0 +{ + +constexpr auto format_as(SlotID id) +{ + return fmt::underlying(id); +} + +} // namespace cura::plugins::v0 + #endif // CURAENGINE_INCLUDE_PLUGINS_METADATA_H diff --git a/include/settings/types/LayerIndex.h b/include/settings/types/LayerIndex.h index b1a7524428..6298555dc0 100644 --- a/include/settings/types/LayerIndex.h +++ b/include/settings/types/LayerIndex.h @@ -4,10 +4,12 @@ #ifndef LAYERINDEX_H #define LAYERINDEX_H -#include "utils/types/generic.h" - #include +#include + +#include "utils/types/generic.h" + namespace cura { @@ -192,6 +194,11 @@ struct LayerIndex } }; +constexpr auto format_as(LayerIndex index) +{ + return index.value; +} + } // namespace cura namespace std diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index 094a819544..af313019d8 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -175,7 +175,7 @@ Polygons TreeSupportTipGenerator::convertInternalToLines(std::vector)> TreeSupportTipGenerator::getEvaluatePointForNextLayerFunction(size_t current_layer) { - std::function)> evaluatePoint = [=](std::pair p) + std::function)> evaluatePoint = [this, current_layer](std::pair p) { if (config.support_rest_preference != RestPreference::GRACEFUL && ! volumes_ diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index be6a688813..e0cafbec02 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -76,13 +76,13 @@ void Progress::messageProgressLayer(LayerIndex layer_nr, size_t total_layers, do { if (first_skipped_layer) { - spdlog::info("Skipped time reporting for layers [{}...{}]", first_skipped_layer.value().value, layer_nr.value); + spdlog::info("Skipped time reporting for layers [{}...{}]", first_skipped_layer.value(), layer_nr); first_skipped_layer.reset(); } messageProgress(Stage::EXPORT, std::max(layer_nr.value, LayerIndex::value_type(0)) + 1, total_layers); - spdlog::info("┌ Layer export [{}] accomplished in {:03.3f}s", layer_nr.value, total_time); + spdlog::info("┌ Layer export [{}] accomplished in {:03.3f}s", layer_nr, total_time); size_t padding = 0; auto iterator_max_size = std::max_element( From b932d37c5986659dc62a6824f02a47e41b339729 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 20 Nov 2023 13:16:28 +0100 Subject: [PATCH 039/218] Add sentry to CuraEngine CURA-11364 --- conanfile.py | 1 + src/main.cpp | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 6221b6c38a..1d51628fa3 100644 --- a/conanfile.py +++ b/conanfile.py @@ -98,6 +98,7 @@ def requirements(self): self.requires("protobuf/3.21.9") self.requires("zlib/1.2.12") self.requires("openssl/1.1.1l") + self.requires("sentry-native/0.6.5") def generate(self): deps = CMakeDeps(self) diff --git a/src/main.cpp b/src/main.cpp index bcfd39d9f0..e568d0e248 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,7 @@ #endif #include - +#include #include "Application.h" namespace cura @@ -37,7 +37,21 @@ int main(int argc, char** argv) #endif std::cerr << std::boolalpha; + // Setup sentry error handling. + sentry_options_t *options = sentry_options_new(); + // TODO: Right now we just hardcode the key. We should probably get that from some kind of secret for release builds + sentry_options_set_dsn(options, "https://734f9ec9024f73e53701d59c3ffddfe3@o323038.ingest.sentry.io/4506257745510401"); + // This is also the default-path. For further information and recommendations: + // https://docs.sentry.io/platforms/native/configuration/options/#database-path + sentry_options_set_database_path(options, ".sentry-native"); + // TODO: Hardcoded the version number, we should also get that from somewhere. Can't be bothered to figure that out now + sentry_options_set_release(options, "curaengine@1.0.0"); + sentry_options_set_debug(options, 1); + sentry_init(options); + cura::Application::getInstance().run(argc, argv); + sentry_close(); + return 0; } From 7d6dc2cdf8243dcdfe4cf44be89836f86944a9b9 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 20 Nov 2023 13:41:50 +0100 Subject: [PATCH 040/218] Also add sentry to CMakeLists CURA-11364 --- CMakeLists.txt | 2 ++ src/main.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27fcdf5bd8..cb1b3cc708 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,6 +201,7 @@ find_package(fmt REQUIRED) find_package(range-v3 REQUIRED) find_package(scripta REQUIRED) find_package(neargye-semver REQUIRED) +find_package(sentry REQUIRED) if (ENABLE_TESTING) find_package(GTest REQUIRED) @@ -221,6 +222,7 @@ target_link_libraries(_CuraEngine asio-grpc::asio-grpc grpc::grpc protobuf::libprotobuf + sentry::sentry $<$:GTest::gtest>) if (NOT WIN32) diff --git a/src/main.cpp b/src/main.cpp index e568d0e248..9a7f06c3ae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -48,7 +48,7 @@ int main(int argc, char** argv) sentry_options_set_release(options, "curaengine@1.0.0"); sentry_options_set_debug(options, 1); sentry_init(options); - + cura::Application::getInstance().run(argc, argv); sentry_close(); From 67b924d1d2fedb92aa82c7793f6f2dd94b7e141d Mon Sep 17 00:00:00 2001 From: nallath Date: Mon, 20 Nov 2023 12:42:57 +0000 Subject: [PATCH 041/218] Applied clang-format. --- src/main.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9a7f06c3ae..aa3c634f6f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,8 +7,10 @@ #include //For setpriority. #endif -#include #include + +#include + #include "Application.h" namespace cura @@ -38,7 +40,7 @@ int main(int argc, char** argv) std::cerr << std::boolalpha; // Setup sentry error handling. - sentry_options_t *options = sentry_options_new(); + sentry_options_t* options = sentry_options_new(); // TODO: Right now we just hardcode the key. We should probably get that from some kind of secret for release builds sentry_options_set_dsn(options, "https://734f9ec9024f73e53701d59c3ffddfe3@o323038.ingest.sentry.io/4506257745510401"); // This is also the default-path. For further information and recommendations: @@ -48,7 +50,7 @@ int main(int argc, char** argv) sentry_options_set_release(options, "curaengine@1.0.0"); sentry_options_set_debug(options, 1); sentry_init(options); - + cura::Application::getInstance().run(argc, argv); sentry_close(); From 5e22539dace1f19000b98d9bc7a5dad3f5570ed7 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 20 Nov 2023 14:53:01 +0100 Subject: [PATCH 042/218] Correctly set the version number when sending to sentry CURA-13364 --- src/main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9a7f06c3ae..d6f2cb9640 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,6 +9,7 @@ #include #include +#include #include "Application.h" namespace cura @@ -44,11 +45,11 @@ int main(int argc, char** argv) // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path sentry_options_set_database_path(options, ".sentry-native"); - // TODO: Hardcoded the version number, we should also get that from somewhere. Can't be bothered to figure that out now - sentry_options_set_release(options, "curaengine@1.0.0"); - sentry_options_set_debug(options, 1); + std::string version = "curaengine@"; + version += std::string(CURA_ENGINE_VERSION); + sentry_options_set_release(options, version.c_str()); sentry_init(options); - + cura::Application::getInstance().run(argc, argv); sentry_close(); From 785490c1f76f177691546ba2e77a3b2c5c9df61c Mon Sep 17 00:00:00 2001 From: nallath Date: Mon, 20 Nov 2023 14:02:50 +0000 Subject: [PATCH 043/218] Applied clang-format. --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 84920c5006..9acb8d97d0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,9 +8,10 @@ #endif #include +#include #include -#include + #include "Application.h" namespace cura From 853d47c2622202753e2c88edcf5435b896dee605 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 15:18:44 +0100 Subject: [PATCH 044/218] Fixed many more warnings --- include/BeadingStrategy/BeadingStrategy.h | 7 +- include/settings/types/Angle.h | 85 ++++++----- include/slicer.h | 167 ++++++++++------------ include/utils/Coord_t.h | 19 +-- include/utils/IntPoint.h | 65 +++++---- include/utils/Point3.h | 154 +++++++++++--------- include/utils/VoxelUtils.h | 91 ++++++------ include/utils/actions/smooth.h | 22 +-- include/utils/floatpoint.h | 127 ++++++++++------ include/utils/math.h | 43 ++---- include/utils/polygonUtils.h | 59 +++++--- src/FffGcodeWriter.cpp | 16 +-- src/FffPolygonGenerator.cpp | 6 +- src/InterlockingGenerator.cpp | 28 ++-- src/LayerPlan.cpp | 6 +- src/MeshGroup.cpp | 20 +-- src/Mold.cpp | 2 +- src/PrimeTower.cpp | 4 +- src/SkeletalTrapezoidation.cpp | 4 +- src/TreeSupportTipGenerator.cpp | 6 +- src/gcodeExport.cpp | 84 +++++------ src/infill.cpp | 2 +- src/infill/GyroidInfill.cpp | 30 ++-- src/infill/ImageBasedDensityProvider.cpp | 36 ++--- src/infill/SierpinskiFill.cpp | 36 +++-- src/infill/SierpinskiFillProvider.cpp | 5 +- src/infill/SubDivCube.cpp | 26 ++-- src/mesh.cpp | 18 ++- src/pathPlanning/Comb.cpp | 20 +-- src/settings/AdaptiveLayerHeights.cpp | 10 +- src/settings/Settings.cpp | 2 +- src/sliceDataStorage.cpp | 14 +- src/slicer.cpp | 124 ++++++++-------- src/support.cpp | 8 +- src/utils/AABB3D.cpp | 60 ++++---- src/utils/ExtrusionSegment.cpp | 28 ++-- src/utils/FMatrix4x3.cpp | 34 +++-- src/utils/LinearAlg2D.cpp | 4 +- src/utils/Point3.cpp | 66 ++++----- src/utils/ToolpathVisualizer.cpp | 77 +++++----- src/utils/VoxelUtils.cpp | 99 ++++++------- src/utils/polygon.cpp | 6 +- src/utils/polygonUtils.cpp | 91 ++++++------ tests/PathOrderMonotonicTest.cpp | 4 +- tests/arcus/ArcusCommunicationTest.cpp | 2 +- tests/integration/SlicePhaseTest.cpp | 4 +- tests/settings/SettingsTest.cpp | 6 +- tests/utils/LinearAlg2DTest.cpp | 2 +- tests/utils/PolygonTest.cpp | 2 +- tests/utils/SimplifyTest.cpp | 2 +- tests/utils/SmoothTest.cpp | 2 +- 51 files changed, 967 insertions(+), 868 deletions(-) diff --git a/include/BeadingStrategy/BeadingStrategy.h b/include/BeadingStrategy/BeadingStrategy.h index 5f2625bac8..ee2d2635e6 100644 --- a/include/BeadingStrategy/BeadingStrategy.h +++ b/include/BeadingStrategy/BeadingStrategy.h @@ -36,7 +36,12 @@ class BeadingStrategy coord_t left_over; //! The distance not covered by any bead; gap area. }; - BeadingStrategy(coord_t optimal_width, Ratio wall_split_middle_threshold, Ratio wall_add_middle_threshold, coord_t default_transition_length, float transitioning_angle = pi_div(3)); + BeadingStrategy( + coord_t optimal_width, + Ratio wall_split_middle_threshold, + Ratio wall_add_middle_threshold, + coord_t default_transition_length, + float transitioning_angle = std::numbers::pi_v / 3.0); BeadingStrategy(const BeadingStrategy& other); diff --git a/include/settings/types/Angle.h b/include/settings/types/Angle.h index ba79710ed4..4b4ed3de5e 100644 --- a/include/settings/types/Angle.h +++ b/include/settings/types/Angle.h @@ -1,17 +1,18 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef ANGLE_H #define ANGLE_H #include //For fmod. + #include "../../utils/math.h" //For M_PI. #define TAU (2.0 * M_PI) namespace cura { -//AngleDegrees and AngleRadians classes defined together here interweaved, to resolve their interdependencies. +// AngleDegrees and AngleRadians classes defined together here interweaved, to resolve their interdependencies. class AngleRadians; /* @@ -26,7 +27,10 @@ class AngleDegrees /* * \brief Default constructor setting the angle to 0. */ - AngleDegrees() : value(0.0) {}; + AngleDegrees() + : value_(0.0) + { + } /* * \brief Converts radians to degrees. @@ -36,45 +40,48 @@ class AngleDegrees /* * \brief Casts a double to an AngleDegrees instance. */ - AngleDegrees(double value) : value(std::fmod(std::fmod(value, 360) + 360, 360)) {}; + AngleDegrees(double value) + : value_(std::fmod(std::fmod(value, 360) + 360, 360)) + { + } /* * \brief Casts the AngleDegrees instance to a double. */ operator double() const { - return value; + return value_; } /* * Some operators implementing the clock arithmetic. */ - AngleDegrees operator +(const AngleDegrees& other) const + AngleDegrees operator+(const AngleDegrees& other) const { - return std::fmod(std::fmod(value + other.value, 360) + 360, 360); + return std::fmod(std::fmod(value_ + other.value_, 360) + 360, 360); } template - AngleDegrees operator +(const T& other) const + AngleDegrees operator+(const T& other) const { return operator+(AngleDegrees(static_cast(other))); } - AngleDegrees& operator +=(const AngleDegrees& other) + AngleDegrees& operator+=(const AngleDegrees& other) { - value = std::fmod(std::fmod(value + other.value, 360) + 360, 360); + value_ = std::fmod(std::fmod(value_ + other.value_, 360) + 360, 360); return *this; } - AngleDegrees operator -(const AngleDegrees& other) const + AngleDegrees operator-(const AngleDegrees& other) const { - return std::fmod(std::fmod(value - other.value, 360) + 360, 360); + return std::fmod(std::fmod(value_ - other.value_, 360) + 360, 360); } template - AngleDegrees operator -(const T& other) const + AngleDegrees operator-(const T& other) const { return operator-(AngleDegrees(static_cast(other))); } - AngleDegrees& operator -=(const AngleDegrees& other) + AngleDegrees& operator-=(const AngleDegrees& other) { - value = std::fmod(std::fmod(value - other.value, 360) + 360, 360); + value_ = std::fmod(std::fmod(value_ - other.value_, 360) + 360, 360); return *this; } @@ -83,7 +90,7 @@ class AngleDegrees * * This value should always be between 0 and 360. */ - double value = 0; + double value_ = 0; }; /* @@ -98,7 +105,10 @@ class AngleRadians /* * \brief Default constructor setting the angle to 0. */ - AngleRadians() : value(0.0) {}; + AngleRadians() + : value_(0.0) + { + } /*! * \brief Converts an angle from degrees into radians. @@ -108,35 +118,38 @@ class AngleRadians /* * \brief Translate the double value in degrees to an AngleRadians instance. */ - AngleRadians(double value) : value(std::fmod(std::fmod(value, TAU) + TAU, TAU)) {}; + AngleRadians(double value) + : value_(std::fmod(std::fmod(value, TAU) + TAU, TAU)) + { + } /* * \brief Casts the AngleRadians instance to a double. */ operator double() const { - return value; + return value_; } /* * Some operators implementing the clock arithmetic. */ - AngleRadians operator +(const AngleRadians& other) const + AngleRadians operator+(const AngleRadians& other) const { - return std::fmod(std::fmod(value + other.value, TAU) + TAU, TAU); + return std::fmod(std::fmod(value_ + other.value_, TAU) + TAU, TAU); } - AngleRadians& operator +=(const AngleRadians& other) + AngleRadians& operator+=(const AngleRadians& other) { - value = std::fmod(std::fmod(value + other.value, TAU) + TAU, TAU); + value_ = std::fmod(std::fmod(value_ + other.value_, TAU) + TAU, TAU); return *this; } - AngleRadians operator -(const AngleRadians& other) const + AngleRadians operator-(const AngleRadians& other) const { - return std::fmod(std::fmod(value - other.value, TAU) + TAU, TAU); + return std::fmod(std::fmod(value_ - other.value_, TAU) + TAU, TAU); } - AngleRadians& operator -=(const AngleRadians& other) + AngleRadians& operator-=(const AngleRadians& other) { - value = std::fmod(std::fmod(value - other.value, TAU) + TAU, TAU); + value_ = std::fmod(std::fmod(value_ - other.value_, TAU) + TAU, TAU); return *this; } @@ -145,12 +158,18 @@ class AngleRadians * * This value should always be between 0 and 2 * pi. */ - double value = 0; + double value_ = 0; }; -inline AngleDegrees::AngleDegrees(const AngleRadians& value) : value(value * 360 / TAU) {} -inline AngleRadians::AngleRadians(const AngleDegrees& value) : value(double(value) * TAU / 360.0) {} - +inline AngleDegrees::AngleDegrees(const AngleRadians& value) + : value_(value * 360 / TAU) +{ } +inline AngleRadians::AngleRadians(const AngleDegrees& value) + : value_(double(value) * TAU / 360.0) +{ +} + +} // namespace cura -#endif //ANGLE_H \ No newline at end of file +#endif // ANGLE_H diff --git a/include/slicer.h b/include/slicer.h index a5de21fdf5..789da58a8c 100644 --- a/include/slicer.h +++ b/include/slicer.h @@ -1,13 +1,15 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef SLICER_H #define SLICER_H +#include #include #include -#include "utils/polygon.h" + #include "settings/EnumSettings.h" +#include "utils/polygon.h" /* The Slicer creates layers of polygons from an optimized 3D model. @@ -34,19 +36,20 @@ class SlicerSegment }; class ClosePolygonResult -{ //The result of trying to find a point on a closed polygon line. This gives back the point index, the polygon index, and the point of the connection. - //The line on which the point lays is between pointIdx-1 and pointIdx +{ // The result of trying to find a point on a closed polygon line. This gives back the point index, the polygon index, and the point of the connection. + // The line on which the point lays is between pointIdx-1 and pointIdx public: - int polygonIdx = -1; - size_t pointIdx = -1; + size_t polygonIdx = 0; + size_t pointIdx = 0; }; + class GapCloserResult { public: - coord_t len = -1; - int polygonIdx = -1; - size_t pointIdxA = -1; - size_t pointIdxB = -1; + coord_t len = 0; + size_t polygonIdx = 0; + size_t pointIdxA = 0; + size_t pointIdxB = 0; bool AtoB = false; }; @@ -112,9 +115,9 @@ class SlicerLayer */ void stitch(Polygons& open_polylines); - GapCloserResult findPolygonGapCloser(Point ip0, Point ip1); + std::optional findPolygonGapCloser(Point ip0, Point ip1); - ClosePolygonResult findPolygonPointClosestTo(Point input); + std::optional findPolygonPointClosestTo(Point input); /*! * Try to close up polylines into polygons while they have large gaps in them. @@ -151,7 +154,8 @@ class SlicerLayer /*! Constructor leaving uninitialized. */ Terminus() - {} + { + } /*! Constructor from Index representation. * @@ -159,7 +163,7 @@ class SlicerLayer */ Terminus(Index idx) { - m_idx = idx; + idx_ = idx; } /*! Constuctor from the polyline index and which end of the polyline. @@ -168,19 +172,19 @@ class SlicerLayer */ Terminus(size_t polyline_idx, bool is_end) { - m_idx = polyline_idx * 2 + (is_end ? 1 : 0); + idx_ = polyline_idx * 2 + (is_end ? 1 : 0); } /*! Gets the polyline index for this Terminus. */ size_t getPolylineIdx() const { - return m_idx / 2; + return idx_ / 2; } /*! Gets whether this Terminus represents the end point of the polyline. */ bool isEnd() const { - return (m_idx & 1) == 1; + return (idx_ & 1) == 1; } /*! Gets the Index representation of this Terminus. @@ -201,7 +205,7 @@ class SlicerLayer */ Index asIndex() const { - return m_idx; + return idx_; } /*! Calculates the Terminus end Index from the polyline vector end index. @@ -213,23 +217,23 @@ class SlicerLayer */ static Index endIndexFromPolylineEndIndex(unsigned int polyline_end_idx) { - return polyline_end_idx*2; + return polyline_end_idx * 2; } /*! Tests for equality. - * - * Two Terminus are equal if they return the same results for - * \ref getPolylineIdx() and \ref isEnd(). - */ - bool operator==(const Terminus &other) + * + * Two Terminus are equal if they return the same results for + * \ref getPolylineIdx() and \ref isEnd(). + */ + bool operator==(const Terminus& other) { - return m_idx == other.m_idx; + return idx_ == other.idx_; } /*! Tests for inequality. */ - bool operator!=(const Terminus &other) + bool operator!=(const Terminus& other) { - return m_idx != other.m_idx; + return idx_ != other.idx_; } private: @@ -237,7 +241,7 @@ class SlicerLayer * * The polyline_idx and end flags are calculated from this on demand. */ - Index m_idx = -1; + Index idx_ = std::numeric_limits::max(); }; /*! @@ -276,8 +280,7 @@ class SlicerLayer bool in_order() const { // in order if using back of line 0 and front of line 1 - return terminus_0.isEnd() && - !terminus_1.isEnd(); + return terminus_0.isEnd() && ! terminus_1.isEnd(); } /*! Orders PossibleStitch by goodness. @@ -285,8 +288,8 @@ class SlicerLayer * Better PossibleStitch are > then worse PossibleStitch. * priority_queue will give greatest first so greatest * must be most desirable stitch - */ - bool operator<(const PossibleStitch &other) const; + */ + bool operator<(const PossibleStitch& other) const; }; /*! @@ -321,7 +324,7 @@ class SlicerLayer * \return The current Terminus location or INVALID_TERMINUS * if the old endpoint is no longer an endpoint. */ - Terminus getCurFromOld(const Terminus &old) const + Terminus getCurFromOld(const Terminus& old) const { return m_terminus_old_to_cur_map[old.asIndex()]; } @@ -334,7 +337,7 @@ class SlicerLayer * INVALID_TERMINUS if the old Terminus location was * removed (used to form a Polygon). */ - Terminus getOldFromCur(const Terminus &cur) const + Terminus getOldFromCur(const Terminus& cur) const { return m_terminus_cur_to_old_map[cur.asIndex()]; } @@ -344,7 +347,7 @@ class SlicerLayer * This marks the current Terminus as being removed from the * polyline vector. */ - void markRemoved(const Terminus &cur) + void markRemoved(const Terminus& cur) { Terminus old = getOldFromCur(cur); m_terminus_old_to_cur_map[old.asIndex()] = Terminus::INVALID_TERMINUS; @@ -379,10 +382,7 @@ class SlicerLayer * \param removed_cur_terms The Terminus locations that will * be removed after the update. */ - void updateMap(size_t num_terms, - const Terminus *cur_terms, const Terminus *next_terms, - size_t num_removed_terms, - const Terminus *removed_cur_terms); + void updateMap(size_t num_terms, const Terminus* cur_terms, const Terminus* next_terms, size_t num_removed_terms, const Terminus* removed_cur_terms); private: /*! map from old terminus location to current terminus location */ @@ -398,8 +398,7 @@ class SlicerLayer * \param[in] face_idx The index of the face that might have generated a continuation segment. * \param[in] start_segment_idx The index of the segment that started this polyline. */ - int tryFaceNextSegmentIdx(const SlicerSegment& segment, - const int face_idx, const size_t start_segment_idx) const; + int tryFaceNextSegmentIdx(const SlicerSegment& segment, const int face_idx, const size_t start_segment_idx) const; /*! * Find possible allowed stitches in goodness order. @@ -418,9 +417,7 @@ class SlicerLayer * the order of a polyline. * \return The stitches that are allowed in order from best to worst. */ - std::priority_queue findPossibleStitches( - const Polygons& open_polylines, coord_t max_dist, coord_t cell_size, - bool allow_reverse) const; + std::priority_queue findPossibleStitches(const Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse) const; /*! Plans the best way to perform a stitch. * @@ -438,9 +435,7 @@ class SlicerLayer * \param[in,out] terminus_1 the Terminus on polyline_1 to join at. * \param[out] reverse Whether the polylines need to be reversed. */ - void planPolylineStitch(const Polygons& open_polylines, - Terminus& terminus_0, Terminus& terminus_1, - bool reverse[2]) const; + void planPolylineStitch(const Polygons& open_polylines, Terminus& terminus_0, Terminus& terminus_1, bool reverse[2]) const; /*! Joins polyline_1 onto polyline_0. * @@ -458,8 +453,7 @@ class SlicerLayer * polyline_0 and reverse[1] indicates whether to reverse * polyline_1 */ - void joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, - const bool reverse[2]) const; + void joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, const bool reverse[2]) const; /*! * Connecting polylines that are not closed yet. @@ -479,9 +473,7 @@ class SlicerLayer * \param[in] allow_reverse If true, then this function is allowed * to reverse edge directions to merge polylines. */ - void connectOpenPolylinesImpl(Polygons& open_polylines, - coord_t max_dist, coord_t cell_size, - bool allow_reverse); + void connectOpenPolylinesImpl(Polygons& open_polylines, coord_t max_dist, coord_t cell_size, bool allow_reverse); }; class Slicer @@ -491,11 +483,10 @@ class Slicer const Mesh* mesh = nullptr; //!< The sliced mesh - Slicer(Mesh* mesh, const coord_t thickness, const size_t slice_layer_count, bool use_variable_layer_heights, std::vector *adaptive_layers); + Slicer(Mesh* mesh, const coord_t thickness, const size_t slice_layer_count, bool use_variable_layer_heights, std::vector* adaptive_layers); private: - /*! * \brief Linear interpolation between coordinates of a line. * @@ -525,48 +516,46 @@ class Slicer static SlicerSegment project2D(const Point3& p0, const Point3& p1, const Point3& p2, const coord_t z); /*! Creates an array of "z bounding boxes" for each face. - * \param[in] mesh The mesh which is analyzed. - * \return z heights aka z bounding boxes of the faces. - */ - static std::vector> buildZHeightsForFaces(const Mesh &mesh); + * \param[in] mesh The mesh which is analyzed. + * \return z heights aka z bounding boxes of the faces. + */ + static std::vector> buildZHeightsForFaces(const Mesh& mesh); /*! Creates the polygons in layers. - * \param[in] mesh The mesh which is analyzed. - * \param[in] slicing_tolerance The way the slicing tolerance should be applied (MIDDLE/INCLUSIVE/EXCLUSIVE). - * \param[in, out] layers The polygon are created here. - */ + * \param[in] mesh The mesh which is analyzed. + * \param[in] slicing_tolerance The way the slicing tolerance should be applied (MIDDLE/INCLUSIVE/EXCLUSIVE). + * \param[in, out] layers The polygon are created here. + */ static void makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::vector& layers); /*! Creates a vector of layers and set their z value. - * \param[in] mesh The mesh which is analyzed. - * \param[in] slice_layer_count The amount of layers which shall be sliced. - * \param[in] slicing_tolerance The way the slicing tolerance should be applied (MIDDLE/INCLUSIVE/EXCLUSIVE). - * \param[in] initial_layer_thickness Thickness of the first layer. - * \param[in] thickness Thickness of the layers (apart the first one). - * \param[in] use_variable_layer_heights Shall we use adaptive layer heights. - * \param[in] adaptive_layers Adaptive layers (if use_variable_layer_heights). - * \return layers with set z values. - */ - static std::vector buildLayersWithHeight(size_t slice_layer_count, SlicingTolerance slicing_tolerance, - coord_t initial_layer_thickness, coord_t thickness, bool use_variable_layer_heights, + * \param[in] mesh The mesh which is analyzed. + * \param[in] slice_layer_count The amount of layers which shall be sliced. + * \param[in] slicing_tolerance The way the slicing tolerance should be applied (MIDDLE/INCLUSIVE/EXCLUSIVE). + * \param[in] initial_layer_thickness Thickness of the first layer. + * \param[in] thickness Thickness of the layers (apart the first one). + * \param[in] use_variable_layer_heights Shall we use adaptive layer heights. + * \param[in] adaptive_layers Adaptive layers (if use_variable_layer_heights). + * \return layers with set z values. + */ + static std::vector buildLayersWithHeight( + size_t slice_layer_count, + SlicingTolerance slicing_tolerance, + coord_t initial_layer_thickness, + coord_t thickness, + bool use_variable_layer_heights, const std::vector* adaptive_layers); /*! Creates the segments and write them into the layers. - * \param[in] mesh The mesh which is analyzed. - * \param[in] zbboxes The z part of the bounding boxes of the faces of the mesh. - * \param[in] slicing_tolderance Slicing tolerance in order to figure out what happens when vertices are exactly on the slicing boundary. - * \param[in, out] layers The segments are created here. - */ - static void buildSegments - ( - const Mesh& mesh, - const std::vector> &zbboxes, - const SlicingTolerance& slicing_tolerance, - std::vector& layers - ); - + * \param[in] mesh The mesh which is analyzed. + * \param[in] zbboxes The z part of the bounding boxes of the faces of the mesh. + * \param[in] slicing_tolderance Slicing tolerance in order to figure out what happens when vertices are exactly on the slicing boundary. + * \param[in, out] layers The segments are created here. + */ + static void + buildSegments(const Mesh& mesh, const std::vector>& zbboxes, const SlicingTolerance& slicing_tolerance, std::vector& layers); }; -}//namespace cura +} // namespace cura -#endif//SLICER_H +#endif // SLICER_H diff --git a/include/utils/Coord_t.h b/include/utils/Coord_t.h index 910efb941e..bd8f3e088b 100644 --- a/include/utils/Coord_t.h +++ b/include/utils/Coord_t.h @@ -1,11 +1,11 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_COORD_T_H #define UTILS_COORD_T_H -//Include Clipper to get the ClipperLib::IntPoint definition, which we reuse as Point definition. +// Include Clipper to get the ClipperLib::IntPoint definition, which we reuse as Point definition. #include namespace cura @@ -13,16 +13,19 @@ namespace cura using coord_t = ClipperLib::cInt; -static inline coord_t operator "" _mu(unsigned long long i) { return i; }; +static inline coord_t operator"" _mu(unsigned long long i) +{ + return static_cast(i); +}; #define INT2MM(n) (static_cast(n) / 1000.0) #define INT2MM2(n) (static_cast(n) / 1000000.0) -#define MM2INT(n) (static_cast((n) * 1000 + 0.5 * (((n) > 0) - ((n) < 0)))) -#define MM2_2INT(n) (static_cast((n) * 1000000 + 0.5 * (((n) > 0) - ((n) < 0)))) -#define MM3_2INT(n) (static_cast((n) * 1000000000 + 0.5 * (((n) > 0) - ((n) < 0)))) +#define MM2INT(n) (static_cast((n)*1000 + 0.5 * (((n) > 0) - ((n) < 0)))) +#define MM2_2INT(n) (static_cast((n)*1000000 + 0.5 * (((n) > 0) - ((n) < 0)))) +#define MM3_2INT(n) (static_cast((n)*1000000000 + 0.5 * (((n) > 0) - ((n) < 0)))) #define INT2MICRON(n) ((n) / 1) -#define MICRON2INT(n) ((n) * 1) +#define MICRON2INT(n) ((n)*1) } // namespace cura diff --git a/include/utils/IntPoint.h b/include/utils/IntPoint.h index ce5cbc9785..7649241e82 100644 --- a/include/utils/IntPoint.h +++ b/include/utils/IntPoint.h @@ -11,9 +11,6 @@ Integer points are used to avoid floating point rounding errors, and because Cli #define INLINE static inline // Include Clipper to get the ClipperLib::IntPoint definition, which we reuse as Point definition. -#include "../utils/math.h" // for M_PI. Use relative path to avoid pulling -#include "Point3.h" //For applying Point3Matrices. - #include #include // for hash function object #include // auto-serialization / auto-toString() @@ -21,6 +18,9 @@ Integer points are used to avoid floating point rounding errors, and because Cli #include #include +#include "../utils/math.h" // for M_PI. Use relative path to avoid pulling +#include "Point3.h" //For applying Point3Matrices. + #ifdef __GNUC__ #define DEPRECATED(func) func __attribute__((deprecated)) #elif defined(_MSC_VER) @@ -62,7 +62,7 @@ INLINE Point operator*(const Point& p0, const coord_t i) template::value, T>::type> // Use only for numeric types. INLINE Point operator*(const Point& p0, const T i) { - return Point(std::llrint(p0.X * i), std::llrint(p0.Y * i)); + return Point(std::llrint(static_cast(p0.X) * i), std::llrint(static_cast(p0.Y) * i)); } template::value, T>::type> // Use only for numeric types. INLINE Point operator*(const T i, const Point& p0) @@ -141,7 +141,7 @@ INLINE bool shorterThan(const Point& p0, const coord_t len) INLINE coord_t vSize(const Point& p0) { - return sqrt(vSize2(p0)); + return std::llrint(sqrt(static_cast(vSize2(p0)))); } INLINE double vSizeMM(const Point& p0) @@ -168,7 +168,9 @@ INLINE Point rotate(const Point& p0, double angle) { const double cos_component = std::cos(angle); const double sin_component = std::sin(angle); - return Point(cos_component * p0.X - sin_component * p0.Y, sin_component * p0.X + cos_component * p0.Y); + const double x = static_cast(p0.X); + const double y = static_cast(p0.Y); + return Point(std::llrint(cos_component * x - sin_component * y), std::llrint(sin_component * x + cos_component * y)); } INLINE coord_t dot(const Point& p0, const Point& p1) @@ -186,7 +188,7 @@ INLINE int angle(const Point& p) double angle = std::atan2(p.X, p.Y) / M_PI * 180.0; if (angle < 0.0) angle += 360.0; - return angle; + return static_cast(std::lrint(angle)); } // Identity function, used to be able to make templated algorithms where the input is sometimes points, sometimes things that contain or can be converted to points. @@ -206,9 +208,9 @@ struct hash { static int prime = 31; int result = 89; - result = result * prime + pp.X; - result = result * prime + pp.Y; - return result; + result = static_cast(result * prime + pp.X); + result = static_cast(result * prime + pp.Y); + return static_cast(result); } }; } // namespace std @@ -240,8 +242,8 @@ class PointMatrix PointMatrix(const Point p) { - matrix[0] = p.X; - matrix[1] = p.Y; + matrix[0] = static_cast(p.X); + matrix[1] = static_cast(p.Y); double f = sqrt((matrix[0] * matrix[0]) + (matrix[1] * matrix[1])); matrix[0] /= f; matrix[1] /= f; @@ -259,7 +261,9 @@ class PointMatrix Point apply(const Point p) const { - return Point(p.X * matrix[0] + p.Y * matrix[1], p.X * matrix[2] + p.Y * matrix[3]); + const double x = static_cast(p.X); + const double y = static_cast(p.Y); + return Point(std::llrint(x * matrix[0] + y * matrix[1]), std::llrint(x * matrix[2] + y * matrix[3])); } /*! @@ -267,7 +271,9 @@ class PointMatrix */ Point unapply(const Point p) const { - return Point(p.X * matrix[0] + p.Y * matrix[2], p.X * matrix[1] + p.Y * matrix[3]); + const double x = static_cast(p.X); + const double y = static_cast(p.Y); + return Point(std::llrint(x * matrix[0] + y * matrix[2]), std::llrint(x * matrix[1] + y * matrix[3])); } PointMatrix inverse() const @@ -319,10 +325,13 @@ class Point3Matrix Point3 apply(const Point3 p) const { + const double x = static_cast(p.x_); + const double y = static_cast(p.y_); + const double z = static_cast(p.z_); return Point3( - std::llrint(p.x * matrix[0] + p.y * matrix[1] + p.z * matrix[2]), - std::llrint(p.x * matrix[3] + p.y * matrix[4] + p.z * matrix[5]), - std::llrint(p.x * matrix[6] + p.y * matrix[7] + p.z * matrix[8])); + std::llrint(x * matrix[0] + y * matrix[1] + z * matrix[2]), + std::llrint(x * matrix[3] + y * matrix[4] + z * matrix[5]), + std::llrint(x * matrix[6] + y * matrix[7] + z * matrix[8])); } /*! @@ -331,14 +340,14 @@ class Point3Matrix Point apply(const Point p) const { Point3 result = apply(Point3(p.X, p.Y, 1)); - return Point(result.x / result.z, result.y / result.z); + return Point(result.x_ / result.z_, result.y_ / result.z_); } static Point3Matrix translate(const Point p) { Point3Matrix ret; // uniform matrix - ret.matrix[2] = p.X; - ret.matrix[5] = p.Y; + ret.matrix[2] = static_cast(p.X); + ret.matrix[5] = static_cast(p.Y); return ret; } @@ -363,35 +372,35 @@ class Point3Matrix inline Point3 operator+(const Point3& p3, const Point& p2) { - return Point3(p3.x + p2.X, p3.y + p2.Y, p3.z); + return Point3(p3.x_ + p2.X, p3.y_ + p2.Y, p3.z_); } inline Point3& operator+=(Point3& p3, const Point& p2) { - p3.x += p2.X; - p3.y += p2.Y; + p3.x_ += p2.X; + p3.y_ += p2.Y; return p3; } inline Point operator+(const Point& p2, const Point3& p3) { - return Point(p3.x + p2.X, p3.y + p2.Y); + return Point(p3.x_ + p2.X, p3.y_ + p2.Y); } inline Point3 operator-(const Point3& p3, const Point& p2) { - return Point3(p3.x - p2.X, p3.y - p2.Y, p3.z); + return Point3(p3.x_ - p2.X, p3.y_ - p2.Y, p3.z_); } inline Point3& operator-=(Point3& p3, const Point& p2) { - p3.x -= p2.X; - p3.y -= p2.Y; + p3.x_ -= p2.X; + p3.y_ -= p2.Y; return p3; } inline Point operator-(const Point& p2, const Point3& p3) { - return Point(p2.X - p3.x, p2.Y - p3.y); + return Point(p2.X - p3.x_, p2.Y - p3.y_); } } // namespace cura diff --git a/include/utils/Point3.h b/include/utils/Point3.h index 6dc18c27b8..54c3819e22 100644 --- a/include/utils/Point3.h +++ b/include/utils/Point3.h @@ -1,15 +1,15 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POINT3_H #define UTILS_POINT3_H +#include #include //For sqrt. #include //Auto-serialization. #include //For numeric_limits::min and max. #include //For int32_t and int64_t. #include // for operations on any arithmetic number type -#include #include "Coord_t.h" @@ -20,49 +20,56 @@ namespace cura class Point3 { public: - coord_t x,y,z; - Point3() {} - Point3(const coord_t _x, const coord_t _y, const coord_t _z): x(_x), y(_y), z(_z) {} - - Point3 operator +(const Point3& p) const; - Point3 operator -() const; - Point3 operator -(const Point3& p) const; - Point3 operator *(const Point3& p) const; //!< Element-wise multiplication. For dot product, use .dot()! - Point3 operator /(const Point3& p) const; + coord_t x_, y_, z_; + Point3() + { + } + Point3(const coord_t x, const coord_t y, const coord_t z) + : x_(x) + , y_(y) + , z_(z) + { + } + + Point3 operator+(const Point3& p) const; + Point3 operator-() const; + Point3 operator-(const Point3& p) const; + Point3 operator*(const Point3& p) const; //!< Element-wise multiplication. For dot product, use .dot()! + Point3 operator/(const Point3& p) const; template::value, num_t>::type> - Point3 operator *(const num_t i) const + Point3 operator*(const num_t i) const { - return Point3(x * i, y * i, z * i); + return Point3(std::llround(static_cast(x_) * i), std::llround(static_cast(y_) * i), std::llround(static_cast(z_) * i)); } template::value, num_t>::type> - Point3 operator /(const num_t i) const + Point3 operator/(const num_t i) const { - return Point3(x / i, y / i, z / i); + return Point3(x_ / i, y_ / i, z_ / i); } template::value, num_t>::type> - Point3 operator %(const num_t i) const + Point3 operator%(const num_t i) const { - return Point3(x % i, y % i, z % i); + return Point3(x_ % i, y_ % i, z_ % i); } - Point3& operator +=(const Point3& p); - Point3& operator -=(const Point3& p); - Point3& operator *=(const Point3& p); - Point3& operator /=(const Point3& p); + Point3& operator+=(const Point3& p); + Point3& operator-=(const Point3& p); + Point3& operator*=(const Point3& p); + Point3& operator/=(const Point3& p); template::value, num_t>::type> - Point3& operator *=(const num_t i) + Point3& operator*=(const num_t i) { - x *= i; - y *= i; - z *= i; + x_ *= i; + y_ *= i; + z_ *= i; return *this; } template::value, num_t>::type> - Point3& operator /=(const num_t i) + Point3& operator/=(const num_t i) { - x /= i; - y /= i; - z /= i; + x_ /= i; + y_ /= i; + z_ /= i; return *this; } @@ -71,68 +78,71 @@ class Point3 template - friend - std::basic_ostream& - operator <<(std::basic_ostream& os, const Point3& p) + friend std::basic_ostream& operator<<(std::basic_ostream& os, const Point3& p) { - return os << "(" << p.x << ", " << p.y << ", " << p.z << ")"; + return os << "(" << p.x_ << ", " << p.y_ << ", " << p.z_ << ")"; } coord_t max() const { - if (x > y && x > z) return x; - if (y > z) return y; - return z; + if (x_ > y_ && x_ > z_) + return x_; + if (y_ > z_) + return y_; + return z_; } bool testLength(coord_t len) const { - if (x > len || x < -len) + if (x_ > len || x_ < -len) return false; - if (y > len || y < -len) + if (y_ > len || y_ < -len) return false; - if (z > len || z < -len) + if (z_ > len || z_ < -len) return false; - return vSize2() <= len*len; + return vSize2() <= len * len; } coord_t vSize2() const { - return x * x + y * y + z * z; + return x_ * x_ + y_ * y_ + z_ * z_; } coord_t vSize() const { - return sqrt(vSize2()); + return std::llrint(sqrt(static_cast(vSize2()))); } - + double vSizeMM() const { - double fx = INT2MM(x); - double fy = INT2MM(y); - double fz = INT2MM(z); - return sqrt(fx*fx+fy*fy+fz*fz); + double fx = INT2MM(x_); + double fy = INT2MM(y_); + double fz = INT2MM(z_); + return sqrt(fx * fx + fy * fy + fz * fz); } coord_t dot(const Point3& p) const { - return x*p.x + y*p.y + z*p.z; + return x_ * p.x_ + y_ * p.y_ + z_ * p.z_; } - coord_t& operator[] (const size_t index) + coord_t& operator[](const size_t index) { assert(index < 3); - switch(index) + switch (index) { - case 0: return x; - case 1: return y; - default: return z; + case 0: + return x_; + case 1: + return y_; + default: + return z_; } } - const coord_t& operator[] (const size_t index) const + const coord_t& operator[](const size_t index) const { - return const_cast(this)->operator[] (index); + return const_cast(this)->operator[](index); } }; @@ -152,20 +162,22 @@ inline Point3 operator*(const num_t i, const Point3& rhs) } // namespace cura -namespace std { - template <> - struct hash { - size_t operator()(const cura::Point3 & pp) const - { - static int prime = 31; - int result = 89; - result = result * prime + pp.x; - result = result * prime + pp.y; - result = result * prime + pp.z; - return result; - } - }; -} +namespace std +{ +template<> +struct hash +{ + size_t operator()(const cura::Point3& pp) const + { + static int prime = 31; + int result = 89; + result = static_cast(result * prime + pp.x_); + result = static_cast(result * prime + pp.y_); + result = static_cast(result * prime + pp.z_); + return static_cast(result); + } +}; +} // namespace std -#endif //UTILS_POINT3_H +#endif // UTILS_POINT3_H diff --git a/include/utils/VoxelUtils.h b/include/utils/VoxelUtils.h index f4b93bb3b5..b080a4d5b6 100644 --- a/include/utils/VoxelUtils.h +++ b/include/utils/VoxelUtils.h @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_VOXEL_UTILS_H #define UTILS_VOXEL_UTILS_H @@ -10,7 +10,7 @@ #include "utils/IntPoint.h" #include "utils/polygon.h" -namespace cura +namespace cura { using GridPoint3 = Point3; @@ -26,13 +26,13 @@ struct DilationKernel * |\ ___\ * | | | * \|____| - * + * * A diamond kernel uses a manhattan distance to create a diamond shape around a reference voxel. * /|\ * /_|_\ * \ | / * \|/ - * + * * A prism kernel is diamond in XY, but extrudes straight in Z around a reference voxel. * / \ * / \ @@ -42,7 +42,12 @@ struct DilationKernel * \ | / * \|/ */ - enum class Type { CUBE, DIAMOND, PRISM }; + enum class Type + { + CUBE, + DIAMOND, + PRISM + }; DilationKernel(GridPoint3 kernel_size, Type type); GridPoint3 kernel_size; //!< Size of the kernel in number of voxel cells Type type; @@ -51,7 +56,7 @@ struct DilationKernel /*! * Utility class for walking over a 3D voxel grid. - * + * * Contains the math for intersecting voxels with lines, polgons, areas, etc. */ class VoxelUtils @@ -59,106 +64,107 @@ class VoxelUtils public: using grid_coord_t = coord_t; VoxelUtils(Point3 cell_size) - : cell_size(cell_size) - {} + : cell_size(cell_size) + { + } Point3 cell_size; /*! * Process voxels which a line segment crosses. - * + * * \param start Start point of the line * \param end End point of the line * \param process_cell_func Function to perform on each cell the line crosses * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const; + bool walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const; /*! * Process voxels which the line segments of a polygon crosses. - * + * * \warning Voxels may be processed multiple times! - * + * * \param polys The polygons to walk * \param z The height at which the polygons occur * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkPolygons(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool walkPolygons(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; /*! * Process voxels near the line segments of a polygon. * For each voxel the polygon crosses we process each of the offset voxels according to the kernel. - * + * * \warning Voxels may be processed multiple times! - * + * * \param polys The polygons to walk * \param z The height at which the polygons occur * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; + bool walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; private: /*! * \warning the \p polys is assumed to be translated by half the cell_size in xy already */ - bool _walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool _walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; public: /*! * Process all voxels inside the area of a polygons object. - * + * * \warning The voxels along the area are not processed. Thin areas might not process any voxels at all. - * + * * \param polys The area to fill * \param z The height at which the polygons occur * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; + bool walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const; /*! * Process all voxels inside the area of a polygons object. * For each voxel inside the polygon we process each of the offset voxels according to the kernel. - * + * * \warning The voxels along the area are not processed. Thin areas might not process any voxels at all. - * + * * \param polys The area to fill * \param z The height at which the polygons occur * \param process_cell_func Function to perform on each voxel cell * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; + bool walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const; /*! * Dilate with a kernel. - * + * * Extends the \p process_cell_func, so that for each cell we process nearby cells as well. - * + * * Apply this function to a process_cell_func to create a new process_cell_func which applies the effect to nearby voxels as well. - * + * * \param kernel The offset positions relative to the input of \p process_cell_func * \param process_cell_func Function to perform on each voxel cell */ - std::function dilate(const DilationKernel& kernel, const std::function& process_cell_func) const; - - GridPoint3 toGridPoint(const Point3& point) const + std::function dilate(const DilationKernel& kernel, const std::function& process_cell_func) const; + + GridPoint3 toGridPoint(const Point3& point) const { - return GridPoint3(toGridCoord(point.x, 0), toGridCoord(point.y, 1), toGridCoord(point.z, 2)); + return GridPoint3(toGridCoord(point.x_, 0), toGridCoord(point.y_, 1), toGridCoord(point.z_, 2)); } - - grid_coord_t toGridCoord(const coord_t& coord, const size_t dim) const + + grid_coord_t toGridCoord(const coord_t& coord, const size_t dim) const { assert(dim < 3); return coord / cell_size[dim] - (coord < 0); } - - Point3 toLowerCorner(const GridPoint3& location) const + + Point3 toLowerCorner(const GridPoint3& location) const { - return cura::Point3(toLowerCoord(location.x, 0), toLowerCoord(location.y, 1), toLowerCoord(location.z, 2)); + return cura::Point3(toLowerCoord(location.x_, 0), toLowerCoord(location.y_, 1), toLowerCoord(location.z_, 2)); } - - coord_t toLowerCoord(const grid_coord_t& grid_coord, const size_t dim) const + + coord_t toLowerCoord(const grid_coord_t& grid_coord, const size_t dim) const { assert(dim < 3); return grid_coord * cell_size[dim]; @@ -171,13 +177,12 @@ class VoxelUtils { Polygon ret; Point3 c = toLowerCorner(p); - ret.emplace_back(c.x, c.y); - ret.emplace_back(c.x + cell_size.x, c.y); - ret.emplace_back(c.x + cell_size.x, c.y + cell_size.y); - ret.emplace_back(c.x, c.y + cell_size.y); + ret.emplace_back(c.x_, c.y_); + ret.emplace_back(c.x_ + cell_size.x_, c.y_); + ret.emplace_back(c.x_ + cell_size.x_, c.y_ + cell_size.y_); + ret.emplace_back(c.x_, c.y_ + cell_size.y_); return ret; } - }; } // namespace cura diff --git a/include/utils/actions/smooth.h b/include/utils/actions/smooth.h index 67e4adebe6..a450a9fe40 100644 --- a/include/utils/actions/smooth.h +++ b/include/utils/actions/smooth.h @@ -4,12 +4,10 @@ #ifndef UTILS_VIEWS_SMOOTH_H #define UTILS_VIEWS_SMOOTH_H -#include "settings/Settings.h" -#include "settings/types/Angle.h" -#include "utils/types/arachne.h" -#include "utils/types/generic.h" -#include "utils/types/geometry.h" -#include "utils/types/get.h" +#include +#include +#include +#include #include #include @@ -22,10 +20,12 @@ #include #include -#include -#include -#include -#include +#include "settings/Settings.h" +#include "settings/types/Angle.h" +#include "utils/types/arachne.h" +#include "utils/types/generic.h" +#include "utils/types/geometry.h" +#include "utils/types/get.h" namespace cura { @@ -43,7 +43,7 @@ struct smooth_fn { const auto fluid_motion_shift_distance = settings.get("meshfix_fluid_motion_shift_distance"); const auto fluid_motion_small_distance = settings.get("meshfix_fluid_motion_small_distance"); - const auto fluid_motion_angle = settings.get("meshfix_fluid_motion_angle").value; + const auto fluid_motion_angle = settings.get("meshfix_fluid_motion_angle").value_; return ranges::make_action_closure(ranges::bind_back(smooth_fn{}, fluid_motion_shift_distance, fluid_motion_small_distance, fluid_motion_angle)); } diff --git a/include/utils/floatpoint.h b/include/utils/floatpoint.h index 9019f30b24..8f4d35b52f 100644 --- a/include/utils/floatpoint.h +++ b/include/utils/floatpoint.h @@ -1,18 +1,18 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef FLOAT_POINT_H #define FLOAT_POINT_H -#include "IntPoint.h" - -#include #include +#include + +#include "IntPoint.h" namespace cura { - + /* Floating point 3D points are used during model loading as 3D vectors. They represent millimeters in 3D space. @@ -20,38 +20,88 @@ They represent millimeters in 3D space. class FPoint3 { public: - float x,y,z; - FPoint3() {} - FPoint3(float _x, float _y, float _z): x(_x), y(_y), z(_z) {} - FPoint3(const Point3& p): x(p.x*.001), y(p.y*.001), z(p.z*.001) {} + float x, y, z; + FPoint3() + { + } + FPoint3(float _x, float _y, float _z) + : x(_x) + , y(_y) + , z(_z) + { + } + FPoint3(const Point3& p) + : x(static_cast(p.x_) * .001f) + , y(static_cast(p.y_) * .001f) + , z(static_cast(p.z_) * .001f) + { + } - FPoint3 operator+(const FPoint3& p) const { return FPoint3(x+p.x, y+p.y, z+p.z); } - FPoint3 operator-(const FPoint3& p) const { return FPoint3(x-p.x, y-p.y, z-p.z); } - FPoint3 operator*(const float f) const { return FPoint3(x*f, y*f, z*f); } - FPoint3 operator/(const float f) const { return FPoint3(x/f, y/f, z/f); } + FPoint3 operator+(const FPoint3& p) const + { + return FPoint3(x + p.x, y + p.y, z + p.z); + } + FPoint3 operator-(const FPoint3& p) const + { + return FPoint3(x - p.x, y - p.y, z - p.z); + } + FPoint3 operator*(const float f) const + { + return FPoint3(x * f, y * f, z * f); + } + FPoint3 operator/(const float f) const + { + return FPoint3(x / f, y / f, z / f); + } - FPoint3& operator += (const FPoint3& p) { x += p.x; y += p.y; z += p.z; return *this; } - FPoint3& operator -= (const FPoint3& p) { x -= p.x; y -= p.y; z -= p.z; return *this; } - FPoint3& operator *= (const float f) { x *= f; y *= f; z *= f; return *this; } + FPoint3& operator+=(const FPoint3& p) + { + x += p.x; + y += p.y; + z += p.z; + return *this; + } + FPoint3& operator-=(const FPoint3& p) + { + x -= p.x; + y -= p.y; + z -= p.z; + return *this; + } + FPoint3& operator*=(const float f) + { + x *= f; + y *= f; + z *= f; + return *this; + } - bool operator==(FPoint3& p) const { return x==p.x&&y==p.y&&z==p.z; } - bool operator!=(FPoint3& p) const { return x!=p.x||y!=p.y||z!=p.z; } + bool operator==(FPoint3& p) const + { + return x == p.x && y == p.y && z == p.z; + } + bool operator!=(FPoint3& p) const + { + return x != p.x || y != p.y || z != p.z; + } float max() const { - if (x > y && x > z) return x; - if (y > z) return y; + if (x > y && x > z) + return x; + if (y > z) + return y; return z; } bool testLength(float len) const { - return vSize2() <= len*len; + return vSize2() <= len * len; } float vSize2() const { - return x*x+y*y+z*z; + return x * x + y * y + z * z; } float vSize() const @@ -61,24 +111,17 @@ class FPoint3 inline FPoint3 normalized() const { - return (*this)/vSize(); + return (*this) / vSize(); } FPoint3 cross(const FPoint3& p) const { - return FPoint3( - y*p.z-z*p.y, - z*p.x-x*p.z, - x*p.y-y*p.x); + return FPoint3(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); } static FPoint3 cross(const Point3& a, const Point3& b) { return FPoint3(a).cross(FPoint3(b)); -// FPoint3( -// a.y*b.z-a.z*b.y, -// a.z*b.x-a.x*b.z, -// a.x*b.y-a.y*b.x); } Point3 toPoint3() @@ -87,20 +130,10 @@ class FPoint3 } }; - -//inline FPoint3 operator+(FPoint3 lhs, const FPoint3& rhs) { -// lhs += rhs; -// return lhs; -//} -inline float operator*(FPoint3 lhs, const FPoint3& rhs) { - return lhs.x*rhs.x + lhs.y*rhs.y + lhs.z*rhs.z; +inline float operator*(FPoint3 lhs, const FPoint3& rhs) +{ + return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; } -//inline FPoint3 operator*(FPoint3 lhs, const float f) { -// lhs *= f; -// return lhs; -//} - - -}//namespace cura -#endif//INT_POINT_H +} // namespace cura +#endif // INT_POINT_H diff --git a/include/utils/math.h b/include/utils/math.h index 21a015ff2e..23561cc86f 100644 --- a/include/utils/math.h +++ b/include/utils/math.h @@ -1,30 +1,28 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_MATH_H #define UTILS_MATH_H -#include #include +#include +#include -//c++11 no longer defines M_PI, so add our own constant. -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - namespace cura { -static constexpr float sqrt2 = 1.41421356237; - -template inline T square(const T& a) { return a * a; } +template +inline T square(const T& a) +{ + return a * a; +} inline int64_t round_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer { - if((dividend < 0) ^ (divisor < 0)) //Either the numerator or the denominator is negative, so the result must be negative. + if ((dividend < 0) ^ (divisor < 0)) // Either the numerator or the denominator is negative, so the result must be negative. { - return (dividend - divisor / 2) / divisor; //Flip the .5 offset to do proper rounding in the negatives too. + return (dividend - divisor / 2) / divisor; // Flip the .5 offset to do proper rounding in the negatives too. } else { @@ -33,11 +31,11 @@ inline int64_t round_divide_signed(const int64_t dividend, const int64_t divisor } inline uint64_t ceil_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded up towards positive infinity. { - return (dividend / divisor) + (dividend * divisor > 0 ? 1 : 0); + return static_cast((dividend / divisor) + (dividend * divisor > 0 ? 1 : 0)); } inline uint64_t floor_divide_signed(const int64_t dividend, const int64_t divisor) //!< Return dividend divided by divisor rounded down towards negative infinity. { - return (dividend / divisor) + (dividend * divisor > 0 ? 0 : -1); + return static_cast((dividend / divisor) + (dividend * divisor > 0 ? 0 : -1)); } inline uint64_t round_divide(const uint64_t dividend, const uint64_t divisor) //!< Return dividend divided by divisor rounded to the nearest integer { @@ -48,18 +46,5 @@ inline uint64_t round_up_divide(const uint64_t dividend, const uint64_t divisor) return (dividend + divisor - 1) / divisor; } -template -constexpr T pi_div(const T div) -{ - return static_cast(M_PI) / div; -} - -template -constexpr T pi_mul(const T mul) -{ - return static_cast(M_PI) / mul; -} - -}//namespace cura +} // namespace cura #endif // UTILS_MATH_H - diff --git a/include/utils/polygonUtils.h b/include/utils/polygonUtils.h index c4ea2c2db6..24d8936561 100644 --- a/include/utils/polygonUtils.h +++ b/include/utils/polygonUtils.h @@ -22,40 +22,55 @@ namespace cura */ struct ClosestPolygonPoint { - Point location; //!< Result location - ConstPolygonPointer poly; //!< Polygon in which the result was found (or nullptr if no result was found) - unsigned int poly_idx; //!< The index of the polygon in some Polygons where ClosestPolygonPoint::poly can be found - unsigned int point_idx; //!< Index to the first point in the polygon of the line segment on which the result was found - ClosestPolygonPoint(Point p, int pos, ConstPolygonRef poly) - : location(p) - , poly(poly) - , poly_idx(NO_INDEX) - , point_idx(pos){}; - ClosestPolygonPoint(Point p, int pos, ConstPolygonRef poly, int poly_idx) - : location(p) - , poly(poly) - , poly_idx(poly_idx) - , point_idx(pos){}; + Point location_; //!< Result location + ConstPolygonPointer poly_; //!< Polygon in which the result was found (or nullptr if no result was found) + size_t poly_idx_; //!< The index of the polygon in some Polygons where ClosestPolygonPoint::poly can be found + size_t point_idx_; //!< Index to the first point in the polygon of the line segment on which the result was found + + ClosestPolygonPoint(Point p, size_t pos, ConstPolygonRef poly) + : location_(p) + , poly_(poly) + , poly_idx_(NO_INDEX) + , point_idx_(pos) + { + } + + ClosestPolygonPoint(Point p, size_t pos, ConstPolygonRef poly, size_t poly_idx) + : location_(p) + , poly_(poly) + , poly_idx_(poly_idx) + , point_idx_(pos) + { + } + ClosestPolygonPoint(ConstPolygonRef poly) - : poly(poly) - , poly_idx(NO_INDEX) - , point_idx(NO_INDEX){}; + : poly_(poly) + , poly_idx_(NO_INDEX) + , point_idx_(NO_INDEX) + { + } + ClosestPolygonPoint() - : poly_idx(NO_INDEX) - , point_idx(NO_INDEX){}; + : poly_idx_(NO_INDEX) + , point_idx_(NO_INDEX) + { + } + Point p() const { // conformity with other classes - return location; + return location_; } + bool isValid() const { - return point_idx != NO_INDEX; + return point_idx_ != NO_INDEX; } + bool operator==(const ClosestPolygonPoint& rhs) const { // no need to compare on poy_idx // it's sometimes unused while poly is always initialized - return poly == rhs.poly && point_idx == rhs.point_idx && location == rhs.location; + return poly_ == rhs.poly_ && point_idx_ == rhs.point_idx_ && location_ == rhs.location_; } }; diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index a42d12889d..aced5673aa 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -183,7 +183,7 @@ void FffGcodeWriter::writeGCode(SliceDataStorage& storage, TimeKeeper& time_keep Progress::messageProgressStage(Progress::Stage::FINISH, &time_keeper); // Store the object height for when we are printing multiple objects, as we need to clear every one of them when moving to the next position. - max_object_height = std::max(max_object_height, storage.model_max.z); + max_object_height = std::max(max_object_height, storage.model_max.z_); constexpr bool force = true; @@ -205,7 +205,7 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS { seam_pos = mesh.getZSeamHint(); } - return PolygonUtils::findClosest(seam_pos, layer.parts[0].spiral_wall[0]).point_idx; + return PolygonUtils::findClosest(seam_pos, layer.parts[0].spiral_wall[0]).point_idx_; } else { @@ -238,7 +238,7 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS // now test the vertex following the candidate seam vertex and if it lies to the left of the vector, it's good to use float a = LinearAlg2D::getAngleLeft(last_wall_seam_vertex_vector, last_wall_seam_vertex, wall[(seam_vertex_idx + 1) % n_points]); - if (a <= 0 || a >= M_PI) + if (a <= 0 || a >= std::numbers::pi) { // the vertex was not on the left of the vector so move the seam vertex on seam_vertex_idx = (seam_vertex_idx + 1) % n_points; @@ -546,7 +546,7 @@ void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) Application::getInstance().communication->sendCurrentPosition(gcode.getPositionXY()); gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings.get("speed_travel")); - Point start_pos(storage.model_min.x, storage.model_min.y); + Point start_pos(storage.model_min.x_, storage.model_min.y_); gcode.writeTravel(start_pos, Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings.get("speed_travel")); gcode.processInitialLayerTemperature(storage, gcode.getExtruderNr()); @@ -1458,7 +1458,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s { const Mesh& mesh_data = mesh_group->meshes[mesh_idx]; const Point3 middle = (mesh_data.getAABB().min + mesh_data.getAABB().max) / 2; - mesh_idx_order_optimizer.addItem(Point(middle.x, middle.y), mesh_idx); + mesh_idx_order_optimizer.addItem(Point(middle.x_, middle.y_), mesh_idx); } } const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; @@ -1662,7 +1662,7 @@ bool FffGcodeWriter::processMultiLayerInfill( infill_angle = mesh.infill_angles.at((gcode_layer.getLayerNr() / combined_infill_layers) % mesh.infill_angles.size()); } const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x + mesh.settings.get("infill_offset_x"), mesh_middle.y + mesh.settings.get("infill_offset_y")); + const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); // Print the thicker infill lines first. (double or more layer thickness, infill combined with previous layers) bool added_something = false; @@ -1814,7 +1814,7 @@ bool FffGcodeWriter::processSingleLayerInfill( infill_angle = mesh.infill_angles.at((static_cast(gcode_layer.getLayerNr()) / combined_infill_layers) % mesh.infill_angles.size()); } const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x + mesh.settings.get("infill_offset_x"), mesh_middle.y + mesh.settings.get("infill_offset_y")); + const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); auto get_cut_offset = [](const bool zig_zaggify, const coord_t line_width, const size_t line_count) { @@ -2425,7 +2425,7 @@ bool FffGcodeWriter::processInsets( // the supported region is made up of those areas that really are supported by either model or support on the layer below // expanded to take into account the overhang angle, the greater the overhang angle, the larger the supported area is // considered to be - const coord_t overhang_width = layer_height * std::tan(overhang_angle / (180 / M_PI)); + const coord_t overhang_width = layer_height * std::tan(overhang_angle / (180 / std::numbers::pi)); Polygons overhang_region = part.outline.offset(-half_outer_wall_width).difference(outlines_below.offset(10 + overhang_width - half_outer_wall_width)).offset(10); gcode_layer.setOverhangMask(overhang_region); } diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 3b1a5e4c38..0ac8e5ce1b 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -145,11 +145,11 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe { continue; } - const coord_t mesh_height = mesh.max().z; + const coord_t mesh_height = mesh.max().z_; switch (mesh.settings.get("slicing_tolerance")) { case SlicingTolerance::MIDDLE: - if (storage.model_max.z < initial_layer_thickness) + if (storage.model_max.z_ < initial_layer_thickness) { slice_layer_count = std::max(slice_layer_count, (mesh_height > initial_layer_thickness / 2) ? 1 : 0); // One layer if higher than half initial layer height. } @@ -673,7 +673,7 @@ void FffPolygonGenerator::processDerivedWallsSkinInfill(SliceMeshStorage& mesh) if (mesh.settings.get("infill_line_distance") > 0 && mesh.settings.get("infill_pattern") == EFillMethod::CUBICSUBDIV) { const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x + mesh.settings.get("infill_offset_x"), mesh_middle.y + mesh.settings.get("infill_offset_y")); + const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); SubDivCube::precomputeOctree(mesh, infill_origin); } diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 6310a7ef16..3392f4ee31 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -3,19 +3,19 @@ #include "InterlockingGenerator.h" -#include "Application.h" -#include "Slice.h" -#include "settings/types/LayerIndex.h" -#include "slicer.h" -#include "utils/VoxelUtils.h" -#include "utils/polygonUtils.h" +#include // max #include #include #include #include -#include // max +#include "Application.h" +#include "Slice.h" +#include "settings/types/LayerIndex.h" +#include "slicer.h" +#include "utils/VoxelUtils.h" +#include "utils/polygonUtils.h" namespace cura { @@ -109,7 +109,7 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set for (const auto& cell : has_all_meshes) { const Point3 bottom_corner = vu.toLowerCorner(cell); - for (int layer_nr = bottom_corner.z; layer_nr < bottom_corner.z + cell_size.z && layer_nr < near_interlock_per_layer.size(); ++layer_nr) + for (int layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size.z_ && layer_nr < near_interlock_per_layer.size(); ++layer_nr) { near_interlock_per_layer[layer_nr].add(vu.toPolygon(cell)); } @@ -214,7 +214,7 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& layers { skin = skin.xorPolygons(layers[layer_nr - 1]); } - skin = skin.offset(-cell_size.x / 2).offset(cell_size.x / 2); // remove superfluous small areas, which would anyway be included because of walkPolygons + skin = skin.offset(-cell_size.x_ / 2).offset(cell_size.x_ / 2); // remove superfluous small areas, which would anyway be included because of walkPolygons vu.walkDilatedAreas(skin, z, kernel, voxel_emplacer); } } @@ -248,12 +248,12 @@ std::vector> InterlockingGenerator::generateMicrostructure cell_area_per_mesh_per_layer.resize(2); cell_area_per_mesh_per_layer[0].resize(2); const coord_t beam_w_sum = beam_width_a + beam_width_b; - const coord_t middle = cell_size.x * beam_width_a / beam_w_sum; - const coord_t width[2] = { middle, cell_size.x - middle }; + const coord_t middle = cell_size.x_ * beam_width_a / beam_w_sum; + const coord_t width[2] = { middle, cell_size.x_ - middle }; for (size_t mesh_idx : { 0, 1 }) { Point offset(mesh_idx ? middle : 0, 0); - Point area_size(width[mesh_idx], cell_size.y); + Point area_size(width[mesh_idx], cell_size.y_); PolygonRef poly = cell_area_per_mesh_per_layer[0][mesh_idx].newPoly(); poly.emplace_back(offset); @@ -297,10 +297,10 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s Point3 bottom_corner = vu.toLowerCorner(grid_loc); for (size_t mesh_idx = 0; mesh_idx < 2; mesh_idx++) { - for (LayerIndex layer_nr = bottom_corner.z; layer_nr < bottom_corner.z + cell_size.z && layer_nr < max_layer_count; layer_nr += beam_layer_count) + for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count) { Polygons areas_here = cell_area_per_mesh_per_layer[(layer_nr / beam_layer_count) % cell_area_per_mesh_per_layer.size()][mesh_idx]; - areas_here.translate(Point(bottom_corner.x, bottom_corner.y)); + areas_here.translate(Point(bottom_corner.x_, bottom_corner.y_)); structure_per_layer[mesh_idx][layer_nr / beam_layer_count].add(areas_here); } } diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 52305a9521..36b6ef02d4 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -1491,10 +1491,10 @@ void LayerPlan::spiralizeWallSlice( ClosestPolygonPoint cpp = PolygonUtils::findClosest(p, last_wall_polygons); // if we found a point and it's not further away than max_dist2, use it - if (cpp.isValid() && vSize2(cpp.location - p) <= max_dist2) + if (cpp.isValid() && vSize2(cpp.location_ - p) <= max_dist2) { // interpolate between cpp.location and p depending on how far we have progressed along wall - addExtrusionMove(cpp.location + (p - cpp.location) * (wall_length / total_length), config, SpaceFillType::Polygons, flow, width_factor, spiralize, speed_factor); + addExtrusionMove(cpp.location_ + (p - cpp.location_) * (wall_length / total_length), config, SpaceFillType::Polygons, flow, width_factor, spiralize, speed_factor); } else { @@ -2073,7 +2073,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { // Before the final travel, move up to the next layer height, on the current spot, with a sensible speed. Point3 current_position = gcode.getPosition(); - current_position.z = final_travel_z; + current_position.z_ = final_travel_z; gcode.writeTravel(current_position, extruder.settings.get("speed_z_hop")); // Prevent the final travel(s) from resetting to the 'previous' layer height. diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index 84ef4d4923..e14fcc3600 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -55,9 +55,9 @@ Point3 MeshGroup::min() const continue; } Point3 v = mesh.min(); - ret.x = std::min(ret.x, v.x); - ret.y = std::min(ret.y, v.y); - ret.z = std::min(ret.z, v.z); + ret.x_ = std::min(ret.x_, v.x_); + ret.y_ = std::min(ret.y_, v.y_); + ret.z_ = std::min(ret.z_, v.z_); } return ret; } @@ -77,9 +77,9 @@ Point3 MeshGroup::max() const continue; } Point3 v = mesh.max(); - ret.x = std::max(ret.x, v.x); - ret.y = std::max(ret.y, v.y); - ret.z = std::max(ret.z, v.z); + ret.x_ = std::max(ret.x_, v.x_); + ret.y_ = std::max(ret.y_, v.y_); + ret.z_ = std::max(ret.z_, v.z_); } return ret; } @@ -98,8 +98,8 @@ void MeshGroup::finalize() Point3 meshgroup_offset(0, 0, 0); if (! settings.get("machine_center_is_zero")) { - meshgroup_offset.x = settings.get("machine_width") / 2; - meshgroup_offset.y = settings.get("machine_depth") / 2; + meshgroup_offset.x_ = settings.get("machine_width") / 2; + meshgroup_offset.y_ = settings.get("machine_depth") / 2; } // If a mesh position was given, put the mesh at this position in 3D space. @@ -111,7 +111,7 @@ void MeshGroup::finalize() Point3 object_min = mesh.min(); Point3 object_max = mesh.max(); Point3 object_size = object_max - object_min; - mesh_offset += Point3(-object_min.x - object_size.x / 2, -object_min.y - object_size.y / 2, -object_min.z); + mesh_offset += Point3(-object_min.x_ - object_size.x_ / 2, -object_min.y_ - object_size.y_ / 2, -object_min.z_); } mesh.translate(mesh_offset + meshgroup_offset); } @@ -127,7 +127,7 @@ void MeshGroup::finalize() void MeshGroup::scaleFromBottom(const Ratio factor_xy, const Ratio factor_z) { const Point3 center = (max() + min()) / 2; - const Point3 origin(center.x, center.y, 0); + const Point3 origin(center.x_, center.y_, 0); const FMatrix4x3 transformation = FMatrix4x3::scale(factor_xy, factor_xy, factor_z, origin); for (Mesh& mesh : meshes) diff --git a/src/Mold.cpp b/src/Mold.cpp index bd5ff2e0b1..ccf5ec0cd6 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -71,7 +71,7 @@ void Mold::process(std::vector& slicer_list) const AngleDegrees angle = mesh.settings.get("mold_angle"); const coord_t roof_height = mesh.settings.get("mold_roof_height"); - const coord_t inset = tan(angle / 180 * M_PI) * layer_height; + const coord_t inset = tan(angle / 180 * std::numbers::pi) * layer_height; const size_t roof_layer_count = roof_height / layer_height; diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index d2761327eb..bc62d17a46 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -305,8 +305,8 @@ void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr const coord_t inward_dist = train.settings.get("machine_nozzle_size") * 3 / 2; const coord_t start_dist = train.settings.get("machine_nozzle_size") * 2; const Point prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); - const Point outward_dir = wipe_location.location - prime_end; - const Point prime_start = wipe_location.location + normal(outward_dir, start_dist); + const Point outward_dir = wipe_location.location_ - prime_end; + const Point prime_start = wipe_location.location_ + normal(outward_dir, start_dist); gcode_layer.addTravel(prime_start); } diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index c391b0d4f6..4f2eb2151d 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -207,7 +207,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ coord_t end_x = projected_x(end); // Part of the edge will be bound to the markings on the endpoints of the edge. Calculate how far that is. - float bound = 0.5 / tan((M_PI - transitioning_angle) * 0.5); + float bound = 0.5 / tan((std::numbers::pi - transitioning_angle) * 0.5); coord_t marking_start_x = -d * bound; coord_t marking_end_x = d * bound; Point marking_start = middle + x_axis_dir * marking_start_x / x_axis_length; @@ -2212,7 +2212,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() constexpr coord_t n_segments = 6; for (coord_t segment = 0; segment < n_segments; segment++) { - float a = 2.0 * M_PI / n_segments * segment; + float a = 2.0 * std::numbers::pi / n_segments * segment; line.junctions.emplace_back(node.p + Point(r * cos(a), r * sin(a)), width, inset_index); } } diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index af313019d8..f1f2aed10c 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -48,12 +48,12 @@ TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceDataStorage& storage support_outset(0) , // Since we disable support offset when tree support is enabled we use an offset of 0 rather than the setting value mesh.settings.get("support_offset") roof_outset(use_fake_roof ? support_outset : mesh.settings.get("support_roof_offset")) - , force_tip_to_roof((config.min_radius * config.min_radius * M_PI > minimum_roof_area * (1000 * 1000)) && support_roof_layers && ! use_fake_roof) + , force_tip_to_roof((config.min_radius * config.min_radius * std::numbers::pi > minimum_roof_area * (1000 * 1000)) && support_roof_layers && ! use_fake_roof) , support_tree_limit_branch_reach(mesh.settings.get("support_tree_limit_branch_reach")) , support_tree_branch_reach_limit(support_tree_limit_branch_reach ? mesh.settings.get("support_tree_branch_reach_limit") : 0) , z_distance_delta(std::min(config.z_distance_top_layers + 1, mesh.overhang_areas.size())) , xy_overrides(config.support_overrides == SupportDistPriority::XY_OVERRIDES_Z) - , tip_roof_size(force_tip_to_roof ? config.min_radius * config.min_radius * M_PI : 0) + , tip_roof_size(force_tip_to_roof ? config.min_radius * config.min_radius * std::numbers::pi : 0) , already_inserted(mesh.overhang_areas.size()) , support_roof_drawn(mesh.overhang_areas.size(), Polygons()) , roof_tips_drawn(mesh.overhang_areas.size(), Polygons()) @@ -266,7 +266,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& { ClosestPolygonPoint middle_point(part[0], 0, part); middle_point = PolygonUtils::walk(middle_point, coord_t(length / 2)); - line.add(middle_point.location); + line.add(middle_point.location_); } else { diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 2ef08a0474..210c319c8d 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -3,6 +3,13 @@ #include "gcodeExport.h" +#include +#include +#include +#include + +#include + #include "Application.h" //To send layer view data. #include "ExtruderTrain.h" #include "PrintFeature.h" @@ -14,13 +21,6 @@ #include "utils/Date.h" #include "utils/string.h" // MMtoStream, PrecisionedDouble -#include - -#include -#include -#include -#include - namespace cura { @@ -249,18 +249,18 @@ std::string GCodeExport::getFileHeader( prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice->scene.mesh_groups.size() << new_line; - if (total_bounding_box.min.x > total_bounding_box.max.x) // We haven't encountered any movement (yet). This probably means we're command-line slicing. + if (total_bounding_box.min.x_ > total_bounding_box.max.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. { // Put some small default in there. total_bounding_box.min = Point3(0, 0, 0); total_bounding_box.max = Point3(10, 10, 10); } - prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box.min.x) << new_line; - prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box.min.y) << new_line; - prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box.min.z) << new_line; - prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box.max.x) << new_line; - prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box.max.y) << new_line; - prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box.max.z) << new_line; + prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box.min.x_) << new_line; + prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box.min.y_) << new_line; + prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box.min.z_) << new_line; + prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box.max.x_) << new_line; + prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box.max.y_) << new_line; + prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box.max.z_) << new_line; prefix << ";SLICE_UUID:" << slice_uuid_ << new_line; prefix << ";END_OF_HEADER" << new_line; break; @@ -302,12 +302,12 @@ std::string GCodeExport::getFileHeader( prefix << new_line; prefix << ";Layer height: " << Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height") << new_line; } - prefix << ";MINX:" << INT2MM(total_bounding_box.min.x) << new_line; - prefix << ";MINY:" << INT2MM(total_bounding_box.min.y) << new_line; - prefix << ";MINZ:" << INT2MM(total_bounding_box.min.z) << new_line; - prefix << ";MAXX:" << INT2MM(total_bounding_box.max.x) << new_line; - prefix << ";MAXY:" << INT2MM(total_bounding_box.max.y) << new_line; - prefix << ";MAXZ:" << INT2MM(total_bounding_box.max.z) << new_line; + prefix << ";MINX:" << INT2MM(total_bounding_box.min.x_) << new_line; + prefix << ";MINY:" << INT2MM(total_bounding_box.min.y_) << new_line; + prefix << ";MINZ:" << INT2MM(total_bounding_box.min.z_) << new_line; + prefix << ";MAXX:" << INT2MM(total_bounding_box.max.x_) << new_line; + prefix << ";MAXY:" << INT2MM(total_bounding_box.max.y_) << new_line; + prefix << ";MAXZ:" << INT2MM(total_bounding_box.max.z_) << new_line; prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name) << new_line; } @@ -392,12 +392,12 @@ Point3 GCodeExport::getPosition() const } Point GCodeExport::getPositionXY() const { - return Point(currentPosition.x, currentPosition.y); + return Point(currentPosition.x_, currentPosition.y_); } int GCodeExport::getPositionZ() const { - return currentPosition.z; + return currentPosition.z_; } int GCodeExport::getExtruderNr() const @@ -408,7 +408,7 @@ int GCodeExport::getExtruderNr() const void GCodeExport::setFilamentDiameter(const size_t extruder, const coord_t diameter) { const double r = INT2MM(diameter) / 2.0; - const double area = M_PI * r * r; + const double area = std::numbers::pi * r * r; extruder_attr[extruder].filament_area = area; } @@ -839,20 +839,20 @@ void GCodeExport::writeTravel(const Point3& p, const Velocity& speed) { if (flavor == EGCodeFlavor::BFB) { - writeMoveBFB(p.x, p.y, p.z + is_z_hopped, speed, 0.0, PrintFeatureType::MoveCombing); + writeMoveBFB(p.x_, p.y_, p.z_ + is_z_hopped, speed, 0.0, PrintFeatureType::MoveCombing); return; } - writeTravel(p.x, p.y, p.z + is_z_hopped, speed); + writeTravel(p.x_, p.y_, p.z_ + is_z_hopped, speed); } void GCodeExport::writeExtrusion(const Point3& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) { if (flavor == EGCodeFlavor::BFB) { - writeMoveBFB(p.x, p.y, p.z, speed, extrusion_mm3_per_mm, feature); + writeMoveBFB(p.x_, p.y_, p.z_, speed, extrusion_mm3_per_mm, feature); return; } - writeExtrusion(p.x, p.y, p.z, speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); + writeExtrusion(p.x_, p.y_, p.z_, speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); } void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature) @@ -918,14 +918,14 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo currentPosition = Point3(x, y, z); estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), speed, feature); } void GCodeExport::writeTravel(const coord_t x, const coord_t y, const coord_t z, const Velocity& speed) { - if (currentPosition.x == x && currentPosition.y == y && currentPosition.z == z) + if (currentPosition.x_ == x && currentPosition.y_ == y && currentPosition.z_ == z) { return; } @@ -955,7 +955,7 @@ void GCodeExport::writeExtrusion( const PrintFeatureType& feature, const bool update_extrusion_offset) { - if (currentPosition.x == x && currentPosition.y == y && currentPosition.z == z) + if (currentPosition.x_ == x && currentPosition.y_ == y && currentPosition.z_ == z) { return; } @@ -1036,7 +1036,7 @@ void GCodeExport::writeFXYZE(const Velocity& speed, const coord_t x, const coord total_bounding_box.include(Point3(gcode_pos.X, gcode_pos.Y, z)); *output_stream << " X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y }; - if (z != currentPosition.z) + if (z != currentPosition.z_) { *output_stream << " Z" << MMtoStream{ z }; } @@ -1071,7 +1071,7 @@ void GCodeExport::writeUnretractionAndPrime() currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; } estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), 25.0, PrintFeatureType::MoveRetraction); } @@ -1083,7 +1083,7 @@ void GCodeExport::writeUnretractionAndPrime() << extruder_attr[current_extruder].extruderCharacter << PrecisionedDouble{ 5, output_e } << new_line; currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), currentSpeed, PrintFeatureType::MoveRetraction); } @@ -1096,7 +1096,7 @@ void GCodeExport::writeUnretractionAndPrime() *output_stream << PrecisionedDouble{ 5, output_e } << new_line; currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), currentSpeed, PrintFeatureType::NoneType); } @@ -1178,7 +1178,7 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo *output_stream << new_line; // Assume default UM2 retraction settings. estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value + retraction_diff_e_amount)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value + retraction_diff_e_amount)), 25.0, PrintFeatureType::MoveRetraction); // TODO: hardcoded values! } @@ -1190,7 +1190,7 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo *output_stream << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " " << extr_attr.extruderCharacter << PrecisionedDouble{ 5, output_e } << new_line; currentSpeed = speed; estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x), INT2MM(currentPosition.y), INT2MM(currentPosition.z), eToMm(current_e_value)), + TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), currentSpeed, PrintFeatureType::MoveRetraction); extr_attr.last_retraction_prime_speed = config.primeSpeed; @@ -1227,7 +1227,7 @@ void GCodeExport::writeZhopEnd(Velocity speed /*= 0*/) speed = extruder.settings.get("speed_z_hop"); } is_z_hopped = 0; - currentPosition.z = current_layer_z; + currentPosition.z_ = current_layer_z; currentSpeed = speed; *output_stream << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " Z" << MMtoStream{ current_layer_z } << new_line; assert(speed > 0.0 && "Z hop speed should be positive."); @@ -1275,7 +1275,7 @@ void GCodeExport::startExtruder(const size_t new_extruder) Application::getInstance().communication->sendCurrentPosition(getPositionXY()); // Change the Z position so it gets re-written again. We do not know if the switch code modified the Z position. - currentPosition.z += 1; + currentPosition.z_ += 1; setExtruderFanNumber(new_extruder); } @@ -1353,7 +1353,7 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) if (! extruder_settings.get("extruder_prime_pos_abs")) { // currentPosition.z can be already z hopped - prime_pos += Point3(currentPosition.x, currentPosition.y, current_layer_z); + prime_pos += Point3(currentPosition.x_, currentPosition.y_, current_layer_z); } writeTravel(prime_pos, travel_speed); } @@ -1676,11 +1676,11 @@ void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) writeZhopStart(wipe_config.hop_amount, wipe_config.hop_speed); } - writeTravel(Point(wipe_config.brush_pos_x, currentPosition.y), wipe_config.move_speed); + writeTravel(Point(wipe_config.brush_pos_x, currentPosition.y_), wipe_config.move_speed); for (size_t i = 0; i < wipe_config.repeat_count; ++i) { - coord_t x = currentPosition.x + (i % 2 ? -wipe_config.move_distance : wipe_config.move_distance); - writeTravel(Point(x, currentPosition.y), wipe_config.move_speed); + coord_t x = currentPosition.x_ + (i % 2 ? -wipe_config.move_distance : wipe_config.move_distance); + writeTravel(Point(x, currentPosition.y_), wipe_config.move_speed); } writeTravel(prev_position, wipe_config.move_speed); diff --git a/src/infill.cpp b/src/infill.cpp index 6da3c25c4f..645c3f653e 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -590,7 +590,7 @@ coord_t Infill::getShiftOffsetFromInfillOriginAndRotation(const double& infill_r { if (infill_origin.X != 0 || infill_origin.Y != 0) { - const double rotation_rads = infill_rotation * M_PI / 180; + const double rotation_rads = infill_rotation * std::numbers::pi / 180; return infill_origin.X * std::cos(rotation_rads) - infill_origin.Y * std::sin(rotation_rads); } return 0; diff --git a/src/infill/GyroidInfill.cpp b/src/infill/GyroidInfill.cpp index d05767623a..861d2b95ae 100644 --- a/src/infill/GyroidInfill.cpp +++ b/src/infill/GyroidInfill.cpp @@ -30,7 +30,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za step = pitch / num_steps; } pitch = step * num_steps; // recalculate to avoid precision errors - const double z_rads = 2 * M_PI * z / pitch; + const double z_rads = 2 * std::numbers::pi * z / pitch; const double cos_z = std::cos(z_rads); const double sin_z = std::sin(z_rads); std::vector odd_line_coords; @@ -42,19 +42,19 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za if (std::abs(sin_z) <= std::abs(cos_z)) { // "vertical" lines - const double phase_offset = ((cos_z < 0) ? M_PI : 0) + M_PI; + const double phase_offset = ((cos_z < 0) ? std::numbers::pi : 0) + std::numbers::pi; for (coord_t y = 0; y < pitch; y += step) { - const double y_rads = 2 * M_PI * y / pitch; + const double y_rads = 2 * std::numbers::pi * y / pitch; const double a = cos_z; const double b = std::sin(y_rads + phase_offset); const double odd_c = sin_z * std::cos(y_rads + phase_offset); - const double even_c = sin_z * std::cos(y_rads + phase_offset + M_PI); + const double even_c = sin_z * std::cos(y_rads + phase_offset + std::numbers::pi); const double h = std::sqrt(a * a + b * b); - const double odd_x_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) - M_PI/2; - const double even_x_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) - M_PI/2; - odd_line_coords.push_back(odd_x_rads / M_PI * pitch); - even_line_coords.push_back(even_x_rads / M_PI * pitch); + const double odd_x_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) - std::numbers::pi/2; + const double even_x_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) - std::numbers::pi/2; + odd_line_coords.push_back(odd_x_rads / std::numbers::pi * pitch); + even_line_coords.push_back(even_x_rads / std::numbers::pi * pitch); } const unsigned num_coords = odd_line_coords.size(); unsigned num_columns = 0; @@ -134,19 +134,19 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za else { // "horizontal" lines - const double phase_offset = (sin_z < 0) ? M_PI : 0; + const double phase_offset = (sin_z < 0) ? std::numbers::pi : 0; for (coord_t x = 0; x < pitch; x += step) { - const double x_rads = 2 * M_PI * x / pitch; + const double x_rads = 2 * std::numbers::pi * x / pitch; const double a = sin_z; const double b = std::cos(x_rads + phase_offset); - const double odd_c = cos_z * std::sin(x_rads + phase_offset + M_PI); + const double odd_c = cos_z * std::sin(x_rads + phase_offset + std::numbers::pi); const double even_c = cos_z * std::sin(x_rads + phase_offset); const double h = std::sqrt(a * a + b * b); - const double odd_y_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) + M_PI/2; - const double even_y_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) + M_PI/2; - odd_line_coords.push_back(odd_y_rads / M_PI * pitch); - even_line_coords.push_back(even_y_rads / M_PI * pitch); + const double odd_y_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) + std::numbers::pi/2; + const double even_y_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) + std::numbers::pi/2; + odd_line_coords.push_back(odd_y_rads / std::numbers::pi * pitch); + even_line_coords.push_back(even_y_rads / std::numbers::pi * pitch); } const unsigned num_coords = odd_line_coords.size(); unsigned num_rows = 0; diff --git a/src/infill/ImageBasedDensityProvider.cpp b/src/infill/ImageBasedDensityProvider.cpp index 0bbb6532f1..83e53e018f 100644 --- a/src/infill/ImageBasedDensityProvider.cpp +++ b/src/infill/ImageBasedDensityProvider.cpp @@ -3,10 +3,12 @@ #define STBI_FAILURE_USERMSG // enable user friendly bug messages for STB lib #define STB_IMAGE_IMPLEMENTATION // needed in order to enable the implementation of libs/std_image.h -#include +#include "infill/ImageBasedDensityProvider.h" + #include -#include "infill/ImageBasedDensityProvider.h" +#include + #include "infill/SierpinskiFill.h" #include "utils/AABB3D.h" @@ -35,17 +37,17 @@ ImageBasedDensityProvider::ImageBasedDensityProvider(const std::string filename, { // compute aabb Point middle = model_aabb.getMiddle(); Point model_aabb_size = model_aabb.max - model_aabb.min; - Point image_size2 = Point(image_size.x, image_size.y); + Point image_size2 = Point(image_size.x_, image_size.y_); float aabb_aspect_ratio = float(model_aabb_size.X) / float(model_aabb_size.Y); - float image_aspect_ratio = float(image_size.x) / float(image_size.y); + float image_aspect_ratio = float(image_size.x_) / float(image_size.y_); Point aabb_size; if (image_aspect_ratio < aabb_aspect_ratio) { - aabb_size = image_size2 * model_aabb_size.X / image_size.x; + aabb_size = image_size2 * model_aabb_size.X / image_size.x_; } else { - aabb_size = image_size2 * model_aabb_size.Y / image_size.y; + aabb_size = image_size2 * model_aabb_size.Y / image_size.y_; } print_aabb = AABB(middle - aabb_size / 2, middle + aabb_size / 2); assert(aabb_size.X >= model_aabb_size.X && aabb_size.Y >= model_aabb_size.Y); @@ -63,18 +65,18 @@ ImageBasedDensityProvider::~ImageBasedDensityProvider() float ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const { - AABB query_box(Point(query_cube.min.x, query_cube.min.y), Point(query_cube.max.x, query_cube.max.y)); - Point img_min = (query_box.min - print_aabb.min - Point(1, 1)) * image_size.x / (print_aabb.max.X - print_aabb.min.X); - Point img_max = (query_box.max - print_aabb.min + Point(1, 1)) * image_size.y / (print_aabb.max.Y - print_aabb.min.Y); + AABB query_box(Point(query_cube.min.x_, query_cube.min.y_), Point(query_cube.max.x_, query_cube.max.y_)); + Point img_min = (query_box.min - print_aabb.min - Point(1, 1)) * image_size.x_ / (print_aabb.max.X - print_aabb.min.X); + Point img_max = (query_box.max - print_aabb.min + Point(1, 1)) * image_size.y_ / (print_aabb.max.Y - print_aabb.min.Y); long total_lightness = 0; int value_count = 0; - for (int x = std::max((coord_t)0, img_min.X); x <= std::min((coord_t)image_size.x - 1, img_max.X); x++) + for (int x = std::max((coord_t)0, img_min.X); x <= std::min((coord_t)image_size.x_ - 1, img_max.X); x++) { - for (int y = std::max((coord_t)0, img_min.Y); y <= std::min((coord_t)image_size.y - 1, img_max.Y); y++) + for (int y = std::max((coord_t)0, img_min.Y); y <= std::min((coord_t)image_size.y_ - 1, img_max.Y); y++) { - for (int z = 0; z < image_size.z; z++) + for (int z = 0; z < image_size.z_; z++) { - total_lightness += image[((image_size.y - 1 - y) * image_size.x + x) * image_size.z + z]; + total_lightness += image[((image_size.y_ - 1 - y) * image_size.x_ + x) * image_size.z_ + z]; value_count++; } } @@ -82,12 +84,12 @@ float ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const if (value_count == 0) { // triangle falls outside of image or in between pixels, so we return the closest pixel Point closest_pixel = (img_min + img_max) / 2; - closest_pixel.X = std::max((coord_t)0, std::min((coord_t)image_size.x - 1, (coord_t)closest_pixel.X)); - closest_pixel.Y = std::max((coord_t)0, std::min((coord_t)image_size.y - 1, (coord_t)closest_pixel.Y)); + closest_pixel.X = std::max((coord_t)0, std::min((coord_t)image_size.x_ - 1, (coord_t)closest_pixel.X)); + closest_pixel.Y = std::max((coord_t)0, std::min((coord_t)image_size.y_ - 1, (coord_t)closest_pixel.Y)); assert(total_lightness == 0); - for (int z = 0; z < image_size.z; z++) + for (int z = 0; z < image_size.z_; z++) { - total_lightness += image[((image_size.y - 1 - closest_pixel.Y) * image_size.x + closest_pixel.X) * image_size.z + z]; + total_lightness += image[((image_size.y_ - 1 - closest_pixel.Y) * image_size.x_ + closest_pixel.X) * image_size.z_ + z]; value_count++; } } diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index b345493044..d6b45fc86f 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -42,12 +42,13 @@ SierpinskiFill::SierpinskiFill(const DensityProvider& density_provider, const AA { if (node->getValueError() < -allowed_length_error) { - spdlog::error("Node is subdivided without the appropriate value! value_error: {} from base {} el: {} er: {}, while the realized_length = {}", - node->getValueError(), - node->requested_length, - node->error_left, - node->error_right, - node->realized_length); + spdlog::error( + "Node is subdivided without the appropriate value! value_error: {} from base {} el: {} er: {}, while the realized_length = {}", + node->getValueError(), + node->requested_length, + node->error_left, + node->error_right, + node->realized_length); assert(false); } } @@ -296,7 +297,8 @@ bool SierpinskiFill::bubbleUpConstraintErrors() } -std::list::iterator SierpinskiFill::subdivide(std::list::iterator begin, std::list::iterator end, bool redistribute_errors) +std::list::iterator + SierpinskiFill::subdivide(std::list::iterator begin, std::list::iterator end, bool redistribute_errors) { if (redistribute_errors && deep_debug_checking) debugCheck(); @@ -429,7 +431,13 @@ void SierpinskiFill::balanceErrors(std::listgetValueError() < nodes[b]->getValueError(); }); + std::sort( + order.begin(), + order.end(), + [&nodes](int a, int b) + { + return nodes[a]->getValueError() < nodes[b]->getValueError(); + }); // add error to children with too low value float added = 0; @@ -573,7 +581,12 @@ void SierpinskiFill::diffuseError() error += nodal_value - triangle.realized_length; } } - spdlog::debug("pair_constrained_nodes: {}, constrained_nodes: {}, unconstrained_nodes: {}, subdivided_nodes: {}", pair_constrained_nodes, constrained_nodes, unconstrained_nodes, subdivided_nodes); + spdlog::debug( + "pair_constrained_nodes: {}, constrained_nodes: {}, unconstrained_nodes: {}, subdivided_nodes: {}", + pair_constrained_nodes, + constrained_nodes, + unconstrained_nodes, + subdivided_nodes); } bool SierpinskiFill::isConstrainedBackward(std::list::iterator it) @@ -761,7 +774,7 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord // \ / ==> \____/ // \ /}\ ^^^^--pocket_size / 2 // \/} / pocket_size_side - coord_t pocket_size_side = pocket_size * sqrt2 / 2; + coord_t pocket_size_side = pocket_size * std::numbers::sqrt2 / 2; Polygon pocketed; pocketed.reserve(ret.size() * 3 / 2); @@ -778,7 +791,8 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord bool is_straight_corner = prod < sqrt(vSize(v0) * vSize(v1)) * min_dist_to_side; // allow for rounding errors of up to min_dist_to_side if (is_straight_corner) { - coord_t pocket_rounding = std::min(std::min(pocket_size_side, vSize(v0) / 3), vSize(v1) / 3); // a third so that if a line segment is shortened on both sides the middle remains + coord_t pocket_rounding + = std::min(std::min(pocket_size_side, vSize(v0) / 3), vSize(v1) / 3); // a third so that if a line segment is shortened on both sides the middle remains pocketed.add(p1 + normal(v0, pocket_rounding)); pocketed.add(p1 + normal(v1, pocket_rounding)); } diff --git a/src/infill/SierpinskiFillProvider.cpp b/src/infill/SierpinskiFillProvider.cpp index 908c482d7e..b659b48fe9 100644 --- a/src/infill/SierpinskiFillProvider.cpp +++ b/src/infill/SierpinskiFillProvider.cpp @@ -1,10 +1,11 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "infill/SierpinskiFillProvider.h" + #include #include "infill/ImageBasedDensityProvider.h" -#include "infill/SierpinskiFillProvider.h" #include "infill/UniformDensityProvider.h" #include "utils/AABB3D.h" #include "utils/math.h" @@ -75,7 +76,7 @@ SierpinskiFillProvider::FractalConfig SierpinskiFillProvider::getFractalConfig(c aabb_size *= 2; depth += 2; } - const float half_sqrt2 = .5 * sqrt2; + const float half_sqrt2 = .5 * std::numbers::pi; if (depth > 0 && aabb_size * half_sqrt2 >= max_side_length) { aabb_size *= half_sqrt2; diff --git a/src/infill/SubDivCube.cpp b/src/infill/SubDivCube.cpp index d81b92d0e0..1d35ba0140 100644 --- a/src/infill/SubDivCube.cpp +++ b/src/infill/SubDivCube.cpp @@ -3,13 +3,13 @@ #include "infill/SubDivCube.h" +#include + #include "settings/types/Angle.h" //For the infill angle. #include "sliceDataStorage.h" #include "utils/math.h" #include "utils/polygonUtils.h" -#include - #define ONE_OVER_SQRT_2 0.7071067811865475244008443621048490392848359376884740 // 1 / sqrt(2) #define ONE_OVER_SQRT_3 0.577350269189625764509148780501957455647601751270126876018 // 1 / sqrt(3) #define ONE_OVER_SQRT_6 0.408248290463863016366214012450981898660991246776111688072 // 1 / sqrt(6) @@ -107,7 +107,7 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona { CubeProperties cube_properties = cube_properties_per_recursion_step[depth]; - const coord_t z_diff = std::abs(z - center.z); //!< the difference between the cube center and the target layer. + const coord_t z_diff = std::abs(z - center.z_); //!< the difference between the cube center and the target layer. if (z_diff > cube_properties.height / 2) //!< this cube does not touch the target layer. Early exit. { return; @@ -118,16 +118,16 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona Point a, b; //!< absolute coordinates of line endpoints relative_a.X = (cube_properties.square_height / 2) * (cube_properties.max_draw_z_diff - z_diff) / cube_properties.max_draw_z_diff; relative_b.X = -relative_a.X; - relative_a.Y = cube_properties.max_line_offset - ((z - (center.z - cube_properties.max_draw_z_diff)) * ONE_OVER_SQRT_2); + relative_a.Y = cube_properties.max_line_offset - ((z - (center.z_ - cube_properties.max_draw_z_diff)) * ONE_OVER_SQRT_2); relative_b.Y = relative_a.Y; rotatePointInitial(relative_a); rotatePointInitial(relative_b); for (int dir_idx = 0; dir_idx < 3; dir_idx++) //!< draw the line, then rotate 120 degrees. { - a.X = center.x + relative_a.X; - a.Y = center.y + relative_a.Y; - b.X = center.x + relative_b.X; - b.Y = center.y + relative_b.Y; + a.X = center.x_ + relative_a.X; + a.Y = center.y_ + relative_a.Y; + b.X = center.x_ + relative_b.X; + b.Y = center.y_ + relative_b.Y; addLineAndCombine(directional_line_groups[dir_idx], a, b); if (dir_idx < 2) { @@ -193,13 +193,13 @@ bool SubDivCube::isValidSubdivision(SliceMeshStorage& mesh, Point3& center, coor int inside; Ratio part_dist; // what percentage of the radius the target layer is away from the center along the z axis. 0 - 1 const coord_t layer_height = mesh.settings.get("layer_height"); - int bottom_layer = (center.z - radius) / layer_height; - int top_layer = (center.z + radius) / layer_height; + int bottom_layer = (center.z_ - radius) / layer_height; + int top_layer = (center.z_ + radius) / layer_height; for (int test_layer = bottom_layer; test_layer <= top_layer; test_layer += 3) // steps of three. Low-hanging speed gain. { - part_dist = Ratio{ static_cast(test_layer * layer_height - center.z) } / radius; + part_dist = Ratio{ static_cast(test_layer * layer_height - center.z_) } / radius; sphere_slice_radius2 = radius * radius * (1.0 - (part_dist * part_dist)); - Point loc(center.x, center.y); + Point loc(center.x_, center.y_); inside = distanceFromPointToMesh(mesh, test_layer, loc, &distance2); if (inside == 1) @@ -238,7 +238,7 @@ coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerI Point centerpoint = location; bool inside = collide.inside(centerpoint); ClosestPolygonPoint border_point = PolygonUtils::moveInside2(collide, centerpoint); - Point diff = border_point.location - location; + Point diff = border_point.location_ - location; *distance2 = vSize2(diff); if (inside) { diff --git a/src/mesh.cpp b/src/mesh.cpp index 9bacfcf1d1..eba67cf02c 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -1,9 +1,10 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "mesh.h" + #include -#include "mesh.h" #include "utils/floatpoint.h" namespace cura @@ -16,14 +17,21 @@ const int vertex_meld_distance = MM2INT(0.03); */ static inline uint32_t pointHash(const Point3& p) { - return ((p.x + vertex_meld_distance / 2) / vertex_meld_distance) ^ (((p.y + vertex_meld_distance / 2) / vertex_meld_distance) << 10) ^ (((p.z + vertex_meld_distance / 2) / vertex_meld_distance) << 20); + return ((p.x_ + vertex_meld_distance / 2) / vertex_meld_distance) ^ (((p.y_ + vertex_meld_distance / 2) / vertex_meld_distance) << 10) + ^ (((p.z_ + vertex_meld_distance / 2) / vertex_meld_distance) << 20); } -Mesh::Mesh(Settings& parent) : settings(parent), has_disconnected_faces(false), has_overlapping_faces(false) +Mesh::Mesh(Settings& parent) + : settings(parent) + , has_disconnected_faces(false) + , has_overlapping_faces(false) { } -Mesh::Mesh() : settings(), has_disconnected_faces(false), has_overlapping_faces(false) +Mesh::Mesh() + : settings() + , has_disconnected_faces(false) + , has_overlapping_faces(false) { } @@ -226,7 +234,7 @@ int Mesh::getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVe double det = n * n0.cross(n1); double angle = std::atan2(det, dot); if (angle < 0) - angle += 2 * M_PI; // 0 <= angle < 2* M_PI + angle += 2 * std::numbers::pi; // 0 <= angle < 2* std::numbers::pi if (angle == 0) { diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index eda5d5bc1d..d98ec095b6 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -3,6 +3,10 @@ #include "pathPlanning/Comb.h" +#include +#include // function +#include + #include "Application.h" #include "ExtruderTrain.h" #include "Slice.h" @@ -13,10 +17,6 @@ #include "utils/SVG.h" #include "utils/linearAlg2D.h" -#include -#include // function -#include - namespace cura { @@ -435,7 +435,7 @@ bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* } else { - inside_poly = cpp.poly_idx; + inside_poly = cpp.poly_idx_; return true; } } @@ -498,7 +498,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons close_towards_start_penalty_function); if (crossing_1_in_cp.isValid()) { - dest_crossing_poly = crossing_1_in_cp.poly; + dest_crossing_poly = crossing_1_in_cp.poly_; in_or_mid = result; } else @@ -569,14 +569,14 @@ std::shared_ptr> Comb::Cross bool seen_close_enough_connection = false; for (std::pair& crossing_candidate : crossing_out_candidates) { - const coord_t crossing_dist2 = vSize2(crossing_candidate.first.location - crossing_candidate.second.location); + const coord_t crossing_dist2 = vSize2(crossing_candidate.first.location_ - crossing_candidate.second.location_); if (crossing_dist2 > comber.max_crossing_dist2 * 2) { // preliminary filtering continue; } - const coord_t dist_to_start = vSize(crossing_candidate.second.location - estimated_start); // use outside location, so that the crossing direction is taken into account - const coord_t dist_to_end = vSize(crossing_candidate.second.location - estimated_end); + const coord_t dist_to_start = vSize(crossing_candidate.second.location_ - estimated_start); // use outside location, so that the crossing direction is taken into account + const coord_t dist_to_end = vSize(crossing_candidate.second.location_ - estimated_end); const coord_t detour_dist = dist_to_start + dist_to_end; const coord_t detour_score = crossing_dist2 + detour_dist * detour_dist / 1000; // prefer a closest connection over a detour // The detour distance is generally large compared to the crossing distance. @@ -607,7 +607,7 @@ std::shared_ptr> Comb::Cross if (best_crossing_dist2 > comber.max_crossing_dist2) { // find closer point on line segments, rather than moving between vertices of the polygons only PolygonUtils::walkToNearestSmallestConnection(*best_in, *best_out); - best_crossing_dist2 = vSize2(best_in->location - best_out->location); + best_crossing_dist2 = vSize2(best_in->location_ - best_out->location_); if (best_crossing_dist2 > comber.max_crossing_dist2) { return std::shared_ptr>(); diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index d70332514d..e2ebe6e37b 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -1,13 +1,14 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "settings/AdaptiveLayerHeights.h" + #include #include #include #include "Application.h" #include "Slice.h" -#include "settings/AdaptiveLayerHeights.h" #include "settings/EnumSettings.h" #include "settings/types/Angle.h" #include "utils/floatpoint.h" @@ -15,7 +16,8 @@ namespace cura { -AdaptiveLayer::AdaptiveLayer(const coord_t layer_height) : layer_height{ layer_height } +AdaptiveLayer::AdaptiveLayer(const coord_t layer_height) + : layer_height{ layer_height } { } @@ -62,7 +64,7 @@ void AdaptiveLayerHeights::calculateLayers() Settings const& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; auto slicing_tolerance = mesh_group_settings.get("slicing_tolerance"); std::vector triangles_of_interest; - const coord_t model_max_z = meshgroup->max().z; + const coord_t model_max_z = meshgroup->max().z_; coord_t z_level = 0; coord_t previous_layer_height = 0; @@ -218,7 +220,7 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() // prevent flat surfaces from influencing the algorithm if (z_angle == 0) { - z_angle = M_PI; + z_angle = std::numbers::pi; } face_min_z_values.push_back(MM2INT(min_z)); diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index 74ec0d3606..22cf7d1c8b 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -151,7 +151,7 @@ coord_t Settings::get(const std::string& key) const template<> AngleRadians Settings::get(const std::string& key) const { - return get(key) * M_PI / 180; // The settings are all in degrees, but we need to interpret them as radians. + return get(key) * std::numbers::pi / 180; // The settings are all in degrees, but we need to interpret them as radians. } template<> diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 0dddecb5b7..ff69b9d009 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -237,7 +237,7 @@ Point SliceMeshStorage::getZSeamHint() const if (settings.get("z_seam_relative")) { Point3 middle = bounding_box.getMiddle(); - pos += Point(middle.x, middle.y); + pos += Point(middle.x_, middle.y_); } return pos; } @@ -542,13 +542,13 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const case BuildPlateShape::ELLIPTIC: { // Construct an ellipse to approximate the build volume. - const coord_t width = machine_size.max.x - machine_size.min.x; - const coord_t depth = machine_size.max.y - machine_size.min.y; + const coord_t width = machine_size.max.x_ - machine_size.min.x_; + const coord_t depth = machine_size.max.y_ - machine_size.min.y_; constexpr unsigned int circle_resolution = 50; for (unsigned int i = 0; i < circle_resolution; i++) { - const double angle = M_PI * 2 * i / circle_resolution; - outline.emplace_back(machine_size.getMiddle().x + std::cos(angle) * width / 2, machine_size.getMiddle().y + std::sin(angle) * depth / 2); + const double angle = std::numbers::pi * 2 * i / circle_resolution; + outline.emplace_back(machine_size.getMiddle().x_ + std::cos(angle) * width / 2, machine_size.getMiddle().y_ + std::sin(angle) * depth / 2); } break; } @@ -569,7 +569,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { for (Point& p : poly) { - p = Point(machine_size.max.x / 2 + p.X, machine_size.max.y / 2 - p.Y); + p = Point(machine_size.max.x_ / 2 + p.X, machine_size.max.y_ / 2 - p.Y); } } } @@ -596,7 +596,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); prime_pos -= translation; Polygons prime_polygons; - prime_polygons.emplace_back(PolygonUtils::makeCircle(prime_pos, prime_clearance, M_PI / 32)); + prime_polygons.emplace_back(PolygonUtils::makeCircle(prime_pos, prime_clearance, std::numbers::pi / 32)); disallowed_areas = disallowed_areas.unionPolygons(prime_polygons); } diff --git a/src/slicer.cpp b/src/slicer.cpp index 2758d133f0..94dc2aeb64 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -544,11 +544,7 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) { unsigned int best_polyline_1_idx = -1; unsigned int best_polyline_2_idx = -1; - GapCloserResult best_result; - best_result.len = POINT_MAX; - best_result.polygonIdx = -1; - best_result.pointIdxA = -1; - best_result.pointIdxB = -1; + std::optional best_result; for (unsigned int polyline_1_idx = 0; polyline_1_idx < open_polylines.size(); polyline_1_idx++) { @@ -557,8 +553,8 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) continue; { - GapCloserResult res = findPolygonGapCloser(polyline_1[0], polyline_1.back()); - if (res.len > 0 && res.len < best_result.len) + std::optional res = findPolygonGapCloser(polyline_1[0], polyline_1.back()); + if (res && (! best_result || res->len < best_result->len)) { best_polyline_1_idx = polyline_1_idx; best_polyline_2_idx = polyline_1_idx; @@ -572,8 +568,8 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) if (polyline_2.size() < 1 || polyline_1_idx == polyline_2_idx) continue; - GapCloserResult res = findPolygonGapCloser(polyline_1[0], polyline_2.back()); - if (res.len > 0 && res.len < best_result.len) + std::optional res = findPolygonGapCloser(polyline_1[0], polyline_2.back()); + if (res && (! best_result || res->len < best_result->len)) { best_polyline_1_idx = polyline_1_idx; best_polyline_2_idx = polyline_2_idx; @@ -582,20 +578,20 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) } } - if (best_result.len < POINT_MAX) + if (best_result) { if (best_polyline_1_idx == best_polyline_2_idx) { - if (best_result.pointIdxA == best_result.pointIdxB) + if (best_result->pointIdxA == best_result->pointIdxB) { polygons.add(open_polylines[best_polyline_1_idx]); open_polylines[best_polyline_1_idx].clear(); } - else if (best_result.AtoB) + else if (best_result->AtoB) { PolygonRef poly = polygons.newPoly(); - for (unsigned int j = best_result.pointIdxA; j != best_result.pointIdxB; j = (j + 1) % polygons[best_result.polygonIdx].size()) - poly.add(polygons[best_result.polygonIdx][j]); + for (unsigned int j = best_result->pointIdxA; j != best_result->pointIdxB; j = (j + 1) % polygons[best_result->polygonIdx].size()) + poly.add(polygons[best_result->polygonIdx][j]); for (unsigned int j = open_polylines[best_polyline_1_idx].size() - 1; int(j) >= 0; j--) poly.add(open_polylines[best_polyline_1_idx][j]); open_polylines[best_polyline_1_idx].clear(); @@ -604,24 +600,24 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) { unsigned int n = polygons.size(); polygons.add(open_polylines[best_polyline_1_idx]); - for (unsigned int j = best_result.pointIdxB; j != best_result.pointIdxA; j = (j + 1) % polygons[best_result.polygonIdx].size()) - polygons[n].add(polygons[best_result.polygonIdx][j]); + for (unsigned int j = best_result->pointIdxB; j != best_result->pointIdxA; j = (j + 1) % polygons[best_result->polygonIdx].size()) + polygons[n].add(polygons[best_result->polygonIdx][j]); open_polylines[best_polyline_1_idx].clear(); } } else { - if (best_result.pointIdxA == best_result.pointIdxB) + if (best_result->pointIdxA == best_result->pointIdxB) { for (unsigned int n = 0; n < open_polylines[best_polyline_1_idx].size(); n++) open_polylines[best_polyline_2_idx].add(open_polylines[best_polyline_1_idx][n]); open_polylines[best_polyline_1_idx].clear(); } - else if (best_result.AtoB) + else if (best_result->AtoB) { Polygon poly; - for (unsigned int n = best_result.pointIdxA; n != best_result.pointIdxB; n = (n + 1) % polygons[best_result.polygonIdx].size()) - poly.add(polygons[best_result.polygonIdx][n]); + for (unsigned int n = best_result->pointIdxA; n != best_result->pointIdxB; n = (n + 1) % polygons[best_result->polygonIdx].size()) + poly.add(polygons[best_result->polygonIdx][n]); for (unsigned int n = poly.size() - 1; int(n) >= 0; n--) open_polylines[best_polyline_2_idx].add(poly[n]); for (unsigned int n = 0; n < open_polylines[best_polyline_1_idx].size(); n++) @@ -630,8 +626,8 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) } else { - for (unsigned int n = best_result.pointIdxB; n != best_result.pointIdxA; n = (n + 1) % polygons[best_result.polygonIdx].size()) - open_polylines[best_polyline_2_idx].add(polygons[best_result.polygonIdx][n]); + for (unsigned int n = best_result->pointIdxB; n != best_result->pointIdxA; n = (n + 1) % polygons[best_result->polygonIdx].size()) + open_polylines[best_polyline_2_idx].add(polygons[best_result->polygonIdx][n]); for (unsigned int n = open_polylines[best_polyline_1_idx].size() - 1; int(n) >= 0; n--) open_polylines[best_polyline_2_idx].add(open_polylines[best_polyline_1_idx][n]); open_polylines[best_polyline_1_idx].clear(); @@ -645,19 +641,19 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) } } -GapCloserResult SlicerLayer::findPolygonGapCloser(Point ip0, Point ip1) +std::optional SlicerLayer::findPolygonGapCloser(Point ip0, Point ip1) { - GapCloserResult ret; - ClosePolygonResult c1 = findPolygonPointClosestTo(ip0); - ClosePolygonResult c2 = findPolygonPointClosestTo(ip1); - if (c1.polygonIdx < 0 || c1.polygonIdx != c2.polygonIdx) + std::optional c1 = findPolygonPointClosestTo(ip0); + std::optional c2 = findPolygonPointClosestTo(ip1); + if (! c1 || ! c2 || c1->polygonIdx != c2->polygonIdx) { - ret.len = -1; - return ret; + return std::nullopt; } - ret.polygonIdx = c1.polygonIdx; - ret.pointIdxA = c1.pointIdx; - ret.pointIdxB = c2.pointIdx; + + GapCloserResult ret; + ret.polygonIdx = c1->polygonIdx; + ret.pointIdxA = c1->pointIdx; + ret.pointIdxB = c2->pointIdx; ret.AtoB = true; if (ret.pointIdxA == ret.pointIdxB) @@ -702,13 +698,12 @@ GapCloserResult SlicerLayer::findPolygonGapCloser(Point ip0, Point ip1) return ret; } -ClosePolygonResult SlicerLayer::findPolygonPointClosestTo(Point input) +std::optional SlicerLayer::findPolygonPointClosestTo(Point input) { - ClosePolygonResult ret; - for (unsigned int n = 0; n < polygons.size(); n++) + for (size_t n = 0; n < polygons.size(); n++) { Point p0 = polygons[n][polygons[n].size() - 1]; - for (unsigned int i = 0; i < polygons[n].size(); i++) + for (size_t i = 0; i < polygons[n].size(); i++) { Point p1 = polygons[n][i]; @@ -723,6 +718,7 @@ ClosePolygonResult SlicerLayer::findPolygonPointClosestTo(Point input) Point q = p0 + pDiff * distOnLine / lineLength; if (shorterThen(q - input, MM2INT(0.1))) { + ClosePolygonResult ret; ret.polygonIdx = n; ret.pointIdx = i; return ret; @@ -732,8 +728,8 @@ ClosePolygonResult SlicerLayer::findPolygonPointClosestTo(Point input) p0 = p1; } } - ret.polygonIdx = -1; - return ret; + + return std::nullopt; } void SlicerLayer::makePolygons(const Mesh* mesh) @@ -873,9 +869,9 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector(p0.z == z) * -static_cast(p0.z < 1); - p1.z += static_cast(p1.z == z) * -static_cast(p1.z < 1); - p2.z += static_cast(p2.z == z) * -static_cast(p2.z < 1); + p0.z_ += static_cast(p0.z_ == z) * -static_cast(p0.z_ < 1); + p1.z_ += static_cast(p1.z_ == z) * -static_cast(p1.z_ < 1); + p2.z_ += static_cast(p2.z_ == z) * -static_cast(p2.z_ < 1); } SlicerSegment s; @@ -909,49 +905,49 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector z && p2.z > z) // 1_______2 + if (p0.z_ < z && p1.z_ > z && p2.z_ > z) // 1_______2 { // \ / s = project2D(p0, p2, p1, z); //------------- z end_edge_idx = 0; // \ / } // 0 - else if (p0.z > z && p1.z <= z && p2.z <= z) // 0 + else if (p0.z_ > z && p1.z_ <= z && p2.z_ <= z) // 0 { // / \ . s = project2D(p0, p1, p2, z); //------------- z end_edge_idx = 2; // / \ . - if (p2.z == z) // 1_______2 + if (p2.z_ == z) // 1_______2 { s.endVertex = &v2; } } - else if (p1.z < z && p0.z > z && p2.z > z) // 0_______2 + else if (p1.z_ < z && p0.z_ > z && p2.z_ > z) // 0_______2 { // \ / s = project2D(p1, p0, p2, z); //------------- z end_edge_idx = 1; // \ / } // 1 - else if (p1.z > z && p0.z <= z && p2.z <= z) // 1 + else if (p1.z_ > z && p0.z_ <= z && p2.z_ <= z) // 1 { // / \ . s = project2D(p1, p2, p0, z); //------------- z end_edge_idx = 0; // / \ . - if (p0.z == z) // 0_______2 + if (p0.z_ == z) // 0_______2 { s.endVertex = &v0; } } - else if (p2.z < z && p1.z > z && p0.z > z) // 0_______1 + else if (p2.z_ < z && p1.z_ > z && p0.z_ > z) // 0_______1 { // \ / s = project2D(p2, p1, p0, z); //------------- z end_edge_idx = 2; // \ / } // 2 - else if (p2.z > z && p1.z <= z && p0.z <= z) // 2 + else if (p2.z_ > z && p1.z_ <= z && p0.z_ <= z) // 2 { // / \ . s = project2D(p2, p0, p1, z); //------------- z end_edge_idx = 1; // / \ . - if (p1.z == z) // 0_______1 + if (p1.z_ == z) // 0_______1 { s.endVertex = &v1; } @@ -1131,24 +1127,24 @@ std::vector> Slicer::buildZHeightsForFaces(const Mes Point3 p2 = v2.p; // find the minimum and maximum z point - int32_t minZ = p0.z; - if (p1.z < minZ) + int32_t minZ = p0.z_; + if (p1.z_ < minZ) { - minZ = p1.z; + minZ = p1.z_; } - if (p2.z < minZ) + if (p2.z_ < minZ) { - minZ = p2.z; + minZ = p2.z_; } - int32_t maxZ = p0.z; - if (p1.z > maxZ) + int32_t maxZ = p0.z_; + if (p1.z_ > maxZ) { - maxZ = p1.z; + maxZ = p1.z_; } - if (p2.z > maxZ) + if (p2.z_ > maxZ) { - maxZ = p2.z; + maxZ = p2.z_; } zHeights.emplace_back(std::make_pair(minZ, maxZ)); @@ -1161,10 +1157,10 @@ SlicerSegment Slicer::project2D(const Point3& p0, const Point3& p1, const Point3 { SlicerSegment seg; - seg.start.X = interpolate(z, p0.z, p1.z, p0.x, p1.x); - seg.start.Y = interpolate(z, p0.z, p1.z, p0.y, p1.y); - seg.end.X = interpolate(z, p0.z, p2.z, p0.x, p2.x); - seg.end.Y = interpolate(z, p0.z, p2.z, p0.y, p2.y); + seg.start.X = interpolate(z, p0.z_, p1.z_, p0.x_, p1.x_); + seg.start.Y = interpolate(z, p0.z_, p1.z_, p0.y_, p1.y_); + seg.end.X = interpolate(z, p0.z_, p2.z_, p0.x_, p2.x_); + seg.end.Y = interpolate(z, p0.z_, p2.z_, p0.y_, p2.y_); return seg; } diff --git a/src/support.cpp b/src/support.cpp index 6bae947fa2..233c8ab499 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -485,16 +485,16 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp case BuildPlateShape::ELLIPTIC: { // Construct an ellipse to approximate the build volume. - const coord_t width = storage.machine_size.max.x - storage.machine_size.min.x; - const coord_t depth = storage.machine_size.max.y - storage.machine_size.min.y; + const coord_t width = storage.machine_size.max.x_ - storage.machine_size.min.x_; + const coord_t depth = storage.machine_size.max.y_ - storage.machine_size.min.y_; Polygon border_circle; constexpr unsigned int circle_resolution = 50; for (unsigned int i = 0; i < circle_resolution; i++) { const AngleRadians angle = TAU * i / circle_resolution; const Point3 machine_middle = storage.machine_size.getMiddle(); - const coord_t x = machine_middle.x + cos(angle) * width / 2; - const coord_t y = machine_middle.y + sin(angle) * depth / 2; + const coord_t x = machine_middle.x_ + cos(angle) * width / 2; + const coord_t y = machine_middle.y_ + sin(angle) * depth / 2; border_circle.emplace_back(x, y); } machine_volume_border.add(border_circle); diff --git a/src/utils/AABB3D.cpp b/src/utils/AABB3D.cpp index 6177e159d5..b354ad0dc2 100644 --- a/src/utils/AABB3D.cpp +++ b/src/utils/AABB3D.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/AABB3D.h" @@ -10,15 +10,15 @@ namespace cura { -AABB3D::AABB3D() -: min(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()) -, max(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()) +AABB3D::AABB3D() + : min(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()) + , max(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()) { } -AABB3D::AABB3D(Point3 min, Point3 max) -: min(min) -, max(max) +AABB3D::AABB3D(Point3 min, Point3 max) + : min(min) + , max(max) { } @@ -29,18 +29,13 @@ Point3 AABB3D::getMiddle() const AABB AABB3D::flatten() const { - return AABB(Point(min.x, min.y), Point(max.x, max.y)); + return AABB(Point(min.x_, min.y_), Point(max.x_, max.y_)); } bool AABB3D::hit(const AABB3D& other) const { - if ( max.x < other.min.x - || min.x > other.max.x - || max.y < other.min.y - || min.y > other.max.y - || max.z < other.min.z - || min.z > other.max.z) + if (max.x_ < other.min.x_ || min.x_ > other.max.x_ || max.y_ < other.min.y_ || min.y_ > other.max.y_ || max.z_ < other.min.z_ || min.z_ > other.max.z_) { return false; } @@ -49,31 +44,31 @@ bool AABB3D::hit(const AABB3D& other) const AABB3D AABB3D::include(Point3 p) { - min.x = std::min(min.x, p.x); - min.y = std::min(min.y, p.y); - min.z = std::min(min.z, p.z); - max.x = std::max(max.x, p.x); - max.y = std::max(max.y, p.y); - max.z = std::max(max.z, p.z); + min.x_ = std::min(min.x_, p.x_); + min.y_ = std::min(min.y_, p.y_); + min.z_ = std::min(min.z_, p.z_); + max.x_ = std::max(max.x_, p.x_); + max.y_ = std::max(max.y_, p.y_); + max.z_ = std::max(max.z_, p.z_); return *this; } AABB3D AABB3D::include(const AABB3D& aabb) { // Note that this is different from including the min and max points, since when 'min > max' it's used to denote an negative/empty box. - min.x = std::min(min.x, aabb.min.x); - min.y = std::min(min.y, aabb.min.y); - min.z = std::min(min.z, aabb.min.z); - max.x = std::max(max.x, aabb.max.x); - max.y = std::max(max.y, aabb.max.y); - max.z = std::max(max.z, aabb.max.z); + min.x_ = std::min(min.x_, aabb.min.x_); + min.y_ = std::min(min.y_, aabb.min.y_); + min.z_ = std::min(min.z_, aabb.min.z_); + max.x_ = std::max(max.x_, aabb.max.x_); + max.y_ = std::max(max.y_, aabb.max.y_); + max.z_ = std::max(max.z_, aabb.max.z_); return *this; } AABB3D AABB3D::includeZ(coord_t z) { - min.z = std::min(min.z, z); - max.z = std::max(max.z, z); + min.z_ = std::min(min.z_, z); + max.z_ = std::max(max.z_, z); return *this; } @@ -95,7 +90,7 @@ AABB3D AABB3D::expand(coord_t outset) { min -= Point3(outset, outset, outset); max += Point3(outset, outset, outset); - if (min.x > max.x || min.y > max.y || min.z > max.z) + if (min.x_ > max.x_ || min.y_ > max.y_ || min.z_ > max.z_) { // make this AABB3D invalid *this = AABB3D(); } @@ -106,12 +101,11 @@ AABB3D AABB3D::expandXY(coord_t outset) { min -= Point3(outset, outset, 0); max += Point3(outset, outset, 0); - if (min.x > max.x || min.y > max.y) + if (min.x_ > max.x_ || min.y_ > max.y_) { // make this AABB3D invalid *this = AABB3D(); } return *this; } -}//namespace cura - +} // namespace cura diff --git a/src/utils/ExtrusionSegment.cpp b/src/utils/ExtrusionSegment.cpp index c264604933..872bae3000 100644 --- a/src/utils/ExtrusionSegment.cpp +++ b/src/utils/ExtrusionSegment.cpp @@ -32,11 +32,11 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) float alpha = std::acos(delta_r / vec_length_fixed); // Angle between the slope along the edge of the polygon (due to varying line width) and the centerline. if (to.w > from.w) { - alpha = M_PI - alpha; + alpha = std::numbers::pi - alpha; } - assert(alpha > -M_PI - 0.0001); - assert(alpha < M_PI + 0.0001); - if (alpha <= -M_PI || alpha >= M_PI) + assert(alpha > -std::numbers::pi - 0.0001); + assert(alpha < std::numbers::pi + 0.0001); + if (alpha <= -std::numbers::pi || alpha >= std::numbers::pi) { RUN_ONCE(spdlog::warn("Line joint slope is out of bounds (should be between -pi and +pi): {}", alpha)); } @@ -44,22 +44,22 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) float dir = std::atan(vec.Y / static_cast(vec.X)); if (vec.X < 0) { - dir += M_PI; + dir += std::numbers::pi; } // Draw the endcap on the "from" vertex's end. { poly.emplace_back(from.p + Point(from.w / 2 * cos(alpha + dir), from.w / 2 * sin(alpha + dir))); - float start_a = 2 * M_PI; + float start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) { start_a -= a_step; } start_a += a_step; - float end_a = -2 * M_PI; - while (end_a < 2 * M_PI - alpha + dir) + float end_a = -2 * std::numbers::pi; + while (end_a < 2 * std::numbers::pi - alpha + dir) { end_a += a_step; } @@ -69,14 +69,14 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) { poly.emplace_back(from.p + Point(from.w / 2 * cos(a), from.w / 2 * sin(a))); } - poly.emplace_back(from.p + Point(from.w / 2 * cos(2 * M_PI - alpha + dir), from.w / 2 * sin(2 * M_PI - alpha + dir))); + poly.emplace_back(from.p + Point(from.w / 2 * cos(2 * std::numbers::pi - alpha + dir), from.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); } // Draw the endcap on the "to" vertex's end. { - poly.emplace_back(to.p + Point(to.w / 2 * cos(2 * M_PI - alpha + dir), to.w / 2 * sin(2 * M_PI - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! + poly.emplace_back(to.p + Point(to.w / 2 * cos(2 * std::numbers::pi - alpha + dir), to.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! - float start_a = 2 * M_PI; + float start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) { start_a -= a_step; @@ -88,8 +88,8 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) start_a += a_step; } - float end_a = -2 * M_PI; - while (end_a < 2 * M_PI - alpha + dir) + float end_a = -2 * std::numbers::pi; + while (end_a < 2 * std::numbers::pi - alpha + dir) end_a += a_step; if (reduced) { @@ -97,7 +97,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) } else { - end_a -= 2 * M_PI; + end_a -= 2 * std::numbers::pi; } // Draw the endcap. diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/FMatrix4x3.cpp index 1a8260bdcf..a52621b680 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/FMatrix4x3.cpp @@ -1,11 +1,11 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/FMatrix4x3.h" //The definitions we're implementing. -#include "utils/floatpoint.h" //This matrix gets applied to floating point coordinates. -#include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. #include "settings/types/Ratio.h" //Scale factor. +#include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. +#include "utils/floatpoint.h" //This matrix gets applied to floating point coordinates. namespace cura { @@ -18,14 +18,14 @@ FMatrix4x3 FMatrix4x3::scale(const Ratio scale, const Point3 origin) FMatrix4x3 FMatrix4x3::scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin) { FMatrix4x3 result; - result.m[0][0] = scale_x; //X scale. - result.m[1][1] = scale_y; //Y scale. - result.m[2][2] = scale_z; //Z scale. + result.m[0][0] = scale_x; // X scale. + result.m[1][1] = scale_y; // Y scale. + result.m[2][2] = scale_z; // Z scale. - //Apply a transformation to scale it away from the origin. - result.m[3][0] = (scale_x - 1.0) * -origin.x; //Arrived at by manually applying an inverse move, the scale, then a move. - result.m[3][1] = (scale_y - 1.0) * -origin.y; - result.m[3][2] = (scale_z - 1.0) * -origin.z; + // Apply a transformation to scale it away from the origin. + result.m[3][0] = (scale_x - 1.0) * -origin.x_; // Arrived at by manually applying an inverse move, the scale, then a move. + result.m[3][1] = (scale_y - 1.0) * -origin.y_; + result.m[3][2] = (scale_z - 1.0) * -origin.z_; return result; } @@ -51,17 +51,15 @@ Point3 FMatrix4x3::apply(const FPoint3& p) const return Point3( MM2INT(p.x * m[0][0] + p.y * m[1][0] + p.z * m[2][0] + m[3][0]), MM2INT(p.x * m[0][1] + p.y * m[1][1] + p.z * m[2][1] + m[3][1]), - MM2INT(p.x * m[0][2] + p.y * m[1][2] + p.z * m[2][2] + m[3][2]) - ); + MM2INT(p.x * m[0][2] + p.y * m[1][2] + p.z * m[2][2] + m[3][2])); } Point3 FMatrix4x3::apply(const Point3& p) const { return Point3( - m[0][0] * p.x + m[1][0] * p.y + m[2][0] * p.z + m[3][0], - m[0][1] * p.x + m[1][1] * p.y + m[2][1] * p.z + m[3][1], - m[0][2] * p.x + m[1][2] * p.y + m[2][2] * p.z + m[3][2] - ); + m[0][0] * p.x_ + m[1][0] * p.y_ + m[2][0] * p.z_ + m[3][0], + m[0][1] * p.x_ + m[1][1] * p.y_ + m[2][1] * p.z_ + m[3][1], + m[0][2] * p.x_ + m[1][2] * p.y_ + m[2][2] * p.z_ + m[3][2]); } -} \ No newline at end of file +} // namespace cura diff --git a/src/utils/LinearAlg2D.cpp b/src/utils/LinearAlg2D.cpp index ae972d6438..a917c073e2 100644 --- a/src/utils/LinearAlg2D.cpp +++ b/src/utils/LinearAlg2D.cpp @@ -26,7 +26,7 @@ float LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) } else { - return M_PI; // straight bit + return std::numbers::pi; // straight bit } } const float angle = -atan2(det, dott); // from -pi to pi @@ -36,7 +36,7 @@ float LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) } else { - return M_PI * 2 + angle; + return std::numbers::pi * 2 + angle; } } diff --git a/src/utils/Point3.cpp b/src/utils/Point3.cpp index a709c8e485..f84d8589dd 100644 --- a/src/utils/Point3.cpp +++ b/src/utils/Point3.cpp @@ -1,76 +1,76 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/Point3.h" //The headers we're implementing. namespace cura { -Point3 Point3::operator +(const Point3& p) const +Point3 Point3::operator+(const Point3& p) const { - return Point3(x + p.x, y + p.y, z + p.z); + return Point3(x_ + p.x_, y_ + p.y_, z_ + p.z_); } -Point3 Point3::operator -() const +Point3 Point3::operator-() const { - return Point3(-x, -y, -z); + return Point3(-x_, -y_, -z_); } -Point3 Point3::operator -(const Point3& p) const +Point3 Point3::operator-(const Point3& p) const { - return Point3(x - p.x, y - p.y, z - p.z); + return Point3(x_ - p.x_, y_ - p.y_, z_ - p.z_); } -Point3 Point3::operator *(const Point3& p) const +Point3 Point3::operator*(const Point3& p) const { - return Point3(x * p.x, y * p.y, z * p.z); + return Point3(x_ * p.x_, y_ * p.y_, z_ * p.z_); } -Point3 Point3::operator /(const Point3& p) const +Point3 Point3::operator/(const Point3& p) const { - return Point3(x / p.x, y / p.y, z / p.z); + return Point3(x_ / p.x_, y_ / p.y_, z_ / p.z_); } -Point3& Point3::operator +=(const Point3& p) +Point3& Point3::operator+=(const Point3& p) { - x += p.x; - y += p.y; - z += p.z; + x_ += p.x_; + y_ += p.y_; + z_ += p.z_; return *this; } -Point3& Point3::operator -=(const Point3& p) +Point3& Point3::operator-=(const Point3& p) { - x -= p.x; - y -= p.y; - z -= p.z; + x_ -= p.x_; + y_ -= p.y_; + z_ -= p.z_; return *this; } -Point3& Point3::operator *=(const Point3& p) +Point3& Point3::operator*=(const Point3& p) { - x *= p.x; - y *= p.y; - z *= p.z; + x_ *= p.x_; + y_ *= p.y_; + z_ *= p.z_; return *this; } -Point3& Point3::operator /=(const Point3& p) +Point3& Point3::operator/=(const Point3& p) { - x /= p.x; - y /= p.y; - z /= p.z; + x_ /= p.x_; + y_ /= p.y_; + z_ /= p.z_; return *this; } -bool Point3::operator ==(const Point3& p) const +bool Point3::operator==(const Point3& p) const { - return x == p.x && y == p.y && z == p.z; + return x_ == p.x_ && y_ == p.y_ && z_ == p.z_; } -bool Point3::operator !=(const Point3& p) const +bool Point3::operator!=(const Point3& p) const { - return x != p.x || y != p.y || z != p.z; + return x_ != p.x_ || y_ != p.y_ || z_ != p.z_; } -} +} // namespace cura diff --git a/src/utils/ToolpathVisualizer.cpp b/src/utils/ToolpathVisualizer.cpp index 8caf916df0..4e470e34e5 100644 --- a/src/utils/ToolpathVisualizer.cpp +++ b/src/utils/ToolpathVisualizer.cpp @@ -1,4 +1,4 @@ -//Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2022 Ultimaker B.V. #include "utils/ToolpathVisualizer.h" @@ -33,7 +33,8 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm polys = PolygonUtils::connect(polys); for (PolygonRef connected : polys) svg.writeAreas(connected, clr, SVG::Color::NONE); - if (!rounded_visualization) break; + if (! rounded_visualization) + break; } svg.nextLayer(); } @@ -41,15 +42,15 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm void ToolpathVisualizer::underfill(const Polygons& underfills) { - svg.writeAreas(underfills, SVG::ColorObject(0,128,255), SVG::Color::NONE); + svg.writeAreas(underfills, SVG::ColorObject(0, 128, 255), SVG::Color::NONE); svg.nextLayer(); } void ToolpathVisualizer::overfill(const Polygons& overfills, const Polygons& double_overfills) { - svg.writeAreas(overfills, SVG::ColorObject(255,128,0), SVG::Color::NONE); + svg.writeAreas(overfills, SVG::ColorObject(255, 128, 0), SVG::Color::NONE); svg.nextLayer(); - svg.writeAreas(double_overfills, SVG::ColorObject(255,100,0), SVG::Color::NONE); - if (!double_overfills.empty()) + svg.writeAreas(double_overfills, SVG::ColorObject(255, 100, 0), SVG::Color::NONE); + if (! double_overfills.empty()) { svg.nextLayer(); } @@ -70,10 +71,10 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size legend_btm.p += (legend_mid.p - legend_btm.p) / 4; legend_top.p += (legend_mid.p - legend_top.p) / 4; ExtrusionSegment legend_segment(legend_btm, legend_top, true, false); - svg.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200,200,200), SVG::Color::NONE); // real outline + svg.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline std::vector all_segments_plus; all_segments_plus.emplace_back(legend_segment); // colored - + Point legend_text_offset(nozzle_size, 0); svg.writeText(legend_top.p + legend_text_offset, to_string(INT2MM(legend_top.w))); svg.writeText(legend_btm.p + legend_text_offset, to_string(INT2MM(legend_btm.w))); @@ -81,30 +82,35 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size svg.writeLine(legend_top.p, legend_top.p + legend_text_offset); svg.writeLine(legend_btm.p, legend_btm.p + legend_text_offset); svg.writeLine(legend_mid.p, legend_mid.p + legend_text_offset); - + widths(all_segments_plus, nozzle_size, max_dev, min_w, rounded_visualization); } -void ToolpathVisualizer::widths(const std::vector& all_segments, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization, bool exaggerate_widths) +void ToolpathVisualizer::widths( + const std::vector& all_segments, + coord_t nozzle_size, + coord_t max_dev, + coord_t min_w, + bool rounded_visualization, + bool exaggerate_widths) { + // Point3 middle = rounded_visualization? Point3(255,255,255) : Point3(192,192,192); + Point3 middle(255, 255, 255); + Point3 wide(255, 0, 0); + Point3 narrow(0, 0, 255); + + // Polygons connecteds = PolygonUtils::connect(area_covered); + // for (PolygonRef connected : connecteds) + // svg.writeAreas(connected, SVG::Color::BLACK, SVG::Color::NONE); -// Point3 middle = rounded_visualization? Point3(255,255,255) : Point3(192,192,192); - Point3 middle(255,255,255); - Point3 wide(255,0,0); - Point3 narrow(0,0,255); - -// Polygons connecteds = PolygonUtils::connect(area_covered); -// for (PolygonRef connected : connecteds) -// svg.writeAreas(connected, SVG::Color::BLACK, SVG::Color::NONE); - for (float w = .9; w > .25; w = 1.0 - (1.0 - w) * 1.2) { - int brightness = rounded_visualization? 255 - 200 * (w - .25) : 192; + int brightness = rounded_visualization ? 255 - 200 * (w - .25) : 192; for (size_t segment_idx = 0; segment_idx < all_segments.size(); segment_idx++) { ExtrusionSegment ss = all_segments[segment_idx]; -// ss.from.w *= w; -// ss.to.w *= w; + // ss.from.w *= w; + // ss.to.w *= w; for (ExtrusionSegment s : ss.discretize(MM2INT(0.1))) { coord_t avg_w = (s.from.w + s.to.w) / 2; @@ -113,35 +119,36 @@ void ToolpathVisualizer::widths(const std::vector& all_segment color_ratio = color_ratio * .5 + .5 * sqrt(color_ratio); if (avg_w > nozzle_size) { - clr = wide * color_ratio + middle * (1.0 - color_ratio ); + clr = wide * color_ratio + middle * (1.0 - color_ratio); } else { - clr = narrow * color_ratio + middle * (1.0 - color_ratio ); + clr = narrow * color_ratio + middle * (1.0 - color_ratio); } clr = clr * brightness / 255; - -// coord_t clr_max = std::max(clr.x, std::max(clr.y, clr.z)); -// clr = clr * 255 / clr_max; -// clr.y = clr.y * (255 - 92 * clr.dot(green) / green.vSize() / 255) / 255; + // coord_t clr_max = std::max(clr.x, std::max(clr.y, clr.z)); + // clr = clr * 255 / clr_max; + + // clr.y = clr.y * (255 - 92 * clr.dot(green) / green.vSize() / 255) / 255; if (exaggerate_widths) { s.from.w = std::max(min_w, min_w + (s.from.w - (nozzle_size - max_dev)) * 5 / 4); s.to.w = std::max(min_w, min_w + (s.to.w - (nozzle_size - max_dev)) * 5 / 4); } -// else -// { -// s.from.w *= 0.9; -// s.to.w *= 0.9; -// } + // else + // { + // s.from.w *= 0.9; + // s.to.w *= 0.9; + // } s.from.w *= w / .9; s.to.w *= w / .9; Polygons covered = s.toPolygons(); - svg.writeAreas(covered, SVG::ColorObject(clr.x, clr.y, clr.z), SVG::Color::NONE); + svg.writeAreas(covered, SVG::ColorObject(clr.x_, clr.y_, clr.z_), SVG::Color::NONE); } } - if (!rounded_visualization) break; + if (! rounded_visualization) + break; svg.nextLayer(); } } diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index 22d674967b..22150a2b95 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -1,41 +1,41 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/VoxelUtils.h" + #include "utils/polygonUtils.h" -namespace cura +namespace cura { DilationKernel::DilationKernel(GridPoint3 kernel_size, DilationKernel::Type type) -: kernel_size(kernel_size) -, type(type) + : kernel_size(kernel_size) + , type(type) { - coord_t mult = kernel_size.x * kernel_size.y * kernel_size.z; // multiplier for division to avoid rounding and to avoid use of floating point numbers + coord_t mult = kernel_size.x_ * kernel_size.y_ * kernel_size.z_; // multiplier for division to avoid rounding and to avoid use of floating point numbers relative_cells.reserve(mult); GridPoint3 half_kernel = kernel_size / 2; - GridPoint3 start = - half_kernel; + GridPoint3 start = -half_kernel; GridPoint3 end = kernel_size - half_kernel; - for (coord_t x = start.x; x < end.x; x++) + for (coord_t x = start.x_; x < end.x_; x++) { - for (coord_t y = start.y; y < end.y; y++) + for (coord_t y = start.y_; y < end.y_; y++) { - for (coord_t z = start.z; z < end.z; z++) + for (coord_t z = start.z_; z < end.z_; z++) { GridPoint3 current(x, y, z); if (type != Type::CUBE) { - GridPoint3 limit((x < 0)? start.x : end.x - 1, - (y < 0)? start.y : end.y - 1, - (z < 0)? start.z : end.z - 1); - if (limit.x == 0) limit.x = 1; - if (limit.y == 0) limit.y = 1; - if (limit.z == 0) limit.z = 1; + GridPoint3 limit((x < 0) ? start.x_ : end.x_ - 1, (y < 0) ? start.y_ : end.y_ - 1, (z < 0) ? start.z_ : end.z_ - 1); + if (limit.x_ == 0) + limit.x_ = 1; + if (limit.y_ == 0) + limit.y_ = 1; + if (limit.z_ == 0) + limit.z_ = 1; const GridPoint3 rel_dists = mult * current / limit; - if ((type == Type::DIAMOND && rel_dists.x + rel_dists.y + rel_dists.z > mult) - || (type == Type::PRISM && rel_dists.x + rel_dists.y > mult) - ) + if ((type == Type::DIAMOND && rel_dists.x_ + rel_dists.y_ + rel_dists.z_ > mult) || (type == Type::PRISM && rel_dists.x_ + rel_dists.y_ > mult)) { continue; // don't consider this cell } @@ -46,23 +46,23 @@ DilationKernel::DilationKernel(GridPoint3 kernel_size, DilationKernel::Type type } } -bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const +bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const { Point3 diff = end - start; - + const GridPoint3 start_cell = toGridPoint(start); const GridPoint3 end_cell = toGridPoint(end); if (start_cell == end_cell) { return process_cell_func(start_cell); } - + Point3 current_cell = start_cell; while (true) { bool continue_ = process_cell_func(current_cell); - - if ( ! continue_) + + if (! continue_) { return false; } @@ -95,7 +95,7 @@ bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const +bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { for (ConstPolygonRef poly : polys) { @@ -103,7 +103,7 @@ bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::funct for (Point p : poly) { bool continue_ = walkLine(Point3(last.X, last.Y, z), Point3(p.X, p.Y, z), process_cell_func); - if ( ! continue_) + if (! continue_) { return false; } @@ -113,35 +113,35 @@ bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::funct return true; } -bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const +bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1,1,1) - kernel.kernel_size % 2) * cell_size / 2; - if (translation.x && translation.y) + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size / 2; + if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x, translation.y)); + translated.translate(Point(translation.x_, translation.y_)); } - return walkPolygons(translated, z + translation.z, dilate(kernel, process_cell_func)); + return walkPolygons(translated, z + translation.z_, dilate(kernel, process_cell_func)); } -bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const +bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = - cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. - if (translation.x && translation.y) + const Point3 translation = -cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x, translation.y)); + translated.translate(Point(translation.x_, translation.y_)); } return _walkAreas(translated, z, process_cell_func); } -bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const +bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { - std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point(cell_size.x, cell_size.y)); + std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point(cell_size.x_, cell_size.y_)); for (Point p : skin_points) { - bool continue_ = process_cell_func(toGridPoint(Point3(p.X + cell_size.x / 2, p.Y + cell_size.y / 2, z))); - if ( ! continue_) + bool continue_ = process_cell_func(toGridPoint(Point3(p.X + cell_size.x_ / 2, p.Y + cell_size.y_ / 2, z))); + if (! continue_) { return false; } @@ -149,26 +149,27 @@ bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::functio return true; } -bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const +bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = - (Point3(1,1,1) - kernel.kernel_size % 2) * cell_size / 2 // offset half a cell when using a n even kernel - - cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. - if (translation.x && translation.y) + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size / 2 // offset half a cell when using a n even kernel + - cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x, translation.y)); + translated.translate(Point(translation.x_, translation.y_)); } - return _walkAreas(translated, z + translation.z, dilate(kernel, process_cell_func)); + return _walkAreas(translated, z + translation.z_, dilate(kernel, process_cell_func)); } -std::function VoxelUtils::dilate(const DilationKernel& kernel, const std::function& process_cell_func) const +std::function VoxelUtils::dilate(const DilationKernel& kernel, const std::function& process_cell_func) const { - return [&process_cell_func, &kernel](GridPoint3 loc) { + return [&process_cell_func, &kernel](GridPoint3 loc) + { for (const GridPoint3& rel : kernel.relative_cells) { bool continue_ = process_cell_func(loc + rel); - if ( ! continue_) return false; + if (! continue_) + return false; } return true; }; diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 5c8884a6ad..0f80cb9061 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -476,11 +476,11 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) const Point& next = rpath[(point_idx + 1) % pathlen]; float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] - if (angle >= M_PI) {angle -= M_PI;} // map [pi : 2 * pi] to [0 : pi] + if (angle >= std::numbers::pi) {angle -= std::numbers::pi;} // map [pi : 2 * pi] to [0 : pi] // Check if the angle is within limits for the point to 'make sense', given the maximum deviation. // If the angle indicates near-parallel segments ignore the point 'pt' - if (angle > max_deviation_angle && angle < M_PI - max_deviation_angle) + if (angle > max_deviation_angle && angle < std::numbers::pi - max_deviation_angle) { new_path.push_back(pt); } @@ -1122,7 +1122,7 @@ void ConstPolygonRef::smooth_outward(const AngleDegrees min_angle, int shortcut_ // 0 int shortcut_length2 = shortcut_length * shortcut_length; - float cos_min_angle = cos(min_angle / 180 * M_PI); + float cos_min_angle = cos(min_angle / 180 * std::numbers::pi); ListPolygon poly; ListPolyIt::convertPolygonToList(*this, poly); diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index d1f4debe21..40a1a29d58 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -228,16 +228,16 @@ Point PolygonUtils::moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, { return no_point; } - ConstPolygonRef poly = **point_on_boundary.poly; - Point p0 = poly[point_on_boundary.point_idx]; - Point p1 = poly[(point_on_boundary.point_idx + 1) % poly.size()]; - if (vSize2(p0 - point_on_boundary.location) < vSize2(p1 - point_on_boundary.location)) + ConstPolygonRef poly = **point_on_boundary.poly_; + Point p0 = poly[point_on_boundary.point_idx_]; + Point p1 = poly[(point_on_boundary.point_idx_ + 1) % poly.size()]; + if (vSize2(p0 - point_on_boundary.location_) < vSize2(p1 - point_on_boundary.location_)) { - return point_on_boundary.location + normal(getVertexInwardNormal(poly, point_on_boundary.point_idx), inset); + return point_on_boundary.location_ + normal(getVertexInwardNormal(poly, point_on_boundary.point_idx_), inset); } else { - return point_on_boundary.location + normal(getVertexInwardNormal(poly, (point_on_boundary.point_idx + 1) % poly.size()), inset); + return point_on_boundary.location_ + normal(getVertexInwardNormal(poly, (point_on_boundary.point_idx_ + 1) % poly.size()), inset); } } @@ -294,9 +294,9 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes { return ClosestPolygonPoint(); // stub with invalid indices to signify we haven't found any } - const Point v_boundary_from = from - closest_polygon_point.location; + const Point v_boundary_from = from - closest_polygon_point.location_; Point result = moveInside(closest_polygon_point, distance); - const Point v_boundary_result = result - closest_polygon_point.location; + const Point v_boundary_result = result - closest_polygon_point.location_; if (dot(v_boundary_result, v_boundary_from) > 0) { // point was already on the correct side of the polygon if (vSize2(v_boundary_from) > distance * distance) @@ -314,7 +314,7 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes { if (vSize2(v_boundary_from) > max_dist2) { - return ClosestPolygonPoint(*closest_polygon_point.poly); // stub with invalid indices to signify we haven't found any + return ClosestPolygonPoint(*closest_polygon_point.poly_); // stub with invalid indices to signify we haven't found any } else { @@ -578,11 +578,11 @@ Point PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distanc } if (distance == 0) { // the point which is assumed to be on the boundary doesn't have to be moved - return cpp.location; + return cpp.location_; } - ConstPolygonRef poly = *cpp.poly; - unsigned int point_idx = cpp.point_idx; - const Point& on_boundary = cpp.location; + ConstPolygonRef poly = *cpp.poly_; + unsigned int point_idx = cpp.point_idx_; + const Point& on_boundary = cpp.location_; const Point& p1 = poly[point_idx]; unsigned int p2_idx; @@ -642,7 +642,7 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( { return ClosestPolygonPoint(); // we couldn't move inside } - ConstPolygonRef closest_poly = *closest_polygon_point.poly; + ConstPolygonRef closest_poly = *closest_polygon_point.poly_; bool is_outside_boundary = closest_poly.orientation(); { @@ -677,14 +677,14 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( ClosestPolygonPoint inside = findClosest(from, insetted, penalty_function); if (inside.isValid()) { - bool is_inside = polygons.inside(inside.location); + bool is_inside = polygons.inside(inside.location_); if (is_inside != (preferred_dist_inside > 0)) { // Insetting from the reference polygon ended up outside another polygon. // Perform an offset on all polygons instead. Polygons all_insetted = polygons.offset(-preferred_dist_inside); ClosestPolygonPoint overall_inside = findClosest(from, all_insetted, penalty_function); - bool overall_is_inside = polygons.inside(overall_inside.location); + bool overall_is_inside = polygons.inside(overall_inside.location_); if (overall_is_inside != (preferred_dist_inside > 0)) { #ifdef DEBUG @@ -722,7 +722,7 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( svg.writeComment("From location"); svg.writePoint(from, true, 5, SVG::Color::GREEN); svg.writeComment("Location computed to be inside the black polygon"); - svg.writePoint(inside.location, true, 5, SVG::Color::RED); + svg.writePoint(inside.location_, true, 5, SVG::Color::RED); } catch (...) { @@ -735,7 +735,7 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( } inside = overall_inside; } - from = inside.location; + from = inside.location_; } // otherwise we just return the closest polygon point without modifying the from location return closest_polygon_point; // don't return a ClosestPolygonPoint with a reference to the above local polygons variable } @@ -747,11 +747,11 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re { return; } - ConstPolygonRef poly1 = *poly1_result.poly; - ConstPolygonRef poly2 = *poly2_result.poly; - size_t poly1_idx = poly1_result.poly_idx; - size_t poly2_idx = poly2_result.poly_idx; - if (poly1_result.point_idx == NO_INDEX || poly2_result.point_idx == NO_INDEX) + ConstPolygonRef poly1 = *poly1_result.poly_; + ConstPolygonRef poly2 = *poly2_result.poly_; + size_t poly1_idx = poly1_result.poly_idx_; + size_t poly2_idx = poly2_result.poly_idx_; + if (poly1_result.point_idx_ == NO_INDEX || poly2_result.point_idx_ == NO_INDEX) { return; } @@ -759,12 +759,12 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re int equilibirum_limit = MM2INT(0.1); // hard coded value for (int loop_counter = 0; loop_counter < equilibirum_limit; loop_counter++) { - unsigned int pos1_before = poly1_result.point_idx; - poly1_result = findNearestClosest(poly2_result.location, poly1, poly1_result.point_idx); - unsigned int pos2_before = poly2_result.point_idx; - poly2_result = findNearestClosest(poly1_result.location, poly2, poly2_result.point_idx); + unsigned int pos1_before = poly1_result.point_idx_; + poly1_result = findNearestClosest(poly2_result.location_, poly1, poly1_result.point_idx_); + unsigned int pos2_before = poly2_result.point_idx_; + poly2_result = findNearestClosest(poly1_result.location_, poly2, poly2_result.point_idx_); - if (poly1_result.point_idx == pos1_before && poly2_result.point_idx == pos2_before) + if (poly1_result.point_idx_ == pos1_before && poly2_result.point_idx_ == pos2_before) { break; } @@ -781,13 +781,13 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re auto check_neighboring_vert = [&best_distance2](ConstPolygonRef from_poly, ConstPolygonRef to_poly, ClosestPolygonPoint& from_poly_result, ClosestPolygonPoint& to_poly_result, bool vertex_after) { - const Point after_poly2_result = to_poly[(to_poly_result.point_idx + vertex_after) % to_poly.size()]; - const ClosestPolygonPoint poly1_after_poly2_result = findNearestClosest(after_poly2_result, from_poly, from_poly_result.point_idx); + const Point after_poly2_result = to_poly[(to_poly_result.point_idx_ + vertex_after) % to_poly.size()]; + const ClosestPolygonPoint poly1_after_poly2_result = findNearestClosest(after_poly2_result, from_poly, from_poly_result.point_idx_); const coord_t poly1_after_poly2_result_dist2 = vSize2(poly1_after_poly2_result.p() - after_poly2_result); if (poly1_after_poly2_result_dist2 < best_distance2) { from_poly_result = poly1_after_poly2_result; - to_poly_result.location = after_poly2_result; + to_poly_result.location_ = after_poly2_result; best_distance2 = poly1_after_poly2_result_dist2; } }; @@ -796,8 +796,8 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re check_neighboring_vert(poly2, poly1, poly2_result, poly1_result, false); check_neighboring_vert(poly2, poly1, poly2_result, poly1_result, true); - poly1_result.poly_idx = poly1_idx; - poly2_result.poly_idx = poly2_idx; + poly1_result.poly_idx_ = poly1_idx; + poly2_result.poly_idx_ = poly2_idx; } ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef polygon, int start_idx) @@ -809,7 +809,7 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef } ClosestPolygonPoint back = findNearestClosest(from, polygon, start_idx, -1); assert(back.isValid()); - if (vSize2(forth.location - from) < vSize2(back.location - from)) + if (vSize2(forth.location_ - from) < vSize2(back.location_ - from)) { return forth; } @@ -880,7 +880,7 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point from, const Polygons& polygo } ClosestPolygonPoint best((*any_polygon)[0], 0, *any_polygon, any_poly_idx); - int64_t closestDist2_score = vSize2(from - best.location) + penalty_function(best.location); + int64_t closestDist2_score = vSize2(from - best.location_) + penalty_function(best.location_); for (unsigned int ply = 0; ply < polygons.size(); ply++) { @@ -892,12 +892,12 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point from, const Polygons& polygo { continue; } - int64_t dist2_score = vSize2(from - closest_here.location) + penalty_function(closest_here.location); + int64_t dist2_score = vSize2(from - closest_here.location_) + penalty_function(closest_here.location_); if (dist2_score < closestDist2_score) { best = closest_here; closestDist2_score = dist2_score; - best.poly_idx = ply; + best.poly_idx_ = ply; } } @@ -1146,11 +1146,11 @@ bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolyg ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t distance) { - ConstPolygonRef poly = *from.poly; + ConstPolygonRef poly = *from.poly_; Point last_vertex = from.p(); Point next_vertex; - size_t last_point_idx = from.point_idx; - for (size_t point_idx = from.point_idx + 1;; point_idx++) + size_t last_point_idx = from.point_idx_; + for (size_t point_idx = from.point_idx_ + 1;; point_idx++) { if (point_idx == poly.size()) { @@ -1164,7 +1164,7 @@ ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t last_point_idx = point_idx; } Point result = next_vertex + normal(last_vertex - next_vertex, -distance); - return ClosestPolygonPoint(result, last_point_idx, poly, from.poly_idx); + return ClosestPolygonPoint(result, last_point_idx, poly, from.poly_idx_); } std::optional PolygonUtils::getNextParallelIntersection(const ClosestPolygonPoint& start, const Point& line_to, const coord_t dist, const bool forward) @@ -1181,7 +1181,7 @@ std::optional PolygonUtils::getNextParallelIntersection(con // r=result // t=line_to - ConstPolygonRef poly = *start.poly; + ConstPolygonRef poly = *start.poly_; const Point s = start.p(); const Point t = line_to; @@ -1192,8 +1192,9 @@ std::optional PolygonUtils::getNextParallelIntersection(con coord_t prev_projected = 0; for (unsigned int next_point_nr = 0; next_point_nr < poly.size(); next_point_nr++) { - const unsigned int next_point_idx = forward ? (start.point_idx + 1 + next_point_nr) % poly.size() - : (static_cast(start.point_idx) - next_point_nr + poly.size()) % poly.size(); // cast in order to accomodate subtracting + const unsigned int next_point_idx = forward + ? (start.point_idx_ + 1 + next_point_nr) % poly.size() + : (static_cast(start.point_idx_) - next_point_nr + poly.size()) % poly.size(); // cast in order to accomodate subtracting const Point next_vert = poly[next_point_idx]; const Point so = next_vert - s; const coord_t projected = dot(shift, so) / dist; @@ -1417,7 +1418,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg Polygon PolygonUtils::makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step) { Polygon circle; - for (float a = 0; a < 2 * M_PI; a += a_step) + for (float a = 0; a < 2 * std::numbers::pi; a += a_step) { circle.emplace_back(mid + Point(radius * cos(a), radius * sin(a))); } diff --git a/tests/PathOrderMonotonicTest.cpp b/tests/PathOrderMonotonicTest.cpp index 7e69c85606..1a0ca213a4 100644 --- a/tests/PathOrderMonotonicTest.cpp +++ b/tests/PathOrderMonotonicTest.cpp @@ -141,7 +141,7 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) const Point& pt_r = polylines.begin()->at(0); const Point& pt_s = polylines.begin()->at(1); - const double angle_from_first_line = std::atan2(pt_s.Y - pt_r.Y, pt_s.X - pt_r.X) + 0.5 * M_PI; + const double angle_from_first_line = std::atan2(pt_s.Y - pt_r.Y, pt_s.X - pt_r.X) + 0.5 * std::numbers::pi; const Point monotonic_axis(static_cast(std::cos(angle_from_first_line)) * 1000, static_cast(std::sin(angle_from_first_line)) * 1000); const Point perpendicular_axis{ turn90CCW(monotonic_axis) }; @@ -217,7 +217,7 @@ const std::vector polygon_filenames = { std::filesystem::path(__FILE__).parent_path().append("resources/polygon_slant_gap.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_sawtooth.txt").string(), std::filesystem::path(__FILE__).parent_path().append("resources/polygon_letter_y.txt").string() }; -const std::vector angle_radians = { 0, 0.1, 0.25 * M_PI, 1.0, 0.5 * M_PI, 0.75 * M_PI, M_PI, 1.25 * M_PI, 4.0, 1.5 * M_PI, 1.75 * M_PI, 5.0, (2.0 * M_PI) - 0.1 }; +const std::vector angle_radians = { 0, 0.1, 0.25 * std::numbers::pi, 1.0, 0.5 * std::numbers::pi, 0.75 * std::numbers::pi, std::numbers::pi, 1.25 * std::numbers::pi, 4.0, 1.5 * std::numbers::pi, 1.75 * std::numbers::pi, 5.0, (2.0 * std::numbers::pi) - 0.1 }; INSTANTIATE_TEST_SUITE_P(PathOrderMonotonicTestInstantiation, PathOrderMonotonicTest, testing::Combine(testing::ValuesIn(polygon_filenames), testing::ValuesIn(angle_radians))); // NOLINTEND(*-magic-numbers) diff --git a/tests/arcus/ArcusCommunicationTest.cpp b/tests/arcus/ArcusCommunicationTest.cpp index 2618f2090d..6f5692fec6 100644 --- a/tests/arcus/ArcusCommunicationTest.cpp +++ b/tests/arcus/ArcusCommunicationTest.cpp @@ -62,7 +62,7 @@ class ArcusCommunicationTest : public testing::Test for (double a = 0; a < 1.0; a += .05) { - test_circle.add(Point(2050, 2050) + Point(std::cos(a * 2 * M_PI) * 500, std::sin(a * 2 * M_PI) * 500)); + test_circle.add(Point(2050, 2050) + Point(std::cos(a * 2 * std::numbers::pi) * 500, std::sin(a * 2 * std::numbers::pi) * 500)); } test_shapes.add(test_circle); diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 75d66899b8..406554fd08 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -152,8 +152,8 @@ TEST_F(SlicePhaseTest, Cylinder1000) circle.reserve(num_vertices); for (size_t i = 0; i < 1000; i++) { - const coord_t x = std::cos(M_PI * 2 / num_vertices * i) * radius; - const coord_t y = std::sin(M_PI * 2 / num_vertices * i) * radius; + const coord_t x = std::cos(std::numbers::pi * 2 / num_vertices * i) * radius; + const coord_t y = std::sin(std::numbers::pi * 2 / num_vertices * i) * radius; circle.emplace_back(x, y); } Polygons circles; diff --git a/tests/settings/SettingsTest.cpp b/tests/settings/SettingsTest.cpp index 4ef0a12e10..648cca2e51 100644 --- a/tests/settings/SettingsTest.cpp +++ b/tests/settings/SettingsTest.cpp @@ -17,7 +17,7 @@ #include "utils/Coord_t.h" #include "utils/FMatrix4x3.h" //Testing matrix transformation settings. -#include //For M_PI. +#include //For std::numbers::pi. #include #include //For shared_ptr. @@ -121,10 +121,10 @@ TEST_F(SettingsTest, AddSettingCoordT) TEST_F(SettingsTest, AddSettingAngleRadians) { settings.add("test_setting", "180"); - EXPECT_DOUBLE_EQ(AngleRadians(M_PI), settings.get("test_setting")) << "180 degrees is 1 pi radians."; + EXPECT_DOUBLE_EQ(AngleRadians(std::numbers::pi), settings.get("test_setting")) << "180 degrees is 1 pi radians."; settings.add("test_setting", "810"); - EXPECT_NEAR(AngleRadians(M_PI / 2.0), settings.get("test_setting"), 0.00000001) << "810 degrees in clock arithmetic is 90 degrees, which is 0.5 pi radians."; + EXPECT_NEAR(AngleRadians(std::numbers::pi / 2.0), settings.get("test_setting"), 0.00000001) << "810 degrees in clock arithmetic is 90 degrees, which is 0.5 pi radians."; } TEST_F(SettingsTest, AddSettingAngleDegrees) diff --git a/tests/utils/LinearAlg2DTest.cpp b/tests/utils/LinearAlg2DTest.cpp index 4b2e883b8a..5d471dff36 100644 --- a/tests/utils/LinearAlg2DTest.cpp +++ b/tests/utils/LinearAlg2DTest.cpp @@ -132,7 +132,7 @@ TEST_P(GetAngleTest, GetAngle) const Point b = parameters.b; const Point c = parameters.c; const double angle_degrees = parameters.angle; - const double angle = angle_degrees * M_PI / 180.0; + const double angle = angle_degrees * std::numbers::pi / 180.0; const double supposed_angle = LinearAlg2D::getAngleLeft(a, b, c); ASSERT_LE(std::fabs(angle - supposed_angle), maximum_error) << "Corner in " << a << " - " << b << " - " << c << " was computed to have an angle of " << supposed_angle << " instead of " << angle << "."; diff --git a/tests/utils/PolygonTest.cpp b/tests/utils/PolygonTest.cpp index f7dd485de0..a65298bb89 100644 --- a/tests/utils/PolygonTest.cpp +++ b/tests/utils/PolygonTest.cpp @@ -269,7 +269,7 @@ TEST_F(PolygonTest, convexHullStar) const int num_points = 10; const int outer_radius = 20; const int inner_radius = 10; - const double angle_step = M_PI * 2.0 / num_points; + const double angle_step = std::numbers::pi * 2.0 / num_points; for (int i = 0; i < num_points; ++i) { coord_t x_outer = -std::cos(angle_step * i) * outer_radius; diff --git a/tests/utils/SimplifyTest.cpp b/tests/utils/SimplifyTest.cpp index 35d6689341..118e909644 100644 --- a/tests/utils/SimplifyTest.cpp +++ b/tests/utils/SimplifyTest.cpp @@ -83,7 +83,7 @@ class SimplifyTest : public testing::Test constexpr coord_t amplitude = 45; constexpr coord_t y_step = 100; constexpr size_t periods = 10; // How many waves of the sine to construct. - for (double current_sine = 0; current_sine < M_PI * periods; current_sine += sine_step) + for (double current_sine = 0; current_sine < std::numbers::pi * periods; current_sine += sine_step) { sine.add(Point(std::sin(current_sine) * amplitude, y_step * sine.size())); } diff --git a/tests/utils/SmoothTest.cpp b/tests/utils/SmoothTest.cpp index 7efb08cbb2..8288d605e9 100644 --- a/tests/utils/SmoothTest.cpp +++ b/tests/utils/SmoothTest.cpp @@ -19,7 +19,7 @@ TEST(SmoothTest, TestSmooth) // test isSmooth utility function cura::actions::smooth_fn smooth; const auto FLUID_ANGLE = 15.; - const auto COS_FLUID_ANGLE = std::cos(FLUID_ANGLE * M_PI / 180.); + const auto COS_FLUID_ANGLE = std::cos(FLUID_ANGLE * std::numbers::pi / 180.); { /* From 8f4caaff8732ad27877bbfbf34e9c18372bd9034 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 20 Nov 2023 15:26:52 +0100 Subject: [PATCH 045/218] Add SVG writer for voronoi diagrams CURA-11361 --- include/utils/SVG.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/include/utils/SVG.h b/include/utils/SVG.h index c4418ef86f..2a4d4cbe55 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -4,6 +4,9 @@ #ifndef SVG_H #define SVG_H +#include + +#include #include // for file output #include "AABB.h" @@ -188,6 +191,34 @@ class SVG : NoCopy */ void writeCoordinateGrid(const coord_t grid_size = MM2INT(1), const Color color = Color::BLACK, const float stroke_width = 0.1, const float font_size = 10) const; + /*! + * Draws the provided Voronoi diagram. + * + * @tparam T numeric type + * @param voronoi The Voronoi diagram to draw. + * @param color The colour to draw the diagram with. + * @param stroke_width The width of the lines. + */ + template + void writeVoronoiDiagram(const boost::polygon::voronoi_diagram& voronoi_diagram, const Color color = Color::BLACK, const float stroke_width = 0.1) const { + for (const auto& edge: voronoi_diagram.edges()) + { + if (!edge.is_finite()) + { + continue; + } + + const auto& v0 = edge.vertex0(); + const auto& v1 = edge.vertex1(); + + if (v0 == nullptr || v1 == nullptr) + { + continue; + } + + writeLine(Point(v0->x(), v0->y()), Point(v1->x(), v1->y()), color, stroke_width); + } + } }; template From b7445cfd0995e9d6a356b5589325e12bef58fdb7 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 15:28:36 +0100 Subject: [PATCH 046/218] Fixed variable shadowing warnings --- include/settings/types/Duration.h | 53 ++++++++++++++++++------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/include/settings/types/Duration.h b/include/settings/types/Duration.h index f395beff9d..c068ae0e1a 100644 --- a/include/settings/types/Duration.h +++ b/include/settings/types/Duration.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef DURATION_H #define DURATION_H @@ -19,56 +19,65 @@ struct Duration /* * \brief Default constructor setting the duration to 0. */ - constexpr Duration() : value(0) {}; + constexpr Duration() + : value_(0) + { + } /* * \brief Casts a double to a Duration instance. */ - constexpr Duration(double value) : value(value > 0.0 ? value : 0.0) {}; + constexpr Duration(double value) + : value_(value > 0.0 ? value : 0.0) + { + } /* * \brief Casts the Duration instance to a double. */ constexpr operator double() const { - return value; - }; + return value_; + } /* * Some operators to do arithmetic with Durations. */ - Duration operator +(const Duration& other) const + Duration operator+(const Duration& other) const { - return Duration(value + other.value); - }; - Duration operator -(const Duration& other) const + return Duration(value_ + other.value_); + } + + Duration operator-(const Duration& other) const { - return Duration(value - other.value); - }; - Duration& operator +=(const Duration& other) + return Duration(value_ - other.value_); + } + + Duration& operator+=(const Duration& other) { - value += other.value; + value_ += other.value_; return *this; } - Duration& operator -=(const Duration& other) + + Duration& operator-=(const Duration& other) { - value -= other.value; + value_ -= other.value_; return *this; } /* * \brief The actual duration, as a double. */ - double value = 0; + double value_ = 0; }; -constexpr Duration operator "" _s(const long double seconds) +constexpr Duration operator"" _s(const long double seconds) { - return Duration(seconds); + return Duration(static_cast(seconds)); } -inline std::ostream& operator<< (std::ostream& out, const Duration seconds) +inline std::ostream& operator<<(std::ostream& out, const Duration seconds) { constexpr bool pretty_print = false; @@ -89,6 +98,6 @@ inline std::ostream& operator<< (std::ostream& out, const Duration seconds) return out; } -} +} // namespace cura -#endif //DURATION_H \ No newline at end of file +#endif // DURATION_H From def471344dbc914e4111d0ea770466afb8ac6b68 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 15:28:58 +0100 Subject: [PATCH 047/218] Fixed numeric conversion warnings --- include/utils/polygon.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 5d9c4c737c..79b50663ae 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -4,10 +4,6 @@ #ifndef UTILS_POLYGON_H #define UTILS_POLYGON_H -#include "../settings/types/Angle.h" //For angles between vertices. -#include "../settings/types/Ratio.h" -#include "IntPoint.h" - #include #include // std::reverse, fill_n array #include @@ -20,6 +16,10 @@ #include #include +#include "../settings/types/Angle.h" //For angles between vertices. +#include "../settings/types/Ratio.h" +#include "IntPoint.h" + #define CHECK_POLY_ACCESS #ifdef CHECK_POLY_ACCESS #define POLY_ASSERT(e) assert(e) @@ -236,7 +236,7 @@ class ConstPolygonRef for (unsigned int n = 0; n < path->size(); n++) { Point p1 = (*path)[n]; - double second_factor = (p0.X * p1.Y) - (p1.X * p0.Y); + double second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); x += double(p0.X + p1.X) * second_factor; y += double(p0.Y + p1.Y) * second_factor; @@ -248,7 +248,7 @@ class ConstPolygonRef x = x / 6 / area; y = y / 6 / area; - return Point(x, y); + return Point(std::llrint(x), std::llrint(y)); } Point closestPointTo(Point p) const From 6b6dd0f8d32d1429ecd408ff585c421deb88a917 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 20 Nov 2023 15:43:33 +0100 Subject: [PATCH 048/218] Add polygon wkt reading/writing CURA-11361 --- include/utils/polygon.h | 15 ++++++++++ src/utils/polygon.cpp | 64 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 5d9c4c737c..9f32b5fa72 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -1509,6 +1509,21 @@ class Polygons } Polygons offset(const std::vector& offset_dists) const; + + /*! + * @brief Export the polygon to a WKT string + * + * @param stream The stream to write to + */ + void writeWkt(std::ostream& stream) const; + + /*! + * @brief Import the polygon from a WKT string + * + * @param wkt The WKT string to read from + * @return Polygons The polygons read from the stream + */ + static Polygons fromWkt(const std::string& wkt); }; /*! diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 5c8884a6ad..d89381078b 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -3,18 +3,21 @@ #include "utils/polygon.h" -#include #include -#include -#include +#include +#include +#include +#include +#include +#include #include - -#include "utils/linearAlg2D.h" // pointLiesOnTheRightOfLine +#include +#include #include "utils/ListPolyIt.h" - #include "utils/PolylineStitcher.h" +#include "utils/linearAlg2D.h" // pointLiesOnTheRightOfLine namespace cura { @@ -775,6 +778,55 @@ Polygons Polygons::toPolygons(ClipperLib::PolyTree& poly_tree) return ret; } +Polygons Polygons::fromWkt(const std::string& wkt) +{ + typedef boost::geometry::model::d2::point_xy point_type; + typedef boost::geometry::model::polygon polygon_type; + + polygon_type poly; + boost::geometry::read_wkt(wkt, poly); + + Polygons ret; + + Polygon outer; + for (const auto& point: poly.outer()) + { + outer.add(Point(point.x(), point.y())); + } + ret.add(outer); + + for (const auto& hole: poly.inners()) + { + Polygon inner; + for (const auto& point: hole) + { + inner.add(Point(point.x(), point.y())); + } + ret.add(inner); + } + + return ret; +} + +void Polygons::writeWkt(std::ostream& stream) const +{ + stream << "POLYGON ("; + const auto paths_str = paths + | ranges::views::transform([](const auto& path) { + const auto path_str + = path + | ranges::views::transform([](const auto& point) { return fmt::format("{} {}", point.X, point.Y); }) + | ranges::views::join(ranges::views::c_str(", ")) + | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(" ")) + | ranges::to(); + + stream << paths_str; + stream << ")"; +} + bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length) { // walk away from the corner until the shortcut > shortcut_length or it would smooth a piece inward From 7469dea27ad1489e7f00bc56b05d472e784a6bcd Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 16:18:41 +0100 Subject: [PATCH 049/218] Fixed number conversions warnings --- include/utils/polygon.h | 66 +++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 79b50663ae..6ce4b72f9d 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -109,7 +109,7 @@ class ConstPolygonRef */ bool empty() const; - const Point& operator[](unsigned int index) const + const Point& operator[](size_t index) const { POLY_ASSERT(index < size()); return (*path)[index]; @@ -177,7 +177,7 @@ class ConstPolygonRef { coord_t length = 0; Point p0 = path->front(); - for (unsigned int n = 1; n < path->size(); n++) + for (size_t n = 1; n < path->size(); n++) { Point p1 = (*path)[n]; length += vSize(p0 - p1); @@ -231,24 +231,38 @@ class ConstPolygonRef Point centerOfMass() const { - double x = 0, y = 0; - Point p0 = (*path)[path->size() - 1]; - for (unsigned int n = 0; n < path->size(); n++) + if (path->size() > 0) { - Point p1 = (*path)[n]; - double second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); + Point p0 = (*path)[0]; + if (path->size() > 1) + { + double x = 0, y = 0; + for (size_t n = 1; n <= path->size(); n++) + { + Point p1 = (*path)[n % path->size()]; + double second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); - x += double(p0.X + p1.X) * second_factor; - y += double(p0.Y + p1.Y) * second_factor; - p0 = p1; - } + x += double(p0.X + p1.X) * second_factor; + y += double(p0.Y + p1.Y) * second_factor; + p0 = p1; + } - double area = Area(*path); + double area = Area(*path); - x = x / 6 / area; - y = y / 6 / area; + x = x / 6 / area; + y = y / 6 / area; - return Point(std::llrint(x), std::llrint(y)); + return Point(std::llrint(x), std::llrint(y)); + } + else + { + return p0; + } + } + else + { + return Point(); + } } Point closestPointTo(Point p) const @@ -545,7 +559,7 @@ class PolygonRef : public ConstPolygonRef void insert(size_t index, Point p) { POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); - path->insert(path->begin() + index, p); + path->insert(path->begin() + static_cast(index), p); } void clear() @@ -803,7 +817,7 @@ class Polygons public: ClipperLib::Paths paths; - unsigned int size() const + size_t size() const { return paths.size(); } @@ -822,14 +836,14 @@ class Polygons unsigned int pointCount() const; //!< Return the amount of points in all polygons - PolygonRef operator[](unsigned int index) + PolygonRef operator[](size_t index) { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + POLY_ASSERT(index < size()); return paths[index]; } - ConstPolygonRef operator[](unsigned int index) const + ConstPolygonRef operator[](size_t index) const { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + POLY_ASSERT(index < size()); return paths[index]; } ClipperLib::Paths::iterator begin() @@ -853,9 +867,9 @@ class Polygons * * \warning changes the order of the polygons! */ - void remove(unsigned int index) + void remove(size_t index) { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + POLY_ASSERT(index < size()); if (index < paths.size() - 1) { paths[index] = std::move(paths.back()); @@ -1377,7 +1391,7 @@ class Polygons Polygons remove(const Polygons& to_be_removed, int same_distance = 0) const { Polygons result; - for (unsigned int poly_keep_idx = 0; poly_keep_idx < size(); poly_keep_idx++) + for (size_t poly_keep_idx = 0; poly_keep_idx < size(); poly_keep_idx++) { ConstPolygonRef poly_keep = (*this)[poly_keep_idx]; bool should_be_removed = false; @@ -1390,9 +1404,9 @@ class Polygons continue; // find closest point, supposing this point aligns the two shapes in the best way - int closest_point_idx = 0; + size_t closest_point_idx = 0; int smallestDist2 = -1; - for (unsigned int point_rem_idx = 0; point_rem_idx < poly_rem.size(); point_rem_idx++) + for (size_t point_rem_idx = 0; point_rem_idx < poly_rem.size(); point_rem_idx++) { int dist2 = vSize2(poly_rem[point_rem_idx] - poly_keep[0]); if (dist2 < smallestDist2 || smallestDist2 < 0) From ffbb28b18661e455a160665172df13773959bb15 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 20 Nov 2023 17:16:50 +0100 Subject: [PATCH 050/218] Fixed more number conversion warnings --- include/settings/types/Duration.h | 2 +- include/utils/SVG.h | 98 ++++++------ include/utils/floatpoint.h | 3 + include/utils/polygon.h | 12 +- src/utils/SVG.cpp | 254 ++++++++++++++++++++---------- src/utils/polygon.cpp | 145 ++++++++++------- 6 files changed, 323 insertions(+), 191 deletions(-) diff --git a/include/settings/types/Duration.h b/include/settings/types/Duration.h index c068ae0e1a..4398622aa6 100644 --- a/include/settings/types/Duration.h +++ b/include/settings/types/Duration.h @@ -84,7 +84,7 @@ inline std::ostream& operator<<(std::ostream& out, const Duration seconds) double s = seconds; if (pretty_print && seconds > 60) { - int min = seconds / 60; + int min = static_cast(seconds) / 60; s -= min * 60; if (min > 60) { diff --git a/include/utils/SVG.h b/include/utils/SVG.h index c4418ef86f..8257e7e959 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef SVG_H #define SVG_H @@ -19,7 +19,8 @@ class FPoint3; class SVG : NoCopy { public: - enum class Color { + enum class Color + { BLACK, WHITE, GRAY, @@ -36,34 +37,38 @@ class SVG : NoCopy struct ColorObject { - bool is_enum; - Color color; - int r, g, b; + bool is_enum_; + Color color_; + int r_, g_, b_; + ColorObject(Color color) - : is_enum(true) - , color(color) - {} + : is_enum_(true) + , color_(color) + { + } + ColorObject(int r, int g, int b) - : is_enum(false) - , r(r) - , g(g) - , b(b) - {} + : is_enum_(false) + , r_(r) + , g_(g) + , b_(b) + { + } }; -private: +private: std::string toString(const Color color) const; std::string toString(const ColorObject& color) const; - FILE* out; // the output file - const AABB aabb; // the boundary box to display - const Point aabb_size; - const Point canvas_size; - const double scale; - ColorObject background; - size_t layer_nr = 1; + FILE* out_; // the output file + const AABB aabb_; // the boundary box to display + const Point aabb_size_; + const Point canvas_size_; + const double scale_; + ColorObject background_; + size_t layer_nr_ = 1; - bool output_is_html; + bool output_is_html_; public: SVG(std::string filename, const AABB aabb, const Point canvas_size = Point(1024, 1024), const ColorObject background = Color::NONE); @@ -91,22 +96,22 @@ class SVG : NoCopy void writeComment(const std::string& comment) const; - void writeAreas(const Polygons& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1) const; + void writeAreas(const Polygons& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1.0f) const; - void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1) const; + void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1.0f) const; - void writePoint(const Point& p, const bool write_coords = false, const float size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoint(const Point& p, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; - void writePoints(ConstPolygonRef poly, const bool write_coords = false, const float size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoints(ConstPolygonRef poly, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; - void writePoints(const Polygons& polygons, const bool write_coords = false, const float size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoints(const Polygons& polygons, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; /*! * \brief Draws a polyline on the canvas. - * + * * The polyline is the set of line segments between each pair of consecutive * points in the specified vector. - * + * * \param polyline A set of points between which line segments must be * drawn. * \param color The colour of the line segments. If this is not specified, @@ -114,35 +119,35 @@ class SVG : NoCopy */ void writeLines(const std::vector& polyline, const ColorObject color = Color::BLACK) const; - void writeLine(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1) const; + void writeLine(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; - void writeArrow(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1, const float head_size = 5.0) const; + void writeArrow(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f, const float head_size = 5.0f) const; - void writeLineRGB(const Point& from, const Point& to, const int r = 0, const int g = 0, const int b = 0, const float stroke_width = 1) const; + void writeLineRGB(const Point& from, const Point& to, const int r = 0, const int g = 0, const int b = 0, const float stroke_width = 1.0f) const; /*! * \brief Draws a dashed line on the canvas from point A to point B. - * + * * This is useful in the case where multiple lines may overlap each other. - * + * * \param a The starting endpoint of the line. * \param b The ending endpoint of the line. * \param color The stroke colour of the line. */ - void writeDashedLine(const Point& a,const Point& b, ColorObject color = Color::BLACK) const; + void writeDashedLine(const Point& a, const Point& b, ColorObject color = Color::BLACK) const; template void printf(const char* txt, Args&&... args) const; - void writeText(const Point& p, const std::string& txt, const ColorObject color = Color::BLACK, const float font_size = 10) const; + void writeText(const Point& p, const std::string& txt, const ColorObject color = Color::BLACK, const float font_size = 10.0f) const; - void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1) const; + void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; - void writePolygon(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1) const; + void writePolygon(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; - void writePolylines(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1) const; + void writePolylines(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; - void writePolyline(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1) const; + void writePolyline(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; /*! * Draw variable-width paths into the image. @@ -153,7 +158,7 @@ class SVG : NoCopy * \param color The color to draw the paths with. * \param width_factor A multiplicative factor on the line widths. */ - void writePaths(const std::vector& paths, const ColorObject color = Color::BLACK, const float width_factor = 1.0) const; + void writePaths(const std::vector& paths, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; /*! * Draw variable-width lines into the image. @@ -164,7 +169,7 @@ class SVG : NoCopy * \param color The color to draw the lines with. * \param width_factor A multiplicative factor on the line widths. */ - void writeLines(const VariableWidthLines& lines, const ColorObject color = Color::BLACK, const float width_factor = 1.0) const; + void writeLines(const VariableWidthLines& lines, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; /*! * Draw a variable-width line into the image. @@ -175,7 +180,7 @@ class SVG : NoCopy * \param color The color to draw the line with. * \param width_factor A multiplicative factor on the line width. */ - void writeLine(const ExtrusionLine& line, const ColorObject color = Color::BLACK, const float width_factor = 1.0) const; + void writeLine(const ExtrusionLine& line, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; /*! * Draws a grid across the image and writes down coordinates. @@ -186,14 +191,13 @@ class SVG : NoCopy * \param stroke_width The width of the grid lines. * \param font_size The size of the font to write the coordinates with. */ - void writeCoordinateGrid(const coord_t grid_size = MM2INT(1), const Color color = Color::BLACK, const float stroke_width = 0.1, const float font_size = 10) const; - + void writeCoordinateGrid(const coord_t grid_size = MM2INT(1), const Color color = Color::BLACK, const float stroke_width = 0.1f, const float font_size = 10) const; }; template void SVG::printf(const char* txt, Args&&... args) const { - fprintf(out, txt, args...); + fprintf(out_, txt, args...); } } // namespace cura diff --git a/include/utils/floatpoint.h b/include/utils/floatpoint.h index 8f4d35b52f..df9a2d2ad0 100644 --- a/include/utils/floatpoint.h +++ b/include/utils/floatpoint.h @@ -21,15 +21,18 @@ class FPoint3 { public: float x, y, z; + FPoint3() { } + FPoint3(float _x, float _y, float _z) : x(_x) , y(_y) , z(_z) { } + FPoint3(const Point3& p) : x(static_cast(p.x_) * .001f) , y(static_cast(p.y_) * .001f) diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 6ce4b72f9d..b32b59e51f 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -1405,10 +1405,10 @@ class Polygons // find closest point, supposing this point aligns the two shapes in the best way size_t closest_point_idx = 0; - int smallestDist2 = -1; + coord_t smallestDist2 = -1; for (size_t point_rem_idx = 0; point_rem_idx < poly_rem.size(); point_rem_idx++) { - int dist2 = vSize2(poly_rem[point_rem_idx] - poly_keep[0]); + coord_t dist2 = vSize2(poly_rem[point_rem_idx] - poly_keep[0]); if (dist2 < smallestDist2 || smallestDist2 < 0) { smallestDist2 = dist2; @@ -1419,9 +1419,9 @@ class Polygons // compare the two polygons on all points if (smallestDist2 > same_distance * same_distance) continue; - for (unsigned int point_idx = 0; point_idx < poly_rem.size(); point_idx++) + for (size_t point_idx = 0; point_idx < poly_rem.size(); point_idx++) { - int dist2 = vSize2(poly_rem[(closest_point_idx + point_idx) % poly_rem.size()] - poly_keep[point_idx]); + coord_t dist2 = vSize2(poly_rem[(closest_point_idx + point_idx) % poly_rem.size()] - poly_keep[point_idx]); if (dist2 > same_distance * same_distance) { poly_rem_is_poly_keep = false; @@ -1558,9 +1558,9 @@ class PolygonsPart : public Polygons class PartsView : public std::vector> { public: - Polygons& polygons; + Polygons& polygons_; PartsView(Polygons& polygons) - : polygons(polygons) + : polygons_(polygons) { } /*! diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index c6959c4810..c0a3170d76 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -1,12 +1,13 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "utils/SVG.h" + #include #include #include "utils/ExtrusionLine.h" -#include "utils/SVG.h" #include "utils/floatpoint.h" #include "utils/polygon.h" @@ -47,141 +48,165 @@ std::string SVG::toString(Color color) const std::string SVG::toString(const ColorObject& color) const { - if (color.is_enum) - return toString(color.color); + if (color.is_enum_) + return toString(color.color_); else { std::ostringstream ss; - ss << "rgb(" << color.r << "," << color.g << "," << color.b << ")"; + ss << "rgb(" << color.r_ << "," << color.g_ << "," << color.b_ << ")"; return ss.str(); } } SVG::SVG(std::string filename, AABB aabb, Point canvas_size, ColorObject background) - : SVG(filename, aabb, std::min(double(canvas_size.X - canvas_size.X / 5 * 2) / (aabb.max.X - aabb.min.X), double(canvas_size.Y - canvas_size.Y / 5) / (aabb.max.Y - aabb.min.Y)), canvas_size, background) + : SVG( + filename, + aabb, + std::min( + static_cast(canvas_size.X - canvas_size.X / 5 * 2) / static_cast(aabb.max.X - aabb.min.X), + static_cast(canvas_size.Y - canvas_size.Y / 5) / static_cast(aabb.max.Y - aabb.min.Y)), + canvas_size, + background) { } -SVG::SVG(std::string filename, AABB aabb, double scale, ColorObject background) : SVG(filename, aabb, scale, (aabb.max - aabb.min) * scale, background) +SVG::SVG(std::string filename, AABB aabb, double scale, ColorObject background) + : SVG(filename, aabb, scale, (aabb.max - aabb.min) * scale, background) { } -SVG::SVG(std::string filename, AABB aabb, double scale, Point canvas_size, ColorObject background) : aabb(aabb), aabb_size(aabb.max - aabb.min), canvas_size(canvas_size), scale(scale), background(background) +SVG::SVG(std::string filename, AABB aabb, double scale, Point canvas_size, ColorObject background) + : aabb_(aabb) + , aabb_size_(aabb.max - aabb.min) + , canvas_size_(canvas_size) + , scale_(scale) + , background_(background) { - output_is_html = strcmp(filename.c_str() + strlen(filename.c_str()) - 4, "html") == 0; - out = fopen(filename.c_str(), "w"); - if (! out) + output_is_html_ = strcmp(filename.c_str() + strlen(filename.c_str()) - 4, "html") == 0; + out_ = fopen(filename.c_str(), "w"); + if (! out_) { spdlog::error("The file %s could not be opened for writing.", filename); } - if (output_is_html) + if (output_is_html_) { - fprintf(out, "\n"); + fprintf(out_, "\n"); } else { - fprintf(out, "\n"); + fprintf(out_, "\n"); } - fprintf(out, "\n"); - fprintf(out, " \n", layer_nr); - - if (! background.is_enum || background.color != Color::NONE) + fprintf(out_, "(aabb_.max.Y - aabb_.min.Y)); + fprintf(out_, " width=\"%f\"\n", scale_ * static_cast(aabb_.max.X - aabb_.min.X)); + fprintf(out_, " version=\"1.1\">\n"); + fprintf(out_, " \n", layer_nr_); + + if (! background_.is_enum_ || background_.color_ != Color::NONE) { - fprintf(out, "\n", toString(background).c_str()); + fprintf(out_, "\n", toString(background_).c_str()); } } SVG::~SVG() { - fprintf(out, " \n"); - fprintf(out, "\n"); - if (output_is_html) + fprintf(out_, " \n"); + fprintf(out_, "\n"); + if (output_is_html_) { - fprintf(out, ""); + fprintf(out_, ""); } - fclose(out); + fclose(out_); } double SVG::getScale() const { - return scale; + return scale_; } void SVG::nextLayer() { - fprintf(out, " \n"); - layer_nr++; - fprintf(out, " \n", layer_nr); + fprintf(out_, " \n"); + layer_nr_++; + fprintf(out_, " \n", layer_nr_); } Point SVG::transform(const Point& p) const { - return Point((p.X - aabb.min.X) * scale, (p.Y - aabb.min.Y) * scale); + return Point(std::llrint(static_cast(p.X - aabb_.min.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min.Y) * scale_)); } FPoint3 SVG::transformF(const Point& p) const { - return FPoint3((p.X - aabb.min.X) * scale, (p.Y - aabb.min.Y) * scale, 0.0); + return FPoint3(static_cast(static_cast(p.X - aabb_.min.X) * scale_), static_cast(static_cast(p.Y - aabb_.min.Y) * scale_), 0.0f); } void SVG::writeComment(const std::string& comment) const { - fprintf(out, "\n", comment.c_str()); + fprintf(out_, "\n", comment.c_str()); } void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const ColorObject outline_color, const float stroke_width) const { - auto parts = polygons.splitIntoParts(); + std::vector parts = polygons.splitIntoParts(); for (auto part_it = parts.rbegin(); part_it != parts.rend(); ++part_it) { - PolygonsPart& parts = *part_it; - for (unsigned int j = 0; j < parts.size(); j++) + PolygonsPart& part = *part_it; + for (size_t j = 0; j < part.size(); j++) { - fprintf(out, "(fp.x), static_cast(fp.y)); } if (j == 0) - fprintf(out, "\" style=\"fill:%s;stroke:%s;stroke-width:%f\" />\n", toString(color).c_str(), toString(outline_color).c_str(), stroke_width); + fprintf(out_, "\" style=\"fill:%s;stroke:%s;stroke-width:%f\" />\n", toString(color).c_str(), toString(outline_color).c_str(), static_cast(stroke_width)); else - fprintf(out, "\" style=\"fill:white;stroke:%s;stroke-width:%f\" />\n", toString(outline_color).c_str(), stroke_width); + fprintf(out_, "\" style=\"fill:white;stroke:%s;stroke-width:%f\" />\n", toString(outline_color).c_str(), static_cast(stroke_width)); } } } void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const ColorObject outline_color, const float stroke_width) const { - fprintf(out, "(stroke_width)); // The beginning of the polygon tag. for (const Point& point : polygon) // Add every point to the list of points. { FPoint3 transformed = transformF(point); - fprintf(out, "%f,%f ", transformed.x, transformed.y); + fprintf(out_, "%f,%f ", static_cast(transformed.x), static_cast(transformed.y)); } - fprintf(out, "\" />\n"); // The end of the polygon tag. + fprintf(out_, "\" />\n"); // The end of the polygon tag. } void SVG::writePoint(const Point& p, const bool write_coords, const float size, const ColorObject color) const { FPoint3 pf = transformF(p); - fprintf(out, "\n", pf.x, pf.y, size, toString(color).c_str()); + fprintf( + out_, + "\n", + static_cast(pf.x), + static_cast(pf.y), + static_cast(size), + toString(color).c_str()); if (write_coords) { - fprintf(out, "%lli,%lli\n", pf.x, pf.y, p.X, p.Y); + fprintf(out_, "%lli,%lli\n", static_cast(pf.x), static_cast(pf.y), p.X, p.Y); } } @@ -195,7 +220,7 @@ void SVG::writePoints(ConstPolygonRef poly, const bool write_coords, const float void SVG::writePoints(const Polygons& polygons, const bool write_coords, const float size, const ColorObject color) const { - for (const ConstPolygonRef& poly : polygons) + for (const ConstPolygonRef poly : polygons) { writePoints(poly, write_coords, size, color); } @@ -209,20 +234,33 @@ void SVG::writeLines(const std::vector& polyline, const ColorObject color } FPoint3 transformed = transformF(polyline[0]); // Element 0 must exist due to the check above. - fprintf(out, "(transformed.x), + static_cast(transformed.y)); // Write the start of the path tag and the first endpoint. for (size_t point = 1; point < polyline.size(); point++) { transformed = transformF(polyline[point]); - fprintf(out, "L%f,%f", transformed.x, transformed.y); // Write a line segment to the next point. + fprintf(out_, "L%f,%f", static_cast(transformed.x), static_cast(transformed.y)); // Write a line segment to the next point. } - fprintf(out, "\" />\n"); // Write the end of the tag. + fprintf(out_, "\" />\n"); // Write the end of the tag. } void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, const float stroke_width) const { FPoint3 fa = transformF(a); FPoint3 fb = transformF(b); - fprintf(out, "\n", fa.x, fa.y, fb.x, fb.y, toString(color).c_str(), stroke_width); + fprintf( + out_, + "\n", + static_cast(fa.x), + static_cast(fa.y), + static_cast(fb.x), + static_cast(fb.y), + toString(color).c_str(), + static_cast(stroke_width)); } void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, const float stroke_width, const float head_size) const @@ -234,29 +272,66 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co FPoint3 direction = ab.normalized(); FPoint3 tip = fb + normal * head_size - direction * head_size; - FPoint3 b_base = fb + normal * stroke_width - direction * stroke_width * 2.41; + FPoint3 b_base = fb + normal * stroke_width - direction * stroke_width * 2.41f; FPoint3 a_base = fa + normal * stroke_width; - fprintf(out, "", toString(color).c_str(), fa.x, fa.y, fb.x, fb.y, tip.x, tip.y, b_base.x, b_base.y, a_base.x, a_base.y); + fprintf( + out_, + "", + toString(color).c_str(), + static_cast(fa.x), + static_cast(fa.y), + static_cast(fb.x), + static_cast(fb.y), + static_cast(tip.x), + static_cast(tip.y), + static_cast(b_base.x), + static_cast(b_base.y), + static_cast(a_base.x), + static_cast(a_base.y)); } void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const float stroke_width) const { FPoint3 fa = transformF(from); FPoint3 fb = transformF(to); - fprintf(out, "\n", fa.x, fa.y, fb.x, fb.y, r, g, b, stroke_width); + fprintf( + out_, + "\n", + static_cast(fa.x), + static_cast(fa.y), + static_cast(fb.x), + static_cast(fb.y), + r, + g, + b, + static_cast(stroke_width)); } void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) const { FPoint3 fa = transformF(a); FPoint3 fb = transformF(b); - fprintf(out, "\n", fa.x, fa.y, fb.x, fb.y, toString(color).c_str()); + fprintf( + out_, + "\n", + static_cast(fa.x), + static_cast(fa.y), + static_cast(fb.x), + static_cast(fb.y), + toString(color).c_str()); } void SVG::writeText(const Point& p, const std::string& txt, const ColorObject color, const float font_size) const { FPoint3 pf = transformF(p); - fprintf(out, "%s\n", pf.x, pf.y, font_size, toString(color).c_str(), txt.c_str()); + fprintf( + out_, + "%s\n", + static_cast(pf.x), + static_cast(pf.y), + static_cast(font_size), + toString(color).c_str(), + txt.c_str()); } void SVG::writePolygons(const Polygons& polys, const ColorObject color, const float stroke_width) const @@ -273,12 +348,12 @@ void SVG::writePolygon(ConstPolygonRef poly, const ColorObject color, const floa { return; } - int size = poly.size(); + int size = static_cast(poly.size()); Point p0 = poly.back(); int i = 0; for (Point p1 : poly) { - if (color.color == Color::RAINBOW) + if (color.color_ == Color::RAINBOW) { int g = (i * 255 * 11 / size) % (255 * 2); if (g > 255) @@ -316,13 +391,13 @@ void SVG::writePolyline(ConstPolygonRef poly, const ColorObject color, const flo { return; } - int size = poly.size(); + const int size = static_cast(poly.size()); Point p0 = poly[0]; int i = 0; for (size_t p_idx = 1; p_idx < poly.size(); p_idx++) { Point p1 = poly[p_idx]; - if (color.color == Color::RAINBOW) + if (color.color_ == Color::RAINBOW) { int g = (i * 255 * 11 / size) % (255 * 2); if (g > 255) @@ -373,12 +448,25 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const fl const Point direction_vector = end_vertex.p - start_vertex.p; const Point direction_left = turn90CCW(direction_vector); const Point direction_right = -direction_left; // Opposite of left. - const FPoint3 start_left = transformF(start_vertex.p + normal(direction_left, std::max(minimum_line_width, start_vertex.w * width_factor))); - const FPoint3 start_right = transformF(start_vertex.p + normal(direction_right, std::max(minimum_line_width, start_vertex.w * width_factor))); - const FPoint3 end_left = transformF(end_vertex.p + normal(direction_left, std::max(minimum_line_width, end_vertex.w * width_factor))); - const FPoint3 end_right = transformF(end_vertex.p + normal(direction_right, std::max(minimum_line_width, end_vertex.w * width_factor))); - - fprintf(out, "\n", toString(color).c_str(), start_left.x, start_left.y, start_right.x, start_right.y, end_right.x, end_right.y, end_left.x, end_left.y); + const FPoint3 start_left + = transformF(start_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); + const FPoint3 start_right + = transformF(start_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); + const FPoint3 end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + const FPoint3 end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + + fprintf( + out_, + "\n", + toString(color).c_str(), + static_cast(start_left.x), + static_cast(start_left.y), + static_cast(start_right.x), + static_cast(start_right.y), + static_cast(end_right.x), + static_cast(end_right.y), + static_cast(end_left.x), + static_cast(end_left.y)); start_vertex = end_vertex; // For the next line segment. } @@ -386,23 +474,23 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const fl void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const float stroke_width, const float font_size) const { - constexpr float dist_from_edge = 0.05; // As fraction of image width or height. - const coord_t min_x = aabb.min.X - (aabb.min.X % grid_size); - const coord_t min_y = aabb.min.Y - (aabb.min.Y % grid_size); + constexpr float dist_from_edge = 0.05f; // As fraction of image width or height. + const coord_t min_x = aabb_.min.X - (aabb_.min.X % grid_size); + const coord_t min_y = aabb_.min.Y - (aabb_.min.Y % grid_size); - for (coord_t x = min_x; x < aabb.max.X; x += grid_size) + for (coord_t x = min_x; x < aabb_.max.X; x += grid_size) { - writeLine(Point(x, aabb.min.Y), Point(x, aabb.max.Y), color, stroke_width); + writeLine(Point(x, aabb_.min.Y), Point(x, aabb_.max.Y), color, stroke_width); std::stringstream ss; ss << INT2MM(x); - writeText(Point(x, aabb.min.Y + (aabb.max.Y - aabb.min.Y) * dist_from_edge), ss.str(), color, font_size); + writeText(Point(x, std::llrint(static_cast(aabb_.min.Y) + static_cast(aabb_.max.Y - aabb_.min.Y) * dist_from_edge)), ss.str(), color, font_size); } - for (coord_t y = min_y; y < aabb.max.Y; y += grid_size) + for (coord_t y = min_y; y < aabb_.max.Y; y += grid_size) { - writeLine(Point(aabb.min.X, y), Point(aabb.max.Y, y), color, stroke_width); + writeLine(Point(aabb_.min.X, y), Point(aabb_.max.Y, y), color, stroke_width); std::stringstream ss; ss << INT2MM(y); - writeText(Point(aabb.min.X + (aabb.max.X - aabb.min.X) * dist_from_edge, y), ss.str(), color, font_size); + writeText(Point(std::llrint(static_cast(aabb_.min.X) + static_cast(aabb_.max.X - aabb_.min.X) * dist_from_edge), y), ss.str(), color, font_size); } } diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 0f80cb9061..40974e8d6e 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -1,20 +1,18 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/polygon.h" #include #include -#include #include #include - -#include "utils/linearAlg2D.h" // pointLiesOnTheRightOfLine +#include #include "utils/ListPolyIt.h" - #include "utils/PolylineStitcher.h" +#include "utils/linearAlg2D.h" // pointLiesOnTheRightOfLine namespace cura { @@ -109,7 +107,14 @@ void Polygons::makeConvex() Polygon convexified; // Start from a vertex that is known to be on the convex hull: The one with the lowest X. - const size_t start_index = std::min_element(poly.begin(), poly.end(), [](Point a, Point b) { return a.X == b.X ? a.Y < b.Y : a.X < b.X; }) - poly.begin(); + const size_t start_index = std::min_element( + poly.begin(), + poly.end(), + [](Point a, Point b) + { + return a.X == b.X ? a.Y < b.Y : a.X < b.X; + }) + - poly.begin(); convexified.path->push_back(poly[start_index]); for (size_t i = 1; i <= poly.size(); ++i) @@ -375,14 +380,19 @@ Polygons Polygons::offset(const std::vector& offset_dists) const Polygons ret; int i = 0; - for (auto& poly_line : this->paths | ranges::views::filter([](const auto& path){ return ! path.empty(); })) + for (auto& poly_line : this->paths + | ranges::views::filter( + [](const auto& path) + { + return ! path.empty(); + })) { std::vector ret_poly_line; auto prev_p = poly_line.back(); auto prev_dist = offset_dists[i + poly_line.size() - 1]; - for (const auto& p: poly_line) + for (const auto& p : poly_line) { auto offset_dist = offset_dists[i]; @@ -400,7 +410,7 @@ Polygons Polygons::offset(const std::vector& offset_dists) const prev_p = p; prev_dist = offset_dist; - i ++; + i++; } ret.add(ret_poly_line); @@ -475,8 +485,11 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) const Point& pt = rpath[point_idx]; const Point& next = rpath[(point_idx + 1) % pathlen]; - float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] - if (angle >= std::numbers::pi) {angle -= std::numbers::pi;} // map [pi : 2 * pi] to [0 : pi] + float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] + if (angle >= std::numbers::pi) + { + angle -= std::numbers::pi; + } // map [pi : 2 * pi] to [0 : pi] // Check if the angle is within limits for the point to 'make sense', given the maximum deviation. // If the angle indicates near-parallel segments ignore the point 'pt' @@ -499,8 +512,7 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) process_indices.clear(); process_indices.insert(process_indices.end(), skip_indices.begin(), skip_indices.end()); } - } - while (num_removed_in_iteration > 0); + } while (num_removed_in_iteration > 0); } void PolygonRef::applyMatrix(const PointMatrix& matrix) @@ -680,7 +692,7 @@ void Polygons::removeSmallAreaCircumference(const double min_area_size, const co { // containing parent outline is removed; hole should be removed as well } - else if (!remove_holes || (circumference >= min_circumference_size && std::abs(area) >= min_area_size)) + else if (! remove_holes || (circumference >= min_circumference_size && std::abs(area) >= min_area_size)) { // keep hole-polygon if we do not remove holes, or if its // circumference is bigger then the minimum circumference size @@ -704,7 +716,7 @@ void Polygons::removeDegenerateVertsPolyline() void Polygons::_removeDegenerateVerts(const bool for_polyline) { Polygons& thiss = *this; - for(size_t poly_idx = 0; poly_idx < size(); poly_idx++) + for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) { PolygonRef poly = thiss[poly_idx]; Polygon result; @@ -716,28 +728,28 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) return dot(last_line, next_line) == -1 * vSize(last_line) * vSize(next_line); }; - //With polylines, skip the first and last vertex. + // With polylines, skip the first and last vertex. const size_t start_vertex = for_polyline ? 1 : 0; const size_t end_vertex = for_polyline ? poly.size() - 1 : poly.size(); - for(size_t i = 0; i < start_vertex; ++i) + for (size_t i = 0; i < start_vertex; ++i) { - result.add(poly[i]); //Add everything before the start vertex. + result.add(poly[i]); // Add everything before the start vertex. } bool isChanged = false; - for(size_t idx = start_vertex; idx < end_vertex; idx++) + for (size_t idx = start_vertex; idx < end_vertex; idx++) { const Point& last = (result.size() == 0) ? poly.back() : result.back(); - if(idx + 1 >= poly.size() && result.size() == 0) + if (idx + 1 >= poly.size() && result.size() == 0) { break; } const Point& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; - if(isDegenerate(last, poly[idx], next)) + if (isDegenerate(last, poly[idx], next)) { // lines are in the opposite direction // don't add vert to the result isChanged = true; - while(result.size() > 1 && isDegenerate(result[result.size() - 2], result.back(), next)) + while (result.size() > 1 && isDegenerate(result[result.size() - 2], result.back(), next)) { result.pop_back(); } @@ -748,14 +760,14 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) } } - for(size_t i = end_vertex; i < poly.size(); ++i) + for (size_t i = end_vertex; i < poly.size(); ++i) { - result.add(poly[i]); //Add everything after the end vertex. + result.add(poly[i]); // Add everything after the end vertex. } - if(isChanged) + if (isChanged) { - if(for_polyline || result.size() > 2) + if (for_polyline || result.size() > 2) { *poly = *result; } @@ -853,7 +865,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function // p0_it and p2_it are already correct } - else if (!backward_is_blocked && !forward_is_blocked) + else if (! backward_is_blocked && ! forward_is_blocked) { // introduce two new points // 1----b---->2 // ^ / @@ -871,14 +883,15 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L const Point p0_2 = p0_2_it.p(); const Point v02_2 = p0_2 - p2_2; const int64_t v02_2_size = vSize(v02_2); - float progress = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size + float progress + = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); const Point new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); const Point new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); } - else if (!backward_is_blocked) + else if (! backward_is_blocked) { // forward is blocked, back is open // | // 1->b @@ -911,7 +924,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L } } } - else if (!forward_is_blocked) + else if (! forward_is_blocked) { // backward is blocked, front is open // 1----2----b----------->2_2 // ^ ,-' @@ -957,20 +970,29 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L return false; } -void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut_length2, ListPolyIt& p0_it, ListPolyIt& p2_it, bool& forward_is_blocked, bool& backward_is_blocked, bool& forward_is_too_far, bool& backward_is_too_far) +void ConstPolygonRef::smooth_outward_step( + const Point p1, + const int64_t shortcut_length2, + ListPolyIt& p0_it, + ListPolyIt& p2_it, + bool& forward_is_blocked, + bool& backward_is_blocked, + bool& forward_is_too_far, + bool& backward_is_too_far) { const bool forward_has_converged = forward_is_blocked || forward_is_too_far; const bool backward_has_converged = backward_is_blocked || backward_is_too_far; const Point p0 = p0_it.p(); const Point p2 = p2_it.p(); - bool walk_forward = !forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction + bool walk_forward + = ! forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction if (walk_forward) { const ListPolyIt p2_2_it = p2_it.next(); const Point p2_2 = p2_2_it.p(); bool p2_is_left = LinearAlg2D::pointIsLeftOfLine(p2, p0, p2_2) >= 0; - if (!p2_is_left) + if (! p2_is_left) { forward_is_blocked = true; return; @@ -993,7 +1015,7 @@ void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut const ListPolyIt p0_2_it = p0_it.prev(); const Point p0_2 = p0_2_it.p(); bool p0_is_left = LinearAlg2D::pointIsLeftOfLine(p0, p0_2, p2) >= 0; - if (!p0_is_left) + if (! p0_is_left) { backward_is_blocked = true; return; @@ -1013,7 +1035,18 @@ void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut } } -void ConstPolygonRef::smooth_corner_simple(const Point p0, const Point p1, const Point p2, const ListPolyIt p0_it, const ListPolyIt p1_it, const ListPolyIt p2_it, const Point v10, const Point v12, const Point v02, const int64_t shortcut_length, float cos_angle) +void ConstPolygonRef::smooth_corner_simple( + const Point p0, + const Point p1, + const Point p2, + const ListPolyIt p0_it, + const ListPolyIt p1_it, + const ListPolyIt p2_it, + const Point v10, + const Point v12, + const Point v02, + const int64_t shortcut_length, + float cos_angle) { // 1----b---->2 // ^ / @@ -1207,8 +1240,6 @@ Polygons Polygons::smooth_outward(const AngleDegrees max_angle, int shortcut_len } - - void ConstPolygonRef::splitPolylineIntoSegments(Polygons& result) const { Point last = front(); @@ -1268,7 +1299,7 @@ void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const return false; } const bool p1_is_left_of_v02 = dot1 < 0; - if (!p1_is_left_of_v02) + if (! p1_is_left_of_v02) { // removing p1 wouldn't smooth outward return false; } @@ -1307,7 +1338,7 @@ void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const const int64_t dot1 = dot(v02T, v12); const Point v13T = turn90CCW(v13); const int64_t dot2 = dot(v13T, v12); - bool push_point = force_push || !is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); + bool push_point = force_push || ! is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); force_push = false; if (push_point) { @@ -1432,12 +1463,12 @@ std::vector Polygons::splitIntoParts(bool unionAll) const void Polygons::splitIntoParts_processPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const { - for(int n=0; nChildCount(); n++) + for (int n = 0; n < node->ChildCount(); n++) { ClipperLib::PolyNode* child = node->Childs[n]; PolygonsPart part; part.add(child->Contour); - for(int i=0; iChildCount(); i++) + for (int i = 0; i < child->ChildCount(); i++) { part.add(child->Childs[i]->Contour); splitIntoParts_processPolyTreeNode(child->Childs[i], ret); @@ -1483,11 +1514,17 @@ unsigned int PartsView::getPartContaining(unsigned int poly_idx, unsigned int* b for (unsigned int part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) { const std::vector& partView = partsView[part_idx_now]; - if (partView.size() == 0) { continue; } + if (partView.size() == 0) + { + continue; + } std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); if (result != partView.end()) { - if (boundary_poly_idx) { *boundary_poly_idx = partView[0]; } + if (boundary_poly_idx) + { + *boundary_poly_idx = partView[0]; + } return part_idx_now; } } @@ -1502,7 +1539,7 @@ PolygonsPart PartsView::assemblePart(unsigned int part_idx) const { for (unsigned int poly_idx_ff : partsView[part_idx]) { - ret.add(polygons[poly_idx_ff]); + ret.add(polygons_[poly_idx_ff]); } } return ret; @@ -1539,14 +1576,14 @@ PartsView Polygons::splitIntoPartsView(bool unionAll) void Polygons::splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Polygons& reordered, ClipperLib::PolyNode* node) const { - for(int n=0; nChildCount(); n++) + for (int n = 0; n < node->ChildCount(); n++) { ClipperLib::PolyNode* child = node->Childs[n]; partsView.emplace_back(); unsigned int pos = partsView.size() - 1; partsView[pos].push_back(reordered.size()); - reordered.add(child->Contour); //TODO: should this steal the internal representation for speed? - for(int i = 0; i < child->ChildCount(); i++) + reordered.add(child->Contour); // TODO: should this steal the internal representation for speed? + for (int i = 0; i < child->ChildCount(); i++) { partsView[pos].push_back(reordered.size()); reordered.add(child->Childs[i]->Contour); @@ -1577,15 +1614,15 @@ void Polygons::ensureManifold() for (Point p : duplicate_locations) { PolygonRef dot = removal_dots.newPoly(); - dot.add(p + Point(0,5)); - dot.add(p + Point(5,0)); - dot.add(p + Point(0,-5)); - dot.add(p + Point(-5,0)); + dot.add(p + Point(0, 5)); + dot.add(p + Point(5, 0)); + dot.add(p + Point(0, -5)); + dot.add(p + Point(-5, 0)); } - if ( ! removal_dots.empty()) + if (! removal_dots.empty()) { *this = polys.difference(removal_dots); } } -}//namespace cura +} // namespace cura From 30c0e14696c150abe809bc83d4b1401f3783dbbc Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 20 Nov 2023 19:51:25 +0100 Subject: [PATCH 051/218] Add unit tests CURA-11362 --- CMakeLists.txt | 2 +- src/WallsComputation.cpp | 59 + tests/CMakeLists.txt | 1 + tests/ReadTestSettings.cpp | 43 + tests/ReadTestSettings.h | 13 + tests/VoronoiCrashTest.cpp | 137 ++ .../voronoi_crash_resources/settings_001.txt | 637 ++++++++++ .../voronoi_crash_resources/settings_002.txt | 1090 ++++++++++++++++ .../voronoi_crash_resources/settings_003.txt | 1091 ++++++++++++++++ .../voronoi_crash_resources/settings_004.txt | 1091 ++++++++++++++++ .../voronoi_crash_resources/settings_005.txt | 1092 ++++++++++++++++ .../voronoi_crash_resources/settings_006.txt | 1092 ++++++++++++++++ .../voronoi_crash_resources/settings_007.txt | 1092 ++++++++++++++++ .../voronoi_crash_resources/settings_008.txt | 1114 +++++++++++++++++ .../voronoi_crash_resources/settings_009.txt | 1114 +++++++++++++++++ .../voronoi_crash_resources/settings_010.txt | 1114 +++++++++++++++++ .../voronoi_crash_resources/settings_011.txt | 1089 ++++++++++++++++ .../slice_polygon_001.wkt | 1 + .../slice_polygon_002.wkt | 1 + .../slice_polygon_003.wkt | 1 + .../slice_polygon_004.wkt | 1 + .../slice_polygon_005.wkt | 1 + .../slice_polygon_006.wkt | 1 + .../slice_polygon_007.wkt | 1 + .../slice_polygon_008.wkt | 1 + .../slice_polygon_009.wkt | 1 + .../slice_polygon_010.wkt | 1 + .../slice_polygon_011.wkt | 1 + 28 files changed, 11881 insertions(+), 1 deletion(-) create mode 100644 tests/ReadTestSettings.cpp create mode 100644 tests/ReadTestSettings.h create mode 100644 tests/VoronoiCrashTest.cpp create mode 100644 tests/voronoi_crash_resources/settings_001.txt create mode 100644 tests/voronoi_crash_resources/settings_002.txt create mode 100644 tests/voronoi_crash_resources/settings_003.txt create mode 100644 tests/voronoi_crash_resources/settings_004.txt create mode 100644 tests/voronoi_crash_resources/settings_005.txt create mode 100644 tests/voronoi_crash_resources/settings_006.txt create mode 100644 tests/voronoi_crash_resources/settings_007.txt create mode 100644 tests/voronoi_crash_resources/settings_008.txt create mode 100644 tests/voronoi_crash_resources/settings_009.txt create mode 100644 tests/voronoi_crash_resources/settings_010.txt create mode 100644 tests/voronoi_crash_resources/settings_011.txt create mode 100644 tests/voronoi_crash_resources/slice_polygon_001.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_002.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_003.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_004.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_005.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_006.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_007.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_008.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_009.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_010.wkt create mode 100644 tests/voronoi_crash_resources/slice_polygon_011.wkt diff --git a/CMakeLists.txt b/CMakeLists.txt index 27fcdf5bd8..8c2aabc528 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,7 +244,7 @@ target_compile_definitions(CuraEngine PRIVATE VERSION=\"${CURA_ENGINE_VERSION}\" # Compiling the test environment. if (ENABLE_TESTING OR ENABLE_BENCHMARKS) - set(TESTS_HELPERS_SRC tests/ReadTestPolygons.cpp) + set(TESTS_HELPERS_SRC tests/ReadTestPolygons.cpp tests/ReadTestSettings.cpp) set(TESTS_SRC_ARCUS) if (ENABLE_ARCUS) diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index 09dfa368ed..76d55accc4 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -1,6 +1,15 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include +#include + +#include +#include +#include +#include +#include + #include "WallsComputation.h" #include "Application.h" #include "ExtruderTrain.h" @@ -84,6 +93,56 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t */ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) { + // TODO remove this block before merging PR! + // This code exists to generate the test wkt, and setting files + { + std::ofstream SettingsFile("settings.txt"); + SettingsFile.clear(); + for (auto [key, value]: settings.getFlattendSettings()) + { + if (value == "") + { + continue; + } + SettingsFile << key << "=" << value << std::endl; + } + SettingsFile.close(); + + std::ofstream PolygonFile("slice_polygon.wkt"); + PolygonFile.clear(); + + std::vector multi_polygons; + for (const auto& part : layer->parts) + { + multi_polygons.push_back(part.outline); + } + + PolygonFile << "MULTIPOLYGON ("; + const auto paths_str + = multi_polygons + | ranges::views::transform([](const auto& path) { + const auto path_str + = path + | ranges::views::transform([](const auto& path) { + const auto path_str + = path + | ranges::views::transform([](const auto& point) { return fmt::format("{} {}", point.X, point.Y); }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(" ")) + | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(", ")) + | ranges::to(); + + PolygonFile << paths_str; + PolygonFile << ")"; + + PolygonFile.close(); + } + for(SliceLayerPart& part : layer->parts) { generateWalls(&part, section); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1e36893cee..92543609e6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,6 +14,7 @@ set(TESTS_SRC_BASE PathOrderMonotonicTest TimeEstimateCalculatorTest WallsComputationTest + VoronoiCrashTest ) set(TESTS_SRC_INTEGRATION diff --git a/tests/ReadTestSettings.cpp b/tests/ReadTestSettings.cpp new file mode 100644 index 0000000000..8c384e5053 --- /dev/null +++ b/tests/ReadTestSettings.cpp @@ -0,0 +1,43 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "ReadTestSettings.h" +#include +#include + +namespace cura +{ + +bool readTestSettings(const std::string& filename, Settings& settings) +{ + spdlog::info("filename: {}", filename); + + FILE* handle = std::fopen(filename.c_str(), "r"); + if (! handle) + { + spdlog::error("Failed to open file: {}", filename); + return false; + } + + while (true) + { + char key[100]; + char value[100]; + + int read = std::fscanf(handle, "%[a-zA-Z0-9_]=%[][a-zA-Z0-9_-.,:()/; ]\n", key, value); + + if (read == EOF) + { + break; + } + else if (read <= 0) + { + return false; + } + + settings.add(std::string(key), std::string(value)); + } + + return true; +} +} // namespace cura \ No newline at end of file diff --git a/tests/ReadTestSettings.h b/tests/ReadTestSettings.h new file mode 100644 index 0000000000..63f8d6d6fd --- /dev/null +++ b/tests/ReadTestSettings.h @@ -0,0 +1,13 @@ + +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. + + +#include "settings/Settings.h" +#include +#include + +namespace cura +{ +bool readTestSettings(const std::string& filename, Settings& settings_out); +} \ No newline at end of file diff --git a/tests/VoronoiCrashTest.cpp b/tests/VoronoiCrashTest.cpp new file mode 100644 index 0000000000..d7cb2fdff6 --- /dev/null +++ b/tests/VoronoiCrashTest.cpp @@ -0,0 +1,137 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#include +#include +#include +#include + +#include "WallsComputation.h" //Unit under test. +#include "ReadTestSettings.h" +#include "settings/Settings.h" //Settings to generate walls with. +#include "sliceDataStorage.h" //Sl +#include "utils/polygon.h" //To create example polygons. + +#include +#include +#include +#include + +#include +#include + +namespace cura +{ + +class VoronoiCrashTest : public testing::TestWithParam> +{ +public: +}; + +std::vector multiPolygonsFromWkt(const std::string& wkt) +{ + typedef boost::geometry::model::d2::point_xy point_type; + typedef boost::geometry::model::polygon polygon_type; + typedef boost::geometry::model::multi_polygon multi_polygon_type; + + multi_polygon_type boost_polygons {}; + boost::geometry::read_wkt(wkt, boost_polygons); + + std::vector polygons; + + for (const auto& boost_polygon: boost_polygons) + { + Polygons polygon; + + Polygon outer; + for (const auto& point: boost_polygon.outer()) + { + outer.add(Point(point.x(), point.y())); + } + polygon.add(outer); + + for (const auto& hole: boost_polygon.inners()) + { + Polygon inner; + for (const auto& point: hole) + { + inner.add(Point(point.x(), point.y())); + } + polygon.add(inner); + } + + polygons.push_back(polygon); + } + return polygons; +} + +/*! + * + */ +TEST_P(VoronoiCrashTest, SectionsTest) +{ + const auto params = GetParam(); + const std::string polygon_file = std::get<0>(params); + const std::string setting_file = std::get<1>(params); + + spdlog::info("Testing polygon: {}", polygon_file); + spdlog::info("Testing with settings: {}", setting_file); + + std::ifstream file(polygon_file); + std::ostringstream ss; + ss << file.rdbuf(); + const auto shapes = multiPolygonsFromWkt(ss.str()); + + Settings settings; + auto read_settings = readTestSettings(setting_file, settings); + ASSERT_TRUE(read_settings); + + size_t wall_count = settings.get("wall_line_count"); + spdlog::info("wall_count: {}", wall_count); + + SliceLayer layer; + for (const Polygons& shape : shapes) + { + layer.parts.emplace_back(); + SliceLayerPart& part = layer.parts.back(); + part.outline.add(shape); + } + + LayerIndex layer_idx(100); + WallsComputation walls_computation(settings, layer_idx); + + walls_computation.generateWalls(&layer, SectionType::WALL); +} + + +const std::vector polygon_filenames = { + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_001.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_002.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_003.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_004.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_005.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_006.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_007.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_008.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_009.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_010.wkt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_011.wkt").string(), +}; + +const std::vector setting_filenames = { + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_001.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_002.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_003.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_004.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_005.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_006.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_007.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_008.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_009.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_010.txt").string(), + std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_011.txt").string(), +}; + +INSTANTIATE_TEST_SUITE_P(TestCrashingPolygons, VoronoiCrashTest, testing::Combine(testing::ValuesIn(polygon_filenames), testing::ValuesIn(setting_filenames))); + +} // namespace cura \ No newline at end of file diff --git a/tests/voronoi_crash_resources/settings_001.txt b/tests/voronoi_crash_resources/settings_001.txt new file mode 100644 index 0000000000..0626051682 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_001.txt @@ -0,0 +1,637 @@ +wall_x_material_flow_roofing=97 +interlocking_depth=2 +machine_nozzle_size=0.4 +quality_changes_name=empty +raft_interface_line_width=1.2 +small_skin_on_surface=False +speed_support=96.0 +bridge_fan_speed_3=0 +ironing_inset=0.38 +meshfix_fluid_motion_small_distance=0.01 +jerk_wall_x=12.5 +cool_min_layer_time_fan_speed_max=11 +raft_fan_speed=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +ooze_shield_dist=2 +interlocking_beam_layer_count=2 +raft_base_acceleration=300 +wall_extruder_nr=-1 +connect_infill_polygons=False +small_feature_speed_factor_0=50 +roofing_line_width=0.4 +material_break_retracted_position=-50 +material_initial_print_temperature=250 +jerk_skirt_brim=12.5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_line_width=0.3 +ooze_shield_enabled=False +retraction_min_travel=1.6 +acceleration_layer_0=300 +retraction_retract_speed=5 +support_bottom_line_distance=2.5 +support_interface_wall_count=2 +material_shrinkage_percentage=100.0 +raft_interface_jerk=12.5 +material_bed_temperature=95 +support_tree_rest_preference=graceful +prime_tower_min_volume=6 +sub_div_rad_add=0.4 +speed_wall_0_roofing=45 +bottom_skin_preshrink=0 +min_feature_size=0.1 +brim_replaces_support=True +support_interface_skip_height=0.2 +prime_tower_wipe_enabled=True +gantry_height=320 +material_surface_energy=70 +bridge_skin_material_flow=97 +clean_between_layers=False +skin_angles=[] +machine_steps_per_mm_z=50 +minimum_support_area=0.1 +roofing_monotonic=True +skin_overlap_mm=0.0 +small_feature_max_length=0.0 +bottom_thickness=1.0 +jerk_wall=12.5 +bridge_skin_support_threshold=50 +machine_extruder_count=2 +jerk_support_roof=12.5 +wall_0_material_flow_roofing=97 +skirt_gap=3 +meshfix=0 +acceleration_skirt_brim=300 +nozzle_offsetting_for_disallowed_areas=False +z_seam_position=backright +raft_surface_speed=55 +support_interface_height=0.4 +support_tower_roof_angle=0 +extruder_prime_pos_z=0 +roofing_angles=[] +jerk_ironing=12.5 +infill_wipe_dist=0 +speed_wall_x_roofing=65 +machine_max_feedrate_e=45 +prime_tower_line_width=1 +jerk_wall_x_roofing=12.5 +acceleration_wall_0_roofing=300 +material_extrusion_cool_down_speed=0.7 +wall_transition_angle=10 +infill_support_enabled=False +cool_fan_speed_0=0 +blackmagic=0 +support_brim_line_count=3 +adhesion_type=raft +brim_line_count=13 +support_roof_line_distance=0.25773195876288657 +support_interface_enable=True +bridge_skin_density_3=100 +center_object=False +skirt_brim_line_width=0.4 +cool_fan_full_layer=1 +raft_interface_layers=2 +adaptive_layer_height_variation=0.1 +hole_xy_offset_max_diameter=0 +raft_airgap=0.3 +wall_distribution_count=1 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +top_skin_preshrink=0 +minimum_roof_area=1.0 +machine_max_jerk_z=0.4 +support_tree_angle=50 +infill_material_flow=97 +support_structure=normal +wall_transition_filter_distance=100 +raft_interface_fan_speed=0.0 +material_break_preparation_retracted_position=-16 +infill_mesh=False +layer_height=0.2 +meshfix_extensive_stitching=False +magic_fuzzy_skin_thickness=0.3 +bottom_layers=5 +infill_multiplier=1 +support_skip_zag_per_mm=20 +support_interface_line_width=0.4 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +resolution=0 +speed_print=120.0 +optimize_wall_printing_order=True +line_width=0.4 +machine_minimum_feedrate=0.0 +raft_base_speed=5 +support_angle=50 +ironing_pattern=zigzag +layer_0_z_overlap=0.15 +speed_travel=250.0 +wall_line_width=0.4 +support_brim_enable=False +cool_fan_full_at_height=0 +acceleration_print_layer_0=300 +machine_extruders_share_heater=False +speed_wall_0=45 +cool_lift_head=False +raft_interface_acceleration=300 +raft_surface_fan_speed=0 +machine_center_is_zero=True +extruders_enabled_count=2 +speed_ironing=36.666666666666664 +default_material_bed_temperature=95 +wall_0_material_flow=97 +meshfix_maximum_extrusion_area_deviation=50000 +retraction_speed=5 +material_print_temp_prepend=True +dual=0 +support_bottom_enable=False +wall_line_count=2 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=12.0 +roofing_material_flow=97 +machine_width=410 +machine_max_feedrate_x=299792458000 +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=85 +switch_extruder_prime_speed=5 +wall_x_extruder_nr=-1 +min_bead_width=0.4 +roofing_layer_count=2 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +wipe_retraction_amount=0.75 +material_break_temperature=50 +speed_roofing=55 +material_standby_temperature=180 +brim_outside_only=True +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +retraction_enable=True +support_line_distance=2.5 +support_zag_skip_count=8 +material_type=empty +bridge_wall_speed=96.0 +support_bottom_offset=0 +layer_height_0=0.2 +support_initial_layer_line_distance=2.5 +support_z_distance=0.25 +meshfix_union_all=True +support_bottom_wall_count=2 +layer_start_x=0.0 +machine_min_cool_heat_time_window=15 +top_bottom_thickness=1.0 +wipe_retraction_retract_speed=5 +multiple_mesh_overlap=0 +acceleration_print=300 +support_bottom_pattern=lines +acceleration_travel_enabled=True +min_even_wall_line_width=0.4 +material_print_temperature=260 +interlocking_boundary_avoidance=2 +wall_0_material_flow_layer_0=110.00000000000001 +quality_name=Fast +speed_topbottom=55 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +group_outer_walls=True +wall_line_width_x=0.4 +jerk_support=12.5 +raft_base_thickness=0.8 +support_top_distance=0.25 +retraction_hop_after_extruder_switch=True +roofing_extruder_nr=-1 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +support_mesh=False +support_roof_pattern=lines +jerk_support_interface=12.5 +prime_tower_flow=97 +acceleration_ironing=300 +wall_x_material_flow_layer_0=95.0 +speed_print_layer_0=30 +top_skin_expand_distance=0.8 +mesh_position_z=0 +infill_overlap_mm=0.0 +conical_overhang_angle=50 +inset_direction=inside_out +remove_empty_first_layers=True +jerk_topbottom=12.5 +prime_tower_size=20 +wipe_retraction_enable=True +day=Mon +wipe_hop_amount=0.4 +support_join_distance=2.0 +meshfix_fluid_motion_shift_distance=0.1 +cool_min_layer_time=6 +switch_extruder_extra_prime_amount=0 +coasting_min_volume=0.8 +raft_surface_thickness=0.2 +prime_tower_enable=False +top_bottom=0 +cool_fan_speed=0 +material_anti_ooze_retraction_speed=5 +support_conical_enabled=False +brim_smart_ordering=True +interlocking_orientation=22.5 +min_skin_width_for_expansion=6.123233995736766e-17 +wall_x_material_flow=97 +xy_offset=0 +brim_inside_margin=2.5 +roofing_pattern=lines +cooling=0 +jerk_travel_layer_0=12.5 +infill_sparse_thickness=0.2 +ironing_line_spacing=0.1 +bridge_fan_speed=100 +support_material_flow=97 +support_tree_max_diameter=25 +hole_xy_offset=0 +material_anti_ooze_retracted_position=-4 +jerk_print_layer_0=12.5 +ironing_enabled=False +acceleration_travel=5000 +raft_base_extruder_nr=0 +acceleration_wall=300 +support_bottom_material_flow=97 +acceleration_wall_x=300 +flow_rate_extrusion_offset_factor=100 +carve_multiple_volumes=True +gradual_infill_steps=0 +machine_show_variants=False +acceleration_wall_x_roofing=300 +material_break_speed=25 +machine_max_jerk_xy=20.0 +cutting_mesh=False +infill_sparse_density=20 +support_roof_wall_count=2 +infill_extruder_nr=-1 +support=0 +infill_mesh_order=0 +retraction_prime_speed=5 +z_seam_type=sharpest_corner +ironing_only_highest_layer=False +raft_remove_inside_corners=False +acceleration_topbottom=300 +machine_settings=0 +travel_retract_before_outer_wall=False +machine_height=320 +prime_tower_base_size=10 +wipe_retraction_prime_speed=5 +wipe_pause=0 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=300 +material_alternate_walls=False +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +retraction_extra_prime_amount=0 +print_bed_temperature=95 +lightning_infill_support_angle=40 +support_interface_material_flow=97 +infill_overlap=0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=0.5 +machine_nozzle_temp_enabled=True +skirt_brim_speed=30 +support_bottom_distance=0.125 +machine_steps_per_mm_e=1600 +material_crystallinity=False +wall_thickness=0.8 +machine_acceleration=3000 +prime_tower_base_height=6 +fill_outline_gaps=True +top_layers=5 +support_offset=0.7 +material_flow=97 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=95 +default_material_print_temperature=260 +speed_slowdown_layers=1 +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +support_xy_overrides_z=z_overrides_xy +acceleration_wall_0=300 +small_skin_width=0.8 +support_infill_angles=[] +shell=0 +support_meshes_present=False +raft_interface_speed=30.0 +travel_avoid_distance=3 +meshfix_maximum_resolution=0.6 +wipe_repeat_count=5 +magic_fuzzy_skin_enabled=False +jerk_enabled=True +support_xy_distance_overhang=0.15 +material_flush_purge_length=60 +machine_nozzle_heat_up_speed=3.5 +raft_interface_line_spacing=1.4 +retraction_extrusion_window=0 +support_fan_enable=False +adaptive_layer_height_threshold=0.2 +lightning_infill_overhang_angle=40 +support_conical_min_width=10 +adaptive_layer_height_variation_step=0.01 +raft_surface_jerk=12.5 +infill_support_angle=40 +cool_fan_speed_max=100 +cool_fan_enabled=False +wall_overhang_angle=90 +cool_min_speed=9 +wipe_retraction_speed=5 +retraction_amount=0.75 +acceleration_support_interface=300 +speed_z_hop=10 +lightning_infill_prune_angle=40 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +min_wall_line_width=0.4 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +raft_acceleration=300 +material_is_support_material=False +machine_max_acceleration_z=100 +support_wall_count=0 +mesh_rotation_matrix=[] +skin_edge_support_thickness=0.8 +support_bottom_stair_step_min_slope=10.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +conical_overhang_hole_size=0 +jerk_travel_enabled=True +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=2 +extruder_prime_pos_abs=True +material_adhesion_tendency=0 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=55 +support_extruder_nr=0 +extruder_prime_pos_y=0 +support_type=everywhere +skin_edge_support_layers=4 +cool_fan_speed_min=0 +wipe_move_distance=20 +top_bottom_pattern_0=lines +alternate_extra_perimeter=False +support_roof_enable=True +skin_material_flow_layer_0=95 +wall_0_inset=0 +relative_extrusion=False +mold_width=5 +adhesion_extruder_nr=0 +small_hole_max_size=0 +material=0 +material_bed_temp_prepend=True +infill_before_walls=False +zig_zaggify_support=True +wipe_hop_enable=True +bridge_skin_material_flow_3=97 +bridge_fan_speed_2=50.0 +support_interface_pattern=lines +initial_bottom_layers=5 +wall_line_width_0=0.4 +support_tree_top_rate=30 +cross_infill_pocket_size=2.0 +interlocking_enable=False +support_bottom_line_width=0.6 +draft_shield_height=10 +z_seam_x=205.0 +machine_always_write_active_tool=False +retraction_combing_max_distance=25.0 +skin_line_width=0.4 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +bottom_skin_expand_distance=0.8 +bridge_skin_speed_2=55 +print_sequence=all_at_once +skin_overlap=0 +speed_infill=120.0 +material_shrinkage_percentage_z=100.0 +material_guid=88c8919c-6a09-471a-b7b6-e801263d862d +infill_pattern=lines +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +support_xy_distance=0.2 +speed_wall=96.0 +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=True +switch_extruder_retraction_speeds=5 +machine_firmware_retract=False +speed_equalize_flow_width_factor=0 +acceleration_travel_layer_0=5000 +wipe_brush_pos_x=100 +machine_nozzle_id=1XA +machine_heated_build_volume=True +support_conical_angle=30 +initial_layer_line_width_factor=100.0 +raft_base_line_spacing=2.8 +max_extrusion_before_wipe=10 +speed_support_infill=96.0 +support_tree_limit_branch_reach=True +support_extruder_nr_layer_0=0 +meshfix_maximum_travel_resolution=0.8 +retraction_hop_enabled=True +raft_surface_extruder_nr=0 +switch_extruder_retraction_speed=5 +acceleration_roofing=300 +meshfix_fluid_motion_angle=15 +top_thickness=1.0 +acceleration_enabled=True +support_roof_extruder_nr=0 +jerk_print=12.5 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.4 +wall_0_extruder_nr=-1 +infill_line_distance=2.0 +minimum_bottom_area=1.0 +support_pattern=lines +support_tree_min_height_to_model=3 +support_interface_offset=0 +meshfix_keep_open_polygons=False +skin_monotonic=True +machine_max_acceleration_y=9000 +retraction_hop=0.4 +jerk_wall_0=12.5 +support_infill_extruder_nr=0 +speed_prime_tower=30.0 +infill=0 +coasting_speed=90 +brim_width=5 +skin_preshrink=0 +magic_spiralize=False +raft_interface_thickness=0.3 +jerk_prime_tower=12.5 +skin_outline_count=0 +support_interface_priority=interface_area_overwrite_support_area +machine_steps_per_mm_x=50 +prime_tower_position_x=138.8 +bridge_wall_min_length=1.6 +experimental=0 +z_seam_relative=False +wipe_retraction_extra_prime_amount=0 +infill_offset_x=0 +material_shrinkage_percentage_xy=100.0 +bridge_wall_material_flow=97 +support_bottom_density=24 +skin_material_flow=92.14999999999999 +support_tree_branch_reach_limit=30 +date=20-11-2023 +wipe_hop_speed=10 +zig_zaggify_infill=True +material_name=empty +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +meshfix_union_all_remove_holes=False +wall_material_flow=97 +retraction_combing=off +material_flow_layer_0=100 +initial_extruder_nr=0 +z_seam_corner=z_seam_corner_none +machine_head_with_fans_polygon=[] +raft_base_line_width=1.4 +bridge_skin_density=100 +ironing_flow=10.0 +draft_shield_enabled=False +infill_angles=[] +travel_avoid_supports=False +acceleration_infill=300 +support_skip_some_zags=False +material_end_of_filament_purge_speed=0.5 +machine_max_jerk_e=5.0 +raft_margin=3 +support_interface_angles=[] +support_roof_height=1.015 +smooth_spiralized_contours=True +xy_offset_layer_0=0 +support_roof_offset=0 +acceleration_support_roof=300 +material_print_temp_wait=True +support_roof_angles=[] +machine_gcode_flavor=Griffin +wall_overhang_speed_factor=100 +jerk_support_infill=12.5 +wall_0_wipe_dist=0 +jerk_wall_0_roofing=12.5 +retract_at_layer_change=False +wall_transition_length=0.4 +speed_travel_layer_0=250.0 +conical_overhang_enabled=False +travel=0 +jerk_roofing=12.5 +machine_shape=rectangular +material_bed_temp_wait=True +machine_depth=320 +ironing_monotonic=False +mesh_position_y=0 +infill_randomize_start_location=False +raft_base_jerk=12.5 +speed_wall_x=65 +time=17:54:18 +machine_buildplate_type=glass +machine_nozzle_head_distance=3 +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.04 +platform_adhesion=0 +prime_tower_raft_base_line_spacing=1.4 +support_bottom_stair_step_width=5.0 +material_flush_purge_speed=0.5 +material_break_preparation_temperature=260 +wall_transition_filter_deviation=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +travel_avoid_other_parts=False +support_tree_angle_slow=33.333333333333336 +support_bottom_angles=[] +speed_support_roof=55 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=300 +machine_extruders_share_nozzle=False +support_bottom_height=0.4 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +machine_scale_fan_speed_zero_to_one=False +infill_enable_travel_optimization=True +speed_layer_0=30 +jerk_travel=12.5 +alternate_carve_order=True +support_roof_material_flow=97 +machine_max_feedrate_y=299792458000 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +material_brand=empty_brand +prime_blob_enable=False +support_tree_tip_diameter=0.6 +speed_support_bottom=55 +bridge_skin_density_2=100 +support_tower_diameter=3.0 +mold_angle=40 +raft_speed=15 +acceleration_support=300 +jerk_layer_0=12.5 +cool_min_temperature=250 +slicing_tolerance=middle +machine_heat_zone_length=16 +magic_mesh_surface_mode=normal +top_bottom_extruder_nr=-1 +retraction_hop_after_extruder_switch_height=0.4 +acceleration_prime_tower=300 +jerk_infill=12.5 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +bridge_wall_coast=0 +material_id=empty_material +retraction_count_max=100 +skirt_line_count=1 +support_interface_density=100 +coasting_enable=False +support_bottom_extruder_nr=0 +bridge_enable_more_layers=True +command_line_settings=0 +skirt_brim_extruder_nr=0 +mesh_position_x=0 +prime_tower_position_y=118.80000000000001 +expand_skins_expand_distance=0.8 +support_enable=True +skirt_height=3 +machine_endstop_positive_direction_y=False +z_seam_y=160.0 +bridge_skin_material_flow_2=97 +speed_support_interface=55 +machine_max_acceleration_x=9000 +gradual_support_infill_steps=0 +skirt_brim_minimal_length=500 +raft_surface_layers=2 +raft_surface_line_width=0.4 +support_mesh_drop_down=True +support_roof_density=97 +machine_max_feedrate_z=299792458000 +material_print_temperature_layer_0=260 +bridge_settings_enabled=True +raft_base_fan_speed=0 +skirt_brim_material_flow=97 +bridge_skin_speed=55 +machine_nozzle_cool_down_speed=0.8 +material_final_print_temperature=250 +travel_speed=500 +speed=0 +print_temperature=210 +support_bottom_stair_step_height=0 +jerk_support_bottom=12.5 +acceleration_support_infill=300 +brim_gap=0 +infill_offset_y=0 +mold_enabled=False +support_use_towers=False +support_roof_line_width=0.25 +max_skin_angle_for_expansion=90 +bridge_sparse_infill_max_density=50 +draft_shield_height_limitation=full +top_bottom_pattern=lines +machine_max_acceleration_e=10000 +draft_shield_dist=10 +anti_overhang_mesh=False +gradual_support_infill_step_height=0.8 +raft_jerk=12.5 \ No newline at end of file diff --git a/tests/voronoi_crash_resources/settings_002.txt b/tests/voronoi_crash_resources/settings_002.txt new file mode 100644 index 0000000000..2da8498c4c --- /dev/null +++ b/tests/voronoi_crash_resources/settings_002.txt @@ -0,0 +1,1090 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=25.0 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.8 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +machine_depth=235 +adhesion_type=raft +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +time=18:43:21 +machine_buildplate_type=glass +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=235 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=normal +clean_between_layers=False +speed_prime_tower=25.0 +speed_wall_x=25.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.8 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=50 +machine_max_jerk_e=5 +raft_margin=5 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=500 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.24 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=500 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=50 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=250 +travel_retract_before_outer_wall=True +jerk_support_interface=8 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=True +support_bottom_line_distance=2.4000240002400024 +jerk_support_bottom=8 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0.2 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=0 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=8 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +experimental=0 +bridge_wall_min_length=1 +prime_tower_position_x=227.79999999999998 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=8 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=25.0 +support_xy_distance=0.8 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=205.79999999999998 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=False +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=10 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=0 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=150.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +support_z_distance=0.2 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=500 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=50 +support_tree_rest_preference=graceful +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=25.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=25.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=off +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=0 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=30.0 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=30.0 +print_bed_temperature=50 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=25.0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=4 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=True +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=117.5 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +raft_interface_thickness=0.30000000000000004 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=everywhere +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=50.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=18.75 +support_angle=45 +machine_max_feedrate_x=500 +machine_width=235 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.2 +speed_travel=150.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=0.8 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=True +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +speed_support=25.0 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=2 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=45 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=8 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.1 +support_interface_height=0.8 +support_brim_enable=True +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +speed_support_bottom=25.0 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_bottom_height=0.8 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.2 +skin_overlap=10.0 +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=200 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=235 +support_xy_distance=0.8 +speed_wall=25.0 +skin_edge_support_layers=0 +speed_topbottom=25.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=25.0 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +connect_skin_polygons=False +infill_pattern=cubic +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=0 +skin_edge_support_thickness=0 +support_roof_height=0.8 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=45 +travel_avoid_supports=True +acceleration_infill=500 +skin_outline_count=1 +jerk_prime_tower=8 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=500 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=4 +support_interface_pattern=grid +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=12.0 +support_tree_top_rate=30 +wall_line_width_0=0.4 +acceleration_travel=500 +support_bottom_material_flow=100 +acceleration_wall=500 +ironing_enabled=True +wipe_pause=0 +wipe_retraction_prime_speed=45 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=500 +meshfix=0 +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0.2 +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +wipe_retraction_amount=5 +material_break_temperature=50 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=25.0 +raft_base_jerk=8 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=500 +raft_base_thickness=0.24 +jerk_support=8 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=8 +retraction_hop=0.5 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +retraction_combing_max_distance=30 +z_seam_x=117.5 +infill_line_distance=12.0 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +retraction_prime_speed=45 +z_seam_type=back +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=200 +support_bottom_stair_step_height=0 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=180 +xy_offset_layer_0=0 +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +support_zag_skip_count=10 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +material_print_temperature=200 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=8 +top_skin_preshrink=0.8 +retraction_hop_enabled=True +acceleration_roofing=500 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_weighted +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=150.0 +support_angle=45 +raft_base_speed=18.75 +jerk_support_interface=8 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=10 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=8 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=500 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=45 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=25.0 +infill=0 +support_tree_rest_preference=graceful +coasting_speed=90 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=25.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +acceleration_support=500 +retraction_hop_after_extruder_switch_height=0.5 +machine_extruder_end_pos_abs=False +jerk_layer_0=8 +cool_min_temperature=200 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.8 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=5 +wipe_retraction_speed=45 +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=30.0 +jerk_wall=8 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.4000240002400024 +raft_interface_jerk=8 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=4 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=45 +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +acceleration_print=500 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=500 +machine_settings=0 +skirt_line_count=3 +retraction_count_max=100 +jerk_travel_layer_0=8 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.8 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=8 +speed_z_hop=5 +wipe_hop_enable=True +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=500 +jerk_support_roof=8 +machine_endstop_positive_direction_y=False +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.30000000000000004 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=50.0 +retraction_min_travel=1.5 +support_line_width=0.4 +jerk_roofing=8 +roofing_line_width=0.4 +support_initial_layer_line_distance=2.0 +meshfix_union_all=True +support_z_distance=0.2 +support_bottom_line_width=0.4 +acceleration_wall_x=500 +skin_material_flow=100 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.8 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=2 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=8 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.2 +command_line_settings=0 +raft_margin=5 +material_end_of_filament_purge_speed=0.5 +speed_support=25.0 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=8 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=8 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.5 +wipe_retraction_enable=True +cool_min_layer_time=10 +top_thickness=0.8 +jerk_support_bottom=8 +conical_overhang_hole_size=0 +material_final_print_temperature=200 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_003.txt b/tests/voronoi_crash_resources/settings_003.txt new file mode 100644 index 0000000000..00353b70cf --- /dev/null +++ b/tests/voronoi_crash_resources/settings_003.txt @@ -0,0 +1,1091 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.42 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.36 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=concentric +top_skin_expand_distance=1.2000000000000002 +raft_interface_acceleration=500 +expand_skins_expand_distance=1.2000000000000002 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=25.0 +support_roof_material_flow=95.0 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.96 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.12 +retraction_enable=True +support_line_distance=0 +machine_depth=235 +adhesion_type=skirt +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=3 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.42 +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.84 +raft_jerk=8 +time=18:49:06 +machine_buildplate_type=glass +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=7 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=235 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=tree +clean_between_layers=False +speed_prime_tower=25.0 +speed_wall_x=25.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.96 +raft_surface_line_spacing=0.42 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.12 +material_bed_temperature_layer_0=65 +machine_max_jerk_e=5 +raft_margin=15 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=500 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.144 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +acceleration_support_infill=500 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +quality_changes_name=GG_Best_Dragon_1 +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=2.5200252002520025 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=50 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.42 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=5.143516556418883e-17 +raft_interface_line_width=0.84 +machine_height=250 +travel_retract_before_outer_wall=True +jerk_support_interface=12.0 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.84 +material_print_temp_prepend=True +support_bottom_line_distance=2.5200252002520025 +jerk_support_bottom=12.0 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.12 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.0 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=1.2000000000000002 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=-1 +support_top_distance=0.24 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.42 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=12.0 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +experimental=0 +bridge_wall_min_length=2.24 +prime_tower_position_x=223.58 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=12.0 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=3 +speed_wall=25.0 +support_xy_distance=0.84 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=12.0 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=201.58 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=1.2000000000000002 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=True +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=0 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=1.2000000000000002 +raft_interface_jerk=12.0 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=-1 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=150.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +support_z_distance=0.24 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=500 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=60 +support_tree_rest_preference=buildplate +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=25.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.84 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=1.2000000000000002 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=95.0 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=25.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=noskin +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=1 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=33.333333333333336 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=95.0 +infill_overlap=30.0 +print_bed_temperature=60 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=25.0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=7 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.04 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=7 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.84 +acceleration_enabled=True +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=117.5 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +raft_interface_thickness=0.18 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.12 +support_initial_layer_line_distance=0 +support_bottom_line_width=0.42 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=buildplate +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=50.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=18.75 +support_angle=40 +machine_max_feedrate_x=500 +machine_width=235 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.12 +speed_travel=150.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=1.2000000000000002 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +speed_support=25.0 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.42 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=50 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=12.0 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=0.96 +support_brim_enable=True +support_interface_skip_height=0.12 +jerk_support_infill=12.0 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=95.0 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.42 +jerk_infill=12.0 +mesh_position_y=0 +cool_fan_full_at_height=0.36 +layer_0_z_overlap=0.15 +support_pattern=concentric +top_skin_expand_distance=0.84 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.84 +support_skip_zag_per_mm=20 +speed_support_bottom=25.0 +support_roof_material_flow=95.0 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_bottom_height=0.96 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.12 +retraction_enable=True +support_line_distance=0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.12 +skin_overlap=30.0 +speed_travel_layer_0=35 +raft_surface_line_width=0.42 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.84 +raft_jerk=12.0 +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=205.0 +support_tree_min_height_to_model=3 +bottom_layers=7 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.42 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=0 +support_xy_distance=0.84 +speed_wall=25.0 +skin_edge_support_layers=0 +speed_topbottom=25.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=25.0 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.126 +connect_skin_polygons=True +infill_pattern=cubic +wall_0_material_flow=95.0 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=1 +skin_edge_support_thickness=0 +support_roof_height=0.96 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=45 +travel_avoid_supports=True +acceleration_infill=500 +skin_outline_count=0 +jerk_prime_tower=12.0 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=500 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=7 +support_interface_pattern=grid +support_xy_distance_overhang=0.42 +retract_at_layer_change=False +wall_transition_length=0.42 +wall_x_material_flow=95.0 +min_skin_width_for_expansion=5.143516556418883e-17 +cross_infill_pocket_size=5.04 +support_tree_top_rate=30 +wall_line_width_0=0.42 +acceleration_travel=500 +support_bottom_material_flow=95.0 +acceleration_wall=500 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=45 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=500 +meshfix=0 +material_flow=95.0 +support_offset=0.0 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0 +machine_steps_per_mm_e=1600 +wall_thickness=1.26 +wipe_retraction_amount=5 +material_break_temperature=50 +support_top_distance=0.24 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.42 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=20 +support_roof_line_distance=2.5200252002520025 +prime_tower_line_width=0.42 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.42 +skin_line_width=0.38 +speed_wall_x=30 +raft_base_jerk=12.0 +gradual_support_infill_steps=0 +skirt_brim_material_flow=95.0 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.42 +raft_acceleration=500 +raft_base_thickness=0.144 +jerk_support=12.0 +wall_line_width_x=0.42 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=12.0 +retraction_hop=0.2 +support_tree_tip_diameter=0.84 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=3 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +retraction_combing_max_distance=30 +z_seam_x=0.0 +infill_line_distance=5.04 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=95.0 +bottom_skin_preshrink=0.84 +sub_div_rad_add=0.42 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=12.0 +retraction_prime_speed=45 +z_seam_type=sharpest_corner +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=215.0 +support_bottom_stair_step_height=0 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=180 +xy_offset_layer_0=0 +acceleration_print_layer_0=500 +z_seam_relative=True +fill_outline_gaps=True +support_zag_skip_count=0 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +material_print_temperature=205.0 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=12.0 +top_skin_preshrink=0.84 +retraction_hop_enabled=False +acceleration_roofing=500 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_inner +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=150.0 +support_angle=40 +raft_base_speed=18.75 +jerk_support_interface=12.0 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=25.0 +skirt_brim_line_width=0.42 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=12.0 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=500 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=45 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=205.0 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=95.0 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=25.0 +infill=0 +support_tree_rest_preference=buildplate +coasting_speed=90 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=25.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=12.0 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +acceleration_support=500 +retraction_hop_after_extruder_switch_height=0.2 +machine_extruder_end_pos_abs=False +jerk_layer_0=12.0 +cool_min_temperature=205.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.84 +small_feature_max_length=0.0 +skin_overlap_mm=0.12 +support_material_flow=95.0 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.84 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=5 +wipe_retraction_speed=45 +skirt_brim_speed=30 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.84 +support_tree_branch_diameter_angle=7 +wall_material_flow=95.0 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=33.333333333333336 +jerk_wall=12.0 +extruder_nr=0 +support_interface_material_flow=95.0 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.5200252002520025 +raft_interface_jerk=12.0 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=7 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.381 +inset_direction=outside_in +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=50 +support_interface_skip_height=0.12 +jerk_support_infill=12.0 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +acceleration_print=500 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=500 +machine_settings=0 +skirt_line_count=2 +retraction_count_max=100 +jerk_travel_layer_0=12.0 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.96 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=12.0 +speed_z_hop=5 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.04 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=500 +jerk_support_roof=12.0 +machine_endstop_positive_direction_y=False +acceleration_wall_0=500 +shell=0 +small_skin_width=0.76 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.18 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=60 +retraction_min_travel=1.5 +support_line_width=0.42 +jerk_roofing=12.0 +roofing_line_width=0.38 +support_initial_layer_line_distance=0 +meshfix_union_all=True +support_z_distance=0.24 +support_bottom_line_width=0.42 +acceleration_wall_x=500 +skin_material_flow=95.0 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.42 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.84 +raft_interface_line_width=0.84 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=0 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=12.0 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.105 +infill_sparse_thickness=0.12 +command_line_settings=0 +raft_margin=15 +material_end_of_filament_purge_speed=0.5 +speed_support=25.0 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=12.0 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=12.0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.2 +wipe_retraction_enable=True +cool_min_layer_time=10 +top_thickness=0.84 +jerk_support_bottom=12.0 +conical_overhang_hole_size=0 +material_final_print_temperature=205.0 +infill_material_flow=95.0 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_004.txt b/tests/voronoi_crash_resources/settings_004.txt new file mode 100644 index 0000000000..c601d4e1cf --- /dev/null +++ b/tests/voronoi_crash_resources/settings_004.txt @@ -0,0 +1,1091 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.4 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=1.2000000000000002 +raft_interface_acceleration=350 +expand_skins_expand_distance=1.2000000000000002 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=20 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.8 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.1 +retraction_enable=True +support_line_distance=2.0 +machine_depth=225 +adhesion_type=brim +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=3 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +time=18:50:45 +machine_buildplate_type=glass +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=8 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=225 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=normal +clean_between_layers=False +speed_prime_tower=25.0 +speed_wall_x=25.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.8 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.1 +material_bed_temperature_layer_0=70 +machine_max_jerk_e=5 +raft_margin=15 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=350 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.24 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=350 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=60 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=250 +travel_retract_before_outer_wall=True +jerk_support_interface=8 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=True +support_bottom_line_distance=2.4000240002400024 +jerk_support_bottom=8 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.1 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0.2 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=1.2000000000000002 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=-1 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=8 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=350 +experimental=0 +bridge_wall_min_length=2.2 +prime_tower_position_x=213.12 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=8 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=350 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=350 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=25.0 +support_xy_distance=0.8 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=191.12 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=1.2000000000000002 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=22.5 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=16.875 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=False +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=10 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=1.2000000000000002 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=-1 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=150.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +support_z_distance=0.2 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=350 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=1 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=55 +support_tree_rest_preference=graceful +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +machine_disallowed_areas=[] +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=25.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=20 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=1.2000000000000002 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=25.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=noskin +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=0 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=8 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=20 +support_tree_angle_slow=36.666666666666664 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=30.0 +print_bed_temperature=55 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=30 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=8 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=8 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=112.5 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +raft_interface_thickness=0.15000000000000002 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=everywhere +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=50.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=16.875 +support_angle=55 +machine_max_feedrate_x=500 +machine_width=225 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.1 +speed_travel=150.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=1.2000000000000002 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=350 +speed_support=30 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=2 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=55 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=8 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=0.8 +support_brim_enable=True +support_interface_skip_height=0.1 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=350 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.4 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=2.4 +raft_interface_acceleration=350 +expand_skins_expand_distance=2.4 +support_skip_zag_per_mm=20 +speed_support_bottom=20 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=13.333333333333334 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=3 +support_bottom_height=0.8 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.1 +retraction_enable=True +support_line_distance=2.0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=6 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.1 +skin_overlap=10.0 +speed_travel_layer_0=90 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=12 +support_brim_width=4 +top_bottom_thickness=1.2 +raft_jerk=8 +center_object=False +speed_print=45 +travel=0 +material_print_temperature_layer_0=200 +support_tree_min_height_to_model=3 +bottom_layers=8 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=225 +support_xy_distance=0.8 +speed_wall=22.5 +skin_edge_support_layers=0 +speed_topbottom=20 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=30 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0 +connect_skin_polygons=False +infill_pattern=lines +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=0 +skin_edge_support_thickness=0 +support_roof_height=0.8 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=25 +travel_avoid_supports=True +acceleration_infill=350 +skin_outline_count=1 +jerk_prime_tower=8 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=350 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=8 +support_interface_pattern=grid +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=0.40404040404040403 +support_tree_top_rate=30 +wall_line_width_0=0.4 +acceleration_travel=500 +support_bottom_material_flow=100 +acceleration_wall=350 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=25 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=350 +meshfix=0 +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0.2 +machine_steps_per_mm_e=1600 +wall_thickness=1.2000000000000002 +wipe_retraction_amount=6.5 +material_break_temperature=50 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=15 +support_roof_line_distance=2.4000240002400024 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=35 +raft_base_jerk=8 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=350 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=350 +raft_base_thickness=0.24 +jerk_support=8 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=8 +retraction_hop=0.2 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=350 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=350 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +retraction_combing_max_distance=60 +z_seam_x=112.5 +infill_line_distance=0.40404040404040403 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=350 +prime_tower_flow=100 +bottom_skin_preshrink=2.4 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=22.5 +speed_layer_0=20.0 +jerk_print=8 +retraction_prime_speed=25 +z_seam_type=back +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=190 +support_bottom_stair_step_height=0 +speed_roofing=20 +brim_outside_only=True +material_standby_temperature=175 +xy_offset_layer_0=0 +acceleration_print_layer_0=350 +z_seam_relative=False +fill_outline_gaps=False +support_zag_skip_count=10 +raft_interface_speed=16.875 +travel_avoid_distance=0.638 +material_print_temperature=190 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=8 +top_skin_preshrink=2.4 +retraction_hop_enabled=False +acceleration_roofing=350 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=120 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_weighted +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=100 +support_angle=55 +raft_base_speed=16.875 +jerk_support_interface=8 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=99 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=8 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=350 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=25 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=190 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=20 +infill=0 +support_tree_rest_preference=graceful +coasting_speed=90 +bridge_skin_speed_3=12 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=30 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=101 +speed_print_layer_0=20 +acceleration_support=350 +retraction_hop_after_extruder_switch_height=0.2 +machine_extruder_end_pos_abs=False +jerk_layer_0=8 +cool_min_temperature=190 +mold_angle=40 +raft_speed=22.5 +roofing_monotonic=True +bottom_thickness=1.2 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=101 +speed_support_interface=20 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=2.4 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=6.5 +wipe_retraction_speed=25 +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=101 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=8 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=20 +support_tree_angle_slow=36.666666666666664 +jerk_wall=8 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.4000240002400024 +raft_interface_jerk=8 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=15.0 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=12 +top_layers=8 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=55 +support_interface_skip_height=0.1 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +acceleration_print=350 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=350 +machine_settings=0 +skirt_line_count=3 +retraction_count_max=100 +jerk_travel_layer_0=10 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.8 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=8 +speed_z_hop=5 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=350 +jerk_support_roof=8 +machine_endstop_positive_direction_y=False +acceleration_wall_0=350 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=350 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.15000000000000002 +skin_material_flow_layer_0=101 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=40 +retraction_min_travel=1.5 +support_line_width=0.4 +jerk_roofing=8 +roofing_line_width=0.4 +support_initial_layer_line_distance=2.0 +meshfix_union_all=True +support_z_distance=0.2 +support_bottom_line_width=0.4 +acceleration_wall_x=350 +skin_material_flow=100 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=2.4 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=2 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=10 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.1 +command_line_settings=0 +raft_margin=15 +material_end_of_filament_purge_speed=0.5 +speed_support=30 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=8 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=8 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.2 +wipe_retraction_enable=True +cool_min_layer_time=8 +top_thickness=1.2 +jerk_support_bottom=8 +conical_overhang_hole_size=0 +material_final_print_temperature=190 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_005.txt b/tests/voronoi_crash_resources/settings_005.txt new file mode 100644 index 0000000000..366cdd5c24 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_005.txt @@ -0,0 +1,1092 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=25.0 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.8 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +machine_depth=300 +adhesion_type=raft +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +time=18:54:59 +machine_buildplate_type=glass +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=300 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=normal +clean_between_layers=False +speed_prime_tower=25.0 +speed_wall_x=25.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.8 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=55 +machine_max_jerk_e=5 +raft_margin=5.0 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=3 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=500 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.24 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=500 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +quality_changes_name=empty +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=8 +support_roof_line_distance=2.4000240002400024 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=60 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=340 +travel_retract_before_outer_wall=True +jerk_support_interface=8 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=False +support_bottom_line_distance=2.4000240002400024 +jerk_support_bottom=8 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=0 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=8 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +experimental=0 +bridge_wall_min_length=2.2 +prime_tower_position_x=292.8 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=8 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=25.0 +support_xy_distance=0.8 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=270.8 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=True +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=10 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=0 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=150.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +support_z_distance=0.2 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=500 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=55 +support_tree_rest_preference=buildplate +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +machine_disallowed_areas=[] +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=25.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=25.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=noskin +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=0 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=43.333333333333336 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=30.0 +print_bed_temperature=55 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=25.0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=4 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=150.0 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +raft_interface_thickness=0.30000000000000004 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=buildplate +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=50.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=18.75 +support_angle=65.0 +machine_max_feedrate_x=500 +machine_width=300 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.2 +speed_travel=150.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=0.8 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +speed_support=25.0 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=2 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=65.0 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=8 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=0.8 +support_brim_enable=True +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +speed_support_bottom=25.0 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_bottom_height=0.8 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.2 +skin_overlap=10.0 +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=203.0 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=300 +support_xy_distance=0.8 +speed_wall=25.0 +skin_edge_support_layers=0 +speed_topbottom=25.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=25.0 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +connect_skin_polygons=False +infill_pattern=cubic +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=0 +skin_edge_support_thickness=0 +support_roof_height=0.8 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=25 +travel_avoid_supports=True +acceleration_infill=500 +skin_outline_count=1 +jerk_prime_tower=8 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=500 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=4 +support_interface_pattern=grid +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=17.142857142857142 +support_tree_top_rate=30 +wall_line_width_0=0.4 +acceleration_travel=500 +support_bottom_material_flow=100 +acceleration_wall=500 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=25 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=500 +meshfix=0 +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0 +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +wipe_retraction_amount=6.5 +material_break_temperature=50 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=8 +support_roof_line_distance=2.4000240002400024 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=25.0 +raft_base_jerk=8 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=500 +raft_base_thickness=0.24 +jerk_support=8 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=8 +retraction_hop=0.2 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +retraction_combing_max_distance=30 +z_seam_x=150.0 +infill_line_distance=17.142857142857142 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +retraction_prime_speed=25 +z_seam_type=back +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=203.0 +support_bottom_stair_step_height=0 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=175 +xy_offset_layer_0=0 +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +support_zag_skip_count=10 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +material_print_temperature=203.0 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=8 +top_skin_preshrink=0.8 +retraction_hop_enabled=False +acceleration_roofing=500 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_weighted +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=150.0 +support_angle=65.0 +raft_base_speed=18.75 +jerk_support_interface=8 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=7 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=8 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=500 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=25 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=203.0 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=25.0 +infill=0 +support_tree_rest_preference=buildplate +coasting_speed=90 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=25.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +acceleration_support=500 +retraction_hop_after_extruder_switch_height=0.2 +machine_extruder_end_pos_abs=False +jerk_layer_0=8 +cool_min_temperature=203.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.8 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=6.5 +wipe_retraction_speed=25 +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=43.333333333333336 +jerk_wall=8 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.4000240002400024 +raft_interface_jerk=8 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=4 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=65.0 +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=3 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +acceleration_print=500 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=500 +machine_settings=0 +skirt_line_count=3 +retraction_count_max=100 +jerk_travel_layer_0=8 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.8 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=8 +speed_z_hop=5 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=500 +jerk_support_roof=8 +machine_endstop_positive_direction_y=False +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.30000000000000004 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=50.0 +retraction_min_travel=1.5 +support_line_width=0.4 +jerk_roofing=8 +roofing_line_width=0.4 +support_initial_layer_line_distance=2.0 +meshfix_union_all=True +support_z_distance=0.2 +support_bottom_line_width=0.4 +acceleration_wall_x=500 +skin_material_flow=100 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.8 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=2 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=8 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.2 +command_line_settings=0 +raft_margin=5.0 +material_end_of_filament_purge_speed=0.5 +speed_support=25.0 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=8 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=8 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.2 +wipe_retraction_enable=True +cool_min_layer_time=10 +top_thickness=0.8 +jerk_support_bottom=8 +conical_overhang_hole_size=0 +material_final_print_temperature=203.0 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_006.txt b/tests/voronoi_crash_resources/settings_006.txt new file mode 100644 index 0000000000..7fff40c135 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_006.txt @@ -0,0 +1,1092 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=grid +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=25.0 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.8 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=0 +machine_depth=220 +adhesion_type=skirt +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +time=18:56:12 +machine_buildplate_type=glass +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=220 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=tree +clean_between_layers=False +speed_prime_tower=25.0 +speed_wall_x=25.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.8 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +machine_max_jerk_e=5 +raft_margin=15 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=500 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.24 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=500 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +quality_changes_name=empty +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=60 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=250 +travel_retract_before_outer_wall=True +jerk_support_interface=8 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=False +support_bottom_line_distance=2.4000240002400024 +jerk_support_bottom=8 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.0 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0.2 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=-1 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=8 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +experimental=0 +bridge_wall_min_length=2.2 +prime_tower_position_x=208.6 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=8 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=25.0 +support_xy_distance=0.8 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=186.6 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=True +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=0 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=-1 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=150.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +support_z_distance=0.2 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=500 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=60 +support_tree_rest_preference=graceful +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +machine_disallowed_areas=[] +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=25.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=25.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=noskin +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=1 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=40.0 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=30.0 +print_bed_temperature=60 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=25.0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=4 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=110.0 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +raft_interface_thickness=0.30000000000000004 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.2 +support_initial_layer_line_distance=0 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=everywhere +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=50.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=18.75 +support_angle=60.0 +machine_max_feedrate_x=500 +machine_width=220 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.2 +speed_travel=150.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=0.8 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +speed_support=25.0 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=60.0 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=8 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=0.8 +support_brim_enable=True +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +layer_0_z_overlap=0.15 +support_pattern=grid +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +speed_support_bottom=25.0 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=16.666666666666668 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_bottom_height=0.8 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.2 +skin_overlap=10.0 +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=12.5 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +center_object=False +speed_print=50.0 +travel=0 +material_print_temperature_layer_0=200 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=220 +support_xy_distance=0.8 +speed_wall=25.0 +skin_edge_support_layers=0 +speed_topbottom=25.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=25.0 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +connect_skin_polygons=False +infill_pattern=cubic +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=1 +skin_edge_support_thickness=0 +support_roof_height=0.8 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=25 +travel_avoid_supports=True +acceleration_infill=500 +skin_outline_count=1 +jerk_prime_tower=8 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=500 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=4 +support_interface_pattern=grid +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +wall_line_width_0=0.4 +acceleration_travel=500 +support_bottom_material_flow=100 +acceleration_wall=500 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=25 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=500 +meshfix=0 +material_flow=100 +support_offset=0.0 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0.2 +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +wipe_retraction_amount=6.5 +material_break_temperature=50 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=25.0 +raft_base_jerk=8 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=12.5 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=500 +raft_base_thickness=0.24 +jerk_support=8 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=8 +retraction_hop=0.2 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +retraction_combing_max_distance=30 +z_seam_x=110.0 +infill_line_distance=6.0 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=25.0 +speed_layer_0=20.0 +jerk_print=8 +retraction_prime_speed=25 +z_seam_type=back +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=200 +support_bottom_stair_step_height=0 +speed_roofing=25.0 +brim_outside_only=True +material_standby_temperature=175 +xy_offset_layer_0=0 +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +support_zag_skip_count=0 +raft_interface_speed=18.75 +travel_avoid_distance=0.625 +material_print_temperature=200 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=8 +top_skin_preshrink=0.8 +retraction_hop_enabled=False +acceleration_roofing=500 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_weighted +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=150.0 +support_angle=60.0 +raft_base_speed=18.75 +jerk_support_interface=8 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=20 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=8 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=500 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=25 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=25.0 +infill=0 +support_tree_rest_preference=graceful +coasting_speed=90 +bridge_skin_speed_3=12.5 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=25.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +acceleration_support=500 +retraction_hop_after_extruder_switch_height=0.2 +machine_extruder_end_pos_abs=False +jerk_layer_0=8 +cool_min_temperature=200 +mold_angle=40 +raft_speed=25.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=25.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.8 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=6.5 +wipe_retraction_speed=25 +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=25.0 +support_tree_angle_slow=40.0 +jerk_wall=8 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.4000240002400024 +raft_interface_jerk=8 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=12.5 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=4 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=60.0 +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +acceleration_print=500 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=500 +machine_settings=0 +skirt_line_count=3 +retraction_count_max=100 +jerk_travel_layer_0=8 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.8 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=8 +speed_z_hop=5 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=500 +jerk_support_roof=8 +machine_endstop_positive_direction_y=False +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.30000000000000004 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=50.0 +retraction_min_travel=1.5 +support_line_width=0.4 +jerk_roofing=8 +roofing_line_width=0.4 +support_initial_layer_line_distance=0 +meshfix_union_all=True +support_z_distance=0.2 +support_bottom_line_width=0.4 +acceleration_wall_x=500 +skin_material_flow=100 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.8 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=0 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=8 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.2 +command_line_settings=0 +raft_margin=15 +material_end_of_filament_purge_speed=0.5 +speed_support=25.0 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=8 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=8 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.2 +wipe_retraction_enable=True +cool_min_layer_time=10 +top_thickness=0.8 +jerk_support_bottom=8 +conical_overhang_hole_size=0 +material_final_print_temperature=200 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_007.txt b/tests/voronoi_crash_resources/settings_007.txt new file mode 100644 index 0000000000..2a63b6dbd9 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_007.txt @@ -0,0 +1,1092 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=40.0 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=26.666666666666668 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_extruder_nr=0 +support_bottom_height=0.8 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +machine_depth=220 +adhesion_type=skirt +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +machine_heated_build_volume=False +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=20.0 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +time=19:00:31 +machine_buildplate_type=glass +center_object=False +speed_print=80.0 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=220 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=0.2 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=cubic +support_structure=normal +clean_between_layers=False +speed_prime_tower=40.0 +speed_wall_x=40.0 +support_bottom_stair_step_height=0 +draft_shield_enabled=False +support_roof_height=0.8 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +machine_max_jerk_e=5 +raft_margin=15 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=True +acceleration_infill=500 +acceleration_support_roof=500 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.24 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=500 +brim_gap=0 +machine_max_acceleration_y=500 +meshfix_maximum_deviation=0.025 +quality_changes_name=empty +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.12 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=60 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=305.0 +travel_retract_before_outer_wall=True +jerk_support_interface=8 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=True +support_bottom_line_distance=2.4000240002400024 +jerk_support_bottom=8 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0.2 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=-1 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=5 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=8 +support_roof_pattern=grid +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=20.0 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +experimental=0 +bridge_wall_min_length=2.2 +prime_tower_position_x=207.79999999999998 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=500 +interlocking_orientation=22.5 +jerk_support=8 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +retraction_extrusion_window=10 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=40.0 +support_xy_distance=0.8 +infill_wipe_dist=0.0 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=185.79999999999998 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +machine_max_feedrate_z=10 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=40.0 +speed_layer_0=20.0 +jerk_print=8 +top_bottom_extruder_nr=-1 +retraction_hop=0.2 +jerk_wall_0=8 +raft_interface_speed=30.0 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=10 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=210 +speed_roofing=40.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=False +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +material_type=empty +support_zag_skip_count=10 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=10.0 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=-1 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=500 +travel_speed=200.0 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +support_z_distance=0.2 +meshfix_union_all=True +z_seam_corner=z_seam_corner_weighted +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +acceleration_support=500 +jerk_layer_0=8 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.04 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=10 +infill_line_distance=6.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +material_bed_temperature=60 +support_tree_rest_preference=graceful +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=20.0 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +machine_disallowed_areas=[] +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=40.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=500 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +mold_angle=40 +raft_speed=40.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +anti_overhang_mesh=False +wall_0_material_flow_layer_0=100 +speed_support_interface=40.0 +machine_max_acceleration_x=500 +bridge_skin_material_flow_2=100 +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=40.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=noskin +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=0 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=40.0 +support_tree_angle_slow=30.0 +jerk_wall=8 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=30.0 +print_bed_temperature=60 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=40.0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=4 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +retraction_hop_after_extruder_switch_height=0.2 +acceleration_prime_tower=500 +machine_max_feedrate_y=500 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=33.333 +bridge_wall_speed=20.0 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=8 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=110.0 +retraction_combing_max_distance=30 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +raft_interface_thickness=0.30000000000000004 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=everywhere +jerk_travel_layer_0=8 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=50 +skirt_line_count=3 +material_id=empty_material +retraction_count_max=100 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=8 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=80.0 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=back +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=30.0 +support_angle=45 +machine_max_feedrate_x=500 +machine_width=220 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=grid +acceleration_print=500 +material_flush_purge_speed=0.5 +minimum_interface_area=10 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=8 +bridge_wall_coast=100 +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=True +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.2 +speed_travel=200.0 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +machine_max_acceleration_e=5000 +roofing_layer_count=0 +skin_preshrink=0.8 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=True +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=25 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=500 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +speed_support=40.0 +retraction_min_travel=1.5 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=8 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=2 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=45 +machine_max_jerk_z=0.4 +cool_min_layer_time=10 +speed_z_hop=5 +xy_offset_layer_0=0 +jerk_support_roof=8 +machine_extruder_count=1 +material_final_print_temperature=210 +jerk_travel=8 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=0.8 +support_brim_enable=True +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +acceleration_travel=500 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=500 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=8 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=500 +support_interface_line_width=0.4 +jerk_infill=8 +mesh_position_y=0 +cool_fan_full_at_height=0.6000000000000001 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=500 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +speed_support_bottom=40.0 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=26.666666666666668 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=4 +support_bottom_height=0.8 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.0 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=10 +wall_0_wipe_dist=0.0 +support_infill_sparse_thickness=0.2 +skin_overlap=10.0 +speed_travel_layer_0=100.0 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=20.0 +support_brim_width=4 +top_bottom_thickness=0.8 +raft_jerk=8 +center_object=False +speed_print=80.0 +travel=0 +material_print_temperature_layer_0=225.0 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=False +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=220 +support_xy_distance=0.8 +speed_wall=40.0 +skin_edge_support_layers=0 +speed_topbottom=40.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=40.0 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +connect_skin_polygons=False +infill_pattern=cubic +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=0 +skin_edge_support_thickness=0 +support_roof_height=0.8 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=45 +travel_avoid_supports=True +acceleration_infill=500 +skin_outline_count=1 +jerk_prime_tower=8 +machine_nozzle_id=unknown +acceleration_travel_layer_0=500 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=500 +brim_gap=0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=4 +support_interface_pattern=grid +support_xy_distance_overhang=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=6.0 +support_tree_top_rate=30 +wall_line_width_0=0.4 +acceleration_travel=500 +support_bottom_material_flow=100 +acceleration_wall=500 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=45 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=500 +meshfix=0 +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0.2 +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +wipe_retraction_amount=5 +material_break_temperature=50 +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=5 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=20 +support_roof_line_distance=2.4000240002400024 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=40.0 +raft_base_jerk=8 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=20.0 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=500 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=500 +raft_base_thickness=0.24 +jerk_support=8 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=8 +retraction_hop=0.2 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=500 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=10 +support_fan_enable=False +raft_base_acceleration=500 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.0 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +material_guid=a55a7c05-b00d-42fc-953e-95b01860e05c +retraction_combing_max_distance=30 +z_seam_x=110.0 +infill_line_distance=6.0 +minimum_bottom_area=10 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=500 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=33.333 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=40.0 +speed_layer_0=20.0 +jerk_print=8 +retraction_prime_speed=45 +z_seam_type=back +support_bottom_enable=True +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=225.0 +support_bottom_stair_step_height=0 +speed_roofing=40.0 +brim_outside_only=True +material_standby_temperature=180.0 +xy_offset_layer_0=0 +acceleration_print_layer_0=500 +z_seam_relative=False +fill_outline_gaps=False +support_zag_skip_count=10 +raft_interface_speed=30.0 +travel_avoid_distance=0.625 +material_print_temperature=225.0 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=8 +top_skin_preshrink=0.8 +retraction_hop_enabled=False +acceleration_roofing=500 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_weighted +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=200.0 +support_angle=45 +raft_base_speed=30.0 +jerk_support_interface=8 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=20 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=8 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=500 +support_roof_offset=0.0 +support_interface_density=33.333 +coasting_enable=False +retraction_retract_speed=45 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=225.0 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=40.0 +infill=0 +support_tree_rest_preference=graceful +coasting_speed=90 +bridge_skin_speed_3=20.0 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=40.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=8 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +acceleration_support=500 +retraction_hop_after_extruder_switch_height=0.2 +machine_extruder_end_pos_abs=False +jerk_layer_0=8 +cool_min_temperature=225.0 +mold_angle=40 +raft_speed=40.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=40.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.8 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=5 +wipe_retraction_speed=45 +skirt_brim_speed=20.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=10 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=40.0 +support_tree_angle_slow=30.0 +jerk_wall=8 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=30.0 +lightning_infill_support_angle=40 +support_bottom_line_distance=2.4000240002400024 +raft_interface_jerk=8 +support_interface_wall_count=0 +support_roof_enable=True +alternate_extra_perimeter=False +bridge_wall_speed=20.0 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.25 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=4 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=grid +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=45 +support_interface_skip_height=0.2 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +infill_before_walls=False +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +acceleration_print=500 +support_bottom_pattern=grid +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=500 +machine_settings=0 +skirt_line_count=3 +retraction_count_max=100 +jerk_travel_layer_0=8 +mold_enabled=False +support_brim_enable=True +support_interface_height=0.8 +meshfix_maximum_travel_resolution=0.25 +mold_roof_height=0.5 +jerk_ironing=8 +speed_z_hop=5 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=10.0 +acceleration_prime_tower=500 +jerk_support_roof=8 +machine_endstop_positive_direction_y=False +acceleration_wall_0=500 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=500 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.30000000000000004 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=80.0 +retraction_min_travel=1.5 +support_line_width=0.4 +jerk_roofing=8 +roofing_line_width=0.4 +support_initial_layer_line_distance=2.0 +meshfix_union_all=True +support_z_distance=0.2 +support_bottom_line_width=0.4 +acceleration_wall_x=500 +skin_material_flow=100 +support_bottom_density=33.333 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=225.0 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.8 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=2 +minimum_interface_area=10 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=8 +bridge_wall_material_flow=50 +support_interface_enable=True +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.2 +command_line_settings=0 +raft_margin=15 +material_end_of_filament_purge_speed=0.5 +speed_support=40.0 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=8 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=8 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=0.2 +wipe_retraction_enable=True +cool_min_layer_time=10 +top_thickness=0.8 +jerk_support_bottom=8 +conical_overhang_hole_size=0 +material_final_print_temperature=225.0 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=True +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_008.txt b/tests/voronoi_crash_resources/settings_008.txt new file mode 100644 index 0000000000..4c0a14ef71 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_008.txt @@ -0,0 +1,1114 @@ +initial_extruder_nr=0 +date=02-06-2023 +print_temperature=200 +material_name=empty +draft_shield_height_limitation=full +prime_tower_wipe_enabled=True +top_bottom_pattern=lines +connect_infill_polygons=False +xy_offset=-0.015 +raft_base_jerk=20 +machine_heated_build_volume=True +resolution=0 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +support_roof_line_width=0.4 +material_shrinkage_percentage_xy=100.2 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.4 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +brim_inside_margin=2.5 +interlocking_depth=2 +skirt_gap=3 +mold_roof_height=0.5 +machine_max_acceleration_e=10000 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +machine_gcode_flavor=Griffin +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +infill_offset_y=0 +switch_extruder_retraction_speeds=20 +machine_firmware_retract=False +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +adaptive_layer_height_variation=0.1 +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +prime_tower_size=20 +extruders_enabled_count=2 +smooth_spiralized_contours=True +time=15:31:27 +machine_buildplate_type=glass +mesh_position_y=0 +jerk_print=20 +machine_max_feedrate_y=300 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +acceleration_wall_x=1500 +carve_multiple_volumes=True +flow_rate_extrusion_offset_factor=100 +speed_support_roof=35 +retraction_extra_prime_amount=0 +jerk_topbottom=20 +remove_empty_first_layers=True +wall_transition_angle=10 +support_extruder_nr=0 +z_seam_position=back +material_id=empty_material +retraction_count_max=25 +inset_direction=outside_in +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +meshfix_maximum_deviation=0.04 +mold_width=5 +adhesion_extruder_nr=-1 +brim_smart_ordering=True +raft_interface_acceleration=3500 +support_roof_material_flow=95.0 +cool_min_layer_time_fan_speed_max=11 +quality_changes_name=empty +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +material_break_speed=25 +speed_print=35 +speed_slowdown_layers=1 +default_material_print_temperature=200 +jerk_support_interface=20 +support_tree_branch_reach_limit=30 +support_bottom_stair_step_min_slope=10.0 +bottom_thickness=1 +infill_material_flow=100 +infill_angles=[ ] +skirt_height=3 +sub_div_rad_add=0.4 +speed_layer_0=14.999999999999998 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=300 +switch_extruder_retraction_amount=8 +skirt_brim_speed=14.999999999999998 +raft_surface_line_width=0.4 +roofing_pattern=lines +jerk_ironing=20 +machine_shape=rectangular +slicing_tolerance=middle +raft_interface_fan_speed=50.0 +wipe_retraction_amount=6.5 +material_break_temperature=50 +print_bed_temperature=60 +lightning_infill_support_angle=40 +acceleration_support_interface=1000 +wipe_retraction_extra_prime_amount=0 +skirt_brim_extruder_nr=-1 +material_print_temperature_layer_0=200 +cool_fan_full_at_height=0.2 +machine_disallowed_areas=[] +z_seam_relative=False +support_structure=tree +infill_sparse_thickness=0.15 +cool_min_speed=4 +wall_transition_filter_distance=100 +conical_overhang_enabled=False +support_xy_distance=0.7 +speed_wall=30 +speed_wall_x=30 +material_bed_temp_wait=True +retraction_min_travel=5 +coasting_speed=90 +material_print_temp_prepend=True +support_bottom_line_width=0.4 +support_interface_extruder_nr=0 +support_tower_maximum_supported_diameter=3.0 +nozzle_disallowed_areas=[] +brim_replaces_support=True +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +wipe_brush_pos_x=100 +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +machine_acceleration=3000 +raft_surface_fan_speed=100 +switch_extruder_prime_speed=15 +min_bead_width=0.34 +wall_x_extruder_nr=-1 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=50 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +raft_base_extruder_nr=0 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=20 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=20 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +interlocking_beam_layer_count=2 +infill_mesh_order=0 +support=0 +min_wall_line_width=0.34 +top_layers=7 +machine_max_jerk_z=0.4 +support_tree_angle=60 +alternate_carve_order=True +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +machine_max_feedrate_x=300 +machine_width=330 +acceleration_support=2000 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +material_alternate_walls=False +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +material_break_preparation_speed=2 +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +infill_multiplier=1 +prime_tower_enable=False +top_bottom=0 +support_roof_density=100 +machine_max_feedrate_z=40 +bridge_wall_coast=0 +support_roof_wall_count=1 +infill_extruder_nr=-1 +infill_sparse_density=20 +magic_spiralize=False +machine_show_variants=False +layer_height=0.15 +material_break_preparation_retracted_position=-16 +infill_mesh=False +speed_ironing=13.333333333333334 +command_line_settings=0 +wall_0_inset=0 +relative_extrusion=False +infill_wipe_dist=0 +print_sequence=all_at_once +skin_overlap=10 +speed_infill=35 +support_offset=0.0 +material_flow=100 +travel_speed=150 +speed=0 +cool_fan_speed_min=50 +wipe_move_distance=20 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=10 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +interlocking_boundary_avoidance=2 +material_print_temperature=200 +min_even_wall_line_width=0.34 +support_meshes_present=False +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +speed_travel_layer_0=150 +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +support_interface_height=0.3 +interlocking_orientation=22.5 +support_mesh_drop_down=True +skin_no_small_gaps_heuristic=False +ironing_line_spacing=0.1 +material_bed_temp_prepend=True +infill_before_walls=True +material=0 +support_interface_skip_height=0.15 +blackmagic=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=50 +bridge_enable_more_layers=False +speed_topbottom=20 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +support_infill_rate=0 +layer_start_y=228.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +adaptive_layer_height_enabled=False +support_connect_zigzags=True +ooze_shield_enabled=False +support_line_width=0.4 +roofing_line_width=0.4 +support_interface_material_flow=95.0 +infill_overlap=0 +wipe_retraction_speed=45 +retraction_amount=6.5 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +jerk_support_bottom=20 +top_thickness=1 +acceleration_enabled=True +support_roof_extruder_nr=0 +machine_center_is_zero=False +machine_scale_fan_speed_zero_to_one=False +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +layer_start_x=330.0 +machine_min_cool_heat_time_window=15 +lightning_infill_overhang_angle=40 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +jerk_infill=20 +material_final_print_temperature=185 +layer_height_0=0.2 +support_initial_layer_line_distance=0 +machine_name=Ultimaker S5 +bridge_wall_min_length=2.1 +prime_tower_position_x=299.2 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +brim_width=3 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +ironing_only_highest_layer=False +raft_remove_inside_corners=False +machine_max_feedrate_e=45 +prime_tower_line_width=0.4 +wall_line_width_x=0.4 +jerk_support=20 +machine_nozzle_cool_down_speed=0.8 +skin_line_width=0.4 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +draft_shield_enabled=False +minimum_interface_area=1.0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +conical_overhang_angle=50 +mesh_position_z=0 +infill_overlap_mm=0.0 +wall_line_width_0=0.4 +interlocking_enable=False +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +machine_max_jerk_e=5.0 +raft_margin=15 +acceleration_support_roof=1000 +support_roof_offset=0.0 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +support_infill_angles=[ ] +shell=0 +small_skin_width=0.8 +top_skin_expand_distance=0.8 +speed_print_layer_0=14.999999999999998 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +support_type=everywhere +skin_edge_support_layers=4 +ooze_shield_dist=2 +ironing_inset=0.38 +bridge_fan_speed_3=50 +speed_support=23 +fill_outline_gaps=True +material_type=empty +support_zag_skip_count=0 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +support_tree_limit_branch_reach=True +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +default_material_bed_temperature=60 +raft_jerk=20 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +raft_base_fan_speed=0 +bridge_settings_enabled=True +material_no_load_move_factor=0.940860215 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +material_bed_temperature_layer_0=60 +support_infill_sparse_thickness=0.15 +wall_extruder_nr=-1 +raft_base_acceleration=3500 +wall_0_extruder_nr=-1 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=20 +gradual_infill_step_height=1.5 +prime_tower_brim_enable=False +minimum_roof_area=1.0 +support_bottom_density=100 +skin_material_flow=95.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +support_roof_angles=[ ] +material_print_temp_wait=True +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +bridge_skin_speed=20 +skirt_brim_material_flow=100 +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_shrinkage_percentage_z=100.1 +support_roof_line_distance=0.4 +brim_line_count=8 +support_mesh=False +support_roof_pattern=zigzag +speed_roofing=20 +support_bottom_stair_step_height=0.3 +brim_outside_only=True +material_standby_temperature=100 +raft_speed=15 +mold_angle=40 +retraction_combing=no_outer_surfaces +material_flow_layer_0=100 +wall_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=50 +coasting_min_volume=0.8 +optimize_wall_printing_order=True +line_width=0.4 +machine_minimum_feedrate=0.0 +skin_edge_support_thickness=0.6 +support_wall_count=1 +machine_max_acceleration_z=100 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +bridge_skin_density_3=100 +support_interface_enable=False +prime_tower_position_y=209.2 +mesh_position_x=0 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +top_skin_preshrink=0.8 +raft_airgap=0.25 +wall_distribution_count=1 +jerk_wall_0=20 +retraction_hop=2 +support_bottom_extruder_nr=0 +retraction_speed=45 +extruder_prime_pos_y=0 +flow_rate_max_extrusion_offset=0 +material_diameter=2.85 +support_z_distance=0.3 +meshfix_union_all=True +infill_support_angle=40 +jerk_prime_tower=20 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +support_pattern=zigzag +prime_tower_min_volume=6 +support_tree_rest_preference=graceful +material_bed_temperature=60 +support_interface_wall_count=1 +material_shrinkage_percentage=100.2 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +machine_head_with_fans_polygon=[[-41.4, -45.8], [-41.4, 36.0], [63.3, 36.0], [63.3, -45.8]] +z_seam_corner=z_seam_corner_none +nozzle_offsetting_for_disallowed_areas=False +meshfix=0 +acceleration_skirt_brim=1000 +machine_max_acceleration_y=9000 +meshfix_keep_open_polygons=False +skin_monotonic=False +support_interface_offset=0.0 +adhesion_type=brim +z_seam_type=sharpest_corner +retraction_prime_speed=15 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +clean_between_layers=False +skin_preshrink=0.8 +speed_support_interface=35 +machine_max_acceleration_x=9000 +bridge_wall_speed=20 +support_bottom_offset=0.0 +support_roof_enable=False +alternate_extra_perimeter=False +speed_prime_tower=20 +support_infill_extruder_nr=0 +infill=0 +jerk_wall_x=20 +material_flush_purge_speed=0.5 +skin_material_flow_layer_0=90.0 +top_bottom_pattern_0=lines +bridge_fan_speed=100 +support_material_flow=100 +support_tree_max_diameter=25 +support_conical_angle=30 +support_enable=True +cool_min_layer_time=6 +day=Fri +wipe_retraction_enable=True +support_skip_some_zags=False +machine_steps_per_mm_x=50 +top_bottom_extruder_nr=-1 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +roofing_extruder_nr=-1 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +bridge_skin_support_threshold=50 +prime_tower_flow=100 +acceleration_ironing=1000 +roofing_material_flow=100 +support_fan_enable=False +retraction_extrusion_window=1 +support_tower_roof_angle=65 +extruder_prime_pos_z=0 +retraction_hop_after_extruder_switch_height=2 +raft_interface_line_width=0.6000000000000001 +gantry_height=55 +material_surface_energy=100 +machine_extruder_count=2 +jerk_support_roof=20 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +infill_enable_travel_optimization=False +machine_height=300 +travel_retract_before_outer_wall=False +raft_surface_speed=35 +cooling=0 +machine_extruders_share_nozzle=False +raft_acceleration=3500 +support_bottom_height=0.3 +acceleration_travel_enabled=False +travel=0 +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +min_feature_size=0.1 +quality_name=Normal +wall_0_material_flow_layer_0=110.00000000000001 +anti_overhang_mesh=False +support_interface_density=100 +ironing_monotonic=False +mold_enabled=False +jerk_travel_layer_0=20.0 +wipe_hop_enable=True +zig_zaggify_support=True +machine_depth=240 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +bridge_sparse_infill_max_density=0 +roofing_angles=[] +material_initial_print_temperature=190 +material_break_retracted_position=-50 +machine_heat_zone_length=16 +adaptive_layer_height_threshold=0.2 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +support_brim_enable=True +minimum_support_area=0.0 +prime_tower_wipe_enabled=True +acceleration_wall_x=1500 +machine_extruder_start_pos_abs=True +top_bottom_pattern=lines +xy_offset=-0.015 +machine_nozzle_offset_y=0 +raft_base_jerk=20 +resolution=0 +switch_extruder_retraction_speeds=20 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +connect_infill_polygons=False +support_roof_line_width=0.4 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.6 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +jerk_topbottom=20 +brim_inside_margin=2.5 +skirt_gap=3 +mold_roof_height=0.5 +mold_width=5 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +small_feature_speed_factor=50 +infill_offset_y=0 +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +mesh_position_y=0 +jerk_print=20 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +speed_support_roof=35 +retraction_extra_prime_amount=0 +skin_outline_count=1 +jerk_prime_tower=20 +wall_transition_angle=10 +z_seam_position=back +retraction_count_max=25 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +support_roof_material_flow=95.0 +retraction_prime_speed=45 +z_seam_type=sharpest_corner +cool_min_layer_time_fan_speed_max=11 +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +support_bottom_stair_step_min_slope=10.0 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=7200 +skirt_brim_speed=17.249999999999996 +switch_extruder_retraction_amount=16 +conical_overhang_angle=50 +infill_overlap_mm=0.0 +mesh_position_z=0 +skin_monotonic=False +meshfix_keep_open_polygons=False +sub_div_rad_add=0.4 +machine_extruder_end_pos_x=330 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1000 +z_seam_relative=False +wipe_retraction_extra_prime_amount=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=100 +blackmagic=0 +slicing_tolerance=middle +machine_extruder_end_pos_y=237 +material_break_preparation_retracted_position=-16 +infill_sparse_thickness=0.15 +support_xy_distance=0.7 +speed_wall=45 +speed_wall_x=45 +retraction_min_travel=0.8 +support_bottom_line_width=0.4 +brim_replaces_support=True +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=AA 0.4 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +raft_interface_acceleration=3500 +raft_surface_fan_speed=100 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=100 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +wipe_hop_enable=True +zig_zaggify_support=True +material_alternate_walls=False +material_end_of_filament_purge_length=20 +acceleration_support_bottom=1000 +material_break_preparation_speed=50 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +support_roof_angles=[ ] +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=35 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +min_odd_wall_line_width=0.34 +top_thickness=1 +default_material_print_temperature=200 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=35 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +min_infill_area=0 +machine_nozzle_tip_outer_diameter=1.0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +support=0 +min_wall_line_width=0.34 +top_bottom=0 +support_roof_density=100 +top_layers=7 +support_tree_angle=60 +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +jerk_wall_0=20 +retraction_hop=2 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +infill_multiplier=1 +raft_interface_fan_speed=50.0 +wall_transition_filter_distance=100 +bridge_wall_coast=0 +jerk_support_interface=20 +support_roof_wall_count=1 +infill_sparse_density=20 +speed_ironing=23.333333333333332 +command_line_settings=0 +infill_wipe_dist=0 +skin_overlap=15 +speed_infill=70 +machine_nozzle_offset_x=0 +support_offset=0.0 +material_flow=100 +speed=0 +cool_fan_speed_min=100 +wipe_move_distance=20 +optimize_wall_printing_order=True +line_width=0.4 +switch_extruder_prime_speed=20 +min_bead_width=0.34 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=0 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +material_print_temperature=200 +min_even_wall_line_width=0.34 +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +conical_overhang_enabled=False +speed_travel_layer_0=150 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +roofing_pattern=lines +support_interface_material_flow=95.0 +infill_overlap=0 +extruder_nr=0 +support_interface_height=0.3 +support_skip_some_zags=False +skin_no_small_gaps_heuristic=False +speed_support=23 +ironing_inset=0.38 +bridge_fan_speed_3=100 +bridge_enable_more_layers=False +speed_topbottom=35 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +magic_fuzzy_skin_enabled=False +roofing_line_width=0.4 +jerk_infill=20 +speed_print=70 +support_bottom_offset=0.0 +bridge_wall_speed=35 +support_initial_layer_line_distance=0 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +layer_start_y=228.0 +extruder_prime_pos_x=-3 +wall_0_inset=0 +brim_width=7 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +brim_line_count=18 +support_roof_line_distance=0.4 +prime_tower_line_width=0.4 +skin_overlap_mm=0.06 +small_feature_max_length=0.0 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +support_wall_count=1 +skin_edge_support_thickness=0.6 +wall_line_width_x=0.4 +jerk_support=20 +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +machine_nozzle_cool_down_speed=0.75 +skin_line_width=0.4 +machine_extruder_start_pos_x=330 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +infill_angles=[ ] +minimum_interface_area=1.0 +raft_interface_line_width=0.6000000000000001 +material_surface_energy=100 +support_fan_enable=False +retraction_extrusion_window=1 +machine_extruder_start_pos_y=237 +support_infill_angles=[ ] +small_skin_width=0.8 +shell=0 +wall_line_width_0=0.4 +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +raft_margin=15 +material_break_preparation_temperature=210 +wall_transition_filter_deviation=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +acceleration_support_roof=1000 +support_roof_offset=0.0 +raft_surface_line_width=0.4 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +acceleration_ironing=1000 +prime_tower_flow=100 +top_skin_expand_distance=0.8 +speed_print_layer_0=17.249999999999996 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +speed_roofing=35 +brim_outside_only=True +material_standby_temperature=100 +support_bottom_stair_step_height=0.3 +fill_outline_gaps=True +support_zag_skip_count=0 +machine_endstop_positive_direction_x=False +material_final_print_temperature=185 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=2.85 +raft_jerk=20 +raft_base_acceleration=3500 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +bridge_fan_speed=100 +support_tree_max_diameter=25 +support_material_flow=100 +material_no_load_move_factor=0.91 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +support_infill_sparse_thickness=0.15 +machine_extruder_cooling_fan_number=0 +minimum_roof_area=1.0 +material_print_temperature_layer_0=200 +raft_base_fan_speed=0 +machine_steps_per_mm_x=50 +support_tree_branch_reach_limit=30 +support_bottom_density=100 +skin_material_flow=95.0 +support_conical_min_width=5.0 +support_line_width=0.4 +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +raft_speed=15 +mold_angle=40 +material_break_speed=25 +speed_wall_0=23 +cool_lift_head=False +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +inset_direction=outside_in +support_roof_pattern=zigzag +bridge_skin_speed=35 +skirt_brim_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=100 +coasting_min_volume=0.8 +conical_overhang_hole_size=0 +jerk_support_bottom=20 +cool_min_speed=5 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +meshfix=0 +acceleration_skirt_brim=1000 +support_interface_offset=0.0 +mesh_position_x=0 +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +z_seam_corner=z_seam_corner_none +bottom_thickness=1 +support_interface_wall_count=1 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.25 +wall_distribution_count=1 +retraction_speed=45 +extruder_prime_pos_y=6 +material=0 +infill_before_walls=True +support_z_distance=0.3 +meshfix_union_all=True +raft_surface_jerk=20 +infill_support_angle=40 +support_pattern=zigzag +clean_between_layers=False +skin_preshrink=0.8 +support_roof_enable=False +alternate_extra_perimeter=False +minimum_support_area=0.0 +lightning_infill_overhang_angle=40 +support_tree_rest_preference=graceful +coasting_speed=90 +speed_prime_tower=35 +infill=0 +jerk_wall_x=20 +mold_enabled=False +jerk_travel_layer_0=20.0 +infill_material_flow=100 +ironing_monotonic=False +extruder_prime_pos_z=2 +support_tower_roof_angle=65 +meshfix_maximum_deviation=0.04 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +cool_fan_full_at_height=0.2 +support_brim_enable=True +minimum_bottom_area=1.0 +infill_line_distance=6.0 +jerk_support_roof=20 +meshfix_maximum_travel_resolution=0.8 +support_bottom_height=0.3 +raft_acceleration=3500 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +top_bottom_pattern_0=lines +skin_material_flow_layer_0=90.0 +lightning_infill_support_angle=40 +machine_extruder_end_pos_abs=True +retraction_hop_after_extruder_switch_height=2 +acceleration_support=2000 +support_conical_angle=30 +speed_layer_0=17.249999999999996 +infill_enable_travel_optimization=False +raft_surface_speed=35 +cooling=0 +min_feature_size=0.1 +travel=0 +support_connect_zigzags=True +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +material_flush_purge_speed=0.5 +wipe_retraction_speed=45 +retraction_amount=6.5 +material_break_retracted_position=-50 +material_initial_print_temperature=190 +support_tower_maximum_supported_diameter=3.0 +jerk_ironing=20 +roofing_angles=[] +bridge_skin_density_3=100 +support_interface_enable=False +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +roofing_material_flow=100 +support_interface_skip_height=0.15 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +bridge_sparse_infill_max_density=0 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +gradual_infill_step_height=1.5 +machine_heat_zone_length=16 +support_interface_density=100 +support_infill_rate=0 +speed_support_interface=35 +cool_min_layer_time=6 +wipe_retraction_enable=True +support_tree_limit_branch_reach=True +wall_0_material_flow_layer_0=110.00000000000001 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +ironing_only_highest_layer=False +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_009.txt b/tests/voronoi_crash_resources/settings_009.txt new file mode 100644 index 0000000000..d18eb80b4c --- /dev/null +++ b/tests/voronoi_crash_resources/settings_009.txt @@ -0,0 +1,1114 @@ +initial_extruder_nr=0 +date=02-06-2023 +print_temperature=200 +material_name=empty +draft_shield_height_limitation=full +prime_tower_wipe_enabled=True +top_bottom_pattern=lines +connect_infill_polygons=False +xy_offset=-0.015 +raft_base_jerk=20 +machine_heated_build_volume=True +resolution=0 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +support_roof_line_width=0.4 +material_shrinkage_percentage_xy=100.2 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.4 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +brim_inside_margin=2.5 +interlocking_depth=2 +skirt_gap=3 +mold_roof_height=0.5 +machine_max_acceleration_e=10000 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +machine_gcode_flavor=Griffin +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +infill_offset_y=0 +switch_extruder_retraction_speeds=20 +machine_firmware_retract=False +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +adaptive_layer_height_variation=0.1 +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +prime_tower_size=20 +extruders_enabled_count=2 +smooth_spiralized_contours=True +time=15:42:02 +machine_buildplate_type=glass +mesh_position_y=0 +jerk_print=20 +machine_max_feedrate_y=300 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +acceleration_wall_x=1500 +carve_multiple_volumes=True +flow_rate_extrusion_offset_factor=100 +speed_support_roof=35 +retraction_extra_prime_amount=0 +jerk_topbottom=20 +remove_empty_first_layers=True +wall_transition_angle=10 +support_extruder_nr=0 +z_seam_position=back +material_id=empty_material +retraction_count_max=25 +inset_direction=outside_in +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +meshfix_maximum_deviation=0.04 +mold_width=5 +adhesion_extruder_nr=-1 +brim_smart_ordering=True +raft_interface_acceleration=3500 +support_roof_material_flow=95.0 +cool_min_layer_time_fan_speed_max=11 +quality_changes_name=empty +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +material_break_speed=25 +speed_print=35 +speed_slowdown_layers=1 +default_material_print_temperature=200 +jerk_support_interface=20 +support_tree_branch_reach_limit=30 +support_bottom_stair_step_min_slope=10.0 +bottom_thickness=1 +infill_material_flow=100 +infill_angles=[ ] +skirt_height=3 +sub_div_rad_add=0.4 +speed_layer_0=14.999999999999998 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=300 +switch_extruder_retraction_amount=8 +skirt_brim_speed=14.999999999999998 +raft_surface_line_width=0.4 +roofing_pattern=lines +jerk_ironing=20 +machine_shape=rectangular +slicing_tolerance=middle +raft_interface_fan_speed=50.0 +wipe_retraction_amount=6.5 +material_break_temperature=50 +print_bed_temperature=60 +lightning_infill_support_angle=40 +acceleration_support_interface=1000 +wipe_retraction_extra_prime_amount=0 +skirt_brim_extruder_nr=-1 +material_print_temperature_layer_0=200 +cool_fan_full_at_height=0.2 +machine_disallowed_areas=[] +z_seam_relative=False +support_structure=tree +infill_sparse_thickness=0.15 +cool_min_speed=4 +wall_transition_filter_distance=100 +conical_overhang_enabled=False +support_xy_distance=0.7 +speed_wall=30 +speed_wall_x=30 +material_bed_temp_wait=True +retraction_min_travel=5 +coasting_speed=90 +material_print_temp_prepend=True +support_bottom_line_width=0.4 +support_interface_extruder_nr=0 +support_tower_maximum_supported_diameter=3.0 +nozzle_disallowed_areas=[] +brim_replaces_support=True +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +wipe_brush_pos_x=100 +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +machine_acceleration=3000 +raft_surface_fan_speed=100 +switch_extruder_prime_speed=15 +min_bead_width=0.34 +wall_x_extruder_nr=-1 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=50 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +raft_base_extruder_nr=0 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=20 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=20 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +interlocking_beam_layer_count=2 +infill_mesh_order=0 +support=0 +min_wall_line_width=0.34 +top_layers=7 +machine_max_jerk_z=0.4 +support_tree_angle=60 +alternate_carve_order=True +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +machine_max_feedrate_x=300 +machine_width=330 +acceleration_support=2000 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +material_alternate_walls=False +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +material_break_preparation_speed=2 +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +infill_multiplier=1 +prime_tower_enable=False +top_bottom=0 +support_roof_density=100 +machine_max_feedrate_z=40 +bridge_wall_coast=0 +support_roof_wall_count=1 +infill_extruder_nr=-1 +infill_sparse_density=20 +magic_spiralize=False +machine_show_variants=False +layer_height=0.15 +material_break_preparation_retracted_position=-16 +infill_mesh=False +speed_ironing=13.333333333333334 +command_line_settings=0 +wall_0_inset=0 +relative_extrusion=False +infill_wipe_dist=0 +print_sequence=all_at_once +skin_overlap=10 +speed_infill=35 +support_offset=0.0 +material_flow=100 +travel_speed=150 +speed=0 +cool_fan_speed_min=50 +wipe_move_distance=20 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=10 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +interlocking_boundary_avoidance=2 +material_print_temperature=200 +min_even_wall_line_width=0.34 +support_meshes_present=False +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +speed_travel_layer_0=150 +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +support_interface_height=0.3 +interlocking_orientation=22.5 +support_mesh_drop_down=True +skin_no_small_gaps_heuristic=False +ironing_line_spacing=0.1 +material_bed_temp_prepend=True +infill_before_walls=True +material=0 +support_interface_skip_height=0.15 +blackmagic=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=50 +bridge_enable_more_layers=False +speed_topbottom=20 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +support_infill_rate=0 +layer_start_y=228.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +adaptive_layer_height_enabled=False +support_connect_zigzags=True +ooze_shield_enabled=False +support_line_width=0.4 +roofing_line_width=0.4 +support_interface_material_flow=95.0 +infill_overlap=0 +wipe_retraction_speed=45 +retraction_amount=6.5 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +jerk_support_bottom=20 +top_thickness=1 +acceleration_enabled=True +support_roof_extruder_nr=0 +machine_center_is_zero=False +machine_scale_fan_speed_zero_to_one=False +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +layer_start_x=330.0 +machine_min_cool_heat_time_window=15 +lightning_infill_overhang_angle=40 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +jerk_infill=20 +material_final_print_temperature=185 +layer_height_0=0.2 +support_initial_layer_line_distance=0 +machine_name=Ultimaker S5 +bridge_wall_min_length=2.1 +prime_tower_position_x=299.2 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +brim_width=3 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +ironing_only_highest_layer=False +raft_remove_inside_corners=False +machine_max_feedrate_e=45 +prime_tower_line_width=0.4 +wall_line_width_x=0.4 +jerk_support=20 +machine_nozzle_cool_down_speed=0.8 +skin_line_width=0.4 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +draft_shield_enabled=False +minimum_interface_area=1.0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +conical_overhang_angle=50 +mesh_position_z=0 +infill_overlap_mm=0.0 +wall_line_width_0=0.4 +interlocking_enable=False +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +machine_max_jerk_e=5.0 +raft_margin=15 +acceleration_support_roof=1000 +support_roof_offset=0.0 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +support_infill_angles=[ ] +shell=0 +small_skin_width=0.8 +top_skin_expand_distance=0.8 +speed_print_layer_0=14.999999999999998 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +support_type=everywhere +skin_edge_support_layers=4 +ooze_shield_dist=2 +ironing_inset=0.38 +bridge_fan_speed_3=50 +speed_support=23 +fill_outline_gaps=True +material_type=empty +support_zag_skip_count=0 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +support_tree_limit_branch_reach=True +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +default_material_bed_temperature=60 +raft_jerk=20 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +raft_base_fan_speed=0 +bridge_settings_enabled=True +material_no_load_move_factor=0.940860215 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +material_bed_temperature_layer_0=60 +support_infill_sparse_thickness=0.15 +wall_extruder_nr=-1 +raft_base_acceleration=3500 +wall_0_extruder_nr=-1 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=20 +gradual_infill_step_height=1.5 +prime_tower_brim_enable=False +minimum_roof_area=1.0 +support_bottom_density=100 +skin_material_flow=95.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +support_roof_angles=[ ] +material_print_temp_wait=True +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +bridge_skin_speed=20 +skirt_brim_material_flow=100 +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_shrinkage_percentage_z=100.1 +support_roof_line_distance=0.4 +brim_line_count=8 +support_mesh=False +support_roof_pattern=zigzag +speed_roofing=20 +support_bottom_stair_step_height=0.3 +brim_outside_only=True +material_standby_temperature=100 +raft_speed=15 +mold_angle=40 +retraction_combing=no_outer_surfaces +material_flow_layer_0=100 +wall_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=50 +coasting_min_volume=0.8 +optimize_wall_printing_order=True +line_width=0.4 +machine_minimum_feedrate=0.0 +skin_edge_support_thickness=0.6 +support_wall_count=1 +machine_max_acceleration_z=100 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +bridge_skin_density_3=100 +support_interface_enable=False +prime_tower_position_y=209.2 +mesh_position_x=0 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +top_skin_preshrink=0.8 +raft_airgap=0.25 +wall_distribution_count=1 +jerk_wall_0=20 +retraction_hop=2 +support_bottom_extruder_nr=0 +retraction_speed=45 +extruder_prime_pos_y=0 +flow_rate_max_extrusion_offset=0 +material_diameter=2.85 +support_z_distance=0.3 +meshfix_union_all=True +infill_support_angle=40 +jerk_prime_tower=20 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +support_pattern=zigzag +prime_tower_min_volume=6 +support_tree_rest_preference=graceful +material_bed_temperature=60 +support_interface_wall_count=1 +material_shrinkage_percentage=100.2 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +machine_head_with_fans_polygon=[[-41.4, -45.8], [-41.4, 36.0], [63.3, 36.0], [63.3, -45.8]] +z_seam_corner=z_seam_corner_none +nozzle_offsetting_for_disallowed_areas=False +meshfix=0 +acceleration_skirt_brim=1000 +machine_max_acceleration_y=9000 +meshfix_keep_open_polygons=False +skin_monotonic=False +support_interface_offset=0.0 +adhesion_type=brim +z_seam_type=sharpest_corner +retraction_prime_speed=15 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +clean_between_layers=False +skin_preshrink=0.8 +speed_support_interface=35 +machine_max_acceleration_x=9000 +bridge_wall_speed=20 +support_bottom_offset=0.0 +support_roof_enable=False +alternate_extra_perimeter=False +speed_prime_tower=20 +support_infill_extruder_nr=0 +infill=0 +jerk_wall_x=20 +material_flush_purge_speed=0.5 +skin_material_flow_layer_0=90.0 +top_bottom_pattern_0=lines +bridge_fan_speed=100 +support_material_flow=100 +support_tree_max_diameter=25 +support_conical_angle=30 +support_enable=True +cool_min_layer_time=6 +day=Fri +wipe_retraction_enable=True +support_skip_some_zags=False +machine_steps_per_mm_x=50 +top_bottom_extruder_nr=-1 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +roofing_extruder_nr=-1 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +bridge_skin_support_threshold=50 +prime_tower_flow=100 +acceleration_ironing=1000 +roofing_material_flow=100 +support_fan_enable=False +retraction_extrusion_window=1 +support_tower_roof_angle=65 +extruder_prime_pos_z=0 +retraction_hop_after_extruder_switch_height=2 +raft_interface_line_width=0.6000000000000001 +gantry_height=55 +material_surface_energy=100 +machine_extruder_count=2 +jerk_support_roof=20 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +infill_enable_travel_optimization=False +machine_height=300 +travel_retract_before_outer_wall=False +raft_surface_speed=35 +cooling=0 +machine_extruders_share_nozzle=False +raft_acceleration=3500 +support_bottom_height=0.3 +acceleration_travel_enabled=False +travel=0 +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +min_feature_size=0.1 +quality_name=Normal +wall_0_material_flow_layer_0=110.00000000000001 +anti_overhang_mesh=False +support_interface_density=100 +ironing_monotonic=False +mold_enabled=False +jerk_travel_layer_0=20.0 +wipe_hop_enable=True +zig_zaggify_support=True +machine_depth=240 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +bridge_sparse_infill_max_density=0 +roofing_angles=[] +material_initial_print_temperature=190 +material_break_retracted_position=-50 +machine_heat_zone_length=16 +adaptive_layer_height_threshold=0.2 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +support_brim_enable=True +minimum_support_area=0.0 +prime_tower_wipe_enabled=True +acceleration_wall_x=1500 +machine_extruder_start_pos_abs=True +top_bottom_pattern=lines +xy_offset=-0.015 +machine_nozzle_offset_y=0 +raft_base_jerk=20 +resolution=0 +switch_extruder_retraction_speeds=20 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +connect_infill_polygons=False +support_roof_line_width=0.4 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.6 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +jerk_topbottom=20 +brim_inside_margin=2.5 +skirt_gap=3 +mold_roof_height=0.5 +mold_width=5 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +small_feature_speed_factor=50 +infill_offset_y=0 +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +mesh_position_y=0 +jerk_print=20 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +speed_support_roof=35 +retraction_extra_prime_amount=0 +skin_outline_count=1 +jerk_prime_tower=20 +wall_transition_angle=10 +z_seam_position=back +retraction_count_max=25 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +support_roof_material_flow=95.0 +retraction_prime_speed=45 +z_seam_type=sharpest_corner +cool_min_layer_time_fan_speed_max=11 +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +support_bottom_stair_step_min_slope=10.0 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=7200 +skirt_brim_speed=17.249999999999996 +switch_extruder_retraction_amount=16 +conical_overhang_angle=50 +infill_overlap_mm=0.0 +mesh_position_z=0 +skin_monotonic=False +meshfix_keep_open_polygons=False +sub_div_rad_add=0.4 +machine_extruder_end_pos_x=330 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1000 +z_seam_relative=False +wipe_retraction_extra_prime_amount=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=100 +blackmagic=0 +slicing_tolerance=middle +machine_extruder_end_pos_y=237 +material_break_preparation_retracted_position=-16 +infill_sparse_thickness=0.15 +support_xy_distance=0.7 +speed_wall=45 +speed_wall_x=45 +retraction_min_travel=0.8 +support_bottom_line_width=0.4 +brim_replaces_support=True +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=AA 0.4 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +raft_interface_acceleration=3500 +raft_surface_fan_speed=100 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=100 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +wipe_hop_enable=True +zig_zaggify_support=True +material_alternate_walls=False +material_end_of_filament_purge_length=20 +acceleration_support_bottom=1000 +material_break_preparation_speed=50 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +support_roof_angles=[ ] +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=35 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +min_odd_wall_line_width=0.34 +top_thickness=1 +default_material_print_temperature=200 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=35 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +min_infill_area=0 +machine_nozzle_tip_outer_diameter=1.0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +support=0 +min_wall_line_width=0.34 +top_bottom=0 +support_roof_density=100 +top_layers=7 +support_tree_angle=60 +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +jerk_wall_0=20 +retraction_hop=2 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +infill_multiplier=1 +raft_interface_fan_speed=50.0 +wall_transition_filter_distance=100 +bridge_wall_coast=0 +jerk_support_interface=20 +support_roof_wall_count=1 +infill_sparse_density=20 +speed_ironing=23.333333333333332 +command_line_settings=0 +infill_wipe_dist=0 +skin_overlap=15 +speed_infill=70 +machine_nozzle_offset_x=0 +support_offset=0.0 +material_flow=100 +speed=0 +cool_fan_speed_min=100 +wipe_move_distance=20 +optimize_wall_printing_order=True +line_width=0.4 +switch_extruder_prime_speed=20 +min_bead_width=0.34 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=0 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +material_print_temperature=200 +min_even_wall_line_width=0.34 +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +conical_overhang_enabled=False +speed_travel_layer_0=150 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +roofing_pattern=lines +support_interface_material_flow=95.0 +infill_overlap=0 +extruder_nr=0 +support_interface_height=0.3 +support_skip_some_zags=False +skin_no_small_gaps_heuristic=False +speed_support=23 +ironing_inset=0.38 +bridge_fan_speed_3=100 +bridge_enable_more_layers=False +speed_topbottom=35 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +magic_fuzzy_skin_enabled=False +roofing_line_width=0.4 +jerk_infill=20 +speed_print=70 +support_bottom_offset=0.0 +bridge_wall_speed=35 +support_initial_layer_line_distance=0 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +layer_start_y=228.0 +extruder_prime_pos_x=-3 +wall_0_inset=0 +brim_width=7 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +brim_line_count=18 +support_roof_line_distance=0.4 +prime_tower_line_width=0.4 +skin_overlap_mm=0.06 +small_feature_max_length=0.0 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +support_wall_count=1 +skin_edge_support_thickness=0.6 +wall_line_width_x=0.4 +jerk_support=20 +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +machine_nozzle_cool_down_speed=0.75 +skin_line_width=0.4 +machine_extruder_start_pos_x=330 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +infill_angles=[ ] +minimum_interface_area=1.0 +raft_interface_line_width=0.6000000000000001 +material_surface_energy=100 +support_fan_enable=False +retraction_extrusion_window=1 +machine_extruder_start_pos_y=237 +support_infill_angles=[ ] +small_skin_width=0.8 +shell=0 +wall_line_width_0=0.4 +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +raft_margin=15 +material_break_preparation_temperature=210 +wall_transition_filter_deviation=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +acceleration_support_roof=1000 +support_roof_offset=0.0 +raft_surface_line_width=0.4 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +acceleration_ironing=1000 +prime_tower_flow=100 +top_skin_expand_distance=0.8 +speed_print_layer_0=17.249999999999996 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +speed_roofing=35 +brim_outside_only=True +material_standby_temperature=100 +support_bottom_stair_step_height=0.3 +fill_outline_gaps=True +support_zag_skip_count=0 +machine_endstop_positive_direction_x=False +material_final_print_temperature=185 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=2.85 +raft_jerk=20 +raft_base_acceleration=3500 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +bridge_fan_speed=100 +support_tree_max_diameter=25 +support_material_flow=100 +material_no_load_move_factor=0.91 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +support_infill_sparse_thickness=0.15 +machine_extruder_cooling_fan_number=0 +minimum_roof_area=1.0 +material_print_temperature_layer_0=200 +raft_base_fan_speed=0 +machine_steps_per_mm_x=50 +support_tree_branch_reach_limit=30 +support_bottom_density=100 +skin_material_flow=95.0 +support_conical_min_width=5.0 +support_line_width=0.4 +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +raft_speed=15 +mold_angle=40 +material_break_speed=25 +speed_wall_0=23 +cool_lift_head=False +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +inset_direction=outside_in +support_roof_pattern=zigzag +bridge_skin_speed=35 +skirt_brim_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=100 +coasting_min_volume=0.8 +conical_overhang_hole_size=0 +jerk_support_bottom=20 +cool_min_speed=5 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +meshfix=0 +acceleration_skirt_brim=1000 +support_interface_offset=0.0 +mesh_position_x=0 +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +z_seam_corner=z_seam_corner_none +bottom_thickness=1 +support_interface_wall_count=1 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.25 +wall_distribution_count=1 +retraction_speed=45 +extruder_prime_pos_y=6 +material=0 +infill_before_walls=True +support_z_distance=0.3 +meshfix_union_all=True +raft_surface_jerk=20 +infill_support_angle=40 +support_pattern=zigzag +clean_between_layers=False +skin_preshrink=0.8 +support_roof_enable=False +alternate_extra_perimeter=False +minimum_support_area=0.0 +lightning_infill_overhang_angle=40 +support_tree_rest_preference=graceful +coasting_speed=90 +speed_prime_tower=35 +infill=0 +jerk_wall_x=20 +mold_enabled=False +jerk_travel_layer_0=20.0 +infill_material_flow=100 +ironing_monotonic=False +extruder_prime_pos_z=2 +support_tower_roof_angle=65 +meshfix_maximum_deviation=0.04 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +cool_fan_full_at_height=0.2 +support_brim_enable=True +minimum_bottom_area=1.0 +infill_line_distance=6.0 +jerk_support_roof=20 +meshfix_maximum_travel_resolution=0.8 +support_bottom_height=0.3 +raft_acceleration=3500 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +top_bottom_pattern_0=lines +skin_material_flow_layer_0=90.0 +lightning_infill_support_angle=40 +machine_extruder_end_pos_abs=True +retraction_hop_after_extruder_switch_height=2 +acceleration_support=2000 +support_conical_angle=30 +speed_layer_0=17.249999999999996 +infill_enable_travel_optimization=False +raft_surface_speed=35 +cooling=0 +min_feature_size=0.1 +travel=0 +support_connect_zigzags=True +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +material_flush_purge_speed=0.5 +wipe_retraction_speed=45 +retraction_amount=6.5 +material_break_retracted_position=-50 +material_initial_print_temperature=190 +support_tower_maximum_supported_diameter=3.0 +jerk_ironing=20 +roofing_angles=[] +bridge_skin_density_3=100 +support_interface_enable=False +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +roofing_material_flow=100 +support_interface_skip_height=0.15 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +bridge_sparse_infill_max_density=0 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +gradual_infill_step_height=1.5 +machine_heat_zone_length=16 +support_interface_density=100 +support_infill_rate=0 +speed_support_interface=35 +cool_min_layer_time=6 +wipe_retraction_enable=True +support_tree_limit_branch_reach=True +wall_0_material_flow_layer_0=110.00000000000001 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +ironing_only_highest_layer=False +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_010.txt b/tests/voronoi_crash_resources/settings_010.txt new file mode 100644 index 0000000000..3843da798c --- /dev/null +++ b/tests/voronoi_crash_resources/settings_010.txt @@ -0,0 +1,1114 @@ +initial_extruder_nr=0 +date=02-06-2023 +print_temperature=200 +material_name=empty +draft_shield_height_limitation=full +prime_tower_wipe_enabled=True +top_bottom_pattern=lines +connect_infill_polygons=False +xy_offset=-0.015 +raft_base_jerk=20 +machine_heated_build_volume=True +resolution=0 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +support_roof_line_width=0.4 +material_shrinkage_percentage_xy=100.2 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.4 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +brim_inside_margin=2.5 +interlocking_depth=2 +skirt_gap=3 +mold_roof_height=0.5 +machine_max_acceleration_e=10000 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +machine_gcode_flavor=Griffin +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +infill_offset_y=0 +switch_extruder_retraction_speeds=20 +machine_firmware_retract=False +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +adaptive_layer_height_variation=0.1 +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +prime_tower_size=20 +extruders_enabled_count=2 +smooth_spiralized_contours=True +time=15:50:07 +machine_buildplate_type=glass +mesh_position_y=0 +jerk_print=20 +machine_max_feedrate_y=300 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +acceleration_wall_x=1500 +carve_multiple_volumes=True +flow_rate_extrusion_offset_factor=100 +speed_support_roof=35 +retraction_extra_prime_amount=0 +jerk_topbottom=20 +remove_empty_first_layers=True +wall_transition_angle=10 +support_extruder_nr=0 +z_seam_position=back +material_id=empty_material +retraction_count_max=25 +inset_direction=outside_in +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +meshfix_maximum_deviation=0.04 +mold_width=5 +adhesion_extruder_nr=-1 +brim_smart_ordering=True +raft_interface_acceleration=3500 +support_roof_material_flow=95.0 +cool_min_layer_time_fan_speed_max=11 +quality_changes_name=empty +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +material_break_speed=25 +speed_print=35 +speed_slowdown_layers=1 +default_material_print_temperature=200 +jerk_support_interface=20 +support_tree_branch_reach_limit=30 +support_bottom_stair_step_min_slope=10.0 +bottom_thickness=1 +infill_material_flow=100 +infill_angles=[ ] +skirt_height=3 +sub_div_rad_add=0.4 +speed_layer_0=14.999999999999998 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=300 +switch_extruder_retraction_amount=8 +skirt_brim_speed=14.999999999999998 +raft_surface_line_width=0.4 +roofing_pattern=lines +jerk_ironing=20 +machine_shape=rectangular +slicing_tolerance=middle +raft_interface_fan_speed=50.0 +wipe_retraction_amount=6.5 +material_break_temperature=50 +print_bed_temperature=60 +lightning_infill_support_angle=40 +acceleration_support_interface=1000 +wipe_retraction_extra_prime_amount=0 +skirt_brim_extruder_nr=-1 +material_print_temperature_layer_0=200 +cool_fan_full_at_height=0.2 +machine_disallowed_areas=[] +z_seam_relative=False +support_structure=tree +infill_sparse_thickness=0.15 +cool_min_speed=4 +wall_transition_filter_distance=100 +conical_overhang_enabled=False +support_xy_distance=0.7 +speed_wall=30 +speed_wall_x=30 +material_bed_temp_wait=True +retraction_min_travel=5 +coasting_speed=90 +material_print_temp_prepend=True +support_bottom_line_width=0.4 +support_interface_extruder_nr=0 +support_tower_maximum_supported_diameter=3.0 +nozzle_disallowed_areas=[] +brim_replaces_support=True +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +wipe_brush_pos_x=100 +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +machine_acceleration=3000 +raft_surface_fan_speed=100 +switch_extruder_prime_speed=15 +min_bead_width=0.34 +wall_x_extruder_nr=-1 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=50 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +raft_base_extruder_nr=0 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=20 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=20 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +interlocking_beam_layer_count=2 +infill_mesh_order=0 +support=0 +min_wall_line_width=0.34 +top_layers=7 +machine_max_jerk_z=0.4 +support_tree_angle=60 +alternate_carve_order=True +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +machine_max_feedrate_x=300 +machine_width=330 +acceleration_support=2000 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +material_alternate_walls=False +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +material_break_preparation_speed=2 +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +infill_multiplier=1 +prime_tower_enable=False +top_bottom=0 +support_roof_density=100 +machine_max_feedrate_z=40 +bridge_wall_coast=0 +support_roof_wall_count=1 +infill_extruder_nr=-1 +infill_sparse_density=20 +magic_spiralize=False +machine_show_variants=False +layer_height=0.15 +material_break_preparation_retracted_position=-16 +infill_mesh=False +speed_ironing=13.333333333333334 +command_line_settings=0 +wall_0_inset=0 +relative_extrusion=False +infill_wipe_dist=0 +print_sequence=all_at_once +skin_overlap=10 +speed_infill=35 +support_offset=0.0 +material_flow=100 +travel_speed=150 +speed=0 +cool_fan_speed_min=50 +wipe_move_distance=20 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=10 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +interlocking_boundary_avoidance=2 +material_print_temperature=200 +min_even_wall_line_width=0.34 +support_meshes_present=False +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +speed_travel_layer_0=150 +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +support_interface_height=0.3 +interlocking_orientation=22.5 +support_mesh_drop_down=True +skin_no_small_gaps_heuristic=False +ironing_line_spacing=0.1 +material_bed_temp_prepend=True +infill_before_walls=True +material=0 +support_interface_skip_height=0.15 +blackmagic=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=50 +bridge_enable_more_layers=False +speed_topbottom=20 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +support_infill_rate=0 +layer_start_y=228.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +adaptive_layer_height_enabled=False +support_connect_zigzags=True +ooze_shield_enabled=False +support_line_width=0.4 +roofing_line_width=0.4 +support_interface_material_flow=95.0 +infill_overlap=0 +wipe_retraction_speed=45 +retraction_amount=6.5 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +jerk_support_bottom=20 +top_thickness=1 +acceleration_enabled=True +support_roof_extruder_nr=0 +machine_center_is_zero=False +machine_scale_fan_speed_zero_to_one=False +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +layer_start_x=330.0 +machine_min_cool_heat_time_window=15 +lightning_infill_overhang_angle=40 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +jerk_infill=20 +material_final_print_temperature=185 +layer_height_0=0.2 +support_initial_layer_line_distance=0 +machine_name=Ultimaker S5 +bridge_wall_min_length=2.1 +prime_tower_position_x=299.2 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +brim_width=3 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +ironing_only_highest_layer=False +raft_remove_inside_corners=False +machine_max_feedrate_e=45 +prime_tower_line_width=0.4 +wall_line_width_x=0.4 +jerk_support=20 +machine_nozzle_cool_down_speed=0.8 +skin_line_width=0.4 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +draft_shield_enabled=False +minimum_interface_area=1.0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +conical_overhang_angle=50 +mesh_position_z=0 +infill_overlap_mm=0.0 +wall_line_width_0=0.4 +interlocking_enable=False +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +machine_max_jerk_e=5.0 +raft_margin=15 +acceleration_support_roof=1000 +support_roof_offset=0.0 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +support_infill_angles=[ ] +shell=0 +small_skin_width=0.8 +top_skin_expand_distance=0.8 +speed_print_layer_0=14.999999999999998 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +support_type=everywhere +skin_edge_support_layers=4 +ooze_shield_dist=2 +ironing_inset=0.38 +bridge_fan_speed_3=50 +speed_support=23 +fill_outline_gaps=True +material_type=empty +support_zag_skip_count=0 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +support_tree_limit_branch_reach=True +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +default_material_bed_temperature=60 +raft_jerk=20 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +raft_base_fan_speed=0 +bridge_settings_enabled=True +material_no_load_move_factor=0.940860215 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +material_bed_temperature_layer_0=60 +support_infill_sparse_thickness=0.15 +wall_extruder_nr=-1 +raft_base_acceleration=3500 +wall_0_extruder_nr=-1 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=20 +gradual_infill_step_height=1.5 +prime_tower_brim_enable=False +minimum_roof_area=1.0 +support_bottom_density=100 +skin_material_flow=95.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +support_roof_angles=[ ] +material_print_temp_wait=True +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +bridge_skin_speed=20 +skirt_brim_material_flow=100 +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_shrinkage_percentage_z=100.1 +support_roof_line_distance=0.4 +brim_line_count=8 +support_mesh=False +support_roof_pattern=zigzag +speed_roofing=20 +support_bottom_stair_step_height=0.3 +brim_outside_only=True +material_standby_temperature=100 +raft_speed=15 +mold_angle=40 +retraction_combing=no_outer_surfaces +material_flow_layer_0=100 +wall_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=50 +coasting_min_volume=0.8 +optimize_wall_printing_order=True +line_width=0.4 +machine_minimum_feedrate=0.0 +skin_edge_support_thickness=0.6 +support_wall_count=1 +machine_max_acceleration_z=100 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +bridge_skin_density_3=100 +support_interface_enable=False +prime_tower_position_y=209.2 +mesh_position_x=0 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +top_skin_preshrink=0.8 +raft_airgap=0.25 +wall_distribution_count=1 +jerk_wall_0=20 +retraction_hop=2 +support_bottom_extruder_nr=0 +retraction_speed=45 +extruder_prime_pos_y=0 +flow_rate_max_extrusion_offset=0 +material_diameter=2.85 +support_z_distance=0.3 +meshfix_union_all=True +infill_support_angle=40 +jerk_prime_tower=20 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +support_pattern=zigzag +prime_tower_min_volume=6 +support_tree_rest_preference=graceful +material_bed_temperature=60 +support_interface_wall_count=1 +material_shrinkage_percentage=100.2 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +small_feature_max_length=0.0 +skin_overlap_mm=0.04 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +machine_head_with_fans_polygon=[[-41.4, -45.8], [-41.4, 36.0], [63.3, 36.0], [63.3, -45.8]] +z_seam_corner=z_seam_corner_none +nozzle_offsetting_for_disallowed_areas=False +meshfix=0 +acceleration_skirt_brim=1000 +machine_max_acceleration_y=9000 +meshfix_keep_open_polygons=False +skin_monotonic=False +support_interface_offset=0.0 +adhesion_type=brim +z_seam_type=sharpest_corner +retraction_prime_speed=15 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +clean_between_layers=False +skin_preshrink=0.8 +speed_support_interface=35 +machine_max_acceleration_x=9000 +bridge_wall_speed=20 +support_bottom_offset=0.0 +support_roof_enable=False +alternate_extra_perimeter=False +speed_prime_tower=20 +support_infill_extruder_nr=0 +infill=0 +jerk_wall_x=20 +material_flush_purge_speed=0.5 +skin_material_flow_layer_0=90.0 +top_bottom_pattern_0=lines +bridge_fan_speed=100 +support_material_flow=100 +support_tree_max_diameter=25 +support_conical_angle=30 +support_enable=True +cool_min_layer_time=6 +day=Fri +wipe_retraction_enable=True +support_skip_some_zags=False +machine_steps_per_mm_x=50 +top_bottom_extruder_nr=-1 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +roofing_extruder_nr=-1 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +bridge_skin_support_threshold=50 +prime_tower_flow=100 +acceleration_ironing=1000 +roofing_material_flow=100 +support_fan_enable=False +retraction_extrusion_window=1 +support_tower_roof_angle=65 +extruder_prime_pos_z=0 +retraction_hop_after_extruder_switch_height=2 +raft_interface_line_width=0.6000000000000001 +gantry_height=55 +material_surface_energy=100 +machine_extruder_count=2 +jerk_support_roof=20 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +infill_enable_travel_optimization=False +machine_height=300 +travel_retract_before_outer_wall=False +raft_surface_speed=35 +cooling=0 +machine_extruders_share_nozzle=False +raft_acceleration=3500 +support_bottom_height=0.3 +acceleration_travel_enabled=False +travel=0 +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +min_feature_size=0.1 +quality_name=Normal +wall_0_material_flow_layer_0=110.00000000000001 +anti_overhang_mesh=False +support_interface_density=100 +ironing_monotonic=False +mold_enabled=False +jerk_travel_layer_0=20.0 +wipe_hop_enable=True +zig_zaggify_support=True +machine_depth=240 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +bridge_sparse_infill_max_density=0 +roofing_angles=[] +material_initial_print_temperature=190 +material_break_retracted_position=-50 +machine_heat_zone_length=16 +adaptive_layer_height_threshold=0.2 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +support_brim_enable=True +minimum_support_area=0.0 +prime_tower_wipe_enabled=True +acceleration_wall_x=1500 +machine_extruder_start_pos_abs=True +top_bottom_pattern=lines +xy_offset=-0.015 +machine_nozzle_offset_y=0 +raft_base_jerk=20 +resolution=0 +switch_extruder_retraction_speeds=20 +machine_endstop_positive_direction_y=False +raft_fan_speed=0 +machine_nozzle_head_distance=3 +speed_z_hop=10 +support_bottom_wall_count=1 +jerk_skirt_brim=20 +meshfix_union_all_remove_holes=False +support_tree_tip_diameter=0.8 +connect_infill_polygons=False +support_roof_line_width=0.4 +support_tree_min_height_to_model=3 +acceleration_layer_0=1000 +machine_nozzle_heat_up_speed=1.6 +material_flush_purge_length=60 +raft_interface_line_spacing=0.8 +support_xy_distance_overhang=0.2 +bridge_skin_material_flow_2=95.0 +coasting_enable=False +prime_blob_enable=False +roofing_layer_count=1 +jerk_topbottom=20 +brim_inside_margin=2.5 +skirt_gap=3 +mold_roof_height=0.5 +mold_width=5 +magic_mesh_surface_mode=normal +small_hole_max_size=0 +top_bottom_thickness=1 +acceleration_infill=3500 +travel_avoid_supports=False +gradual_infill_steps=0 +max_skin_angle_for_expansion=90 +small_feature_speed_factor=50 +infill_offset_y=0 +infill_offset_x=0 +expand_skins_expand_distance=0.8 +bottom_skin_preshrink=0.8 +center_object=False +support_use_towers=True +raft_interface_layers=1 +support_bottom_pattern=zigzag +xy_offset_layer_0=-0.095 +skin_angles=[] +wipe_hop_speed=10 +raft_interface_thickness=0.22499999999999998 +skirt_line_count=1 +mesh_position_y=0 +jerk_print=20 +infill_randomize_start_location=False +acceleration_prime_tower=2000 +speed_support_roof=35 +retraction_extra_prime_amount=0 +skin_outline_count=1 +jerk_prime_tower=20 +wall_transition_angle=10 +z_seam_position=back +retraction_count_max=25 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +support_roof_material_flow=95.0 +retraction_prime_speed=45 +z_seam_type=sharpest_corner +cool_min_layer_time_fan_speed_max=11 +machine_nozzle_size=0.4 +hole_xy_offset_max_diameter=0 +support_bottom_stair_step_min_slope=10.0 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=7200 +skirt_brim_speed=17.249999999999996 +switch_extruder_retraction_amount=16 +conical_overhang_angle=50 +infill_overlap_mm=0.0 +mesh_position_z=0 +skin_monotonic=False +meshfix_keep_open_polygons=False +sub_div_rad_add=0.4 +machine_extruder_end_pos_x=330 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1000 +z_seam_relative=False +wipe_retraction_extra_prime_amount=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=100 +blackmagic=0 +slicing_tolerance=middle +machine_extruder_end_pos_y=237 +material_break_preparation_retracted_position=-16 +infill_sparse_thickness=0.15 +support_xy_distance=0.7 +speed_wall=45 +speed_wall_x=45 +retraction_min_travel=0.8 +support_bottom_line_width=0.4 +brim_replaces_support=True +acceleration_travel_layer_0=1428.5714285714287 +machine_nozzle_id=AA 0.4 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=110.0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +acceleration_support_infill=2000 +brim_gap=0 +raft_interface_acceleration=3500 +raft_surface_fan_speed=100 +lightning_infill_prune_angle=40 +bridge_skin_material_flow_3=95.0 +initial_bottom_layers=7 +bridge_fan_speed_2=100 +support_interface_pattern=zigzag +bottom_skin_expand_distance=0.8 +wipe_hop_enable=True +zig_zaggify_support=True +material_alternate_walls=False +material_end_of_filament_purge_length=20 +acceleration_support_bottom=1000 +material_break_preparation_speed=50 +acceleration_wall=1500 +ironing_enabled=False +acceleration_travel=5000 +support_bottom_material_flow=95.0 +support_roof_angles=[ ] +acceleration_roofing=1000 +switch_extruder_retraction_speed=20 +retraction_hop_enabled=True +bridge_wall_material_flow=100 +bridge_skin_speed_2=35 +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +min_odd_wall_line_width=0.34 +top_thickness=1 +default_material_print_temperature=200 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=35 +connect_skin_polygons=False +infill_pattern=triangles +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +support_bottom_distance=0.15 +material_crystallinity=False +raft_surface_acceleration=3500 +jerk_wall=20 +dual=0 +support_bottom_enable=False +min_infill_area=0 +machine_nozzle_tip_outer_diameter=1.0 +support_xy_overrides_z=z_overrides_xy +support_brim_width=1.2000000000000002 +z_seam_x=165.0 +retraction_combing_max_distance=15 +machine_steps_per_mm_z=50 +support=0 +min_wall_line_width=0.34 +top_bottom=0 +support_roof_density=100 +top_layers=7 +support_tree_angle=60 +initial_layer_line_width_factor=100.0 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +jerk_wall_0=20 +retraction_hop=2 +raft_base_speed=15 +support_angle=60 +platform_adhesion=0 +support_bottom_stair_step_width=5.0 +infill_multiplier=1 +raft_interface_fan_speed=50.0 +wall_transition_filter_distance=100 +bridge_wall_coast=0 +jerk_support_interface=20 +support_roof_wall_count=1 +infill_sparse_density=20 +speed_ironing=23.333333333333332 +command_line_settings=0 +infill_wipe_dist=0 +skin_overlap=15 +speed_infill=70 +machine_nozzle_offset_x=0 +support_offset=0.0 +material_flow=100 +speed=0 +cool_fan_speed_min=100 +wipe_move_distance=20 +optimize_wall_printing_order=True +line_width=0.4 +switch_extruder_prime_speed=20 +min_bead_width=0.34 +wall_overhang_speed_factor=100 +jerk_support_infill=20 +material_adhesion_tendency=0 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +wall_line_width=0.4 +material_print_temperature=200 +min_even_wall_line_width=0.34 +raft_interface_speed=25.0 +travel_avoid_distance=3 +z_seam_y=240 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +small_feature_speed_factor_0=50 +conical_overhang_enabled=False +speed_travel_layer_0=150 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +roofing_pattern=lines +support_interface_material_flow=95.0 +infill_overlap=0 +extruder_nr=0 +support_interface_height=0.3 +support_skip_some_zags=False +skin_no_small_gaps_heuristic=False +speed_support=23 +ironing_inset=0.38 +bridge_fan_speed_3=100 +bridge_enable_more_layers=False +speed_topbottom=35 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +gradual_support_infill_step_height=0.6 +magic_fuzzy_skin_enabled=False +roofing_line_width=0.4 +jerk_infill=20 +speed_print=70 +support_bottom_offset=0.0 +bridge_wall_speed=35 +support_initial_layer_line_distance=0 +experimental=0 +zig_zaggify_infill=True +retraction_retract_speed=45 +layer_start_y=228.0 +extruder_prime_pos_x=-3 +wall_0_inset=0 +brim_width=7 +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_wipe_dist=0.2 +brim_line_count=18 +support_roof_line_distance=0.4 +prime_tower_line_width=0.4 +skin_overlap_mm=0.06 +small_feature_max_length=0.0 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +support_wall_count=1 +skin_edge_support_thickness=0.6 +wall_line_width_x=0.4 +jerk_support=20 +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +machine_nozzle_cool_down_speed=0.75 +skin_line_width=0.4 +machine_extruder_start_pos_x=330 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +gradual_support_infill_steps=0 +infill_angles=[ ] +minimum_interface_area=1.0 +raft_interface_line_width=0.6000000000000001 +material_surface_energy=100 +support_fan_enable=False +retraction_extrusion_window=1 +machine_extruder_start_pos_y=237 +support_infill_angles=[ ] +small_skin_width=0.8 +shell=0 +wall_line_width_0=0.4 +support_tree_top_rate=10 +cross_infill_pocket_size=6.0 +material_end_of_filament_purge_speed=0.5 +raft_margin=15 +material_break_preparation_temperature=210 +wall_transition_filter_deviation=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +acceleration_support_roof=1000 +support_roof_offset=0.0 +raft_surface_line_width=0.4 +wipe_retraction_prime_speed=45 +wipe_pause=0 +machine_settings=0 +acceleration_topbottom=1000 +jerk_travel=20 +acceleration_wall_0=1500 +cool_fan_speed_max=100 +cool_fan_enabled=True +wall_overhang_angle=90 +acceleration_ironing=1000 +prime_tower_flow=100 +top_skin_expand_distance=0.8 +speed_print_layer_0=17.249999999999996 +wall_x_material_flow_layer_0=95.0 +speed_travel=150 +layer_0_z_overlap=0.125 +ironing_pattern=zigzag +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +speed_roofing=35 +brim_outside_only=True +material_standby_temperature=100 +support_bottom_stair_step_height=0.3 +fill_outline_gaps=True +support_zag_skip_count=0 +machine_endstop_positive_direction_x=False +material_final_print_temperature=185 +support_interface_line_width=0.4 +support_tree_angle_slow=40.0 +support_skip_zag_per_mm=20 +support_bottom_angles=[ ] +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=23 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=2.85 +raft_jerk=20 +raft_base_acceleration=3500 +acceleration_print=3500 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +bridge_fan_speed=100 +support_tree_max_diameter=25 +support_material_flow=100 +material_no_load_move_factor=0.91 +raft_surface_line_spacing=0.4 +support_roof_height=0.3 +support_infill_sparse_thickness=0.15 +machine_extruder_cooling_fan_number=0 +minimum_roof_area=1.0 +material_print_temperature_layer_0=200 +raft_base_fan_speed=0 +machine_steps_per_mm_x=50 +support_tree_branch_reach_limit=30 +support_bottom_density=100 +skin_material_flow=95.0 +support_conical_min_width=5.0 +support_line_width=0.4 +bridge_skin_density=80 +raft_base_line_width=0.8 +jerk_roofing=20 +raft_speed=15 +mold_angle=40 +material_break_speed=25 +speed_wall_0=23 +cool_lift_head=False +retraction_enable=True +support_line_distance=0 +bridge_skin_material_flow=95.0 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +retract_at_layer_change=False +wall_transition_length=0.4 +wipe_hop_amount=2 +support_join_distance=2.0 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +inset_direction=outside_in +support_roof_pattern=zigzag +bridge_skin_speed=35 +skirt_brim_material_flow=100 +raft_surface_thickness=0.15 +cool_fan_speed=100 +coasting_min_volume=0.8 +conical_overhang_hole_size=0 +jerk_support_bottom=20 +cool_min_speed=5 +wall_x_material_flow=100 +min_skin_width_for_expansion=6.429395695523605e-17 +meshfix=0 +acceleration_skirt_brim=1000 +support_interface_offset=0.0 +mesh_position_x=0 +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +z_seam_corner=z_seam_corner_none +bottom_thickness=1 +support_interface_wall_count=1 +raft_interface_jerk=20 +roofing_monotonic=True +support_interface_angles=[ ] +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.25 +wall_distribution_count=1 +retraction_speed=45 +extruder_prime_pos_y=6 +material=0 +infill_before_walls=True +support_z_distance=0.3 +meshfix_union_all=True +raft_surface_jerk=20 +infill_support_angle=40 +support_pattern=zigzag +clean_between_layers=False +skin_preshrink=0.8 +support_roof_enable=False +alternate_extra_perimeter=False +minimum_support_area=0.0 +lightning_infill_overhang_angle=40 +support_tree_rest_preference=graceful +coasting_speed=90 +speed_prime_tower=35 +infill=0 +jerk_wall_x=20 +mold_enabled=False +jerk_travel_layer_0=20.0 +infill_material_flow=100 +ironing_monotonic=False +extruder_prime_pos_z=2 +support_tower_roof_angle=65 +meshfix_maximum_deviation=0.04 +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +cool_fan_full_at_height=0.2 +support_brim_enable=True +minimum_bottom_area=1.0 +infill_line_distance=6.0 +jerk_support_roof=20 +meshfix_maximum_travel_resolution=0.8 +support_bottom_height=0.3 +raft_acceleration=3500 +ironing_flow=10.0 +support_bottom_line_distance=0.4 +raft_base_thickness=0.3 +retraction_hop_after_extruder_switch=True +support_top_distance=0.3 +top_bottom_pattern_0=lines +skin_material_flow_layer_0=90.0 +lightning_infill_support_angle=40 +machine_extruder_end_pos_abs=True +retraction_hop_after_extruder_switch_height=2 +acceleration_support=2000 +support_conical_angle=30 +speed_layer_0=17.249999999999996 +infill_enable_travel_optimization=False +raft_surface_speed=35 +cooling=0 +min_feature_size=0.1 +travel=0 +support_connect_zigzags=True +bottom_layers=7 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +material_flush_purge_speed=0.5 +wipe_retraction_speed=45 +retraction_amount=6.5 +material_break_retracted_position=-50 +material_initial_print_temperature=190 +support_tower_maximum_supported_diameter=3.0 +jerk_ironing=20 +roofing_angles=[] +bridge_skin_density_3=100 +support_interface_enable=False +retraction_hop_only_when_collides=True +machine_feeder_wheel_diameter=10.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +roofing_material_flow=100 +support_interface_skip_height=0.15 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +bridge_sparse_infill_max_density=0 +skirt_brim_line_width=0.4 +cool_fan_full_layer=2 +gradual_infill_step_height=1.5 +machine_heat_zone_length=16 +support_interface_density=100 +support_infill_rate=0 +speed_support_interface=35 +cool_min_layer_time=6 +wipe_retraction_enable=True +support_tree_limit_branch_reach=True +wall_0_material_flow_layer_0=110.00000000000001 +cool_min_temperature=190 +jerk_layer_0=20 +switch_extruder_extra_prime_amount=0 +ironing_only_highest_layer=False +speed_support_bottom=35 +material_extrusion_cool_down_speed=0.7 +extruder_nr=0 +meshfix_fluid_motion_enabled=True +meshfix_fluid_motion_small_distance=0.01 +meshfix_fluid_motion_shift_distance=0.1 +meshfix_fluid_motion_angle=15 diff --git a/tests/voronoi_crash_resources/settings_011.txt b/tests/voronoi_crash_resources/settings_011.txt new file mode 100644 index 0000000000..7b90f1f8a8 --- /dev/null +++ b/tests/voronoi_crash_resources/settings_011.txt @@ -0,0 +1,1089 @@ +initial_extruder_nr=0 +date=31-05-2023 +print_temperature=210 +material_name=empty +cooling=0 +machine_extruders_share_nozzle=False +max_skin_angle_for_expansion=90 +acceleration_layer_0=3000 +support_interface_line_width=0.4 +jerk_infill=20 +mesh_position_y=0 +cool_fan_full_at_height=0.3 +roofing_extruder_nr=-1 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=3000 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +machine_shape=rectangular +speed_support_bottom=40.0 +support_roof_material_flow=100 +draft_shield_dist=10 +travel_avoid_other_parts=True +speed_ironing=20.0 +machine_show_variants=False +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=2 +support_extruder_nr=0 +support_bottom_height=1 +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.6666666666666665 +machine_depth=255 +adhesion_type=brim +bridge_skin_density_2=75 +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=1.0 +wall_0_wipe_dist=0.2 +machine_heated_build_volume=False +speed_travel_layer_0=60.0 +raft_surface_line_width=0.4 +bridge_skin_speed_2=15.0 +support_brim_width=1.2000000000000002 +top_bottom_thickness=0.8 +raft_jerk=20 +time=17:02:46 +machine_buildplate_type=glass +center_object=False +speed_print=60 +travel=0 +material_print_temperature_layer_0=210 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +raft_surface_fan_speed=0 +brim_replaces_support=True +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=255 +skin_line_width=0.4 +support_join_distance=2.0 +wipe_hop_amount=1 +support_interface_offset=0.0 +support_tree_limit_branch_reach=True +connect_skin_polygons=False +infill_pattern=grid +support_structure=normal +clean_between_layers=False +speed_prime_tower=60 +speed_wall_x=60.0 +support_bottom_stair_step_height=0.3 +draft_shield_enabled=False +support_roof_height=1 +raft_surface_line_spacing=0.4 +day=Wed +wipe_retraction_enable=True +ironing_line_spacing=0.1 +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +machine_max_jerk_e=5.0 +raft_margin=15 +machine_scale_fan_speed_zero_to_one=False +wall_x_material_flow=100 +cool_fan_speed=100.0 +infill=0 +retraction_speed=25 +brim_width=8.0 +travel_avoid_supports=False +acceleration_infill=3000 +acceleration_support_roof=3000 +minimum_polygon_circumference=1.0 +raft_base_thickness=0.36 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +acceleration_support_infill=3000 +brim_gap=0 +machine_max_acceleration_y=9000 +meshfix_maximum_deviation=0.025 +quality_changes_name=empty +machine_nozzle_size=0.4 +mesh_position_z=0 +infill_overlap_mm=0.04 +conical_overhang_angle=50 +brim_line_count=20 +support_roof_line_distance=0.4 +retraction_extra_prime_amount=0 +small_hole_max_size=0 +switch_extruder_extra_prime_amount=0 +ironing_pattern=zigzag +infill_enable_travel_optimization=False +default_material_bed_temperature=60 +retraction_hop_only_when_collides=False +support_xy_distance_overhang=0.2 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_overhang_angle=90 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +min_skin_width_for_expansion=4.898587196589413e-17 +raft_interface_line_width=0.8 +machine_height=265 +travel_retract_before_outer_wall=False +jerk_support_interface=20 +support_tower_diameter=3.0 +support_tree_tip_diameter=0.8 +material_print_temp_prepend=True +support_bottom_line_distance=0.4 +jerk_support_bottom=20 +material_print_temp_wait=True +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +support_bottom_distance=0.1 +material_crystallinity=False +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +mold_width=5 +adhesion_extruder_nr=-1 +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +wall_0_inset=0 +relative_extrusion=False +wipe_hop_speed=10 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +magic_fuzzy_skin_outside_only=False +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +raft_base_jerk=20 +support_roof_pattern=concentric +support_mesh=False +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=15.0 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +coasting_min_volume=0.8 +raft_surface_acceleration=3000 +experimental=0 +bridge_wall_min_length=2.1 +prime_tower_position_x=239.79999999999998 +hole_xy_offset_max_diameter=0 +wall_line_width=0.4 +raft_acceleration=3000 +interlocking_orientation=22.5 +jerk_support=20 +wall_line_width_x=0.4 +min_infill_area=0 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=3000 +retraction_extrusion_window=6.5 +support_fan_enable=False +wall_extruder_nr=-1 +raft_base_acceleration=3000 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +speed_wall=30.0 +support_xy_distance=0.7 +infill_wipe_dist=0.1 +extruders_enabled_count=1 +support_conical_min_width=5.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +prime_tower_position_y=222.79999999999998 +mesh_position_x=0 +z_seam_position=back +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_shrinkage_percentage_z=100.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=3000 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_mesh_drop_down=True +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=100 +machine_max_feedrate_z=299792458000 +prime_tower_enable=False +top_bottom=0 +material_break_temperature=50 +wipe_retraction_amount=6.5 +raft_surface_speed=30.0 +speed_layer_0=30.0 +jerk_print=20 +top_bottom_extruder_nr=-1 +retraction_hop=1 +jerk_wall_0=20 +raft_interface_speed=22.5 +travel_avoid_distance=0.625 +support_meshes_present=False +machine_max_jerk_xy=20.0 +cutting_mesh=False +min_odd_wall_line_width=0.34 +machine_nozzle_expansion_angle=45 +support_bottom_enable=False +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=200 +speed_roofing=30.0 +brim_outside_only=True +material_standby_temperature=150 +support_enable=False +acceleration_print_layer_0=3000 +z_seam_relative=False +fill_outline_gaps=True +material_type=empty +support_zag_skip_count=8 +interlocking_boundary_avoidance=2 +material_print_temperature=210 +min_even_wall_line_width=0.34 +skin_overlap=5 +print_sequence=all_at_once +ooze_shield_dist=2 +prime_tower_wipe_enabled=True +bridge_skin_density=100 +raft_base_line_width=0.8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +brim_inside_margin=2.5 +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +bottom_skin_expand_distance=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +skirt_brim_extruder_nr=-1 +machine_nozzle_id=unknown +speed_equalize_flow_width_factor=100.0 +acceleration_travel_layer_0=5000.0 +wipe_brush_pos_x=100 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +raft_surface_extruder_nr=0 +retraction_hop_enabled=False +switch_extruder_retraction_speed=20 +acceleration_roofing=3000 +travel_speed=120 +speed=0 +acceleration_travel_enabled=True +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +support_z_distance=0.1 +meshfix_union_all=True +z_seam_corner=z_seam_corner_inner +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +support_roof_offset=0.0 +support_interface_density=100 +coasting_enable=False +acceleration_support=3000 +jerk_layer_0=20 +cool_min_temperature=210 +support_bottom_extruder_nr=0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +adaptive_layer_height_variation=0.1 +raft_interface_layers=1 +default_material_print_temperature=210 +speed_slowdown_layers=2 +cool_min_layer_time_fan_speed_max=10 +machine_endstop_positive_direction_y=False +minimum_bottom_area=1.0 +infill_line_distance=4.0 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +material_bed_temperature=60 +support_tree_rest_preference=graceful +coasting_speed=90 +support_infill_extruder_nr=0 +bridge_skin_speed_3=15.0 +magic_fuzzy_skin_point_dist=0.8 +infill_extruder_nr=-1 +support_roof_wall_count=0 +infill_sparse_density=20 +machine_disallowed_areas=[] +skirt_brim_minimal_length=250 +raft_surface_layers=2 +material_break_speed=25 +machine_extruders_share_heater=False +speed_wall_0=30.0 +cool_lift_head=False +layer_start_y=0.0 +build_volume_temperature=28 +extruder_prime_pos_x=0 +retraction_retract_speed=25 +zig_zaggify_infill=False +xy_offset=0 +machine_acceleration=4000 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=20 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=30.0 +mold_angle=40 +raft_speed=30.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.02 +anti_overhang_mesh=False +quality_name=Draft +wall_0_material_flow_layer_0=100 +speed_support_interface=40.0 +machine_max_acceleration_x=9000 +bridge_skin_material_flow_2=100 +top_skin_preshrink=0.8 +skirt_height=3 +raft_airgap=0.3 +wall_distribution_count=1 +retraction_amount=6.5 +wipe_retraction_speed=25 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +speed_topbottom=30.0 +raft_smoothing=5 +lightning_infill_straightening_angle=40 +bridge_enable_more_layers=True +retraction_combing=all +wall_material_flow=100 +material_flow_layer_0=100 +flow_rate_max_extrusion_offset=0 +material_diameter=2.85 +meshfix_union_all_remove_holes=False +skin_edge_support_thickness=0 +machine_max_acceleration_z=100 +support_wall_count=0 +extruder_prime_pos_y=0 +meshfix_maximum_extrusion_area_deviation=50000 +wall_0_material_flow=100 +blackmagic=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=40.0 +support_tree_angle_slow=33.333333333333336 +jerk_wall=20 +interlocking_beam_layer_count=2 +support_interface_material_flow=100 +infill_overlap=10 +print_bed_temperature=60 +lightning_infill_support_angle=40 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +speed_support_infill=60 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +bridge_skin_material_flow=60 +nozzle_disallowed_areas=[] +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +material_shrinkage_percentage_xy=100.0 +cool_min_speed=10 +top_layers=4 +bridge_fan_speed_3=0 +ironing_inset=0.38 +cool_fan_speed_min=100.0 +wipe_move_distance=20 +interlocking_enable=False +wall_line_width_0=0.4 +cross_infill_pocket_size=4.0 +support_tree_top_rate=10 +raft_base_fan_speed=0 +bridge_settings_enabled=False +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=3 +retraction_hop_after_extruder_switch_height=1 +acceleration_prime_tower=3000 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +skin_material_flow=100 +support_bottom_density=100 +bridge_wall_speed=15.0 +support_bottom_offset=0.0 +bridge_fan_speed_2=0 +support_interface_pattern=concentric +initial_bottom_layers=4 +bridge_skin_material_flow_3=110 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +mold_roof_height=0.5 +jerk_ironing=20 +support_bottom_stair_step_min_slope=10.0 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=25 +multiple_mesh_overlap=0.15 +machine_center_is_zero=False +top_thickness=0.8 +acceleration_enabled=False +support_roof_extruder_nr=0 +bridge_wall_material_flow=50 +draft_shield_height=10 +machine_always_write_active_tool=False +z_seam_x=125.0 +retraction_combing_max_distance=0 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +raft_interface_thickness=0.30000000000000004 +support_conical_angle=30 +material_adhesion_tendency=10 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +roofing_line_width=0.4 +layer_height_0=0.3 +support_initial_layer_line_distance=2.6666666666666665 +support_bottom_line_width=0.4 +wipe_hop_enable=False +zig_zaggify_support=False +material_bed_temp_wait=True +skin_edge_support_layers=0 +support_type=everywhere +jerk_travel_layer_0=30.0 +mold_enabled=False +prime_tower_line_width=0.4 +machine_max_feedrate_e=299792458000 +skirt_line_count=1 +material_id=empty_material +retraction_count_max=90 +infill_support_angle=40 +material_no_load_move_factor=0.940860215 +roofing_pattern=lines +jerk_prime_tower=20 +skin_outline_count=1 +support_interface_priority=interface_area_overwrite_support_area +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +interlocking_depth=2 +min_feature_size=0.1 +command_line_settings=0 +speed_infill=60 +gradual_support_infill_step_height=1 +retraction_prime_speed=25 +z_seam_type=sharpest_corner +skirt_brim_speed=30.0 +material_maximum_park_duration=300 +switch_extruder_retraction_amount=16 +machine_nozzle_temp_enabled=True +raft_base_speed=22.5 +support_angle=50 +machine_max_feedrate_x=299792458000 +machine_width=250 +machine_use_extruder_offset_to_offset_coords=True +machine_heated_bed=True +support_bottom_pattern=concentric +acceleration_print=3000 +material_flush_purge_speed=0.5 +minimum_interface_area=1.0 +raft_interface_fan_speed=0 +remove_empty_first_layers=True +jerk_topbottom=20 +bridge_wall_coast=100 +acceleration_wall_0=3000 +shell=0 +small_skin_width=0.8 +machine_nozzle_head_distance=3 +support_interface_enable=False +bridge_skin_density_3=80 +raft_base_wall_count=1 +infill_sparse_thickness=0.2 +speed_travel=120 +support=0 +infill_mesh_order=0 +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +machine_max_acceleration_e=10000 +roofing_layer_count=0 +skin_preshrink=0.8 +material_extrusion_cool_down_speed=0.7 +alternate_extra_perimeter=False +support_roof_enable=False +top_bottom_pattern_0=lines +skin_material_flow_layer_0=100 +infill_offset_x=0 +gantry_height=0 +material_surface_energy=100 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +min_wall_line_width=0.34 +machine_steps_per_mm_x=50 +wall_0_extruder_nr=-1 +machine_settings=0 +acceleration_topbottom=3000 +wipe_retraction_prime_speed=25 +wipe_pause=0 +material_end_of_filament_purge_speed=0.5 +material_alternate_walls=False +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=3000 +speed_support=60 +retraction_min_travel=0.8 +ooze_shield_enabled=False +support_line_width=0.4 +jerk_roofing=20 +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +smooth_spiralized_contours=True +minimum_support_area=0.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +slicing_tolerance=middle +infill_material_flow=100 +support_tree_angle=50 +machine_max_jerk_z=0.4 +cool_min_layer_time=5 +speed_z_hop=10 +xy_offset_layer_0=0 +jerk_support_roof=20 +machine_extruder_count=1 +material_final_print_temperature=195 +jerk_travel=30 +ironing_flow=10.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +adaptive_layer_height_threshold=0.2 +support_interface_height=1 +support_brim_enable=True +support_interface_skip_height=0.2 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +acceleration_travel=5000 +support_bottom_material_flow=100 +raft_base_extruder_nr=0 +ironing_enabled=False +acceleration_wall=3000 +prime_tower_size=20 +inset_direction=inside_out +small_feature_speed_factor_0=50 +platform_adhesion=0 +support_bottom_wall_count=0 +jerk_wall_x=20 +draft_shield_height_limitation=full +bridge_sparse_infill_max_density=0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +cooling=0 +infill_support_angle=40 +max_skin_angle_for_expansion=90 +acceleration_layer_0=3000 +support_interface_line_width=0.4 +jerk_infill=20 +mesh_position_y=0 +cool_fan_full_at_height=0.3 +layer_0_z_overlap=0.15 +support_pattern=zigzag +top_skin_expand_distance=0.8 +raft_interface_acceleration=3000 +expand_skins_expand_distance=0.8 +support_skip_zag_per_mm=20 +speed_support_bottom=40.0 +support_roof_material_flow=100 +travel_avoid_other_parts=True +speed_ironing=20.0 +mold_width=5 +prime_tower_min_volume=6 +ironing_monotonic=False +conical_overhang_enabled=False +wall_transition_filter_distance=100 +cool_fan_full_layer=2 +support_bottom_height=1 +machine_extruder_start_pos_abs=False +support_bottom_stair_step_width=5.0 +raft_surface_thickness=0.2 +retraction_enable=True +support_line_distance=2.6666666666666665 +bridge_skin_density_2=75 +support_connect_zigzags=True +skin_no_small_gaps_heuristic=False +wall_line_count=2 +minimum_roof_area=1.0 +wall_0_wipe_dist=0.2 +support_infill_sparse_thickness=0.2 +skin_overlap=5 +speed_travel_layer_0=60.0 +raft_surface_line_width=0.4 +machine_endstop_positive_direction_x=False +bridge_skin_speed_2=15.0 +support_brim_width=1.2000000000000002 +top_bottom_thickness=0.8 +raft_jerk=20 +center_object=False +speed_print=60 +travel=0 +material_print_temperature_layer_0=200 +support_tree_min_height_to_model=3 +bottom_layers=4 +support_use_towers=True +machine_nozzle_offset_x=0 +raft_surface_fan_speed=0 +brim_replaces_support=True +line_width=0.4 +machine_nozzle_cool_down_speed=2.0 +z_seam_y=255 +support_xy_distance=0.7 +speed_wall=30.0 +skin_edge_support_layers=0 +speed_topbottom=30.0 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +max_extrusion_before_wipe=10 +raft_base_line_spacing=1.6 +speed_support_infill=60 +min_odd_wall_line_width=0.34 +support_tree_limit_branch_reach=True +mesh_position_z=0 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +connect_skin_polygons=False +infill_pattern=grid +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +support_wall_count=0 +skin_edge_support_thickness=0 +support_roof_height=1 +ironing_line_spacing=0.1 +machine_extruder_end_pos_x=0 +retraction_speed=25 +travel_avoid_supports=False +acceleration_infill=3000 +skin_outline_count=1 +jerk_prime_tower=20 +machine_nozzle_id=unknown +acceleration_travel_layer_0=5000.0 +wipe_brush_pos_x=100 +speed_equalize_flow_width_factor=100.0 +magic_fuzzy_skin_enabled=False +experimental=0 +acceleration_support_infill=3000 +brim_gap=0 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +machine_nozzle_size=0.4 +retraction_extra_prime_amount=0 +wipe_move_distance=20 +cool_fan_speed_min=100 +switch_extruder_extra_prime_amount=0 +bridge_fan_speed_2=0 +bridge_skin_material_flow_3=110 +initial_bottom_layers=4 +support_interface_pattern=concentric +support_xy_distance_overhang=0.2 +retract_at_layer_change=False +wall_transition_length=0.4 +wall_x_material_flow=100 +min_skin_width_for_expansion=4.898587196589413e-17 +cross_infill_pocket_size=4.0 +support_tree_top_rate=10 +wall_line_width_0=0.4 +acceleration_travel=5000 +support_bottom_material_flow=100 +acceleration_wall=3000 +ironing_enabled=False +wipe_pause=0 +wipe_retraction_prime_speed=25 +machine_steps_per_mm_z=50 +gradual_infill_steps=0 +machine_steps_per_mm_x=50 +material_break_preparation_retracted_position=-16 +acceleration_skirt_brim=3000 +meshfix=0 +material_flow=100 +support_offset=0.8 +lightning_infill_prune_angle=40 +lightning_infill_overhang_angle=40 +material_crystallinity=False +support_bottom_distance=0.1 +machine_steps_per_mm_e=1600 +wall_thickness=0.8 +wipe_retraction_amount=6.5 +material_break_temperature=50 +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +wipe_hop_speed=10 +infill_line_width=0.4 +support_tree_bp_diameter=7.5 +magic_fuzzy_skin_outside_only=False +brim_line_count=20 +support_roof_line_distance=0.4 +prime_tower_line_width=0.4 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.4 +skin_line_width=0.4 +speed_wall_x=60.0 +raft_base_jerk=20 +gradual_support_infill_steps=0 +skirt_brim_material_flow=100 +bridge_skin_speed=15.0 +wipe_retraction_extra_prime_amount=0 +bridge_skin_support_threshold=50 +cool_fan_speed=100 +coasting_min_volume=0.8 +raft_surface_acceleration=3000 +hole_xy_offset_max_diameter=0 +support_conical_min_width=5.0 +wall_line_width=0.4 +raft_acceleration=3000 +raft_base_thickness=0.36 +jerk_support=20 +wall_line_width_x=0.4 +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +jerk_wall_0=20 +retraction_hop=1 +support_tree_tip_diameter=0.8 +skin_monotonic=False +meshfix_keep_open_polygons=False +prime_blob_enable=False +acceleration_support_interface=3000 +machine_extruder_start_pos_y=0 +retraction_extrusion_window=6.5 +support_fan_enable=False +raft_base_acceleration=3000 +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +infill_wipe_dist=0.1 +retraction_hop_only_when_collides=False +machine_feeder_wheel_diameter=10.0 +connect_infill_polygons=False +mesh_position_x=0 +z_seam_position=back +small_feature_speed_factor=50 +retraction_combing_max_distance=0 +z_seam_x=125.0 +infill_line_distance=4.0 +minimum_bottom_area=1.0 +resolution=0 +infill_randomize_start_location=False +acceleration_ironing=3000 +prime_tower_flow=100 +bottom_skin_preshrink=0.8 +sub_div_rad_add=0.4 +switch_extruder_retraction_speeds=20 +infill_multiplier=1 +wall_transition_angle=10 +support_roof_density=100 +top_bottom=0 +infill_enable_travel_optimization=False +raft_surface_speed=30.0 +speed_layer_0=30.0 +jerk_print=20 +retraction_prime_speed=25 +z_seam_type=sharpest_corner +support_bottom_enable=False +dual=0 +material_break_retracted_position=-50 +material_initial_print_temperature=190 +support_bottom_stair_step_height=0.3 +speed_roofing=30.0 +brim_outside_only=True +material_standby_temperature=175 +xy_offset_layer_0=0 +acceleration_print_layer_0=3000 +z_seam_relative=False +fill_outline_gaps=True +support_zag_skip_count=8 +raft_interface_speed=22.5 +travel_avoid_distance=0.625 +material_print_temperature=200 +min_even_wall_line_width=0.34 +prime_tower_wipe_enabled=True +support_bottom_wall_count=0 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +jerk_topbottom=20 +top_skin_preshrink=0.8 +retraction_hop_enabled=False +acceleration_roofing=3000 +switch_extruder_retraction_speed=20 +material_flush_purge_speed=0.5 +wall_distribution_count=1 +raft_airgap=0.3 +bridge_enable_more_layers=True +initial_layer_line_width_factor=100.0 +bridge_skin_material_flow=60 +z_seam_corner=z_seam_corner_inner +brim_smart_ordering=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +ironing_pattern=zigzag +speed_travel=120 +support_angle=50 +raft_base_speed=22.5 +jerk_support_interface=20 +skirt_brim_minimal_length=250 +raft_surface_layers=2 +support_roof_wall_count=0 +infill_sparse_density=20 +skirt_brim_line_width=0.4 +top_bottom_pattern=lines +machine_extruder_end_pos_y=0 +slicing_tolerance=middle +jerk_skirt_brim=20 +machine_heat_zone_length=16 +speed=0 +acceleration_support_roof=3000 +support_roof_offset=0.0 +support_interface_density=100 +coasting_enable=False +retraction_retract_speed=25 +zig_zaggify_infill=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +raft_interface_layers=1 +cool_min_layer_time_fan_speed_max=10 +support_skip_some_zags=False +roofing_material_flow=100 +meshfix_maximum_deviation=0.025 +cool_fan_enabled=True +wall_overhang_angle=90 +cool_fan_speed_max=100 +speed_prime_tower=60 +infill=0 +support_tree_rest_preference=graceful +coasting_speed=90 +bridge_skin_speed_3=15.0 +magic_fuzzy_skin_point_dist=0.8 +material_break_speed=25 +speed_wall_0=30.0 +cool_lift_head=False +xy_offset=0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=20 +wall_x_material_flow_layer_0=100 +speed_print_layer_0=30.0 +acceleration_support=3000 +retraction_hop_after_extruder_switch_height=1 +machine_extruder_end_pos_abs=False +jerk_layer_0=20 +cool_min_temperature=200 +mold_angle=40 +raft_speed=30.0 +roofing_monotonic=True +bottom_thickness=0.8 +small_feature_max_length=0.0 +skin_overlap_mm=0.02 +support_material_flow=100 +support_tree_max_diameter=25 +bridge_fan_speed=100 +wall_0_material_flow_layer_0=100 +speed_support_interface=40.0 +bridge_skin_material_flow_2=100 +bottom_skin_expand_distance=0.8 +skirt_height=3 +machine_extruder_start_pos_x=0 +support_tower_diameter=3.0 +retraction_amount=6.5 +wipe_retraction_speed=25 +skirt_brim_speed=30.0 +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +wall_material_flow=100 +material_flow_layer_0=100 +material_diameter=1.75 +meshfix_union_all_remove_holes=False +extruder_prime_pos_y=0 +blackmagic=0 +support_brim_line_count=3 +infill_support_enabled=False +cool_fan_speed_0=0 +speed_support_roof=40.0 +support_tree_angle_slow=33.333333333333336 +jerk_wall=20 +extruder_nr=0 +support_interface_material_flow=100 +infill_overlap=10 +lightning_infill_support_angle=40 +support_bottom_line_distance=0.4 +raft_interface_jerk=20 +support_interface_wall_count=0 +support_roof_enable=False +alternate_extra_perimeter=False +bridge_wall_speed=15.0 +support_bottom_offset=0.0 +gradual_support_infill_step_height=1 +wipe_repeat_count=5 +meshfix_maximum_resolution=0.5 +magic_mesh_surface_mode=normal +raft_fan_speed=0 +bridge_skin_density=100 +raft_base_line_width=0.8 +machine_nozzle_offset_y=0 +cool_min_speed=10 +top_layers=4 +brim_inside_margin=2.5 +bridge_fan_speed_3=0 +ironing_inset=0.38 +inset_direction=inside_out +support_roof_pattern=concentric +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +extruder_prime_pos_abs=False +support_tower_maximum_supported_diameter=3.0 +support_tree_angle=50 +support_interface_skip_height=0.2 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +infill_before_walls=True +material=0 +brim_width=8.0 +wall_0_inset=0 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +acceleration_print=3000 +support_bottom_pattern=concentric +machine_endstop_positive_direction_z=True +coasting_volume=0.064 +layer_start_x=0.0 +machine_min_cool_heat_time_window=50.0 +ironing_only_highest_layer=False +acceleration_topbottom=3000 +machine_settings=0 +skirt_line_count=1 +retraction_count_max=90 +jerk_travel_layer_0=30.0 +mold_enabled=False +support_brim_enable=True +support_interface_height=1 +meshfix_maximum_travel_resolution=0.8 +mold_roof_height=0.5 +jerk_ironing=20 +speed_z_hop=10 +wipe_hop_enable=False +zig_zaggify_support=False +raft_base_fan_speed=0 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +skirt_gap=3 +acceleration_prime_tower=3000 +jerk_support_roof=20 +machine_endstop_positive_direction_y=False +acceleration_wall_0=3000 +shell=0 +small_skin_width=0.8 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +small_feature_speed_factor_0=50 +material_break_preparation_speed=2 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=3000 +material_alternate_walls=False +platform_adhesion=0 +raft_interface_thickness=0.30000000000000004 +skin_material_flow_layer_0=100 +top_bottom_pattern_0=lines +support_conical_angle=30 +speed_infill=60 +retraction_min_travel=0.8 +support_line_width=0.4 +jerk_roofing=20 +roofing_line_width=0.4 +support_initial_layer_line_distance=2.6666666666666665 +meshfix_union_all=True +support_z_distance=0.1 +support_bottom_line_width=0.4 +acceleration_wall_x=3000 +skin_material_flow=100 +support_bottom_density=100 +small_hole_max_size=0 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +default_material_print_temperature=200 +roofing_layer_count=0 +clean_between_layers=False +skin_preshrink=0.8 +raft_interface_line_width=0.8 +infill_offset_x=0 +material_surface_energy=100 +support_tree_branch_reach_limit=30 +gradual_infill_step_height=1.5 +minimum_support_area=0.0 +minimum_interface_area=1.0 +machine_nozzle_head_distance=3 +support_interface_offset=0.0 +jerk_travel=30 +bridge_wall_material_flow=50 +support_interface_enable=False +bridge_skin_density_3=80 +min_feature_size=0.1 +infill_sparse_thickness=0.2 +command_line_settings=0 +raft_margin=15 +material_end_of_filament_purge_speed=0.5 +speed_support=60 +machine_extruder_cooling_fan_number=0 +roofing_pattern=lines +material_extrusion_cool_down_speed=0.7 +raft_surface_jerk=20 +bridge_sparse_infill_max_density=0 +min_wall_line_width=0.34 +support=0 +jerk_wall_x=20 +min_bead_width=0.34 +switch_extruder_prime_speed=20 +support_join_distance=2.0 +wipe_hop_amount=1 +wipe_retraction_enable=True +cool_min_layer_time=5 +top_thickness=0.8 +jerk_support_bottom=20 +conical_overhang_hole_size=0 +material_final_print_temperature=185 +infill_material_flow=100 +ironing_flow=10.0 +support_bottom_stair_step_min_slope=10.0 +optimize_wall_printing_order=False +extruder_nr=0 +meshfix_fluid_motion_enabled=False \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_001.wkt b/tests/voronoi_crash_resources/slice_polygon_001.wkt new file mode 100644 index 0000000000..bb3157ce63 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_001.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344) (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_002.wkt b/tests/voronoi_crash_resources/slice_polygon_002.wkt new file mode 100644 index 0000000000..da8cb78088 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_002.wkt @@ -0,0 +1 @@ +MultiPolygon (((147289 101492, 147242 101719, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147392 102471, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149302 102109, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158382 103777, 158054 103621, 158326 103620, 158609 103479, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160459 102832, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165114 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167403 101908, 167813 101885, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170712 103063, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182805 103441, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193784 108149, 193791 108267, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194192 109990, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 193889 118041, 194031 118525, 194060 118432, 194108 118157, 194185 118405, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193955 124449, 193912 124495, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128029, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189347 133587, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174540 135176, 174547 135264, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161701 135725, 161713 135737, 161318 135587, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156722 135585, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153892 136140, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152139 135968, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151615 136133, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148954 136073, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145568 135722, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142017 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136351 134706, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130800 135919, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129950 135960, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125898 135949, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117973 137052, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110742 135386, 110129 135361, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106745 135933, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96928 135395, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93947 135151, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88410 136077, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84140 136272, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83777 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135624, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81443 136222, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81412 136642, 81164 136602, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80274 136387, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78725 136575, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77462 136277, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 74607 135568, 73980 135632, 73531 135754, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70604 135716, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63637 135787, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61894 134944, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61958 135290, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57923 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52479 135209, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44099 133686, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42854 128277, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41327 126885, 41263 126609, 41298 126498, 41361 125899, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46199 104598, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103327, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59200 102049, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59934 102989, 60289 102769, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102502, 62685 102505, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65211 102741, 65426 102708, 65707 102604, 66086 102383, 66205 102382, 66490 102340, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69235 102238, 69004 102702, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72930 103161, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77134 102726, 77148 102730, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101436, 80900 101801, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92036 104290, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97968 102956, 98135 102930, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101467 102338, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111112 102198, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113399 102044, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 118647 102767, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121533 104505, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125415 104380, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389), (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807), (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519), (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 66910 134742, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66066 134661, 65904 134347, 65827 134312), (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165229 134592, 165103 134583, 164916 134441), (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451), (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003), (137415 134174, 137436 134295, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038), (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333), (189640 132105, 190033 132258, 190139 132148, 189973 132090), (193701 118681, 193713 118969, 193757 118982, 193790 118915, 193775 118642, 193726 118073, 193676 118023), (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912), (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909), (188652 105805, 188679 106125, 189087 106087, 188973 105793), (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606), (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442), (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780), (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425), (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173), (120287 104169, 120666 104304, 120664 104164, 120395 103967), (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644), (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412), (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347), (90511 103764, 90906 103803, 90904 103660, 90610 103549), (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429), (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448), (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310), (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088), (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148), (59468 102800, 59496 102829, 59618 102772), (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108647 136612, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71850 101827, 71927 101833, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_003.wkt b/tests/voronoi_crash_resources/slice_polygon_003.wkt new file mode 100644 index 0000000000..041dcd5b9c --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_003.wkt @@ -0,0 +1 @@ +MultiPolygon (((122284 113666, 123049 114043, 123520 114470, 123644 114573, 123817 114751, 123896 114794, 124013 114851, 124694 115297, 125303 115758, 125477 115916, 126470 116593, 126877 117068, 127118 117496, 127198 117898, 127150 118480, 127051 118790, 126908 119189, 126592 119585, 126417 119840, 126185 120009, 125875 120468, 125791 120830, 125570 121185, 125128 121546, 124505 121795, 123592 122108, 122792 122222, 122110 122359, 121721 122424, 120491 122690, 119083 122846, 117862 122758, 117763 122775, 117366 122773, 116401 122835, 115909 122763, 115524 122727, 114931 122571, 114688 122469, 114021 122082, 113525 121558, 113382 121190, 113331 120902, 113336 120423, 113435 120180, 113374 120162, 113261 119886, 113154 119124, 113056 119101, 112971 119049, 112951 119060, 112876 119015, 112876 117561, 112971 117560, 112971 117580, 113031 117580, 113199 117645, 113050 118095, 113047 118359, 113154 119124, 113313 119161, 113550 119140, 113730 118986, 113813 118820, 113829 118625, 113794 118331, 113720 118108, 113577 117902, 113387 117718, 113199 117645, 113418 116985, 114033 116287, 114630 115714, 115362 115246, 115786 115120, 116516 114855, 116827 114768, 117946 114378, 118613 114172, 118991 114040, 119480 113927, 119738 113857, 120380 113725, 120965 113662, 121646 113640), (121614 114261, 121064 114303, 120736 114368, 120370 114429, 119460 114711, 118653 115046, 118123 115255, 117656 115587, 117471 115816, 117219 116158, 117211 116172, 117318 116184, 117780 116466, 118028 116856, 118121 117139, 118359 117797, 118565 118631, 118396 119434, 118187 119501, 117265 119777, 116604 119962, 116111 120021, 115697 120189, 115503 120202, 115046 120688, 114756 120572, 114589 120522, 114404 120312, 114075 119732, 113986 119566, 114172 119488, 114407 119307, 114880 119168, 115414 118856, 115515 118521, 115805 118174, 115983 117895, 116510 117229, 116729 116931, 116889 116730, 117211 116172, 116544 116099, 114823 116276, 114301 116789, 114029 117705, 113932 118116, 113853 118575, 113966 119530, 113986 119566, 113882 119610, 113707 119727, 113444 120158, 113435 120180, 114589 120522, 114708 120658, 115015 120868, 115439 121034, 115919 121203, 116646 121197, 117222 120978, 117287 120917, 117671 120679, 117893 120404, 118315 119816, 118396 119434, 119119 119201, 120958 118521, 121156 118424, 121146 118347, 121156 118119, 121735 116490, 122179 116091, 122487 115947, 123304 115941, 123897 116077, 123827 116268, 123534 116772, 123219 117125, 122881 117439, 122461 117739, 122053 117985, 121156 118424, 121271 119318, 121374 119471, 121819 120261, 122060 120458, 122199 120633, 122737 120931, 123273 121039, 123624 120983, 124108 120884, 124503 120664, 124823 120383, 125303 119692, 125384 119374, 125532 118648, 125478 117748, 125332 116868, 124898 116307, 123897 116077, 123943 115953, 124021 115571, 124018 115263, 123972 115012, 123840 114774, 123817 114751, 123458 114553, 122968 114387, 122292 114251))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_004.wkt b/tests/voronoi_crash_resources/slice_polygon_004.wkt new file mode 100644 index 0000000000..fb8934797c --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_004.wkt @@ -0,0 +1 @@ +MultiPolygon (((114694 35858, 115616 35911, 115854 35970, 116115 36112, 116666 36083, 116755 36064, 116959 36121, 117454 36520, 117954 36308, 118396 36479, 118905 36902, 119142 36740, 119388 36585, 120610 36511, 121349 36576, 121551 36646, 121806 37024, 122134 37435, 122337 37525, 122613 37579, 122905 36993, 123035 36987, 123754 37351, 124156 37152, 124237 37179, 125265 37289, 125714 37320, 125916 37368, 126783 37522, 126884 37542, 127428 37413, 127760 37525, 127985 37667, 128176 37729, 128492 37704, 128708 37756, 129040 38016, 129370 38302, 129553 38343, 130039 38558, 130303 38693, 130645 38683, 130815 38609, 131496 38809, 132570 38671, 132826 39123, 132913 39408, 133122 39596, 133467 39426, 133601 39156, 133743 39187, 133936 39347, 134344 39593, 134523 39533, 134568 39901, 134735 40194, 135001 40147, 135245 40052, 135422 40043, 135593 39721, 135588 39652, 135879 39734, 136913 40255, 137258 40294, 137509 40084, 138034 39610, 138241 40199, 137912 40462, 137782 40885, 138055 40883, 138682 40679, 139860 41330, 139903 41339, 140270 41749, 140358 41819, 140722 42162, 141208 42185, 141335 42501, 141874 42554, 142001 42431, 142678 42985, 142940 43182, 143008 43387, 143371 43383, 143476 43425, 143758 43506, 144322 43650, 144552 43865, 144394 44479, 144474 44471, 144587 44640, 144756 44841, 145358 44845, 145929 44554, 145561 44280, 145198 44136, 144773 44241, 144863 43853, 145300 43698, 145357 43754, 145902 43910, 146069 44500, 146691 44779, 146457 45180, 146532 45278, 147114 45360, 147691 45786, 147974 45934, 148413 45992, 148871 46129, 149174 46207, 149780 45967, 150518 46419, 151023 46445, 151179 46674, 151277 47011, 151931 47268, 152122 47411, 152378 47429, 152371 47652, 152815 47753, 152841 48077, 152822 48148, 153354 48499, 153861 49036, 154395 48895, 155005 49286, 155392 49439, 155975 49852, 156047 49942, 156504 50102, 156854 50647, 156940 50630, 156991 50715, 157507 51150, 157752 51333, 158095 51811, 158342 51899, 158362 52322, 158812 52298, 158820 52290, 159484 52384, 159767 52723, 159879 52764, 160077 52740, 160753 52713, 160926 52761, 160937 52815, 161005 52851, 161092 53432, 161095 53748, 161271 53906, 161501 54270, 161519 54351, 161908 54578, 161971 55091, 162413 54965, 162644 55166, 162846 55764, 162640 56006, 162864 55917, 163153 55978, 163514 55936, 163989 56371, 164195 56644, 164473 56755, 164834 56841, 164651 57037, 165070 57715, 165074 57756, 165228 58005, 165829 58708, 165836 58767, 165894 58779, 166268 59147, 166511 59419, 167227 60014, 167291 60543, 167051 60914, 166973 61121, 166972 61495, 167129 61589, 167383 61556, 167773 61244, 167817 61534, 168386 61687, 168676 61640, 168801 61781, 168814 61968, 168951 62407, 169356 62936, 169883 62918, 169929 63270, 170434 63665, 170639 63616, 171144 64025, 171110 64792, 171185 65115, 170990 65219, 170902 65582, 171142 65638, 171534 65506, 171719 65756, 171922 65992, 172246 65873, 172483 66188, 172822 66325, 172827 66608, 173030 66684, 173096 67142, 173537 67385, 174024 68310, 174243 68335, 174470 68302, 174812 68481, 174841 68804, 174837 69024, 174995 69298, 175146 69480, 175360 70207, 175420 70230, 175450 70355, 176077 70396, 175781 70047, 175687 69727, 176091 69906, 176084 69960, 176391 70487, 176384 70499, 176529 71050, 176278 71598, 176297 71755, 176725 71989, 176885 72414, 176940 72474, 177253 72521, 177404 72763, 177332 73631, 177492 73895, 177746 74166, 177626 74408, 177574 74600, 177192 74917, 177542 75124, 177912 74785, 177904 74683, 178015 74740, 177791 75271, 177810 75487, 177983 75635, 178291 75614, 178544 75530, 178745 75618, 179000 75912, 179061 76348, 179231 76491, 179073 76825, 179165 77257, 179928 76916, 180362 77366, 180379 78058, 180343 78222, 180433 78276, 180446 78550, 180590 78944, 180902 79466, 181180 79474, 181279 80103, 181187 80219, 181319 80454, 181229 81168, 181257 81262, 181362 81360, 181527 81264, 181841 81204, 181947 81287, 182025 81777, 181811 81644, 181555 81814, 181598 82262, 181684 82335, 181822 82856, 181845 83077, 182062 83052, 182437 82695, 182511 83010, 182807 83477, 183019 83880, 182902 84040, 182902 84314, 182827 84766, 183176 84997, 183340 85758, 183402 85874, 183352 85912, 183555 86823, 183864 86929, 184084 86952, 184233 87115, 184037 87326, 183992 87496, 184029 87660, 184326 87781, 184460 88097, 184599 88319, 184668 88590, 184740 88963, 184742 89037, 184800 89531, 184938 89722, 185203 89974, 185123 90389, 185190 90634, 185509 91000, 185551 91217, 185666 91393, 185709 91869, 185842 92055, 185956 92928, 186185 93223, 186185 93364, 186277 93446, 186287 93717, 186364 94336, 186626 94629, 186612 94897, 186649 95199, 186694 95248, 186666 95393, 186392 95793, 186840 95922, 186859 95793, 186878 96097, 186765 96536, 186338 96648, 186316 96756, 186417 96868, 186840 96719, 186593 97222, 186881 97354, 186967 97683, 186960 97778, 187026 98086, 187070 98474, 187092 98755, 187022 99189, 187286 99851, 187286 99926, 187417 99911, 187612 100113, 187402 100497, 187346 100815, 187444 101207, 187786 101608, 187610 101944, 187375 102259, 187512 102696, 187657 102812, 187812 103078, 188284 103190, 188027 104083, 188087 104651, 188079 105003, 188199 105266, 187773 105507, 188239 105450, 188273 105804, 188281 106170, 188299 106301, 188232 106892, 188079 106451, 187732 106782, 187760 106953, 188191 107319, 188381 107897, 188416 108652, 188167 109266, 188428 110087, 188426 110192, 188223 110743, 188428 111106, 188328 111287, 188149 111991, 188187 112010, 188209 112116, 188444 112473, 188503 113335, 188276 113796, 188148 113881, 187922 114174, 187613 114296, 187810 114867, 187710 114928, 187751 115370, 187604 116249, 187634 116536, 188077 117380, 188036 117395, 188087 117412, 188449 117864, 188123 118283, 188025 118526, 188087 118786, 187955 119068, 187865 119194, 187763 119172, 187493 119430, 187599 119914, 187772 119984, 187797 120154, 187644 120253, 187527 120993, 187581 121128, 187575 121246, 187514 121273, 187327 121813, 187294 121855, 187089 122650, 187102 123090, 186836 123375, 186919 123616, 187013 124114, 187092 124135, 187042 124225, 187317 124737, 187277 124814, 187025 125039, 187135 125805, 187188 126304, 187226 126962, 186803 127042, 186780 127077, 186977 127727, 186949 127984, 186658 128438, 186586 128719, 186538 129100, 186747 129550, 186759 129798, 186446 130039, 186662 130144, 186353 130682, 186264 130981, 186249 131185, 185816 130929, 185539 130996, 185495 131199, 186010 131499, 186221 131269, 186091 131610, 185851 132197, 185752 132303, 185563 132814, 185610 132991, 185505 133208, 185268 133312, 185138 133677, 185198 133796, 185122 133968, 184882 134812, 184850 134807, 184866 134859, 184386 135087, 184410 135303, 184550 135520, 184512 135634, 184505 135918, 184539 136289, 184301 136347, 184424 136660, 184541 136812, 184579 137084, 184306 137616, 184117 137621, 184007 137963, 184153 137983, 184108 138301, 183778 138769, 183445 139581, 183227 140076, 183224 140171, 183126 140154, 183094 140479, 183326 140913, 183120 141913, 182904 142226, 182791 142745, 182457 143145, 182221 144290, 182154 144410, 181689 144846, 181574 144997, 181587 145639, 181197 146134, 180867 146720, 180628 146773, 180446 146880, 180293 147627, 180139 148068, 180062 148357, 179469 148950, 179310 148994, 179100 149437, 179074 149463, 178856 149912, 178341 150157, 178315 150295, 178073 150549, 178034 150685, 177767 150997, 177659 151183, 177553 151600, 177400 151654, 177206 152023, 176948 152073, 176646 152327, 176586 152475, 176696 152732, 176551 152980, 176529 153108, 175874 153227, 175665 153609, 175754 153948, 175683 154247, 175551 154300, 175150 154206, 175135 154697, 174606 154845, 174762 155348, 174370 155491, 174373 155773, 174467 156044, 174437 156129, 174480 156575, 174398 156824, 174159 156955, 173942 156610, 173553 156664, 173630 157021, 174052 157130, 173704 157584, 173503 157804, 173467 157971, 173063 158555, 172589 158525, 172470 159146, 172145 159335, 172354 159727, 172027 160454, 171426 160368, 171327 160574, 171440 160938, 171237 161138, 171031 161447, 170586 161305, 170641 161650, 170696 161929, 170017 162319, 169701 162157, 169612 162410, 169947 162590, 169418 163306, 169133 163477, 168777 163453, 168598 163408, 168588 163544, 168445 163680, 168158 164077, 168229 164700, 167813 164621, 167697 164998, 167730 165145, 167611 165235, 167185 165391, 167031 165635, 166947 165864, 166791 165888, 166273 165960, 166242 166237, 165909 166232, 165474 166199, 165332 166560, 165189 166827, 165098 166845, 164772 167082, 164684 167334, 164253 167248, 164216 167347, 164217 167713, 163915 167781, 163780 167943, 163760 168255, 163559 168306, 163464 168612, 163262 168930, 163174 169265, 162737 169552, 162406 170143, 162211 170145, 162236 170212, 161711 170536, 161683 170618, 161145 171030, 161099 171034, 161099 171093, 160786 171574, 160500 171792, 160073 172175, 159416 172440, 159195 172575, 158746 172744, 158853 172426, 158529 172279, 158379 172343, 158502 172843, 158448 172889, 157822 172962, 157647 173154, 157806 173799, 157391 174179, 157392 174188, 156954 174534, 156832 174852, 156436 175204, 156476 175455, 155785 175939, 155247 175730, 154959 175781, 154804 176155, 154319 175864, 154108 175841, 153804 175954, 153400 176060, 153315 176524, 153391 176660, 153361 176907, 153012 177015, 152891 177270, 152706 177287, 152498 177438, 152068 177656, 151875 177808, 151223 177681, 151072 178069, 150622 178275, 150512 178152, 150375 178404, 150381 178835, 150249 179113, 150012 179223, 149599 179683, 149102 180048, 148588 180318, 148349 180547, 147973 180850, 147859 181268, 147680 181423, 147360 181407, 147227 181570, 146809 181637, 146537 182133, 146279 182188, 145981 181974, 145803 182032, 145352 181794, 145098 181735, 145002 181752, 144952 182147, 144962 182375, 144810 182450, 144133 182516, 143760 182356, 143465 182507, 143726 182855, 143498 183139, 142605 182887, 142219 183453, 141992 183525, 141634 183491, 140971 183661, 140947 183967, 140250 184209, 140128 184215, 139807 184324, 139299 184542, 139176 184503, 139040 184599, 138704 184738, 138187 185014, 138032 185012, 137713 185074, 137574 185164, 137321 185479, 137068 185479, 136557 185545, 136256 185235, 135868 185797, 135471 186136, 135228 186096, 134987 186250, 134874 186250, 134759 186061, 134550 186306, 134211 186259, 134112 186294, 133578 186372, 133490 186209, 133122 186247, 133068 186364, 132903 186448, 132530 186771, 132382 186809, 131217 187222, 130252 187346, 129939 187296, 129250 187205, 128909 187413, 128572 187457, 128291 187541, 127932 187634, 127475 187554, 127024 187506, 126434 187950, 125580 187983, 125232 187989, 125046 187954, 124319 188217, 124172 188249, 123799 188403, 123191 188545, 122659 188433, 122515 188019, 122036 188128, 122010 188061, 121893 188090, 121273 188658, 120681 188647, 120591 188686, 120202 188673, 119386 189106, 119197 189105, 118694 188941, 118217 188999, 117947 188984, 117787 188880, 117415 188894, 117326 188640, 116978 188535, 116720 188881, 116146 188816, 115659 188790, 115316 188849, 115115 188814, 114841 188859, 114549 188716, 114318 188681, 113926 188980, 113663 189037, 113174 188806, 112848 188951, 112625 188869, 112408 188732, 112264 188540, 111811 188889, 111320 189022, 111273 188986, 110288 189061, 110284 188991, 110260 189070, 109551 188846, 109049 188980, 108640 188974, 108430 188691, 107946 188679, 107893 188720, 107583 188843, 107452 188771, 107165 188936, 107014 189113, 106883 188957, 106466 188722, 106368 188805, 105651 188889, 105467 188874, 105212 188496, 104989 188829, 104648 189280, 104468 189317, 104302 189076, 103783 189258, 103576 189061, 103219 188955, 103130 188874, 103022 188846, 102608 188878, 102452 188511, 102188 188320, 101536 188115, 101292 188072, 100895 187871, 100634 187581, 100378 187567, 100184 187625, 100054 187619, 99810 187211, 99622 186978, 99352 186435, 99474 186970, 98976 186866, 99246 186448, 98877 186841, 98779 186929, 98463 187246, 98340 187520, 98100 187531, 97578 187368, 97479 187190, 97111 187228, 96622 187076, 96303 187022, 96543 186674, 96574 186252, 96539 186118, 96472 186073, 96240 186145, 96118 186355, 96019 187054, 95406 187175, 95332 186929, 95091 186592, 94431 186396, 94381 186220, 94321 186290, 94052 186257, 93875 186092, 93617 186186, 93177 186327, 92867 186206, 92265 185941, 92063 185774, 91739 185648, 91668 185510, 91466 185466, 90835 185433, 90668 185418, 90214 185200, 89836 184850, 89305 184917, 88906 184822, 88620 184755, 88218 184931, 88017 184559, 87814 184521, 87528 184624, 87291 184414, 87281 184231, 87044 184147, 86634 183794, 86042 183787, 85370 183373, 84994 183501, 84870 183254, 84615 182998, 84453 183100, 83938 182960, 83767 182768, 83707 182853, 83595 182742, 83268 182690, 82900 182557, 82889 182316, 82552 182250, 82422 182112, 82229 181990, 82058 181770, 81544 181718, 81475 181756, 80811 181534, 80436 181226, 80192 181144, 79988 180804, 79669 180721, 79099 180678, 78662 180562, 78308 180327, 78037 180115, 77694 179903, 77057 179859, 76353 179194, 76145 179125, 75725 178963, 75296 178823, 75096 178834, 74550 178516, 74405 178428, 73830 178172, 73573 178089, 73215 177772, 73089 177834, 72911 177578, 72696 177431, 72487 177635, 72248 177417, 72071 177177, 71724 177042, 71931 176679, 71421 176457, 71175 176330, 70737 176489, 70358 176260, 70052 176000, 69957 175975, 69673 175751, 69328 175604, 69027 175264, 68913 175183, 68882 174858, 68630 174645, 68501 174662, 68004 174368, 67967 174215, 67848 174183, 67708 173677, 67419 173452, 66827 173479, 66362 173435, 66217 172902, 65976 172879, 65875 172779, 65545 172764, 65458 172420, 65277 172332, 64915 172052, 64514 171562, 64379 171512, 64221 171307, 64295 171235, 64007 170960, 63776 171020, 63492 170892, 63360 170714, 63202 170413, 62846 170087, 62792 169982, 62569 169903, 62262 169682, 62007 169455, 61892 169164, 61415 168711, 61391 168704, 61052 168045, 60535 168019, 60458 167575, 60029 167470, 60387 167884, 59910 167465, 59717 167207, 59897 167213, 59888 166355, 59737 166309, 59416 166807, 58936 166324, 58829 166134, 58537 165945, 58260 165690, 58166 165542, 57814 165157, 57651 165125, 57323 164827, 57063 164383, 56815 164177, 56033 163328, 56033 163308, 55805 162954, 55550 162650, 55478 162617, 55098 161883, 55025 161705, 54691 161069, 54667 161070, 54295 160827, 54314 160663, 54140 160458, 54105 160318, 53816 160145, 53673 160120, 53549 160002, 53250 159987, 53058 159820, 52796 159217, 52578 159016, 52051 158366, 51945 157941, 51491 157893, 51481 157264, 51547 157067, 50993 156640, 50897 156523, 50822 156514, 50678 156381, 50120 156083, 50132 155857, 49620 154604, 49553 154466, 49447 154132, 49495 154063, 48877 153388, 48464 153234, 48390 153214, 48013 152959, 47914 152954, 47873 152839, 47930 152636, 47651 151872, 47593 151788, 47334 151063, 47400 150617, 47313 150498, 47269 150247, 47205 150000, 47079 149740, 46915 149467, 46728 149347, 46560 149105, 46286 149016, 46242 148833, 46111 148657, 45656 147810, 45293 147362, 45064 147054, 45081 146960, 45078 146541, 45023 146135, 44682 145641, 44688 145623, 44196 145047, 44168 144858, 44047 144430, 44086 144074, 43656 143884, 43558 143636, 43347 143176, 43173 142989, 43202 142738, 43055 142161, 42945 141942, 42487 141628, 42523 141709, 42427 141586, 42537 140936, 42595 140893, 42654 140495, 42195 140398, 42495 139960, 42435 139677, 42412 139482, 42164 138738, 42178 138106, 42083 137957, 41310 137657, 41212 137195, 40908 136836, 40967 136612, 41277 136342, 41395 135834, 41209 135653, 41021 135227, 41094 135010, 40748 134868, 40485 134684, 40366 134160, 40315 133744, 40242 133597, 40194 133159, 40206 133104, 40129 133033, 40182 132935, 40126 132448, 39988 131820, 39968 131658, 39831 131278, 39662 131096, 39730 130361, 39797 130087, 39577 129956, 39250 129922, 39151 129623, 38921 129407, 39010 129096, 39151 128825, 39123 128765, 39525 128567, 39722 128458, 39522 128489, 39279 128068, 39776 127617, 39596 127256, 39369 126710, 39445 126423, 39197 126589, 38969 126239, 38321 125691, 38252 125560, 38057 124561, 38136 124300, 38320 123983, 38134 123313, 38081 123272, 38137 123117, 38255 122832, 38003 122514, 38108 121990, 37857 121397, 37526 120959, 37564 120545, 37692 119896, 37687 119880, 37981 119064, 37979 118852, 38052 118649, 38043 118079, 37971 117878, 37991 117562, 37933 117024, 37909 116725, 37703 116493, 37546 116229, 37681 115530, 37553 115252, 37416 114824, 37741 114424, 37731 114236, 37620 114011, 37314 113827, 37232 113558, 37156 113467, 37197 112524, 36714 112275, 36765 112260, 37199 112522, 37434 111924, 36982 111672, 36811 111408, 37047 111519, 37652 111009, 37698 110754, 37633 110510, 37810 110166, 37691 110040, 37635 109647, 37827 109402, 37613 108785, 37494 108375, 37545 107977, 37669 107602, 37871 107177, 37894 106603, 37823 105857, 38017 105404, 37894 105340, 38162 104604, 38113 104095, 38271 103874, 38117 103621, 37858 103450, 37735 103424, 37866 103205, 38524 103016, 38662 102874, 38741 102203, 38784 102091, 38727 101504, 38704 101369, 38803 100877, 38737 100521, 38915 100277, 38849 99926, 38734 99814, 38525 99757, 38195 99820, 38108 99545, 38142 99423, 37957 99275, 37891 99006, 38014 98504, 38014 98425, 38115 97758, 38218 97604, 38573 97310, 38860 97366, 39051 97061, 38876 96999, 39059 96833, 39100 96737, 39309 96684, 39729 96430, 39835 96234, 39855 95980, 39732 95860, 39978 95385, 40129 94890, 40315 93894, 40220 93607, 40131 93376, 40169 93108, 40366 93070, 40592 92702, 40403 92576, 40428 92384, 40768 91947, 41072 91952, 41055 91927, 40691 91858, 40560 91533, 40478 91298, 40351 91155, 40272 90924, 40489 90939, 40568 90784, 40175 90539, 40305 90041, 40405 89697, 40622 89766, 40473 89621, 40780 88998, 40843 88521, 41126 87815, 41368 87125, 41497 86796, 41925 86280, 41868 86089, 41735 85825, 42063 85620, 42132 85488, 42001 85117, 42157 84853, 42035 84651, 42204 84525, 42205 84394, 42394 84376, 42727 83803, 42657 83830, 43116 82939, 43625 82298, 43735 82041, 43951 81850, 43957 81790, 43814 81520, 43851 81321, 43993 81119, 43945 80553, 43900 80413, 44074 80266, 44419 80144, 44701 80133, 44865 79952, 44740 79681, 44623 79481, 44533 78853, 44903 78650, 45046 78443, 44974 77952, 45184 77517, 45370 77328, 45458 77033, 45553 76760, 45903 76617, 46100 76211, 46046 76094, 46135 75959, 46249 75396, 46288 75370, 46621 74796, 47337 74438, 47549 73641, 47592 73555, 47873 72566, 48398 72257, 48741 71821, 48799 71681, 49048 71491, 49380 71071, 49529 70585, 49771 70188, 50109 69547, 50754 69133, 50798 69120, 51024 68836, 51040 68763, 51306 68494, 50857 68257, 51157 68033, 51273 67296, 51449 67289, 51754 67093, 52127 66821, 52371 66627, 52547 66287, 52955 65976, 53197 65775, 53782 65213, 53950 64896, 54457 65074, 54569 64399, 54759 64217, 54866 64265, 55177 63880, 55664 63137, 56433 62571, 56534 62376, 56667 62389, 56615 62177, 56850 61938, 56778 61643, 57351 61872, 57514 61895, 57725 61745, 57586 61543, 57458 61653, 56835 61034, 56818 60848, 57227 60577, 57256 60550, 57959 60058, 58367 59344, 59107 59224, 59881 58508, 60268 58113, 60501 58132, 60719 57851, 60464 57385, 61205 56999, 61431 56958, 61756 56550, 62127 56520, 62346 56324, 62512 56280, 62620 56136, 62957 56111, 62943 55400, 63507 55262, 63545 55045, 63841 54926, 64174 54912, 64335 54736, 64538 54671, 64947 54426, 65238 54145, 65389 53681, 65552 53589, 65579 53391, 65619 52861, 65716 52791, 65886 52814, 66111 52906, 66390 52450, 66599 52453, 66717 52292, 66686 52000, 67380 51777, 67581 51765, 67698 51580, 67728 51111, 68378 50868, 68507 50615, 68622 50472, 68778 50431, 69002 50296, 69368 50131, 69717 50310, 70557 49559, 70557 49501, 70703 49432, 71371 49265, 71550 49446, 71830 49416, 71856 49248, 71522 48579, 71982 48683, 72097 48645, 72470 48265, 72538 48115, 73022 47911, 73245 47912, 73743 47477, 73837 47531, 74060 47567, 74809 46974, 74861 46819, 75390 46330, 75560 46302, 76216 45971, 76283 45840, 76444 45764, 76747 45701, 76981 46042, 77229 45509, 77531 45281, 77687 45264, 77933 45324, 78000 45216, 78447 45195, 78721 45006, 79118 44864, 79393 44583, 79692 44422, 79924 44054, 79903 43889, 80044 43792, 80128 43817, 80790 43615, 80994 43378, 81598 43354, 81682 43371, 81796 43238, 81829 42961, 82425 42727, 82876 42817, 83007 42888, 83140 42878, 83594 43121, 83763 42776, 84179 42469, 84233 41956, 84386 41952, 85356 41740, 86073 41291, 86415 41110, 86603 41081, 86995 40896, 87195 40760, 88002 40318, 88192 40247, 88504 40510, 88634 40373, 89100 40204, 89722 40123, 90321 39868, 90368 39894, 90957 39587, 91213 39716, 91545 39924, 91766 39880, 92014 39912, 92160 39607, 92284 39521, 92681 39603, 92962 39412, 93222 39258, 93614 39582, 93829 39426, 93913 38860, 94544 38839, 94873 38815, 95006 38580, 95443 38320, 95586 38204, 96271 38276, 96494 38209, 96897 37935, 97525 37702, 97730 37813, 98155 37995, 98383 37914, 98791 38027, 99458 37487, 99856 37658, 99945 37634, 100053 37514, 100503 37386, 100669 37401, 100758 37171, 100936 37042, 101504 36970, 101602 36879, 102117 36754, 102472 36634, 102663 36637, 103129 36495, 103271 36500, 104005 36221, 104537 36294, 104735 36234, 105411 36217, 105919 36015, 106293 36171, 106357 36183, 106451 36275, 106647 36188, 107021 36181, 107376 36356, 107570 36237, 107928 36135, 108681 36328, 108716 36304, 109060 36536, 109325 36315, 109315 36045, 109621 36074, 110324 36059, 110738 36124, 111039 36133, 111489 36048, 111699 36254, 112037 36004, 112610 36230, 112657 36180, 112724 36204, 113493 36040, 113816 35901, 113881 36301, 114059 36269, 114010 35834), (113315 187423, 113330 187976, 113220 188559, 113485 188242, 113648 188366, 114254 188161, 114196 187775, 114015 187492, 113989 187563, 113715 187691, 113520 187838, 113336 187415), (111090 188167, 111327 188385, 111560 188048, 111351 187770), (110220 38303, 109262 38515, 108939 38424, 108324 38367, 108180 38404, 107605 38809, 107326 38827, 107028 38934, 106420 39462, 105838 39689, 105563 39738, 105022 39794, 104529 39627, 104039 39176, 103183 39027, 102929 39428, 102287 39511, 101171 39591, 100292 39851, 99810 39944, 98870 40145, 97878 40233, 97325 40449, 97049 40407, 96658 40382, 96324 40626, 95844 40823, 95393 40803, 95278 40844, 94978 40854, 94321 40962, 93601 41414, 93505 41421, 93297 41537, 92745 41723, 92016 41756, 91371 41986, 91197 42070, 90398 42283, 89737 42394, 89377 42665, 88770 42883, 88366 42898, 87850 43099, 86845 43616, 85989 43809, 85258 44225, 84555 44393, 83531 44659, 83045 44950, 82710 45068, 82377 45139, 81806 45276, 81222 45506, 81338 46066, 81274 46132, 80974 45821, 80698 46388, 80489 46354, 79854 46878, 78940 47245, 78484 47252, 78037 47244, 77903 47193, 77092 47714, 76202 48377, 75019 49231, 74401 49523, 74298 49590, 74207 49589, 73366 50215, 72368 50640, 72127 50867, 71124 51699, 70466 52009, 70328 52019, 70156 52167, 69291 52794, 68108 53517, 67749 53561, 67179 53745, 66945 54057, 66736 54528, 66608 54968, 66042 55318, 65783 55555, 65412 55684, 64875 56211, 64548 56620, 63981 56960, 63905 57640, 63489 57749, 63224 57898, 62400 58206, 62077 58558, 61733 58973, 61463 59338, 61085 59815, 60815 60187, 60516 60332, 60025 60800, 59401 61180, 59278 61290, 58861 61557, 58858 61825, 58886 62647, 58819 62812, 58640 63051, 58139 63706, 58052 63736, 57937 63918, 57745 64075, 57063 64850, 56407 64908, 55683 65792, 55407 66472, 55213 66762, 55062 66964, 53955 68080, 53929 68120, 53490 68461, 52870 69041, 52644 69229, 52374 69467, 52270 69516, 51802 70355, 51776 70442, 51407 71119, 51270 71350, 50722 72343, 50650 72469, 49965 73436, 49659 73815, 49468 74263, 49120 74845, 48929 75360, 48775 75645, 48627 76011, 48123 76496, 48237 76766, 47962 76835, 47548 77953, 47275 78160, 46888 78851, 46671 79281, 46679 79551, 46632 80052, 46430 80502, 45678 81373, 45558 81443, 45501 81682, 45397 81990, 45196 82670, 45416 82990, 44913 83582, 44869 83583, 44240 84686, 44008 85265, 43900 85455, 44032 85532, 44085 86246, 43773 86631, 43669 86706, 43644 86813, 43279 87236, 43264 87330, 43414 87773, 43333 88084, 42999 88374, 42877 88750, 42620 89331, 42284 90404, 42222 90474, 41734 91181, 41591 91486, 41980 92492, 41977 92524, 42097 93108, 42039 93370, 41898 94264, 41853 94733, 41769 94823, 41610 95231, 41560 95560, 41441 95975, 41351 96392, 41057 96924, 40901 97129, 40135 97700, 39990 98237, 40042 98680, 39802 99203, 39947 99743, 40073 99930, 40252 100270, 40349 100745, 40175 102128, 40160 102350, 39732 103273, 39815 103780, 39863 104149, 39836 104224, 39814 104482, 39641 105522, 39557 105896, 39862 105985, 39904 106320, 39772 106478, 39470 106685, 39298 106848, 39216 107000, 39173 107250, 39039 108188, 39231 108930, 39243 109972, 39090 110595, 38989 110824, 38861 111046, 39176 111334, 38813 111612, 38840 111864, 38942 113436, 38841 114185, 38673 114737, 38674 114864, 39002 115713, 39033 116469, 39573 117303, 39652 117527, 39266 118213, 39266 119205, 39302 120034, 39278 120171, 39221 120244, 39010 120729, 39150 121474, 39169 121538, 39199 121870, 39305 122513, 39542 123057, 39630 123571, 39645 123990, 39753 124427, 39596 124939, 40111 125327, 40283 125359, 40569 125528, 40766 125808, 40981 126176, 41019 126750, 41157 127641, 41153 128112, 40614 128785, 40457 128933, 40467 129128, 40649 129315, 40741 129455, 40870 129554, 41345 130327, 41321 130387, 41379 130590, 41404 131026, 41490 131412, 41970 132227, 42105 132759, 42133 133155, 41896 133643, 42016 134336, 42081 134501, 42282 135189, 42335 135269, 42379 135506, 42777 136515, 43176 136683, 43616 137662, 43751 138002, 43809 138087, 44005 138697, 44119 139023, 44368 139795, 44445 140160, 44691 140661, 44475 141292, 44413 141421, 44522 141675, 44931 142243, 45045 142788, 45375 143300, 45788 143905, 45941 144113, 45961 144276, 46360 144960, 46579 145604, 46633 145683, 47287 146999, 47515 147502, 47647 147831, 48043 148334, 48454 148689, 48773 149386, 48903 149627, 49483 150442, 49812 151624, 49815 151961, 49889 152125, 49841 152473, 50140 152837, 50415 153086, 50584 153299, 51613 154227, 51629 154299, 52490 154759, 52655 154965, 53233 155791, 53626 156536, 53798 156815, 54248 157436, 54391 158124, 54977 158304, 54919 158899, 55383 159303, 56087 159866, 56601 160621, 56633 160718, 57136 161320, 57331 161673, 58228 162575, 58457 162833, 58731 163160, 59005 163580, 59672 164178, 59873 164371, 60054 164404, 60439 164750, 60573 165084, 61028 165594, 61737 166223, 61774 166287, 61813 166287, 63154 167515, 63748 168100, 64479 168735, 64519 168796, 65322 169571, 65979 170371, 66323 170670, 66523 170828, 67112 170643, 68088 171300, 68391 171561, 68884 172061, 71094 173718, 71274 173814, 71528 174007, 72164 174415, 72500 174614, 72694 174673, 73521 175084, 73670 175317, 74073 175859, 74476 176081, 75707 176645, 76222 176920, 76541 177065, 76794 177202, 77398 177664, 77618 177817, 78983 178382, 79225 178500, 79764 178639, 80732 179282, 80990 179407, 81130 179459, 81860 179929, 82048 179981, 83382 180542, 83679 180685, 84445 180994, 84725 181106, 85568 181425, 86013 181633, 86557 181806, 86774 181976, 87199 182273, 88396 182521, 89059 182911, 89995 183169, 90265 183178, 90303 183218, 90775 183375, 90965 183481, 91259 183499, 92114 183875, 92705 183957, 93035 184116, 93774 184411, 93811 184500, 94382 184511, 95025 184545, 95116 184520, 95372 184245, 95599 184298, 95724 184570, 95918 184736, 96642 185408, 97335 185423, 97528 185581, 97924 185590, 98435 185782, 98869 185626, 99285 185625, 99738 185722, 100322 185751, 100660 185759, 100679 185889, 101517 186369, 101678 186357, 102556 186722, 102962 186818, 104083 187308, 104965 186797, 105317 186765, 106017 186808, 106735 186719, 107297 186745, 107469 186642, 108288 186664, 108990 186880, 109910 186775, 109929 186727, 110622 186296, 111052 186269, 111354 186319, 111615 186475, 112159 186937, 112742 186822, 112805 186844, 112836 186781, 113778 186813, 114049 186694, 114201 186943, 115713 186809, 115975 186814, 117052 186878, 117502 186687, 117974 186619, 118389 186781, 118858 186670, 119298 186545, 119517 186580, 119778 186716, 120313 186663, 120807 186666, 121071 186343, 121339 186161, 121986 186004, 122519 186323, 123378 186211, 123895 185988, 124640 185916, 124830 185789, 125276 185687, 125877 185652, 125977 185680, 126672 185617, 126893 185624, 127612 185399, 127782 185327, 128384 185199, 128779 185167, 129347 184977, 129607 184971, 129740 184977, 130912 184795, 131594 184793, 131706 184763, 131812 184785, 132313 184666, 132776 184390, 133371 184218, 134347 184044, 134699 183911, 135171 183802, 135887 183735, 136467 183534, 136711 183388, 137521 182983, 137696 182968, 138189 182809, 138911 182599, 139218 182547, 140114 181730, 140145 181674, 140193 181670, 140208 181623, 141014 181046, 141479 180664, 142537 180360, 143625 179814, 143633 179792, 144431 179464, 144534 179498, 145511 179297, 145657 179170, 146290 179250, 146382 179304, 146557 179178, 147836 178821, 148038 178689, 148927 177474, 148980 177378, 149241 177156, 149673 176696, 149991 176476, 150756 175852, 151159 175708, 151875 175549, 152034 175409, 152210 174820, 152766 174447, 152959 174401, 153340 174138, 153832 173824, 154252 173567, 154813 173302, 155277 172938, 155601 172746, 156026 172346, 156779 171839, 157015 171682, 157715 171130, 157778 171089, 158362 170590, 158376 170504, 159170 169927, 159377 169900, 160116 169205, 160112 168999, 160425 168546, 161053 168101, 161395 168104, 161612 167818, 161871 167621, 162754 167241, 162812 167112, 163112 166834, 163305 166532, 163397 166550, 163531 166511, 163611 166336, 164053 165573, 164719 165183, 165058 164500, 165145 164451, 165365 164126, 166253 163296, 166265 163234, 166350 163185, 167121 162521, 167163 162284, 167682 161784, 167620 161097, 167649 160923, 167922 160470, 168205 160140, 168617 159694, 169220 159177, 169422 159089, 170140 158922, 170544 158208, 170711 158051, 170908 157762, 171095 157273, 171081 156937, 171280 156716, 171798 156240, 172120 155956, 172469 155573, 172536 155147, 172808 154598, 172841 154298, 172880 153697, 173039 153423, 173660 152440, 173819 152287, 174219 151703, 174389 151357, 174531 151194, 174966 150576, 175405 150204, 175599 150106, 175591 149660, 175645 149486, 176113 148724, 176567 148149, 176692 147681, 177111 147030, 177309 146754, 177329 146696, 177708 146049, 177894 145650, 178638 144396, 178731 144210, 179121 143276, 179257 143128, 179516 142688, 179547 142487, 179617 142146, 179889 141464, 180036 141240, 180098 141026, 180664 140174, 180720 139672, 180868 139507, 181116 139182, 181296 138669, 181350 138614, 181422 138372, 181731 137560, 181828 137257, 182023 136664, 182106 136384, 182289 135858, 182335 135800, 182439 134791, 182623 134299, 182710 134046, 182834 133720, 182991 133175, 183203 132289, 183365 132030, 183423 131406, 183590 130935, 183691 130790, 183849 129837, 183933 129482, 184141 128757, 184218 128092, 184538 127076, 184622 126260, 184648 125979, 184698 125815, 184853 124593, 184904 124116, 184919 123695, 185006 122986, 185303 121478, 185392 120917, 185470 120573, 185517 120153, 185711 119513, 185788 119220, 186008 118225, 186077 117997, 186124 117662, 186037 117447, 185792 117157, 185424 116495, 185359 116285, 185431 115211, 185477 115087, 185487 114528, 185649 114179, 185975 113639, 186056 113353, 186384 113259, 186516 113125, 186533 112726, 186448 111685, 186318 111123, 185988 111211, 185926 110444, 185712 110174, 185705 109880, 185653 109496, 185565 108383, 185553 108056, 185549 107916, 185395 107486, 185545 107358, 185403 106993, 185404 106559, 185303 106425, 185376 105896, 185583 105374, 185468 105193, 185253 105203, 185418 104260, 185540 103837, 185700 103337, 185710 102966, 185622 102684, 185493 101932, 185004 100942, 184661 99311, 184604 98922, 184482 98210, 184439 97858, 184351 97461, 184295 97025, 184386 96888, 184463 96395, 184241 95902, 184096 95687, 183869 94891, 183903 94711, 183795 94565, 183606 93806, 183439 93345, 183437 92770, 183403 92504, 183269 92083, 182927 91685, 182912 91244, 182603 90390, 182527 90091, 182363 89993, 182148 89499, 181881 89153, 181988 88821, 181938 88305, 181818 88007, 181625 87702, 181483 87225, 181404 86875, 180894 85370, 180776 84192, 180309 83929, 180160 83631, 180080 82935, 180020 82782, 179981 82767, 179946 82648, 179524 81966, 179248 81239, 179240 81201, 178654 80229, 178602 79764, 178347 79644, 178277 79425, 178421 78683, 178556 78387, 178447 78139, 178316 78073, 177837 77719, 177223 77227, 177064 76925, 176761 76503, 176503 76104, 176107 75583, 175954 75337, 175818 74910, 175516 74429, 175600 74041, 175595 73838, 175375 73124, 175227 72790, 175210 71941, 174903 71882, 174939 71448, 174312 71026, 173972 70720, 173535 70368, 173384 70299, 172805 69711, 172318 69002, 172270 68997, 172237 68823, 171997 68260, 171845 67995, 171364 67545, 171317 67459, 171007 66982, 170785 66661, 170164 65897, 169975 65719, 169713 65512, 169620 64939, 169075 64816, 168314 64347, 168104 64188, 167587 63690, 167040 63180, 166525 62591, 166066 62039, 165221 61251, 164956 60968, 164482 60502, 164182 60231, 164095 60134, 163704 59771, 163587 59375, 163443 58938, 163208 58711, 163108 58561, 162486 58315, 162092 58104, 161597 57767, 161290 57495, 161039 57154, 161015 57021, 160742 56357, 160478 56012, 159962 55790, 159667 55609, 159142 54839, 159063 54798, 159002 54649, 158673 54248, 158352 53701, 157495 53405, 156376 52966, 156262 52881, 156102 52220, 155837 51809, 155503 51536, 155043 51283, 154567 51136, 154057 50812, 153778 50741, 153123 50620, 152911 50395, 152824 50401, 152493 50074, 152175 49806, 151787 49744, 151256 49878, 150793 49682, 150625 49450, 150420 49453, 149949 49263, 149383 48954, 149232 48882, 148621 48392, 148294 48190, 147894 47796, 147738 47477, 147250 47165, 147020 47048, 145982 46591, 145509 45862, 144958 46188, 144599 46131, 144150 45982, 143714 45501, 143696 45378, 143612 45235, 143029 45204, 142924 45210, 142478 45007, 142080 45026, 141597 44631, 140373 44065, 140145 44164, 139342 44150, 139018 44041, 138822 43996, 138557 43794, 138165 43097, 137132 42805, 136979 42726, 135463 42239, 134834 42055, 134666 41855, 134426 41800, 134088 41838, 133365 41608, 132977 41506, 132117 41303, 131857 41204, 131327 41096, 130858 41015, 130072 40764, 129798 40616, 129547 40612, 129287 40560, 129130 40561, 128062 40237, 127120 40086, 126798 39994, 125179 39795, 123937 39506, 123924 39510, 122978 38988, 122586 39068, 122250 39195, 121980 39331, 121783 39449, 121140 39495, 120694 39364, 119340 39375, 119085 39189, 118614 38925, 118389 38790, 117942 38743, 117467 38795, 117174 38809, 115958 38779, 115053 38727, 114402 38704, 113949 38707, 113268 38649, 112334 38715, 111993 38731, 111598 38747, 111276 38693, 111009 38476, 110429 38293), (92370 185073, 92328 185313, 92308 185653, 92982 185807, 93171 185876, 93417 185422, 93455 185103, 92888 185108, 92518 184971), (145157 181180, 145303 181367, 145566 181168, 145392 180995, 145137 180940), (68249 174029, 68620 174447, 68841 174042, 68760 173837, 68559 173681, 68248 173622), (159439 171440, 159776 171830, 160160 171503, 159586 171359), (44622 83091, 44684 83134, 44788 83136, 44876 83061, 44931 82823, 44800 82744), (139758 42256, 139920 42316, 140180 41894))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_005.wkt b/tests/voronoi_crash_resources/slice_polygon_005.wkt new file mode 100644 index 0000000000..3e2b406488 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_005.wkt @@ -0,0 +1 @@ +MultiPolygon (((138539 75509, 137892 76451, 136650 78222, 136294 78718, 136295 78719, 136293 78719, 135795 79414, 136032 79459, 136450 79517, 137320 79621, 139845 79899, 139676 79805, 139395 79485, 139319 79300, 139321 78970, 139001 78937, 137350 78781, 136743 78735, 136295 78719, 136371 78675, 138860 77322, 139307 77102, 139672 76981, 140035 76939, 140691 76994, 141290 77068, 142237 77200, 143218 77353, 143883 77467, 144387 77565, 144797 77659, 145017 77759, 145146 77921, 145156 78093, 144997 78606, 144796 79150, 144677 79439, 144675 79439, 144303 79460, 143772 79428, 142973 79351, 141618 79210, 141620 78833, 141547 78649, 141268 78329, 140874 78109, 140430 78026, 139999 78112, 139808 78220, 139497 78525, 139321 78905, 139321 78970, 141618 79210, 141618 79228, 141446 79608, 141138 79914, 140954 80019, 142911 80210, 143379 80242, 143695 80251, 144077 80230, 144277 80132, 144414 80000, 144664 79471, 144677 79439, 144998 79373, 145297 79231, 145554 79071, 146451 78425, 147174 77920, 147657 77601, 148231 77248, 148531 77075, 149153 76747, 149473 76595, 149797 76454, 150124 76326, 150454 76211, 150784 76110, 151113 76022, 151442 75946, 151765 75882, 152399 75782, 152704 75745, 153289 75694, 153827 75666, 154525 75653, 155217 75664, 155614 75698, 155973 75800, 156236 75903, 156646 76098, 157277 76430, 160408 78141, 161785 78882, 162196 79094, 162530 79254, 162943 79426, 163343 79477, 163667 79452, 163921 79409, 166052 78969, 166862 78817, 167125 78841, 167319 78944, 167520 79165, 167746 79536, 168019 80092, 168360 80863, 171168 87641, 173031 92047, 173823 93875, 175444 97534, 175852 98437, 177471 101932, 178648 104385, 179763 106641, 180791 108653, 181695 110368, 182434 111719, 182830 112410, 183154 112943, 183414 113329, 183677 113651, 183875 113772, 184026 113801, 184278 113776, 185530 113543, 186065 113454, 186323 113558, 186559 113817, 186800 114172, 187217 114861, 187483 115328, 189399 118831, 191579 122766, 192864 125043, 194134 127269, 195406 129471, 198000 133917, 201493 139874, 202835 142192, 204205 144593, 205594 147078, 207009 149682, 208387 152299, 209775 155034, 211150 157844, 212510 160725, 213848 163667, 215161 166660, 216446 169694, 217698 172755, 218913 175825, 220090 178896, 221224 181947, 222343 185052, 223352 187927, 224342 190826, 225279 193640, 226163 196358, 226991 198964, 227766 201462, 228490 203853, 229217 206325, 229794 208341, 230382 210449, 230928 212474, 231438 214424, 231914 216307, 232359 218130, 232776 219898, 233169 221622, 233539 223305, 234231 226609, 234859 229790, 235238 231800, 231173 231800, 230740 229536, 230103 226364, 229762 224746, 229402 223095, 229021 221405, 228615 219670, 228180 217879, 227716 216028, 227216 214106, 226680 212108, 226103 210025, 225484 207850, 224818 205577, 224102 203199, 223335 200712, 222514 198112, 221637 195398, 220706 192582, 219722 189679, 218690 186709, 217610 183689, 216485 180633, 215319 177559, 214118 174487, 212882 171429, 211619 168407, 210285 165321, 209027 162509, 207706 159658, 206376 156885, 205042 154200, 203709 151605, 202382 149103, 201071 146693, 199786 144374, 198534 142142, 195042 135959, 192819 131983, 191734 130010, 190652 128018, 189568 125987, 188320 123613, 186172 119438, 185659 118474, 185283 117823, 185064 117492, 184832 117239, 184571 117136, 184077 117178, 182551 117364, 182250 117379, 182078 117338, 181846 117190, 181523 116813, 181366 116600, 180977 116030, 180469 115238, 179529 113709, 178347 111726, 177466 110208, 176054 107708, 175084 105935, 174115 104110, 173162 102255, 172241 100401, 171371 98566, 170560 96771, 170177 95897, 169456 94183, 169117 93349, 168452 91658, 167901 90200, 167376 88759, 166459 86126, 165765 84101, 165519 83427, 165322 82946, 165159 82629, 165019 82449, 164885 82375, 164722 82378, 164293 82561, 163510 82925, 162729 83269, 162410 83362, 162051 83317, 161645 83157, 161301 82999, 160869 82787, 159270 81960, 156750 80632, 155651 80065, 155154 79820, 154756 79648, 154297 79513, 153789 79491, 153520 79492, 153070 79520, 152726 79566, 152346 79642, 151925 79758, 151480 79915, 150994 80127, 150477 80395, 150211 80546, 149670 80875, 149129 81225, 148603 81581, 146757 82886, 146492 83048, 146247 83163, 145996 83236, 145711 83270, 145370 83273, 144946 83247, 144212 83178, 140935 82837, 139330 82683, 138057 82578, 137473 82548, 137027 82555, 136629 82665, 136325 82939, 135865 83494, 134570 85114, 134201 85524, 133916 85770, 133608 85766, 133368 85661, 132940 85380, 132235 84882, 131900 84632, 131648 84960, 130392 86556, 129931 87127, 127676 85889, 129151 84113, 130329 82653, 131507 81156, 132683 79626, 133858 78061, 135029 76466, 136321 74661))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_006.wkt b/tests/voronoi_crash_resources/slice_polygon_006.wkt new file mode 100644 index 0000000000..18b9bef171 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_006.wkt @@ -0,0 +1 @@ +MultiPolygon (((147845 114697, 79916 114698, 79356 114263, 78887 113180, 78804 112804, 78579 111059, 78578 108942, 78804 107197, 78886 106821, 79356 105737, 79916 105303, 147845 105302))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_007.wkt b/tests/voronoi_crash_resources/slice_polygon_007.wkt new file mode 100644 index 0000000000..f7169c20c1 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_007.wkt @@ -0,0 +1 @@ +MultiPolygon (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 55431, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 142431, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 164569 178649, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 77569 178649, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 164569, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 77569, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 55431 41351, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 142431 41351, 164573 41351, 164646 41345), (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_008.wkt b/tests/voronoi_crash_resources/slice_polygon_008.wkt new file mode 100644 index 0000000000..4d388fded5 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_008.wkt @@ -0,0 +1 @@ +MultiPolygon (((237021 162714, 237023 162724, 237364 163247, 237431 163603, 237382 164159, 237382 164160, 237383 164635, 237314 164698, 236962 164552, 236735 163971, 236680 163321, 236790 162822, 237039 162566)), ((196948 149246, 197417 149496, 198057 150166, 198076 150169, 198558 149890, 198968 150153, 199172 150383, 199194 150384, 199662 149907, 199895 149944, 200470 150376, 200985 150928, 200987 150930, 201462 151312, 201466 151314, 202288 151627, 202289 151627, 203572 151984, 203805 152076, 203809 152077, 204846 152214, 205659 152291, 205661 152291, 206822 152310, 207841 152366, 208624 152336, 208628 152336, 208726 152312, 209896 152097, 210277 152709, 210278 152710, 210633 153195, 210636 153198, 210899 153407, 210916 153408, 211357 153135, 211364 153123, 211403 152572, 211403 152571, 211389 152056, 211382 151183, 211433 151052, 212562 151617, 213178 152054, 213827 152630, 214293 153079, 214736 153557, 215297 154263, 215510 154979, 215757 155893, 215789 156278, 215895 157177, 215896 157723, 215779 158199, 215560 158688, 215238 159253, 214794 159910, 214463 160346, 214277 160566, 213930 161008, 213836 161041, 213422 160222, 213072 159565, 213070 159562, 212609 159059, 212603 159055, 212246 158917, 212228 158924, 211954 159402, 211953 159405, 211877 159669, 211876 159675, 211967 160494, 211968 160497, 212007 160620, 212296 161784, 212112 161840, 211731 161766, 211727 161766, 211117 161811, 209745 161806, 208632 161841, 208630 161841, 207787 161950, 207014 161992, 207012 161992, 206326 162131, 205756 162256, 204724 162462, 204722 162463, 203983 162705, 203479 162812, 203043 162877, 202656 162052, 202352 161202, 202535 160466, 202524 160447, 201956 160309, 201646 160031, 201621 160039, 201352 161266, 200692 162042, 199940 162503, 199938 162505, 199857 162573, 199168 162915, 198804 162934, 198389 162563, 197570 160876, 196601 158763, 195650 156631, 194563 154098, 194252 153214, 194203 152893, 194633 152656, 194640 152637, 193702 150642, 193817 150110, 194604 149574, 194604 149575, 195371 149132, 196288 149104), (201024 151497, 201020 151508, 201024 152241, 201028 152252, 201258 152481, 201502 152941, 201661 153421, 201663 153425, 202291 154295, 202742 155032, 202750 155038, 202920 155093, 204057 155657, 204864 155999, 204866 156000, 205599 156282, 206025 156423, 207071 157070, 208172 158008, 207997 158538, 207996 158543, 208010 159375, 207491 159650, 207489 159651, 207258 159811, 204318 160425, 203138 160445, 203124 160456, 202933 161076, 202932 161076, 202756 161512, 202756 161523, 202970 162164, 202971 162166, 203123 162472, 203141 162479, 203458 162361, 204386 162016, 205140 161816, 205293 161765, 206864 161349, 208269 161152, 209044 161095, 209612 160996, 210708 160987, 210928 161007, 210929 161007, 211795 160999, 211810 160981, 211730 160589, 211691 160083, 211703 159543, 211776 159246, 212014 158768, 212217 158457, 212219 158450, 212262 157867, 212262 157866, 212259 157369, 212322 156706, 212322 156704, 212294 155987, 212294 155985, 212082 154837, 211969 154157, 211970 153786, 211970 153784, 211897 153265, 211892 153256, 211734 153103, 211722 153099, 211600 153118, 211588 153127, 211525 153261, 211232 153471, 210933 153510, 210640 153381, 210329 153092, 210115 152728, 210098 152721, 209103 152964, 209102 152965, 208961 153011, 208061 153092, 207430 153063, 206582 153036, 205387 152943, 204532 152843, 203722 152728, 203190 152483, 203189 152483, 202882 152381, 202374 152174, 201862 151983, 201282 151684, 201044 151496), (199660 150856, 199663 150872, 200418 151616, 200244 151805, 200248 151828, 200761 152078, 200783 152065, 200767 151288, 200764 151280, 200611 151055, 200602 151048, 199677 150846)), ((257842 77402, 257958 77503, 257967 77507, 258382 77521, 258387 77520, 258932 77373, 259287 77397, 259290 77397, 259820 77325, 260186 77380, 260188 77380, 261013 77379, 261568 77508, 261572 77508, 262215 77455, 262427 77735, 262432 77740, 262904 77968, 262908 77969, 263328 78050, 263331 78050, 264234 78057, 265790 78454, 266522 78661, 266526 78661, 267151 78648, 267315 79096, 267341 79100, 267496 78895, 268274 79013, 268342 79176, 268354 79185, 269843 79339, 270380 79431, 270578 79451, 271164 79760, 271544 80561, 271533 80742, 271406 80815, 271065 80822, 271050 80836, 271025 81139, 270919 81233, 269420 81075, 269187 80838, 269171 80835, 268729 80996, 268138 80990, 268125 80998, 267947 81312, 267800 81297, 267711 81174, 267687 81173, 267610 81265, 267425 81264, 267366 80922, 267351 80910, 266705 80927, 266699 80928, 266503 81009, 266495 81018, 266417 81224, 266352 81260, 265829 81196, 265733 81160, 265728 81159, 265208 81158, 265201 81160, 265033 81249, 265026 81267, 265033 81276, 265271 81391, 265274 81391, 265845 81543, 265848 81544, 266380 81574, 266383 81574, 267284 81469, 267286 81468, 267546 81390, 268286 81361, 268920 81413, 269967 81660, 270833 81895, 271992 82328, 272685 82657, 273357 83031, 273914 83384, 273991 83440, 274841 83961, 274843 83962, 275409 84219, 276776 84944, 277587 85461, 278565 86053, 279381 86732, 279503 86865, 279971 87341, 280263 87794, 280538 88759, 280583 89381, 280544 90450, 280448 91102, 280230 91999, 280231 91999, 279949 92852, 279505 94107, 279095 95144, 278683 96033, 278418 96531, 278130 97004, 277565 97887, 277056 98583, 276523 99253, 275661 100221, 275132 100795, 274606 101330, 274606 101350, 274622 101354, 276156 100750, 276660 100636, 276898 100808, 277283 101420, 277619 102202, 277590 102617, 277328 102892, 276938 103144, 276475 103475, 274584 104615, 271906 106100, 270857 106562, 269832 106996, 269832 106997, 268247 107477, 266102 108030, 265254 108145, 264964 108150, 264640 107940, 264350 107278, 264227 106761, 264227 105206, 264040 104063, 264039 104060, 263859 103590, 263834 103585, 262617 104879, 262622 104903, 263522 105294, 263509 105567, 263323 106198, 262984 107541, 262983 107545, 262977 107738, 262993 107753, 263852 107724, 263904 107801, 263595 108964, 263594 108971, 263653 109236, 263271 109310, 263262 109334, 263472 109613, 263941 110528, 263743 110652, 263737 110659, 263629 110892, 263628 110897, 263575 111643, 263127 112510, 263133 112530, 263994 113017, 265358 113816, 266382 114440, 266392 114442, 266602 114397, 267264 114810, 267077 114844, 267069 114849, 266914 115029, 265819 114390, 264961 113905, 263784 113255, 263764 113259, 263767 113280, 264281 113646, 264282 113647, 265669 114477, 267569 115661, 269348 116820, 270033 117288, 269733 117438, 268429 116616, 267675 116153, 267655 116156, 267658 116178, 268170 116583, 269569 117746, 270183 118283, 270793 118833, 271246 119260, 270712 119282, 270507 119105, 270487 119105, 270484 119124, 270676 119418, 270685 119425, 271123 119540, 271336 119840, 271216 120083, 271107 120150, 271101 120169, 271431 120889, 271441 120897, 272735 121256, 272754 121241, 272745 121085, 272742 121077, 272214 120365, 272042 119918, 271841 118913, 271884 117731, 272035 117337, 272539 116435, 273590 115566, 274932 115108, 276112 115147, 276653 115226, 277760 115739, 278265 116038, 279296 117242, 279532 117825, 279788 118758, 279787 118758, 279890 119359, 279782 120388, 279633 121087, 279056 122368, 278695 122789, 277877 123559, 277359 123844, 276226 124347, 276226 124348, 275463 124570, 275454 124591, 275589 124828, 275381 125158, 274941 125501, 274324 125735, 273633 125830, 273393 125620, 273464 125492, 273460 125473, 273441 125474, 272828 126069, 272826 126089, 272838 126095, 273233 126087, 273353 126213, 273382 126689, 273397 126703, 273715 126707, 273794 126758, 273840 127389, 273506 127420, 273492 127436, 273801 134782, 273788 135336, 273656 135448, 272172 135516, 272019 135362, 272005 135358, 271905 135381, 271893 135397, 271897 135478, 271647 135600, 271639 135610, 271544 136035, 271556 136053, 273992 136583, 274518 136687, 274522 136687, 274677 136672, 275429 136819, 275431 136819, 275654 136838, 275961 136972, 276217 137263, 276317 137577, 276298 137922, 275976 138560, 275767 138783, 275556 138853, 275382 138838, 275114 138662, 274747 138181, 274738 138175, 274204 138047, 274222 137808, 274210 137792, 273740 137690, 273723 137700, 273647 137895, 273611 137886, 273592 137898, 273587 137918, 273581 137888, 273569 137876, 273505 137863, 273488 137874, 273465 137949, 273407 137935, 273388 137842, 273372 137830, 273358 137842, 273341 137920, 273266 137903, 273332 137618, 273320 137600, 271376 137175, 271358 137186, 271295 137440, 271255 137430, 271234 137338, 271218 137326, 271205 137336, 271175 137413, 271148 137406, 271171 137333, 271163 137314, 271145 137319, 271105 137374, 271091 137306, 271075 137294, 271063 137301, 271017 137375, 270984 137368, 270990 137286, 270978 137270, 270926 137259, 270908 137271, 270891 137346, 270843 137334, 270874 137263, 270863 137242, 270816 137232, 270798 137244, 270785 137320, 270621 137283, 270616 137196, 270602 137182, 270587 137193, 270563 137269, 270468 137247, 270524 137003, 270512 136985, 268402 136528, 268385 136549, 268478 136780, 266292 136268, 266356 136099, 266345 136079, 264686 135718, 264725 135529, 264718 135513, 264479 135360, 264639 134364, 264639 134359, 264588 134110, 264477 133277, 264476 133274, 264286 132782, 264283 132777, 263888 132372, 263886 132370, 263406 132006, 262921 131664, 262919 131663, 262424 131398, 262420 131396, 261884 131298, 261882 131298, 261324 131275, 260766 131271, 260763 131271, 260250 131357, 260243 131360, 259824 131655, 259822 131656, 259065 132420, 259064 132422, 258702 132884, 258701 132886, 258336 133561, 257968 134336, 257595 135054, 257190 135549, 255458 134879, 255393 134775, 255613 133856, 255612 133856, 256047 132707, 256638 131248, 256629 131229, 255944 131006, 254925 130422, 254340 129926, 254320 129926, 254315 129940, 254439 130596, 254458 131503, 254468 131517, 255641 131908, 254606 135130, 254617 135150, 255114 135260, 255752 135389, 256317 135491, 257106 135613, 257107 135613, 258363 135763, 259014 135816, 259856 135860, 259858 135860, 260580 135873, 260483 136292, 260483 136297, 260515 136544, 260006 136577, 259977 136329, 259961 136316, 259259 136341, 258267 136338, 257395 136294, 256571 136222, 255643 136110, 254367 135906, 254351 135916, 254223 136317, 254235 136337, 254851 136429, 255508 136514, 256163 136585, 256164 136585, 256814 136636, 257451 136671, 258386 136701, 258292 137112, 258292 137117, 258324 137363, 257813 137396, 257784 137149, 257768 137136, 257059 137162, 256536 137167, 255826 137149, 255198 137119, 254008 137021, 253993 137031, 253751 137778, 253320 137635, 253301 137644, 252596 139852, 251905 139629, 251885 139643, 251867 140222, 251687 140644, 251696 140664, 252190 140840, 251715 142262, 250872 141969, 250852 141984, 250877 142317, 250827 142534, 250663 142797, 250438 142970, 250441 142996, 251044 143264, 250641 143949, 250320 144407, 249544 144075, 249523 144085, 249221 145241, 248970 146060, 248971 146060, 248788 146532, 248493 147127, 247903 147823, 247521 148089, 246927 148341, 246924 148343, 246547 148615, 246101 148946, 245394 149502, 245393 149503, 244967 149905, 244962 149912, 244886 150217, 244481 151229, 243827 152080, 243019 152639, 242821 152732, 242815 152737, 242373 153278, 242002 153753, 241784 154008, 241243 154684, 241240 154689, 241121 155162, 239651 156938, 239142 157600, 239142 157601, 238650 158316, 238369 158752, 238368 158753, 238087 159229, 238087 159230, 237594 160244, 237342 160569, 237007 160823, 236528 161022, 236117 161093, 235506 161004, 235235 160859, 234926 160462, 234897 160393, 234896 160391, 234582 159885, 234581 159884, 234226 159402, 233652 158634, 232668 157218, 232484 156828, 232494 156592, 232588 156433, 232590 156422, 232547 156214, 232543 156207, 232041 155656, 232040 155655, 231514 155156, 231513 155155, 230865 154677, 230864 154676, 230211 154262, 229717 153969, 228921 153483, 228437 153204, 228191 153048, 227663 152741, 227662 152741, 227414 152610, 226886 152299, 226396 151999, 225874 151652, 225657 151521, 225153 151183, 224561 150731, 223993 150335, 223992 150334, 223554 150085, 222520 149424, 221766 148770, 221063 148012, 220656 147468, 220485 147131, 220467 147124, 220457 147140, 220505 147525, 220197 147971, 220196 147973, 220038 148277, 219762 148407, 219354 148177, 219009 147560, 218833 146916, 219146 145879, 219144 145866, 218946 145606, 219049 145454, 219394 145250, 219473 145385, 219479 145390, 220025 145698, 220047 145685, 220062 144978, 220117 144435, 220217 143893, 220356 143342, 220573 142844, 221277 141863, 221808 141236, 222236 140760, 222599 140393, 223019 140006, 223834 139301, 224395 138801, 224829 138454, 225442 137996, 226115 137536, 226784 137144, 227526 136750, 228373 136347, 228377 136344, 228827 135949, 228828 135948, 229225 135496, 229648 134993, 230142 134435, 230781 133620, 230783 133618, 231266 132855, 231266 132854, 231608 132159, 232182 130834, 232183 130832, 232493 129959, 232494 129958, 232663 129289, 232663 129286, 232683 128854, 232683 128850, 232472 127815, 232609 126871, 232609 126870, 232658 126161, 232658 125317, 232562 124411, 232562 124410, 232404 123550, 232403 123549, 232203 122889, 232045 122410, 231833 121848, 231833 121846, 231455 121020, 230800 119678, 230349 118613, 230348 118611, 230112 118213, 230107 118209, 229607 117876, 229447 117599, 229304 117089, 229305 117089, 229075 115858, 229075 115857, 228932 115312, 228930 115309, 228710 114892, 228635 114606, 228602 113648, 228599 113153, 228580 112409, 228580 112408, 228510 111864, 228456 111170, 228456 110861, 228412 110102, 228389 108993, 228434 108114, 228509 107202, 228589 106509, 228764 105403, 229026 104184, 229361 102826, 229795 101280, 230323 99345, 230323 99343, 230369 98915, 230369 98913, 230343 97895, 230598 96765, 230871 95815, 230861 95798, 230654 95717, 229953 95094, 229389 94488, 228540 93647, 229631 92008, 230469 90882, 230470 90866, 230347 90671, 231863 89112, 233238 87892, 234139 87328, 234823 87021, 234832 87006, 234710 85788, 234627 84687, 235292 84236, 235772 83925, 235777 83906, 235457 83312, 235821 83212, 235827 83209, 235983 83060, 236221 83057, 236231 83053, 236477 82834, 236739 82765, 236998 82795, 237309 82946, 237324 82946, 237406 82898, 237413 82882, 237267 82263, 238357 81986, 238366 81979, 238431 81869, 238746 81668, 239506 81475, 239964 81404, 240104 81533, 240118 81537, 240347 81479, 242220 81003, 242231 80987, 242217 80823, 242390 80732, 242516 80748, 242639 80888, 242654 80893, 242976 80811, 242987 80794, 242951 80568, 243018 80425, 243287 80446, 243473 80547, 243515 80633, 243154 80734, 243143 80750, 243162 80763, 243588 80656, 244252 80483, 244263 80466, 244244 80453, 243653 80595, 243711 80502, 243922 80363, 244306 80466, 244314 80466, 245377 80178, 245381 80177, 245851 79888, 246208 79845, 246217 79968, 246236 79982, 246771 79846, 246923 80402, 246935 80413, 248151 80593, 248164 80588, 248784 79905, 249716 80346, 249735 80340, 249736 80328, 249586 79765, 249571 79372, 250057 78916, 250062 78909, 250322 77829, 250457 77712, 251621 77791, 252145 77831, 252158 77824, 252359 77527, 252687 77555, 252838 77890, 252850 77899, 253631 77987, 253642 77984, 253787 77874, 253793 77862, 253804 77445, 253852 77408, 254650 77620, 254658 77620, 255128 77475, 255128 77476, 255890 77327, 256350 77505, 256356 77506, 256883 77486, 256982 77547, 257001 77544, 257238 77292), (266087 134538, 266057 134841, 266069 134857, 268356 135357, 268374 135345, 268411 135178, 268400 135161, 266106 134525), (271611 128933, 271597 128951, 271709 129444, 271725 129456, 271739 129440, 271715 128943, 271699 128929), (263000 113432, 262998 113449, 263272 113964, 263644 114800, 263656 114809, 264395 114934, 265105 115120, 265105 115119, 265585 115282, 265603 115275, 265599 115256, 264103 114182, 263020 113430), (260831 106740, 260069 106917, 260059 106925, 259672 107618, 259412 108108, 259205 108523, 258948 109011, 258947 109012, 258807 109308, 258541 109815, 258552 109836, 258982 109927, 259937 110259, 259956 110250, 260711 108095, 261223 106603, 261216 106585, 261203 106584)), ((286459 73808, 286764 74016, 286735 74267, 286404 74410, 285970 74306, 285964 74306, 285140 74453, 285134 74456, 284412 74963, 284415 74989, 285580 75497, 285585 75498, 285993 75514, 286069 75641, 286083 75648, 286973 75591, 286985 75584, 287131 75363, 287790 74735, 288597 74968, 289915 75906, 289917 75907, 290364 76153, 290844 76457, 291153 76750, 291635 77389, 291658 77390, 291746 77285, 292909 77078, 293762 77003, 294227 77144, 294626 77532, 294968 78010, 294977 78016, 295049 78029, 295506 78298, 296031 78579, 296051 78575, 296054 78562, 296018 78414, 296009 78404, 295912 78363, 295935 78186, 296030 78132, 296589 78381, 297044 78739, 297047 78784, 296930 78845, 296324 78696, 296306 78706, 296312 78723, 296776 79036, 296968 79270, 296981 79430, 296988 79442, 297221 79577, 297574 80064, 297894 80707, 297912 80714, 298162 80619, 298257 80670, 298261 80778, 298085 81058, 297966 81119, 297958 81134, 298038 81929, 298047 81941, 298384 82093, 298547 82235, 299164 83129, 299205 83286, 299211 83294, 299390 83428, 299881 84171, 300031 84701, 299858 85309, 299857 85309, 299601 85882, 299332 86140, 299327 86150, 299320 86338, 299148 86892, 298934 86866, 298928 86867, 298469 87008, 298458 87021, 298406 87753, 298376 88416, 298346 88693, 298330 89465, 298330 89466, 298338 90346, 298351 90361, 298977 90434, 299471 90526, 299462 91164, 298991 91159, 298987 91159, 298460 91296, 298449 91313, 298461 91326, 298917 91415, 298869 91854, 298356 91835, 298340 91848, 298114 93363, 298028 93822, 297845 94961, 297360 96432, 296885 97482, 296265 98720, 295636 99846, 294647 101280, 294647 101292, 293839 102311, 293839 102329, 294122 102738, 293849 103011, 293220 102462, 293199 102463, 292566 103198, 291527 104236, 291161 104559, 290468 105215, 289903 105729, 289361 106177, 289356 106192, 289435 106542, 289437 106546, 289848 107276, 289659 107484, 289337 107685, 289013 107249, 289011 107247, 288859 107110, 288840 107109, 287374 108190, 286800 108549, 286798 108550, 286319 108945, 286316 108965, 286698 109587, 286144 109966, 285561 109220, 284908 108356, 284330 107568, 284312 107563, 281892 108641, 280803 109139, 280802 109140, 280075 109550, 278296 109960, 277595 110079, 276885 110188, 276605 110149, 276179 109336, 276162 109328, 274368 109766, 273734 109902, 272341 110222, 271745 110375, 271764 110356, 271765 110336, 271751 110330, 271188 110400, 270188 110587, 269349 110722, 268229 110826, 267865 110768, 267604 110210, 267397 109341, 267261 108626, 267278 108390, 267791 108258, 268446 108196, 268510 108313, 268587 109538, 268588 109543, 268643 109671, 268655 109680, 269034 109721, 269040 109721, 270270 109422, 270885 109260, 270890 109257, 271015 109171, 272399 108812, 273241 108616, 275594 108031, 275605 108013, 275541 107740, 276406 107448, 276667 107447, 276755 107723, 276773 107733, 277832 107464, 279379 107085, 280127 106935, 280303 107001, 280554 107786, 280574 107795, 282165 107050, 283077 106643, 283702 106339, 283708 106334, 283762 106266, 284414 105934, 284416 105933, 285209 105353, 285815 104860, 285817 104858, 285954 104709, 286367 104341, 286699 104891, 286718 104897, 287313 104648, 287850 105472, 287957 105734, 287569 106014, 286344 106635, 285104 107202, 285100 107225, 285739 107952, 285758 107954, 286974 107145, 286975 107145, 288157 106208, 288162 106191, 288050 105887, 288325 105648, 289181 104848, 290537 103534, 290538 103534, 290966 103099, 292104 101970, 292621 101439, 292978 101085, 293263 101202, 293281 101197, 293757 100551, 294580 99361, 294581 99360, 295152 98459, 295152 98458, 295876 97042, 296331 95998, 296332 95996, 296650 95115, 296651 95113, 297027 93529, 297362 91622, 297362 91621, 297461 90884, 297612 90312, 297898 90222, 297908 90208, 297930 89468, 297884 88200, 297884 88199, 297787 87188, 297766 87175, 297194 87446, 297192 87448, 297010 87573, 296442 87738, 295700 87995, 295196 88110, 294532 88064, 294004 88040, 293520 87988, 293514 87989, 292861 88212, 292851 88223, 292794 88549, 292795 88549, 292478 89634, 292252 90333, 291904 91006, 291448 91381, 289925 92279, 287276 93463, 286342 93864, 284448 94654, 283584 95002, 282468 95406, 282010 95582, 281522 95677, 281393 95585, 281259 95333, 281231 95146, 281402 94948, 282587 94393, 285754 93043, 287888 92104, 289175 91498, 289176 91497, 289772 91162, 290806 90556, 290810 90553, 291232 90064, 291235 90059, 291580 88969, 291581 88967, 291656 88536, 291638 88518, 290862 88674, 290861 88675, 290105 88885, 289831 88943, 289176 89154, 289175 89154, 288682 89343, 288087 89173, 288070 89179, 287919 89419, 287663 89646, 286663 89980, 286534 90029, 285717 90222, 285715 90223, 284884 90508, 284709 90529, 284704 90531, 284366 90704, 284685 88421, 284672 88404, 284475 88372, 284467 88373, 284082 88543, 283890 88535, 283922 88486, 283919 88467, 283866 88422, 283843 88425, 283790 88508, 283794 88528, 283820 88547, 283769 88588, 283446 88576, 283398 88482, 283378 88476, 283129 88613, 282928 88611, 282643 88465, 282249 87875, 282238 87868, 281824 87831, 281777 87729, 281756 87722, 281474 87859, 277731 82418, 277916 82125, 277918 82115, 277900 82002, 278116 81568, 278286 81533, 278296 81526, 278589 81074, 278587 81056, 277934 80287, 277912 80286, 277321 80879, 277320 80882, 277249 80988, 276812 81009, 276548 80700, 276529 80698, 275136 81642, 274722 81835, 274276 81459, 274262 81456, 273799 81583, 273646 81446, 273632 81443, 273352 81527, 273580 81414, 273586 81394, 273295 80879, 273357 80667, 274434 80210, 274443 80198, 274478 79984, 274474 79972, 274354 79847, 274336 79844, 273421 80361, 273191 79945, 273176 79937, 272786 79990, 272583 79651, 272570 79352, 272907 78998, 273532 78715, 274134 78547, 274395 78624, 274406 78623, 275576 78005, 276097 77819, 276630 78173, 277188 78580, 277193 78583, 277910 78745, 277922 78742, 278413 78369, 278419 78357, 278419 78281, 278587 78082, 278981 78127, 278994 78122, 279174 77937, 279630 77906, 279639 77902, 279884 77682, 279888 77667, 279833 77485, 279830 77479, 279539 77170, 279279 76434, 279275 76310, 279273 76303, 279089 75951, 279046 75532, 279171 75129, 279342 75049, 279446 75090, 279464 75085, 279609 74905, 279718 74868, 279972 74917, 279990 74902, 279988 74850, 280355 74868, 280362 74867, 280920 74633, 280925 74630, 281005 74550, 281130 74549, 281137 74547, 281624 74290, 282084 74029, 282453 73962, 282594 74035, 282604 74140, 282300 74719, 282298 74724, 282248 75137, 282249 75145, 282326 75340, 282332 75347, 282441 75416, 282451 75418, 282982 75357, 282990 75353, 283428 74984, 283913 74668, 284653 74219, 284951 74232, 284967 74221, 285004 74072, 285322 73808, 285644 73770, 286149 73722), (275250 79336, 275246 79359, 275672 79804, 275690 79807, 276154 79546, 276156 79545, 276442 79339, 276443 79315, 276009 78952, 275992 78951), (288854 77618, 288842 77631, 288823 77797, 288828 77810, 289352 78307, 290025 78989, 290032 78993, 290274 79035, 290285 79032, 290450 78921, 290613 78909, 290619 78907, 290975 78719, 290979 78696, 290613 78267, 290608 78263, 290404 78177, 289834 77818, 289831 77817, 289339 77626, 289169 77562, 289161 77561), (281705 76631, 281708 76643, 281762 76714, 281774 76720, 281898 76718, 281973 76782, 282076 77063, 282085 77072, 282175 77106, 282187 77105, 282425 76989, 282428 76965, 282060 76648, 282051 76644, 281721 76619), (283850 75271, 283612 75445, 283609 75448, 283424 75711, 283422 75715, 283305 76031, 283209 76128, 283209 76134, 283202 76134, 283018 76319, 283014 76329, 283009 76415, 283030 76430, 283274 76330, 283278 76305, 283188 76219, 283225 76153, 283491 76061, 283685 76074, 283694 76072, 283783 76014, 283790 75999, 283771 75838, 283870 75603, 283871 75597, 283874 75283, 283861 75268)), ((300300 81817, 300272 81877, 300278 81896, 300288 81898, 300381 81883, 300427 82079, 300307 82164, 300124 82129, 300117 82130, 299817 82221, 299011 82315, 298646 82253, 298640 82165, 298946 81906, 299181 81832, 299696 81807, 300217 81771)), ((271992 82164, 272231 81825, 272604 81637, 273119 81611)), ((298948 81163, 298950 81309, 298701 81584, 298410 81664, 298286 81586, 298306 81452, 298579 81186, 298847 81119)), ((298362 79448, 298127 79529, 298146 79404, 298294 79269, 298519 79182)), ((298711 78753, 298777 78925, 298669 78956, 298375 78716, 298351 78635, 298538 78630)), ((285930 68926, 286629 69186, 286962 69325, 286677 69880, 286177 70153, 286172 70157, 285851 70606, 285553 70821, 284837 71032, 284313 70956, 284309 70956, 283741 71037, 283739 71037, 283169 71178, 283005 71091, 283065 70956, 283563 70513, 283719 70445, 283724 70441, 284000 70122, 284589 69523, 285081 69273, 285087 69267, 285207 69052, 285405 68894, 285541 68860))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_009.wkt b/tests/voronoi_crash_resources/slice_polygon_009.wkt new file mode 100644 index 0000000000..540cf1afe6 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_009.wkt @@ -0,0 +1 @@ +MultiPolygon (((273309 86663, 273171 86933, 272905 87016, 272763 86930, 273101 86650))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_010.wkt b/tests/voronoi_crash_resources/slice_polygon_010.wkt new file mode 100644 index 0000000000..11bc7aa3a5 --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_010.wkt @@ -0,0 +1 @@ +MultiPolygon (((197366 140151, 198008 140453, 198569 140709, 198560 140980, 198069 141540, 197297 141998, 197293 142020, 197356 142101, 197077 142358, 196515 142882, 195989 143113, 195987 143115, 195824 143225, 195042 143362, 194506 143386, 194189 143347, 194128 142562, 194106 141067, 194164 140387, 194980 140604, 195506 140818, 195523 140814, 195793 140516, 195795 140514, 196148 139981, 196469 139830, 196646 139829)), ((219033 103218, 219096 103903, 219026 104447, 218908 105001, 218559 105813, 217997 106959, 217785 106926, 217499 106378, 217246 105649, 217113 104880, 217140 104295, 217248 103963, 217448 103630, 218094 103082, 218629 102730, 218898 102601)), ((267611 89140, 268331 89308, 268331 89307, 269200 89544, 270028 89755, 271121 90152, 272486 90752, 273592 91344, 273963 91608, 274630 92058, 275213 92492, 276368 93491, 276369 93492, 276619 93679, 277158 94275, 277594 94791, 277904 95279, 278265 95847, 278582 96515, 278851 97268, 278659 97374, 277149 96612, 275882 95922, 275863 95927, 275862 95942, 276710 97587, 277053 98280, 277427 99183, 278079 101107, 278102 101521, 277826 102000, 277824 102004, 277633 103124, 277531 104019, 277373 105171, 277168 105584, 276757 105878, 276466 105944, 275560 105747, 274539 105388, 274508 105033, 274427 104192, 274480 103041, 274503 102721, 274545 101657, 274544 101651, 274272 100917, 274272 100916, 273686 99678, 273685 99676, 273219 98884, 272754 98130, 272753 98129, 272288 97494, 272287 97493, 271942 97089, 271939 97086, 271419 96743, 271418 96743, 270010 95973, 269432 95641, 269430 95640, 269088 95527, 268327 95230, 267958 95129, 267258 94907, 266575 94599, 266167 93864, 265899 92905, 265885 92159, 266434 92162, 267233 92202, 267236 92202, 267584 92137, 267592 92132, 267997 91716, 268887 91910, 268887 91909, 269860 92196, 270886 92484, 270904 92476, 270899 92458, 268614 90725, 267717 89995, 267394 89763, 266981 89264, 267242 89068), (267996 93061, 267392 93305, 267383 93316, 267341 93494, 267342 93503, 267456 93743, 267463 93750, 267870 93968, 267872 93969, 268682 94250, 269341 94447, 270058 94733, 270806 95209, 270807 95209, 270863 95238, 272208 96101, 272674 96419, 273154 96928, 273512 97385, 273781 97818, 273782 97819, 273908 97975, 274581 99106, 275156 100507, 275327 101010, 275359 101766, 275330 103070, 275334 103829, 275334 103830, 275401 104289, 275403 104295, 275574 104555, 275585 104562, 276277 104652, 276290 104647, 276413 104512, 276417 104505, 276558 103768, 276558 103766, 276714 102058, 276781 101521, 276943 101178, 276944 101168, 276806 100625, 276795 100552, 276794 100549, 276447 99516, 276218 98951, 276218 98950, 275998 98456, 275997 98455, 275238 97024, 274776 96200, 274775 96198, 274518 95867, 274505 95861, 274351 95871, 273947 95631, 273188 95034, 272065 94171, 272062 94169, 271684 93991, 271680 93990, 270728 93845, 270223 93687, 269434 93411, 268443 93110, 268441 93109, 268004 93060)), ((222005 103731, 221827 103863, 221821 103878, 222023 104869, 222024 104872, 222090 105020, 221948 105800, 221462 105291, 221309 104905, 221068 103603, 221891 103002)), ((214242 101132, 214836 101282, 215604 101756, 215880 102142, 215976 102674, 215931 103054, 215659 103678, 215310 104046, 214972 104224, 214616 104243, 214348 104086, 213829 103406, 213553 102978, 213315 102419, 213246 101605, 213395 101174, 213704 101021)), ((207278 77855, 207575 77977, 208152 78658, 208320 78893, 208321 78894, 208847 79459, 209194 79867, 209195 79868, 209862 80482, 210438 81071, 210867 81618, 211147 82107, 211399 82643, 211400 82643, 211599 83300, 211598 83300, 211718 83986, 211719 83987, 211854 84482, 211854 84484, 212169 85149, 212823 86416, 213029 87018, 213243 87799, 213513 88637, 213573 89037, 213574 89040, 213748 89542, 213749 89544, 213819 89687, 213837 89694, 213847 89682, 213947 89075, 214072 88475, 214232 87779, 214393 86929, 214540 86295, 214648 85775, 214648 85774, 214696 85191, 214696 85188, 214638 84631, 214636 84553, 214636 84550, 214547 84045, 214590 83624, 214588 83614, 214257 83089, 214119 82154, 214117 82149, 213881 81687, 213878 81683, 213178 81083, 212603 80476, 212154 79967, 212153 79916, 213186 80201, 213846 80428, 213846 80429, 214836 80843, 215249 81281, 215610 81707, 216098 82237, 216465 82891, 216466 82893, 216868 83473, 217123 84101, 217074 84674, 216345 86101, 216343 86106, 216266 86565, 216267 86572, 216406 86949, 216410 86955, 216506 87042, 216514 87046, 216670 87069, 216677 87068, 217005 86942, 217010 86939, 217990 86017, 218128 86945, 217847 87997, 217530 88673, 217307 89047, 217305 89052, 217253 89315, 217253 89321, 217318 89635, 217322 89642, 217464 89788, 217475 89793, 218201 89811, 218538 90110, 218647 90428, 218458 91271, 217823 91770, 217819 91775, 217742 91916, 217740 91921, 217687 92375, 217706 92391, 218002 92301, 218294 92370, 218494 92520, 218660 93027, 218474 93724, 217885 94315, 217881 94324, 217841 94574, 217841 94579, 217934 94980, 217949 94992, 218388 94999, 218673 95138, 218783 95404, 218800 95988, 218615 96450, 218013 97221, 218010 97232, 218123 97993, 218082 98223, 218099 98241, 218557 98164, 218768 98294, 219009 98829, 219007 99003, 218835 99466, 218252 100114, 218249 100118, 217987 100667, 217986 100673, 217971 101245, 217973 101252, 218066 101438, 218073 101445, 218591 101693, 218642 101788, 218598 102059, 218399 102472, 217872 102913, 217383 103263, 217083 102442, 217082 102440, 216736 101745, 216352 100847, 215893 99673, 215617 98903, 215493 98483, 215134 97409, 213814 93619, 213808 93610, 212980 93126, 212411 92829, 212344 92721, 212336 92715, 212097 92629, 212091 92628, 211828 92644, 211352 92513, 211144 92391, 210965 92089, 210962 92085, 210377 91598, 209828 91148, 209454 90805, 208907 90182, 208524 89602, 208233 88954, 208232 88954, 208059 88399, 208060 88399, 207941 87742, 207839 86799, 207787 85892, 207791 85119, 207749 84148, 207748 84143, 207504 83423, 207108 82450, 206924 81967, 206923 81965, 206849 81816, 206667 81318, 206611 81185, 206433 80562, 206286 79494, 206286 79493, 206242 79287, 206169 78608, 206267 78257, 206422 78061, 206647 77910, 206980 77841)), ((243324 100236, 243405 100140, 243830 99829, 243917 99794)), ((210150 92740, 210649 93747, 210650 93748, 210922 94235, 211689 95496, 211690 95497, 212092 96094, 212092 96095, 212587 96713, 212588 96715, 213114 97240, 213121 97243, 213553 97367, 214072 97675, 214576 98021, 215079 98502, 215580 99252, 215710 99653, 215710 99654, 215964 100219, 214797 99763, 213453 99261, 212294 98871, 211924 98684, 211522 98374, 210894 97650, 210696 97319, 210216 96529, 209805 95636, 209456 94626, 209457 94626, 209092 93161, 209009 92306, 209077 91919, 209256 91700, 209625 91475)), ((280038 94708, 279604 94474, 280021 94402))) \ No newline at end of file diff --git a/tests/voronoi_crash_resources/slice_polygon_011.wkt b/tests/voronoi_crash_resources/slice_polygon_011.wkt new file mode 100644 index 0000000000..922ed70a5d --- /dev/null +++ b/tests/voronoi_crash_resources/slice_polygon_011.wkt @@ -0,0 +1 @@ +MultiPolygon (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115009 47904, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 126622 47203, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130323 49080, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69065, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101396 92965, 101336 93064, 100914 93907, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99421 96297, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93633 104807, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87817 113561, 87526 114287, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82325 122266, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80485 125216, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82803 136862, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78827 157759, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69369 157235, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67638 157345, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65780 174121, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65643 185019, 65614 185035, 65915 185341, 65827 185752, 65563 186201, 65486 186353, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65640 190846, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65597 193579, 65819 194284, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68990 194193, 69102 194547, 70601 194139, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81231 179999, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90107 167094, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95101 159513, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96729 157128, 97204 156024, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99569 152474, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106054 142941, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107556 140207, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143672 143068, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138790 150353, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132330 159383, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129175 164078, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 118083 180732, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115711 184252, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109365 194016, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128769 192930, 128981 192479, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131238 189147, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133768 185352, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134570 177791, 134571 177729, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134679 170760, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134351 164644, 134538 164196, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143659 159725, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148156 151944, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153949 145786, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143604 163786, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159275 158941, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159357 138406, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181213 137008, 181154 137385, 181138 137864, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181264 137913, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186263 137234, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224908 80278, 224891 81241, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224283 126207, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224326 129894, 224277 130084, 224325 130529, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141125, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145823, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208501 159044, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168039, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197680 175571, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182730, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185088, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188393, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189772, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179729 202981, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55989 196598, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53589 189455, 53600 189779, 53567 189888, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53547 192494, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52107 191723, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50980 189981, 50982 190209, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 51073 194825, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49062 194999, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47715 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42292 194916, 42100 194928, 42081 194958, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199132, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22492 185548, 22510 184772, 22473 184018, 22482 183221, 22549 182850, 22596 182074, 22575 181298, 22568 180514, 22569 179350, 22544 178976, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24619 172173, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24656 167681, 24689 167180, 24689 166553, 24695 166164, 24707 165624, 24711 165023, 24679 164470, 24650 164090, 24913 163729, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163566, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35058 157837, 35014 157759, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46199 138370, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40502 139104, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 29014 153689, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27153 155813, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29014 152793, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35309 143268, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 48823 122575, 49070 122120, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66629 109942, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71573 102332, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75940 95784, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78334 92391, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 81814 83650, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88587 75805, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86564, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62253 107455, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58330 111436, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59900 109155, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 63753 103365, 63847 103235, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65721 100266, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 67967 97041, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74490 86790, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76040 83619, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71370 86514, 71162 86681, 71059 86962, 70845 87169, 70712 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69541 89357, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62891 99337, 62744 99538, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46766 120543, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50020 113331, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51154 111471, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56148 103523, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61203 95936, 61368 95501, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63519 92575, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65564 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71393 80549, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76620 72831, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79187 68612, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81136 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85076 59992, 85376 59613, 85405 59527, 85372 59187, 85917 58519, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89961 52622, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 91904 49580, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99079 45623), (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805), (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075), (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384), (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131), (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287), (155600 209489, 155731 209728, 155803 209579, 155857 209278), (155588 208940, 155851 209008, 155784 208741, 155703 208627), (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017), (155679 204372, 155689 204701, 155825 204500, 155860 204252), (155601 201072, 155748 201322, 155870 200999, 155646 200780), (155572 200305, 155641 200567, 155853 200228, 155699 199919), (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340), (155529 199377, 155697 199845, 155833 199458, 155866 199216), (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810), (155517 198935, 155860 198910, 155805 198653, 155699 198472), (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087), (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596), (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067), (155499 197838, 155693 198192, 155789 197957, 155825 197697), (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139), (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263), (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912), (130113 195267, 130122 195398, 130394 195651, 130395 195189), (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211), (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998), (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177283 192028, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124), (174621 193971, 174571 194413, 174731 194665, 175207 194535, 175178 194504, 175146 193934), (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170682 194614, 170729 194628, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849), (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228), (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868), (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575), (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164420 187413, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164392 189118, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164447 192109, 164457 192900, 164564 193377, 164521 193588, 164284 193957, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165556 193325, 165534 193212, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604), (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262), (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35619 190018, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055), (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836), (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720), (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659), (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757), (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089), (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881), (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428), (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444), (62442 194433, 62734 194353, 62667 194173, 62344 194085), (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29785 193313, 29789 193047), (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365), (175714 194126, 175722 194394, 176015 194394, 175964 194107), (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722), (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469), (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345), (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516), (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643), (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138), (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518), (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185), (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402), (24493 185403, 24507 185795, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24428 191673, 24415 192303, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24719 190218, 24710 189658, 24642 189289, 24682 188199, 24624 187815, 24547 186989, 24636 186277, 24621 185500, 24544 185238), (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245), (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23069 191659, 23060 191118), (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459), (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992), (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007), (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004), (37262 192419, 37268 192670, 37351 192428, 37316 192090), (42281 192071, 42296 192202, 42458 192623, 42447 191718), (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29879 186373, 29918 185683, 29772 185070), (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795), (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712), (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520), (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653), (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434), (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364), (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49962 189299, 49926 189296), (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23065 189333, 23061 188559, 23075 188184, 23073 187005, 23058 186673), (57410 190727, 57778 190678, 57745 190293, 57421 190132), (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190), (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085), (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790), (31985 189581, 32045 190194, 32004 189439), (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469), (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026), (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163383 189636, 163312 189267, 163371 188864, 163354 188747), (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756), (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725), (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231), (170841 188301, 171059 188117, 171000 187936, 170864 187788), (44701 187254, 44704 187604, 44799 187315, 44794 186900), (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383), (57537 186474, 57428 187289, 57676 186550, 57495 186090), (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140), (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432), (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202), (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558), (170825 186705, 170949 186486, 170819 186173), (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923), (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497), (35720 183697, 35761 183560, 35763 183112), (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165499 182809, 165419 182487, 165551 181684, 165408 180939, 165535 180053), (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912), (136162 182001, 136254 182342, 136394 182479, 136376 182308, 136409 182156, 136226 181961, 136340 181596, 136348 181416), (23017 180389, 23035 181174, 23019 181941, 23015 182369, 23070 182439, 23062 179954), (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265), (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871), (44645 180626, 44710 180854, 44769 180714, 44678 180351), (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764), (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572), (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932), (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245), (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119), (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275), (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489), (39530 176961, 39587 176664, 39471 176107), (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278), (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022), (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577), (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137), (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616), (152083 171801, 152018 172261, 152160 171813, 152171 171648), (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488), (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334), (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38555 169582, 38581 169885, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218), (148457 170801, 148364 171277, 148515 170778), (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086), (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353), (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280), (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670), (33504 166659, 33488 167093, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037), (158069 170132, 158053 170419, 158163 170200, 158202 169766), (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438), (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630), (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401), (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802), (159584 168987, 159637 169617, 159909 169552, 159834 169288, 159859 169054, 159575 168894), (137804 169125, 137745 169466, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623), (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164), (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339), (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658), (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520), (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077), (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478), (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238), (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237), (150453 167595, 150416 168031, 150465 168061, 150452 167984, 150562 167498), (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038), (44641 167525, 44666 167766, 44751 167554, 44809 166797), (28173 167388, 28287 167762, 28321 167400, 28282 167017), (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505), (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207), (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827), (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927), (136333 166426, 136208 166864, 136338 166428, 136316 166375), (159548 166669, 159763 166369, 159765 166032, 159568 165981), (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826), (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498), (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301), (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208), (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277), (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722), (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680), (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544), (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841), (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398), (42363 164969, 42468 165261, 42485 164622), (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309), (159605 164663, 159603 164750, 159631 164692, 160160 163772, 160159 163756), (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198), (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848), (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433), (177401 163625, 177538 164063, 177528 163723, 177557 163655, 177477 163564), (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291), (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283), (163316 163542, 163302 163913, 163474 163639, 163504 163416), (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348), (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248), (134976 163447, 135128 163749, 135237 163626, 135248 163274), (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165493 160841, 165599 159978, 165429 159537), (46189 156962, 46282 156684, 46058 156363), (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72879 153577, 73079 152753, 72830 152050, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054), (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180), (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616), (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65921 154326), (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501), (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51611 153201, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690), (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 71001 156471, 71069 156406, 70945 155889, 70787 155707, 70863 155211), (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690), (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53623 153822, 53685 153219), (57235 153680, 57329 153970, 57248 154306, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423), (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46233 155073, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982), (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536), (69209 154145, 68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108), (47717 154277, 47674 155056, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550), (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796), (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70854 154447, 70789 154155, 70896 153432), (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303), (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082), (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189), (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177), (57272 149341, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023), (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866), (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766), (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150677, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700), (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378), (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093), (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596), (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511), (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581), (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746), (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187), (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181), (74568 149239, 74581 149258, 74767 148799), (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73045 146560, 73118 146142), (46124 149076, 46217 148908, 46230 148472), (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451), (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483), (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009), (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325), (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838), (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594), (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724), (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870), (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774), (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954), (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712), (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210282 142130, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210470 142674, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798), (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208807 135635, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321), (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911), (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379), (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416), (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192368 137887, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192061 143785, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192571 135525, 192522 135131, 192415 134726), (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910), (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766), (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077), (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408), (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873), (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548), (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685), (182863 143594, 183201 143612, 183286 143478, 182775 143100), (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092), (200234 143484, 200516 143602, 200647 143370, 200257 143328), (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716), (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630), (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632), (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007), (69390 142136, 69233 142635, 69412 142115, 69226 141773), (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960), (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161), (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881), (202921 141605, 202964 141185, 202941 141081), (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062), (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206559 138649, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371), (182757 140117, 182978 139890, 182970 139688, 182756 139415), (46050 139560, 46244 139854, 46241 139565, 46121 139382), (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538), (182758 138438, 182931 138316, 182897 138157, 182758 137977), (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158), (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964), (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870), (72906 134969, 72736 135436, 72941 134937, 72764 134691), (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115), (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195), (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835), (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490), (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454), (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244), (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893), (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024), (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81678 130575, 81578 130265, 81695 129686), (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992), (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420), (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980), (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733), (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039), (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434), (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256), (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841), (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582), (208804 128730, 208921 129178, 208937 128306, 208923 127968), (63990 128884, 63952 129150, 64113 128851, 63954 128684), (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105), (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528), (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582), (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725), (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456), (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885), (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67180 126839, 67244 127218, 67170 127539, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541), (69195 127624, 69365 127599, 69335 127262, 69160 127259), (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201), (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594), (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507), (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355), (70541 125538, 70628 125685, 70598 125911, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125691, 70936 125751, 70707 125486), (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308), (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472), (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586), (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584), (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661), (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534), (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518), (57307 125677, 57331 125713, 57818 125704, 57827 125535), (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923), (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176), (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370), (95409 74279, 95803 74309, 96000 74157, 95493 73769), (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292), (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101732 72141, 101752 71805, 101745 71291, 101226 71130), (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057), (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654), (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368), (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867), (93951 73986, 94226 74112, 94284 73920, 94076 73750), (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103543 73829, 103350 73432, 103069 73103, 102980 72343, 102892 72123), (98110 71878, 98302 72616, 98266 71965, 98116 71143), (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636), (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554), (102854 66173, 102889 66828, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661), (101279 66021, 101325 66687, 101353 67054, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615), (99721 65991, 99940 67172, 99889 66588, 99841 65848, 99720 65436), (98163 65632, 98248 66055, 98212 65657, 98113 64989), (98218 59856, 98262 60034, 98199 59533), (97930 57562, 97989 57883, 98264 57538, 98224 57226), (98274 57069, 98352 56767, 98340 56650, 98212 56572)), ((225644 179887, 225631 180659, 225630 181166, 225501 181198, 225501 201627, 225489 202135, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190230 213295, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210929, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193975 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 205949 195057, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 208936 194597, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212636 194366, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193365, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219399 184751, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273)), ((30545 162087, 30625 162207, 30481 162174, 30181 162185, 30267 161930, 30497 161755)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992)), ((31307 160327, 31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40235 146713, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 71209 46673, 72365 46679, 74310 46672, 75467 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79154 49957, 79190 50343, 78862 50732, 78290 51383, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67856, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70826, 65553 71203, 65254 71251, 65285 71343, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62562 75102, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55755 85661, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92389, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42722 105625, 42534 105997, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39103 111282, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21472 134763, 21483 127274, 21477 126689, 20543 126499, 20547 125733, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20550 107307, 20543 107118, 20546 106531, 20263 106323, 20249 106152, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20730 100098, 20726 82901, 20732 80715, 20725 78390, 20733 77861, 20682 77377, 20679 76060, 20673 75926, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21079 69335, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20613 65594, 20617 64430, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20635 61197, 20626 60556, 20634 60167, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20589 54605, 20479 53698, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496), (27459 128386, 27528 128768, 27898 128695, 27847 128326)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536)), ((54828 117709, 54891 117423, 55016 117220)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144)), ((53524 90588, 53555 90831, 53318 90908, 53183 90693, 53153 90576, 53273 90546)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222778 49316, 222736 49687, 222776 50867, 222795 51643, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222650 56987, 222654 57483, 222627 58132, 222631 58523, 222568 59151, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222487 61515, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693)), ((174552 46418, 182693 46412, 182828 46417, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 204809 46823, 205309 46801, 206086 46789, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 167789 48811, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581))) \ No newline at end of file From fccc5bd7fe21a8b8453d8f28d6ae7a1ae8b69b32 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 20 Nov 2023 18:51:56 +0000 Subject: [PATCH 052/218] Applied clang-format. --- include/utils/SVG.h | 46 ++++++----- include/utils/polygon.h | 8 +- src/WallsComputation.cpp | 74 +++++++++-------- src/utils/polygon.cpp | 168 ++++++++++++++++++++++++--------------- 4 files changed, 174 insertions(+), 122 deletions(-) diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 2a4d4cbe55..d0fb38bbe8 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -1,13 +1,13 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef SVG_H #define SVG_H #include +#include // for file output #include -#include // for file output #include "AABB.h" #include "ExtrusionLine.h" //To accept variable-width paths. @@ -22,7 +22,8 @@ class FPoint3; class SVG : NoCopy { public: - enum class Color { + enum class Color + { BLACK, WHITE, GRAY, @@ -43,18 +44,20 @@ class SVG : NoCopy Color color; int r, g, b; ColorObject(Color color) - : is_enum(true) - , color(color) - {} + : is_enum(true) + , color(color) + { + } ColorObject(int r, int g, int b) - : is_enum(false) - , r(r) - , g(g) - , b(b) - {} + : is_enum(false) + , r(r) + , g(g) + , b(b) + { + } }; -private: +private: std::string toString(const Color color) const; std::string toString(const ColorObject& color) const; @@ -106,10 +109,10 @@ class SVG : NoCopy /*! * \brief Draws a polyline on the canvas. - * + * * The polyline is the set of line segments between each pair of consecutive * points in the specified vector. - * + * * \param polyline A set of points between which line segments must be * drawn. * \param color The colour of the line segments. If this is not specified, @@ -125,14 +128,14 @@ class SVG : NoCopy /*! * \brief Draws a dashed line on the canvas from point A to point B. - * + * * This is useful in the case where multiple lines may overlap each other. - * + * * \param a The starting endpoint of the line. * \param b The ending endpoint of the line. * \param color The stroke colour of the line. */ - void writeDashedLine(const Point& a,const Point& b, ColorObject color = Color::BLACK) const; + void writeDashedLine(const Point& a, const Point& b, ColorObject color = Color::BLACK) const; template void printf(const char* txt, Args&&... args) const; @@ -200,10 +203,11 @@ class SVG : NoCopy * @param stroke_width The width of the lines. */ template - void writeVoronoiDiagram(const boost::polygon::voronoi_diagram& voronoi_diagram, const Color color = Color::BLACK, const float stroke_width = 0.1) const { - for (const auto& edge: voronoi_diagram.edges()) + void writeVoronoiDiagram(const boost::polygon::voronoi_diagram& voronoi_diagram, const Color color = Color::BLACK, const float stroke_width = 0.1) const + { + for (const auto& edge : voronoi_diagram.edges()) { - if (!edge.is_finite()) + if (! edge.is_finite()) { continue; } diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 9f32b5fa72..a0adf4666e 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -4,10 +4,6 @@ #ifndef UTILS_POLYGON_H #define UTILS_POLYGON_H -#include "../settings/types/Angle.h" //For angles between vertices. -#include "../settings/types/Ratio.h" -#include "IntPoint.h" - #include #include // std::reverse, fill_n array #include @@ -20,6 +16,10 @@ #include #include +#include "../settings/types/Angle.h" //For angles between vertices. +#include "../settings/types/Ratio.h" +#include "IntPoint.h" + #define CHECK_POLY_ACCESS #ifdef CHECK_POLY_ACCESS #define POLY_ASSERT(e) assert(e) diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index 76d55accc4..17e8c44316 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -1,8 +1,10 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher -#include +#include "WallsComputation.h" + #include +#include #include #include @@ -10,7 +12,6 @@ #include #include -#include "WallsComputation.h" #include "Application.h" #include "ExtruderTrain.h" #include "Slice.h" @@ -22,7 +23,9 @@ namespace cura { -WallsComputation::WallsComputation(const Settings& settings, const LayerIndex layer_nr) : settings(settings), layer_nr(layer_nr) +WallsComputation::WallsComputation(const Settings& settings, const LayerIndex layer_nr) + : settings(settings) + , layer_nr(layer_nr) { } @@ -44,7 +47,8 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t const bool spiralize = settings.get("magic_spiralize"); const size_t alternate = ((layer_nr % 2) + 2) % 2; - if (spiralize && layer_nr < LayerIndex(settings.get("initial_bottom_layers")) && alternate == 1) //Add extra insets every 2 layers when spiralizing. This makes bottoms of cups watertight. + if (spiralize && layer_nr < LayerIndex(settings.get("initial_bottom_layers")) + && alternate == 1) // Add extra insets every 2 layers when spiralizing. This makes bottoms of cups watertight. { wall_count += 5; } @@ -64,8 +68,7 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t // When spiralizing, generate the spiral insets using simple offsets instead of generating toolpaths if (spiralize) { - const bool recompute_outline_based_on_outer_wall = - settings.get("support_enable") && !settings.get("fill_outline_gaps"); + const bool recompute_outline_based_on_outer_wall = settings.get("support_enable") && ! settings.get("fill_outline_gaps"); generateSpiralInsets(part, line_width_0, wall_0_inset, recompute_outline_based_on_outer_wall); if (layer_nr <= static_cast(settings.get("initial_bottom_layers"))) @@ -81,7 +84,7 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t part->wall_toolpaths = wall_tool_paths.getToolPaths(); part->inner_area = wall_tool_paths.getInnerContour(); } - part->outline = PolygonsPart { Simplify(settings).polygon(part->outline) }; + part->outline = PolygonsPart{ Simplify(settings).polygon(part->outline) }; part->print_outline = part->outline; } @@ -98,7 +101,7 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) { std::ofstream SettingsFile("settings.txt"); SettingsFile.clear(); - for (auto [key, value]: settings.getFlattendSettings()) + for (auto [key, value] : settings.getFlattendSettings()) { if (value == "") { @@ -118,24 +121,27 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) } PolygonFile << "MULTIPOLYGON ("; - const auto paths_str - = multi_polygons - | ranges::views::transform([](const auto& path) { - const auto path_str - = path - | ranges::views::transform([](const auto& path) { - const auto path_str - = path - | ranges::views::transform([](const auto& point) { return fmt::format("{} {}", point.X, point.Y); }) - | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(" ")) - | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(", ")) - | ranges::to(); + const auto paths_str = multi_polygons + | ranges::views::transform( + [](const auto& path) + { + const auto path_str = path + | ranges::views::transform( + [](const auto& path) + { + const auto path_str = path + | ranges::views::transform( + [](const auto& point) + { + return fmt::format("{} {}", point.X, point.Y); + }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(" ")) | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); PolygonFile << paths_str; PolygonFile << ")"; @@ -143,16 +149,16 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) PolygonFile.close(); } - for(SliceLayerPart& part : layer->parts) + for (SliceLayerPart& part : layer->parts) { generateWalls(&part, section); } - //Remove the parts which did not generate a wall. As these parts are too small to print, - // and later code can now assume that there is always minimal 1 wall line. - if(settings.get("wall_line_count") >= 1 && !settings.get("fill_outline_gaps")) + // Remove the parts which did not generate a wall. As these parts are too small to print, + // and later code can now assume that there is always minimal 1 wall line. + if (settings.get("wall_line_count") >= 1 && ! settings.get("fill_outline_gaps")) { - for(size_t part_idx = 0; part_idx < layer->parts.size(); part_idx++) + for (size_t part_idx = 0; part_idx < layer->parts.size(); part_idx++) { if (layer->parts[part_idx].wall_toolpaths.empty() && layer->parts[part_idx].spiral_wall.empty()) { @@ -167,11 +173,11 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) } } -void WallsComputation::generateSpiralInsets(SliceLayerPart *part, coord_t line_width_0, coord_t wall_0_inset, bool recompute_outline_based_on_outer_wall) +void WallsComputation::generateSpiralInsets(SliceLayerPart* part, coord_t line_width_0, coord_t wall_0_inset, bool recompute_outline_based_on_outer_wall) { part->spiral_wall = part->outline.offset(-line_width_0 / 2 - wall_0_inset); - //Optimize the wall. This prevents buffer underruns in the printer firmware, and reduces processing time in CuraEngine. + // Optimize the wall. This prevents buffer underruns in the printer firmware, and reduces processing time in CuraEngine. const ExtruderTrain& train_wall = settings.get("wall_0_extruder_nr"); part->spiral_wall = Simplify(train_wall.settings).polygon(part->spiral_wall); part->spiral_wall.removeDegenerateVerts(); @@ -185,4 +191,4 @@ void WallsComputation::generateSpiralInsets(SliceLayerPart *part, coord_t line_w } } -}//namespace cura +} // namespace cura diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index d89381078b..447d5de056 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -1,13 +1,13 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/polygon.h" #include -#include #include #include +#include #include #include #include @@ -112,7 +112,14 @@ void Polygons::makeConvex() Polygon convexified; // Start from a vertex that is known to be on the convex hull: The one with the lowest X. - const size_t start_index = std::min_element(poly.begin(), poly.end(), [](Point a, Point b) { return a.X == b.X ? a.Y < b.Y : a.X < b.X; }) - poly.begin(); + const size_t start_index = std::min_element( + poly.begin(), + poly.end(), + [](Point a, Point b) + { + return a.X == b.X ? a.Y < b.Y : a.X < b.X; + }) + - poly.begin(); convexified.path->push_back(poly[start_index]); for (size_t i = 1; i <= poly.size(); ++i) @@ -378,14 +385,19 @@ Polygons Polygons::offset(const std::vector& offset_dists) const Polygons ret; int i = 0; - for (auto& poly_line : this->paths | ranges::views::filter([](const auto& path){ return ! path.empty(); })) + for (auto& poly_line : this->paths + | ranges::views::filter( + [](const auto& path) + { + return ! path.empty(); + })) { std::vector ret_poly_line; auto prev_p = poly_line.back(); auto prev_dist = offset_dists[i + poly_line.size() - 1]; - for (const auto& p: poly_line) + for (const auto& p : poly_line) { auto offset_dist = offset_dists[i]; @@ -403,7 +415,7 @@ Polygons Polygons::offset(const std::vector& offset_dists) const prev_p = p; prev_dist = offset_dist; - i ++; + i++; } ret.add(ret_poly_line); @@ -478,8 +490,11 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) const Point& pt = rpath[point_idx]; const Point& next = rpath[(point_idx + 1) % pathlen]; - float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] - if (angle >= M_PI) {angle -= M_PI;} // map [pi : 2 * pi] to [0 : pi] + float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] + if (angle >= M_PI) + { + angle -= M_PI; + } // map [pi : 2 * pi] to [0 : pi] // Check if the angle is within limits for the point to 'make sense', given the maximum deviation. // If the angle indicates near-parallel segments ignore the point 'pt' @@ -502,8 +517,7 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) process_indices.clear(); process_indices.insert(process_indices.end(), skip_indices.begin(), skip_indices.end()); } - } - while (num_removed_in_iteration > 0); + } while (num_removed_in_iteration > 0); } void PolygonRef::applyMatrix(const PointMatrix& matrix) @@ -683,7 +697,7 @@ void Polygons::removeSmallAreaCircumference(const double min_area_size, const co { // containing parent outline is removed; hole should be removed as well } - else if (!remove_holes || (circumference >= min_circumference_size && std::abs(area) >= min_area_size)) + else if (! remove_holes || (circumference >= min_circumference_size && std::abs(area) >= min_area_size)) { // keep hole-polygon if we do not remove holes, or if its // circumference is bigger then the minimum circumference size @@ -707,7 +721,7 @@ void Polygons::removeDegenerateVertsPolyline() void Polygons::_removeDegenerateVerts(const bool for_polyline) { Polygons& thiss = *this; - for(size_t poly_idx = 0; poly_idx < size(); poly_idx++) + for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) { PolygonRef poly = thiss[poly_idx]; Polygon result; @@ -719,28 +733,28 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) return dot(last_line, next_line) == -1 * vSize(last_line) * vSize(next_line); }; - //With polylines, skip the first and last vertex. + // With polylines, skip the first and last vertex. const size_t start_vertex = for_polyline ? 1 : 0; const size_t end_vertex = for_polyline ? poly.size() - 1 : poly.size(); - for(size_t i = 0; i < start_vertex; ++i) + for (size_t i = 0; i < start_vertex; ++i) { - result.add(poly[i]); //Add everything before the start vertex. + result.add(poly[i]); // Add everything before the start vertex. } bool isChanged = false; - for(size_t idx = start_vertex; idx < end_vertex; idx++) + for (size_t idx = start_vertex; idx < end_vertex; idx++) { const Point& last = (result.size() == 0) ? poly.back() : result.back(); - if(idx + 1 >= poly.size() && result.size() == 0) + if (idx + 1 >= poly.size() && result.size() == 0) { break; } const Point& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; - if(isDegenerate(last, poly[idx], next)) + if (isDegenerate(last, poly[idx], next)) { // lines are in the opposite direction // don't add vert to the result isChanged = true; - while(result.size() > 1 && isDegenerate(result[result.size() - 2], result.back(), next)) + while (result.size() > 1 && isDegenerate(result[result.size() - 2], result.back(), next)) { result.pop_back(); } @@ -751,14 +765,14 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) } } - for(size_t i = end_vertex; i < poly.size(); ++i) + for (size_t i = end_vertex; i < poly.size(); ++i) { - result.add(poly[i]); //Add everything after the end vertex. + result.add(poly[i]); // Add everything after the end vertex. } - if(isChanged) + if (isChanged) { - if(for_polyline || result.size() > 2) + if (for_polyline || result.size() > 2) { *poly = *result; } @@ -789,16 +803,16 @@ Polygons Polygons::fromWkt(const std::string& wkt) Polygons ret; Polygon outer; - for (const auto& point: poly.outer()) + for (const auto& point : poly.outer()) { outer.add(Point(point.x(), point.y())); } ret.add(outer); - for (const auto& hole: poly.inners()) + for (const auto& hole : poly.inners()) { Polygon inner; - for (const auto& point: hole) + for (const auto& point : hole) { inner.add(Point(point.x(), point.y())); } @@ -812,16 +826,19 @@ void Polygons::writeWkt(std::ostream& stream) const { stream << "POLYGON ("; const auto paths_str = paths - | ranges::views::transform([](const auto& path) { - const auto path_str - = path - | ranges::views::transform([](const auto& point) { return fmt::format("{} {}", point.X, point.Y); }) - | ranges::views::join(ranges::views::c_str(", ")) - | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(" ")) - | ranges::to(); + | ranges::views::transform( + [](const auto& path) + { + const auto path_str = path + | ranges::views::transform( + [](const auto& point) + { + return fmt::format("{} {}", point.X, point.Y); + }) + | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); + return "(" + path_str + ")"; + }) + | ranges::views::join(ranges::views::c_str(" ")) | ranges::to(); stream << paths_str; stream << ")"; @@ -905,7 +922,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L // handle this separately to avoid rounding problems below in the getPointOnLineWithDist function // p0_it and p2_it are already correct } - else if (!backward_is_blocked && !forward_is_blocked) + else if (! backward_is_blocked && ! forward_is_blocked) { // introduce two new points // 1----b---->2 // ^ / @@ -923,14 +940,15 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L const Point p0_2 = p0_2_it.p(); const Point v02_2 = p0_2 - p2_2; const int64_t v02_2_size = vSize(v02_2); - float progress = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size + float progress + = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); const Point new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); const Point new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); } - else if (!backward_is_blocked) + else if (! backward_is_blocked) { // forward is blocked, back is open // | // 1->b @@ -963,7 +981,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L } } } - else if (!forward_is_blocked) + else if (! forward_is_blocked) { // backward is blocked, front is open // 1----2----b----------->2_2 // ^ ,-' @@ -1009,20 +1027,29 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L return false; } -void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut_length2, ListPolyIt& p0_it, ListPolyIt& p2_it, bool& forward_is_blocked, bool& backward_is_blocked, bool& forward_is_too_far, bool& backward_is_too_far) +void ConstPolygonRef::smooth_outward_step( + const Point p1, + const int64_t shortcut_length2, + ListPolyIt& p0_it, + ListPolyIt& p2_it, + bool& forward_is_blocked, + bool& backward_is_blocked, + bool& forward_is_too_far, + bool& backward_is_too_far) { const bool forward_has_converged = forward_is_blocked || forward_is_too_far; const bool backward_has_converged = backward_is_blocked || backward_is_too_far; const Point p0 = p0_it.p(); const Point p2 = p2_it.p(); - bool walk_forward = !forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction + bool walk_forward + = ! forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction if (walk_forward) { const ListPolyIt p2_2_it = p2_it.next(); const Point p2_2 = p2_2_it.p(); bool p2_is_left = LinearAlg2D::pointIsLeftOfLine(p2, p0, p2_2) >= 0; - if (!p2_is_left) + if (! p2_is_left) { forward_is_blocked = true; return; @@ -1045,7 +1072,7 @@ void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut const ListPolyIt p0_2_it = p0_it.prev(); const Point p0_2 = p0_2_it.p(); bool p0_is_left = LinearAlg2D::pointIsLeftOfLine(p0, p0_2, p2) >= 0; - if (!p0_is_left) + if (! p0_is_left) { backward_is_blocked = true; return; @@ -1065,7 +1092,18 @@ void ConstPolygonRef::smooth_outward_step(const Point p1, const int64_t shortcut } } -void ConstPolygonRef::smooth_corner_simple(const Point p0, const Point p1, const Point p2, const ListPolyIt p0_it, const ListPolyIt p1_it, const ListPolyIt p2_it, const Point v10, const Point v12, const Point v02, const int64_t shortcut_length, float cos_angle) +void ConstPolygonRef::smooth_corner_simple( + const Point p0, + const Point p1, + const Point p2, + const ListPolyIt p0_it, + const ListPolyIt p1_it, + const ListPolyIt p2_it, + const Point v10, + const Point v12, + const Point v02, + const int64_t shortcut_length, + float cos_angle) { // 1----b---->2 // ^ / @@ -1259,8 +1297,6 @@ Polygons Polygons::smooth_outward(const AngleDegrees max_angle, int shortcut_len } - - void ConstPolygonRef::splitPolylineIntoSegments(Polygons& result) const { Point last = front(); @@ -1320,7 +1356,7 @@ void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const return false; } const bool p1_is_left_of_v02 = dot1 < 0; - if (!p1_is_left_of_v02) + if (! p1_is_left_of_v02) { // removing p1 wouldn't smooth outward return false; } @@ -1359,7 +1395,7 @@ void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const const int64_t dot1 = dot(v02T, v12); const Point v13T = turn90CCW(v13); const int64_t dot2 = dot(v13T, v12); - bool push_point = force_push || !is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); + bool push_point = force_push || ! is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); force_push = false; if (push_point) { @@ -1484,12 +1520,12 @@ std::vector Polygons::splitIntoParts(bool unionAll) const void Polygons::splitIntoParts_processPolyTreeNode(ClipperLib::PolyNode* node, std::vector& ret) const { - for(int n=0; nChildCount(); n++) + for (int n = 0; n < node->ChildCount(); n++) { ClipperLib::PolyNode* child = node->Childs[n]; PolygonsPart part; part.add(child->Contour); - for(int i=0; iChildCount(); i++) + for (int i = 0; i < child->ChildCount(); i++) { part.add(child->Childs[i]->Contour); splitIntoParts_processPolyTreeNode(child->Childs[i], ret); @@ -1535,11 +1571,17 @@ unsigned int PartsView::getPartContaining(unsigned int poly_idx, unsigned int* b for (unsigned int part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) { const std::vector& partView = partsView[part_idx_now]; - if (partView.size() == 0) { continue; } + if (partView.size() == 0) + { + continue; + } std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); if (result != partView.end()) { - if (boundary_poly_idx) { *boundary_poly_idx = partView[0]; } + if (boundary_poly_idx) + { + *boundary_poly_idx = partView[0]; + } return part_idx_now; } } @@ -1591,14 +1633,14 @@ PartsView Polygons::splitIntoPartsView(bool unionAll) void Polygons::splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Polygons& reordered, ClipperLib::PolyNode* node) const { - for(int n=0; nChildCount(); n++) + for (int n = 0; n < node->ChildCount(); n++) { ClipperLib::PolyNode* child = node->Childs[n]; partsView.emplace_back(); unsigned int pos = partsView.size() - 1; partsView[pos].push_back(reordered.size()); - reordered.add(child->Contour); //TODO: should this steal the internal representation for speed? - for(int i = 0; i < child->ChildCount(); i++) + reordered.add(child->Contour); // TODO: should this steal the internal representation for speed? + for (int i = 0; i < child->ChildCount(); i++) { partsView[pos].push_back(reordered.size()); reordered.add(child->Childs[i]->Contour); @@ -1629,15 +1671,15 @@ void Polygons::ensureManifold() for (Point p : duplicate_locations) { PolygonRef dot = removal_dots.newPoly(); - dot.add(p + Point(0,5)); - dot.add(p + Point(5,0)); - dot.add(p + Point(0,-5)); - dot.add(p + Point(-5,0)); + dot.add(p + Point(0, 5)); + dot.add(p + Point(5, 0)); + dot.add(p + Point(0, -5)); + dot.add(p + Point(-5, 0)); } - if ( ! removal_dots.empty()) + if (! removal_dots.empty()) { *this = polys.difference(removal_dots); } } -}//namespace cura +} // namespace cura From 1a5baf97319d33f3f0bf8086ee08b5bbf8192945 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 08:57:23 +0100 Subject: [PATCH 053/218] Fixed variable shadowing warnings --- include/ExtruderPlan.h | 48 +++++----- include/utils/PolygonsPointIndex.h | 92 +++++++++--------- include/utils/PolylineStitcher.h | 22 ++--- src/ExtruderPlan.cpp | 32 +++---- src/LayerPlan.cpp | 146 ++++++++++++++--------------- src/LayerPlanBuffer.cpp | 126 ++++++++++++------------- src/pathPlanning/Comb.cpp | 4 +- src/utils/PolygonsPointIndex.cpp | 2 +- src/utils/PolylineStitcher.cpp | 2 +- src/utils/polygonUtils.cpp | 34 +++---- 10 files changed, 253 insertions(+), 255 deletions(-) diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index 6f3155148e..5f42adfc09 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -44,7 +44,7 @@ class ExtruderPlan FRIEND_TEST(ExtruderPlanTest, BackPressureCompensationEmptyPlan); #endif public: - size_t extruder_nr{ 0 }; //!< The extruder used for this paths in the current plan. + size_t extruder_nr_{ 0 }; //!< The extruder used for this paths in the current plan. ExtruderPlan() noexcept = default; @@ -125,20 +125,20 @@ class ExtruderPlan void applyBackPressureCompensation(const Ratio back_pressure_compensation); private: - LayerIndex layer_nr{ 0 }; //!< The layer number at which we are currently printing. - bool is_initial_layer{ false }; //!< Whether this extruder plan is printed on the very first layer (which might be raft) - bool is_raft_layer{ false }; //!< Whether this is a layer which is part of the raft + LayerIndex layer_nr_{ 0 }; //!< The layer number at which we are currently printing. + bool is_initial_layer_{ false }; //!< Whether this extruder plan is printed on the very first layer (which might be raft) + bool is_raft_layer_{ false }; //!< Whether this is a layer which is part of the raft - coord_t layer_thickness{ 200 }; //!< The thickness of this layer in Z-direction + coord_t layer_thickness_{ 200 }; //!< The thickness of this layer in Z-direction - FanSpeedLayerTimeSettings fan_speed_layer_time_settings{}; //!< The fan speed and layer time settings used to limit this extruder plan + FanSpeedLayerTimeSettings fan_speed_layer_time_settings_{}; //!< The fan speed and layer time settings used to limit this extruder plan - RetractionConfig retraction_config{}; //!< The retraction settings for the extruder of this plan + RetractionConfig retraction_config_{}; //!< The retraction settings for the extruder of this plan - std::vector paths; //!< The paths planned for this extruder - std::list inserts; //!< The nozzle temperature command inserts, to be inserted in between segments - double heated_pre_travel_time{ 0.0 }; //!< The time at the start of this ExtruderPlan during which the head travels and has a temperature of initial_print_temperature + std::vector paths_; //!< The paths planned for this extruder + std::list inserts_; //!< The nozzle temperature command inserts, to be inserted in between segments + double heated_pre_travel_time_{ 0.0 }; //!< The time at the start of this ExtruderPlan during which the head travels and has a temperature of initial_print_temperature /*! * The required temperature at the start of this extruder plan @@ -152,25 +152,21 @@ class ExtruderPlan * In that case no temperature (and wait) command will be inserted from this value, but a NozzleTempInsert is used instead. * In this case this member is only used as a way to convey information between different calls of \ref LayerPlanBuffer::processBuffer */ - double required_start_temperature{ -1.0 }; - std::optional extrusion_temperature{ std::nullopt }; //!< The normal temperature for printing this extruder plan. That start and end of this extruder plan may deviate - //!< because of the initial and final print temp (none if extruder plan has no extrusion moves) - std::optional::iterator> extrusion_temperature_command{ - std::nullopt - }; //!< The command to heat from the printing temperature of this extruder plan to the printing - //!< temperature of the next extruder plan (if it has the same extruder). - std::optional prev_extruder_standby_temp{ - std::nullopt - }; //!< The temperature to which to set the previous extruder. Not used if the previous extruder plan was the same extruder. - - TimeMaterialEstimates estimates{}; //!< Accumulated time and material estimates for all planned paths within this extruder plan. - double slowest_path_speed{ 0.0 }; - - double extraTime{ 0.0 }; //!< Extra waiting time at the and of this extruder plan, so that the filament can cool + double required_start_temperature_{ -1.0 }; + std::optional extrusion_temperature_{}; //!< The normal temperature for printing this extruder plan. That start and end of this extruder plan may deviate + //!< because of the initial and final print temp (none if extruder plan has no extrusion moves) + std::optional::iterator> extrusion_temperature_command_{}; //!< The command to heat from the printing temperature of this extruder plan to the + //!< printing temperature of the next extruder plan (if it has the same extruder). + std::optional prev_extruder_standby_temp_{}; //!< The temperature to which to set the previous extruder. Not used if the previous extruder plan was the same extruder. + + TimeMaterialEstimates estimates_{}; //!< Accumulated time and material estimates for all planned paths within this extruder plan. + double slowest_path_speed_{ 0.0 }; + + double extra_time_{ 0.0 }; //!< Extra waiting time at the and of this extruder plan, so that the filament can cool double fan_speed{ 0.0 }; //!< The fan speed to be used during this extruder plan - double temperatureFactor{ 0.0 }; //!< Temperature reduction factor for small layers + double temperature_factor_{ 0.0 }; //!< Temperature reduction factor for small layers /*! * Set the fan speed to be used while printing this extruder plan diff --git a/include/utils/PolygonsPointIndex.h b/include/utils/PolygonsPointIndex.h index 773bf74622..a72a33af2c 100644 --- a/include/utils/PolygonsPointIndex.h +++ b/include/utils/PolygonsPointIndex.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POLYGONS_POINT_INDEX_H #define UTILS_POLYGONS_POINT_INDEX_H @@ -10,7 +10,7 @@ #include "polygon.h" -namespace cura +namespace cura { /*! @@ -23,11 +23,9 @@ class PathsPointIndex /*! * The polygons into which this index is indexing. */ - const Paths* polygons; // (pointer to const polygons) - - unsigned int poly_idx; //!< The index of the polygon in \ref PolygonsPointIndex::polygons - - unsigned int point_idx; //!< The index of the point in the polygon in \ref PolygonsPointIndex::polygons + const Paths* polygons_; // (pointer to const polygons) + unsigned int poly_idx_; //!< The index of the polygon in \ref PolygonsPointIndex::polygons + unsigned int point_idx_; //!< The index of the point in the polygon in \ref PolygonsPointIndex::polygons /*! * Constructs an empty point index to no polygon. @@ -37,9 +35,9 @@ class PathsPointIndex * initialisation useful. */ PathsPointIndex() - : polygons(nullptr) - , poly_idx(0) - , point_idx(0) + : polygons_(nullptr) + , poly_idx_(0) + , point_idx_(0) { } @@ -50,9 +48,9 @@ class PathsPointIndex * \param point_idx The index of the vertex in the sub-polygon. */ PathsPointIndex(const Paths* polygons, unsigned int poly_idx, unsigned int point_idx) - : polygons(polygons) - , poly_idx(poly_idx) - , point_idx(point_idx) + : polygons_(polygons) + , poly_idx_(poly_idx) + , point_idx_(point_idx) { } @@ -63,11 +61,11 @@ class PathsPointIndex Point p() const { - if (!polygons) + if (! polygons_) { return Point(0, 0); } - return make_point((*polygons)[poly_idx][point_idx]); + return make_point((*polygons_)[poly_idx_][point_idx_]); } /*! @@ -75,10 +73,9 @@ class PathsPointIndex */ bool initialized() const { - return polygons; + return polygons_; } - /*! * Get the polygon to which this PolygonsPointIndex refers */ @@ -86,54 +83,61 @@ class PathsPointIndex /*! * Test whether two iterators refer to the same polygon in the same polygon list. - * + * * \param other The PolygonsPointIndex to test for equality * \return Wether the right argument refers to the same polygon in the same ListPolygon as the left argument. */ bool operator==(const PathsPointIndex& other) const { - return polygons == other.polygons && poly_idx == other.poly_idx && point_idx == other.point_idx; + return polygons_ == other.polygons_ && poly_idx_ == other.poly_idx_ && point_idx_ == other.point_idx_; } + bool operator!=(const PathsPointIndex& other) const { - return !(*this == other); + return ! (*this == other); } + bool operator<(const PathsPointIndex& other) const { return this->p() < other.p(); } + PathsPointIndex& operator=(const PathsPointIndex& other) { - polygons = other.polygons; - poly_idx = other.poly_idx; - point_idx = other.point_idx; + polygons_ = other.polygons_; + poly_idx_ = other.poly_idx_; + point_idx_ = other.point_idx_; return *this; } + //! move the iterator forward (and wrap around at the end) - PathsPointIndex& operator++() - { - point_idx = (point_idx + 1) % (*polygons)[poly_idx].size(); - return *this; + PathsPointIndex& operator++() + { + point_idx_ = (point_idx_ + 1) % (*polygons_)[poly_idx_].size(); + return *this; } + //! move the iterator backward (and wrap around at the beginning) - PathsPointIndex& operator--() - { - if (point_idx == 0) + PathsPointIndex& operator--() + { + if (point_idx_ == 0) { - point_idx = (*polygons)[poly_idx].size(); + point_idx_ = (*polygons_)[poly_idx_].size(); } - point_idx--; - return *this; + point_idx_--; + return *this; } + //! move the iterator forward (and wrap around at the end) - PathsPointIndex next() const + PathsPointIndex next() const { PathsPointIndex ret(*this); ++ret; return ret; } + //! move the iterator backward (and wrap around at the beginning) - PathsPointIndex prev() const + PathsPointIndex prev() const { PathsPointIndex ret(*this); --ret; @@ -151,16 +155,15 @@ struct PolygonsPointIndexSegmentLocator { std::pair operator()(const PolygonsPointIndex& val) const { - ConstPolygonRef poly = (*val.polygons)[val.poly_idx]; - Point start = poly[val.point_idx]; - unsigned int next_point_idx = (val.point_idx + 1) % poly.size(); + ConstPolygonRef poly = (*val.polygons_)[val.poly_idx_]; + Point start = poly[val.point_idx_]; + unsigned int next_point_idx = (val.point_idx_ + 1) % poly.size(); Point end = poly[next_point_idx]; return std::pair(start, end); } }; - /*! * Locator of a \ref PolygonsPointIndex */ @@ -175,14 +178,14 @@ struct PathsPointIndexLocator using PolygonsPointIndexLocator = PathsPointIndexLocator; -}//namespace cura +} // namespace cura namespace std { /*! * Hash function for \ref PolygonsPointIndex */ -template <> +template<> struct hash { size_t operator()(const cura::PolygonsPointIndex& lpi) const @@ -190,8 +193,7 @@ struct hash return std::hash()(lpi.p()); } }; -}//namespace std - +} // namespace std -#endif//UTILS_POLYGONS_POINT_INDEX_H +#endif // UTILS_POLYGONS_POINT_INDEX_H diff --git a/include/utils/PolylineStitcher.h b/include/utils/PolylineStitcher.h index cab9bf5eec..6a2063c1b9 100644 --- a/include/utils/PolylineStitcher.h +++ b/include/utils/PolylineStitcher.h @@ -128,17 +128,17 @@ class PolylineStitcher //Continue to see if closing segment is also the closest. } } - else if (processed[nearby.poly_idx]) + else if (processed[nearby.poly_idx_]) { // it was already moved to output return true; // keep looking for a connection } - bool nearby_would_be_reversed = nearby.point_idx != 0; + bool nearby_would_be_reversed = nearby.point_idx_ != 0; nearby_would_be_reversed = nearby_would_be_reversed != go_in_reverse_direction; // flip nearby_would_be_reversed when searching in the reverse direction if ( ! canReverse(nearby) && nearby_would_be_reversed) { // connecting the segment would reverse the polygon direction return true; // keep looking for a connection } - if ( ! canConnect(chain, (*nearby.polygons)[nearby.poly_idx])) + if ( ! canConnect(chain, (*nearby.polygons_)[nearby.poly_idx_])) { return true; // keep looking for a connection } @@ -167,31 +167,31 @@ class PolylineStitcher coord_t segment_dist = vSize(make_point(chain.back()) - closest.p()); assert(segment_dist <= max_stitch_distance + 10); const size_t old_size = chain.size(); - if (closest.point_idx == 0) + if (closest.point_idx_ == 0) { - auto start_pos = (*closest.polygons)[closest.poly_idx].begin(); + auto start_pos = (*closest.polygons_)[closest.poly_idx_].begin(); if (segment_dist < snap_distance) { ++start_pos; } - chain.insert(chain.end(), start_pos, (*closest.polygons)[closest.poly_idx].end()); + chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].end()); } else { - auto start_pos = (*closest.polygons)[closest.poly_idx].rbegin(); + auto start_pos = (*closest.polygons_)[closest.poly_idx_].rbegin(); if (segment_dist < snap_distance) { ++start_pos; } - chain.insert(chain.end(), start_pos, (*closest.polygons)[closest.poly_idx].rend()); + chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].rend()); } for(size_t i = old_size; i < chain.size(); ++i) //Update chain length. { chain_length += vSize(chain[i] - chain[i - 1]); } - should_close = should_close & !isOdd((*closest.polygons)[closest.poly_idx]); //If we connect an even to an odd line, we should no longer try to close it. - assert( ! processed[closest.poly_idx]); - processed[closest.poly_idx] = true; + should_close = should_close & !isOdd((*closest.polygons_)[closest.poly_idx_]); //If we connect an even to an odd line, we should no longer try to close it. + assert( ! processed[closest.poly_idx_]); + processed[closest.poly_idx_] = true; } if (closest_is_closing_polygon) diff --git a/src/ExtruderPlan.cpp b/src/ExtruderPlan.cpp index 1b59ff7af4..b492abc23e 100644 --- a/src/ExtruderPlan.cpp +++ b/src/ExtruderPlan.cpp @@ -13,37 +13,37 @@ ExtruderPlan::ExtruderPlan( const coord_t layer_thickness, const FanSpeedLayerTimeSettings& fan_speed_layer_time_settings, const RetractionConfig& retraction_config) - : extruder_nr(extruder) - , layer_nr(layer_nr) - , is_initial_layer(is_initial_layer) - , is_raft_layer(is_raft_layer) - , layer_thickness(layer_thickness) - , fan_speed_layer_time_settings(fan_speed_layer_time_settings) - , retraction_config(retraction_config) + : extruder_nr_(extruder) + , layer_nr_(layer_nr) + , is_initial_layer_(is_initial_layer) + , is_raft_layer_(is_raft_layer) + , layer_thickness_(layer_thickness) + , fan_speed_layer_time_settings_(fan_speed_layer_time_settings) + , retraction_config_(retraction_config) { } void ExtruderPlan::insertCommand(NozzleTempInsert&& insert) { - inserts.emplace_back(insert); + inserts_.emplace_back(insert); } void ExtruderPlan::handleInserts(const size_t path_idx, GCodeExport& gcode, const double cumulative_path_time) { - while (! inserts.empty() && path_idx >= inserts.front().path_idx && inserts.front().time_after_path_start < cumulative_path_time) + while (! inserts_.empty() && path_idx >= inserts_.front().path_idx && inserts_.front().time_after_path_start < cumulative_path_time) { // handle the Insert to be inserted before this path_idx (and all inserts not handled yet) - inserts.front().write(gcode); - inserts.pop_front(); + inserts_.front().write(gcode); + inserts_.pop_front(); } } void ExtruderPlan::handleAllRemainingInserts(GCodeExport& gcode) { - while (! inserts.empty()) + while (! inserts_.empty()) { // handle the Insert to be inserted before this path_idx (and all inserts not handled yet) - NozzleTempInsert& insert = inserts.front(); + NozzleTempInsert& insert = inserts_.front(); insert.write(gcode); - inserts.pop_front(); + inserts_.pop_front(); } } @@ -59,7 +59,7 @@ double ExtruderPlan::getFanSpeed() void ExtruderPlan::applyBackPressureCompensation(const Ratio back_pressure_compensation) { constexpr double epsilon_speed_factor = 0.001; // Don't put on actual 'limit double minimum', because we don't want printers to stall. - for (auto& path : paths) + for (auto& path : paths_) { const double nominal_width_for_path = static_cast(path.config.getLineWidth()); if (path.width_factor <= 0.0 || nominal_width_for_path <= 0.0 || path.config.isTravelPath() || path.config.isBridgePath()) @@ -70,4 +70,4 @@ void ExtruderPlan::applyBackPressureCompensation(const Ratio back_pressure_compe path.speed_back_pressure_factor = std::max(epsilon_speed_factor, 1.0 + (nominal_width_for_path / line_width_for_path - 1.0) * back_pressure_compensation); } } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 36b6ef02d4..18655e5e72 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -45,7 +45,7 @@ GCodePath* LayerPlan::getLatestPathWithConfig( const bool spiralize, const Ratio speed_factor) { - std::vector& paths = extruder_plans.back().paths; + std::vector& paths = extruder_plans.back().paths_; if (paths.size() > 0 && paths.back().config == config && ! paths.back().done && paths.back().flow == flow && paths.back().width_factor == width_factor && paths.back().speed_factor == speed_factor && paths.back().z_offset == z_offset && paths.back().mesh == current_mesh) // spiralize can only change when a travel path is in between @@ -73,7 +73,7 @@ const Polygons* LayerPlan::getCombBoundaryInside() const void LayerPlan::forceNewPathStart() { - std::vector& paths = extruder_plans.back().paths; + std::vector& paths = extruder_plans.back().paths_; if (paths.size() > 0) paths[paths.size() - 1].done = true; } @@ -251,9 +251,9 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) addTravel(end_pos); // + extruder_offset cause it } } - if (extruder_plans.back().paths.empty() && extruder_plans.back().inserts.empty()) + if (extruder_plans.back().paths_.empty() && extruder_plans.back().inserts_.empty()) { // first extruder plan in a layer might be empty, cause it is made with the last extruder planned in the previous layer - extruder_plans.back().extruder_nr = extruder_nr; + extruder_plans.back().extruder_nr_ = extruder_nr; } extruder_plans.emplace_back( extruder_nr, @@ -344,7 +344,7 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const const Settings& mesh_or_extruder_settings = current_mesh ? current_mesh->settings : extruder->settings; - const bool is_first_travel_of_extruder_after_switch = extruder_plans.back().paths.size() == 1 && (extruder_plans.size() > 1 || last_extruder_previous_layer != getExtruder()); + const bool is_first_travel_of_extruder_after_switch = extruder_plans.back().paths_.size() == 1 && (extruder_plans.size() > 1 || last_extruder_previous_layer != getExtruder()); bool bypass_combing = is_first_travel_of_extruder_after_switch && mesh_or_extruder_settings.get("retraction_hop_after_extruder_switch"); const bool is_first_travel_of_layer = ! static_cast(last_planned_position); @@ -1454,7 +1454,7 @@ void LayerPlan::spiralizeWallSlice( // normal slow down for quick layers mechanism can kick in and speed this layer up (because it is longer) but we prefer // the layer to be printed at a similar speed to the previous layer to avoid abrupt changes in extrusion rate so we slow it down - const FanSpeedLayerTimeSettings& layer_time_settings = extruder_plans.back().fan_speed_layer_time_settings; + const FanSpeedLayerTimeSettings& layer_time_settings = extruder_plans.back().fan_speed_layer_time_settings_; const double min_time = layer_time_settings.cool_min_layer_time; const double normal_layer_time = total_length / config.getSpeed(); @@ -1537,16 +1537,16 @@ void LayerPlan::spiralizeWallSlice( void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_plans) { - const double minimalSpeed = fan_speed_layer_time_settings.cool_min_speed; - const double travelTime = estimates.getTravelTime(); - const double extrudeTime = estimates.extrude_time; + const double minimalSpeed = fan_speed_layer_time_settings_.cool_min_speed; + const double travelTime = estimates_.getTravelTime(); + const double extrudeTime = estimates_.extrude_time; const double totalTime = travelTime + extrudeTime + time_other_extr_plans; constexpr double epsilon = 0.01; double total_extrude_time_at_minimum_speed = 0.0; double total_extrude_time_at_slowest_speed = 0.0; - for (GCodePath& path : paths) + for (GCodePath& path : paths_) { total_extrude_time_at_minimum_speed += path.estimates.extrude_time_at_minimum_speed; total_extrude_time_at_slowest_speed += path.estimates.extrude_time_at_slowest_path_speed; @@ -1567,13 +1567,13 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ { // Even at cool min speed extrusion is not taken enough time. So speed is set to cool min speed. target_speed = minimalSpeed; - temperatureFactor = 1.0; + temperature_factor_ = 1.0; // Update stored naive time estimates - estimates.extrude_time = total_extrude_time_at_minimum_speed; + estimates_.extrude_time = total_extrude_time_at_minimum_speed; if (minTime - total_extrude_time_at_minimum_speed - travelTime > epsilon) { - extraTime = minTime - total_extrude_time_at_minimum_speed - travelTime; + extra_time_ = minTime - total_extrude_time_at_minimum_speed - travelTime; } } else if (minExtrudeTime >= total_extrude_time_at_slowest_speed && std::abs(total_extrude_time_at_minimum_speed - total_extrude_time_at_slowest_speed) >= epsilon) @@ -1582,28 +1582,28 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ // Linear interpolate between total_extrude_time_at_slowest_speed and total_extrude_time_at_minimum_speed const double factor = (1 / total_extrude_time_at_minimum_speed - 1 / minExtrudeTime) / (1 / total_extrude_time_at_minimum_speed - 1 / total_extrude_time_at_slowest_speed); - target_speed = minimalSpeed * (1.0 - factor) + slowest_path_speed * factor; - temperatureFactor = 1.0 - factor; + target_speed = minimalSpeed * (1.0 - factor) + slowest_path_speed_ * factor; + temperature_factor_ = 1.0 - factor; // Update stored naive time estimates - estimates.extrude_time = minExtrudeTime; + estimates_.extrude_time = minExtrudeTime; } else { // Slowing down to the slowest_speed is sufficient to respect the minimum layer time. // Linear interpolate between extrudeTime and total_extrude_time_at_slowest_speed factor = (1 / total_extrude_time_at_slowest_speed - 1 / minExtrudeTime) / (1 / total_extrude_time_at_slowest_speed - 1 / extrudeTime); - slow_down_func = [&slowest_path_speed = slowest_path_speed, &factor](const GCodePath& path) + slow_down_func = [&slowest_path_speed = slowest_path_speed_, &factor](const GCodePath& path) { const double target_speed = slowest_path_speed * (1.0 - factor) + (path.config.getSpeed() * path.speed_factor) * factor; return std::min(target_speed / (path.config.getSpeed() * path.speed_factor), 1.0); }; // Update stored naive time estimates - estimates.extrude_time = minExtrudeTime; + estimates_.extrude_time = minExtrudeTime; } - for (GCodePath& path : paths) + for (GCodePath& path : paths_) { if (path.isTravelPath()) { @@ -1618,7 +1618,7 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ double ExtruderPlan::getRetractTime(const GCodePath& path) { - return retraction_config.distance / (path.retract ? retraction_config.speed : retraction_config.primeSpeed); + return retraction_config_.distance / (path.retract ? retraction_config_.speed : retraction_config_.primeSpeed); } std::pair ExtruderPlan::getPointToPointTime(const Point& p0, const Point& p1, const GCodePath& path) @@ -1631,10 +1631,10 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos { Point p0 = starting_position; - const double min_path_speed = fan_speed_layer_time_settings.cool_min_speed; - slowest_path_speed = std::accumulate( - paths.begin(), - paths.end(), + const double min_path_speed = fan_speed_layer_time_settings_.cool_min_speed; + slowest_path_speed_ = std::accumulate( + paths_.begin(), + paths_.end(), std::numeric_limits::max(), [](double value, const GCodePath& path) { @@ -1642,7 +1642,7 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos }); bool was_retracted = false; // wrong assumption; won't matter that much. (TODO) - for (GCodePath& path : paths) + for (GCodePath& path : paths_) { bool is_extrusion_path = false; double* path_time_estimate; @@ -1671,11 +1671,11 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos double retract_unretract_time; if (path.retract) { - retract_unretract_time = retraction_config.distance / retraction_config.speed; + retract_unretract_time = retraction_config_.distance / retraction_config_.speed; } else { - retract_unretract_time = retraction_config.distance / retraction_config.primeSpeed; + retract_unretract_time = retraction_config_.distance / retraction_config_.primeSpeed; } path.estimates.retracted_travel_time += 0.5 * retract_unretract_time; path.estimates.unretracted_travel_time += 0.5 * retract_unretract_time; @@ -1689,17 +1689,17 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos if (length > 0) { path.estimates.extrude_time_at_minimum_speed += length / min_path_speed; - path.estimates.extrude_time_at_slowest_path_speed += length / slowest_path_speed; + path.estimates.extrude_time_at_slowest_path_speed += length / slowest_path_speed_; } - material_estimate += length * INT2MM(layer_thickness) * INT2MM(path.config.getLineWidth()); + material_estimate += length * INT2MM(layer_thickness_) * INT2MM(path.config.getLineWidth()); } double thisTime = length / (path.config.getSpeed() * path.speed_factor); *path_time_estimate += thisTime; p0 = p1; } - estimates += path.estimates; + estimates_ += path.estimates; } - return estimates; + return estimates_; } void ExtruderPlan::processFanSpeedForMinimalLayerTime(Point starting_position, Duration minTime, double time_other_extr_plans) @@ -1719,23 +1719,23 @@ void ExtruderPlan::processFanSpeedForMinimalLayerTime(Point starting_position, D */ // interpolate fan speed (for cool_fan_full_layer and for cool_min_layer_time_fan_speed_max) - double totalLayerTime = estimates.getTotalTime() + time_other_extr_plans; + double totalLayerTime = estimates_.getTotalTime() + time_other_extr_plans; if (totalLayerTime < minTime) { - fan_speed = fan_speed_layer_time_settings.cool_fan_speed_max; + fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_max; } - else if (minTime >= fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max) + else if (minTime >= fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max) { // ignore gradual increase of fan speed return; } - else if (totalLayerTime < fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max) + else if (totalLayerTime < fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max) { // when forceMinimalLayerTime didn't change the extrusionSpeedFactor, we adjust the fan speed - double fan_speed_diff = fan_speed_layer_time_settings.cool_fan_speed_max - fan_speed; - double layer_time_diff = fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max - minTime; + double fan_speed_diff = fan_speed_layer_time_settings_.cool_fan_speed_max - fan_speed; + double layer_time_diff = fan_speed_layer_time_settings_.cool_min_layer_time_fan_speed_max - minTime; double fraction_of_slope = (totalLayerTime - minTime) / layer_time_diff; - fan_speed = fan_speed_layer_time_settings.cool_fan_speed_max - fan_speed_diff * fraction_of_slope; + fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_max - fan_speed_diff * fraction_of_slope; } } @@ -1757,15 +1757,15 @@ void ExtruderPlan::processFanSpeedForFirstLayers() layer nr > */ - fan_speed = fan_speed_layer_time_settings.cool_fan_speed_min; - if (layer_nr < fan_speed_layer_time_settings.cool_fan_full_layer - && fan_speed_layer_time_settings.cool_fan_full_layer > 0 // don't apply initial layer fan speed speedup if disabled. - && ! is_raft_layer // don't apply initial layer fan speed speedup to raft, but to model layers + fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_min; + if (layer_nr_ < fan_speed_layer_time_settings_.cool_fan_full_layer + && fan_speed_layer_time_settings_.cool_fan_full_layer > 0 // don't apply initial layer fan speed speedup if disabled. + && ! is_raft_layer_ // don't apply initial layer fan speed speedup to raft, but to model layers ) { // Slow down the fan on the layers below the [cool_fan_full_layer], where layer 0 is speed 0. - fan_speed = fan_speed_layer_time_settings.cool_fan_speed_0 - + (fan_speed - fan_speed_layer_time_settings.cool_fan_speed_0) * std::max(LayerIndex(0), layer_nr) / fan_speed_layer_time_settings.cool_fan_full_layer; + fan_speed = fan_speed_layer_time_settings_.cool_fan_speed_0 + + (fan_speed - fan_speed_layer_time_settings_.cool_fan_speed_0) * std::max(LayerIndex(0), layer_nr_) / fan_speed_layer_time_settings_.cool_fan_full_layer; } } @@ -1776,9 +1776,9 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) extruder_plans, [](const ExtruderPlan& a, const ExtruderPlan& b) { - return a.extruder_nr < b.extruder_nr; + return a.extruder_nr_ < b.extruder_nr_; }) - ->extruder_nr; + ->extruder_nr_; Point starting_position_last_extruder; unsigned int last_extruder_idx; double other_extr_plan_time = 0.0; @@ -1791,23 +1791,23 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) // Precalculate the time estimates. Don't call this function twice, since it is works cumulative. extruder_plan.computeNaiveTimeEstimates(starting_position); - if (extruder_plan.extruder_nr == last_extruder_nr) + if (extruder_plan.extruder_nr_ == last_extruder_nr) { starting_position_last_extruder = starting_position; last_extruder_idx = extr_plan_idx; } else { - other_extr_plan_time += extruder_plan.estimates.getTotalTime(); + other_extr_plan_time += extruder_plan.estimates_.getTotalTime(); } - maximum_cool_min_layer_time = std::max(maximum_cool_min_layer_time, extruder_plan.fan_speed_layer_time_settings.cool_min_layer_time); + maximum_cool_min_layer_time = std::max(maximum_cool_min_layer_time, extruder_plan.fan_speed_layer_time_settings_.cool_min_layer_time); // Modify fan speeds for the first layer(s) extruder_plan.processFanSpeedForFirstLayers(); - if (! extruder_plan.paths.empty() && ! extruder_plan.paths.back().points.empty()) + if (! extruder_plan.paths_.empty() && ! extruder_plan.paths_.back().points.empty()) { - starting_position = extruder_plan.paths.back().points.back(); + starting_position = extruder_plan.paths_.back().points.back(); } } } @@ -1857,13 +1857,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; const RetractionAndWipeConfig* retraction_config - = current_mesh ? ¤t_mesh->retraction_wipe_config : &storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr]; + = current_mesh ? ¤t_mesh->retraction_wipe_config : &storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_]; coord_t z_hop_height = retraction_config->retraction_config.zHop; - if (extruder_nr != extruder_plan.extruder_nr) + if (extruder_nr != extruder_plan.extruder_nr_) { int prev_extruder = extruder_nr; - extruder_nr = extruder_plan.extruder_nr; + extruder_nr = extruder_plan.extruder_nr_; gcode.ResetLastEValueAfterWipe(prev_extruder); @@ -1880,13 +1880,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { // require printing temperature to be met constexpr bool wait = true; - gcode.writeTemperatureCommand(extruder_nr, extruder_plan.required_start_temperature, wait); + gcode.writeTemperatureCommand(extruder_nr, extruder_plan.required_start_temperature_, wait); } - if (extruder_plan.prev_extruder_standby_temp) + if (extruder_plan.prev_extruder_standby_temp_) { // turn off previous extruder constexpr bool wait = false; - Temperature prev_extruder_temp = *extruder_plan.prev_extruder_standby_temp; + Temperature prev_extruder_temp = *extruder_plan.prev_extruder_standby_temp_; const LayerIndex prev_layer_nr = (extruder_plan_idx == 0) ? layer_nr - 1 : layer_nr; if (prev_layer_nr == storage.max_print_height_per_extruder[prev_extruder]) { @@ -1897,7 +1897,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { // require printing temperature to be met constexpr bool wait = true; - gcode.writeTemperatureCommand(extruder_nr, extruder_plan.required_start_temperature, wait); + gcode.writeTemperatureCommand(extruder_nr, extruder_plan.required_start_temperature_, wait); } const double extra_prime_amount = retraction_config->retraction_config.distance ? retraction_config->switch_extruder_extra_prime_amount : 0; @@ -1905,7 +1905,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } else if (extruder_plan_idx == 0) { - const WipeScriptConfig& wipe_config = storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr].wipe_config; + const WipeScriptConfig& wipe_config = storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_].wipe_config; if (wipe_config.clean_between_layers && gcode.getExtrudedVolumeAfterLastWipe(extruder_nr) > wipe_config.max_extrusion_mm3) { gcode.insertWipeScript(wipe_config); @@ -1921,9 +1921,9 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } } gcode.writeFanCommand(extruder_plan.getFanSpeed()); - std::vector& paths = extruder_plan.paths; + std::vector& paths = extruder_plan.paths_; - extruder_plan.inserts.sort(); + extruder_plan.inserts_.sort(); const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; @@ -2168,7 +2168,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } } // paths for this extruder /\ . - if (extruder.settings.get("cool_lift_head") && extruder_plan.extraTime > 0.0) + if (extruder.settings.get("cool_lift_head") && extruder_plan.extra_time_ > 0.0) { gcode.writeComment("Small layer, adding delay"); const RetractionAndWipeConfig& retraction_config @@ -2179,13 +2179,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // or do it anyway when we switch extruder in-place gcode.writeZhopStart(MM2INT(3.0)); } - gcode.writeDelay(extruder_plan.extraTime); + gcode.writeDelay(extruder_plan.extra_time_); } extruder_plan.handleAllRemainingInserts(gcode); scripta::log( "extruder_plan_2", - extruder_plan.paths, + extruder_plan.paths_, SectionType::NA, layer_nr, scripta::CellVDI{ "flow", &GCodePath::flow }, @@ -2217,7 +2217,7 @@ void LayerPlan::overrideFanSpeeds(double speed) bool LayerPlan::makeRetractSwitchRetract(unsigned int extruder_plan_idx, unsigned int path_idx) { - std::vector& paths = extruder_plans[extruder_plan_idx].paths; + std::vector& paths = extruder_plans[extruder_plan_idx].paths_; for (unsigned int path_idx2 = path_idx + 1; path_idx2 < paths.size(); path_idx2++) { if (paths[path_idx2].getExtrusionMM3perMM() > 0) @@ -2231,7 +2231,7 @@ bool LayerPlan::makeRetractSwitchRetract(unsigned int extruder_plan_idx, unsigne return false; // TODO: check first extruder of the next layer! (generally only on the last layer of the second extruder) } - if (extruder_plans[extruder_plan_idx + 1].extruder_nr != extruder_plans[extruder_plan_idx].extruder_nr) + if (extruder_plans[extruder_plan_idx + 1].extruder_nr_ != extruder_plans[extruder_plan_idx].extruder_nr_) { return true; } @@ -2249,13 +2249,13 @@ bool LayerPlan::writePathWithCoasting( const std::function insertTempOnTime) { ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; - const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr]; + const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_]; const double coasting_volume = extruder.settings.get("coasting_volume"); if (coasting_volume <= 0) { return false; } - const std::vector& paths = extruder_plan.paths; + const std::vector& paths = extruder_plan.paths_; const GCodePath& path = paths[path_idx]; if (path_idx + 1 >= paths.size() || (path.isTravelPath() || ! paths[path_idx + 1].config.isTravelPath()) || path.points.size() < 2) { @@ -2377,7 +2377,7 @@ void LayerPlan::applyModifyPlugin() { scripta::log( "extruder_plan_0", - extruder_plan.paths, + extruder_plan.paths_, SectionType::NA, layer_nr, scripta::CellVDI{ "flow", &GCodePath::flow }, @@ -2393,11 +2393,11 @@ void LayerPlan::applyModifyPlugin() scripta::CellVDI{ "is_travel_path", &GCodePath::isTravelPath }, scripta::CellVDI{ "extrusion_mm3_per_mm", &GCodePath::getExtrusionMM3perMM }); - extruder_plan.paths = slots::instance().modify(extruder_plan.paths, extruder_plan.extruder_nr, layer_nr); + extruder_plan.paths_ = slots::instance().modify(extruder_plan.paths_, extruder_plan.extruder_nr_, layer_nr); scripta::log( "extruder_plan_1", - extruder_plan.paths, + extruder_plan.paths_, SectionType::NA, layer_nr, scripta::CellVDI{ "flow", &GCodePath::flow }, @@ -2420,7 +2420,7 @@ void LayerPlan::applyBackPressureCompensation() for (auto& extruder_plan : extruder_plans) { const Ratio back_pressure_compensation - = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr].settings.get("speed_equalize_flow_width_factor"); + = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_].settings.get("speed_equalize_flow_width_factor"); if (back_pressure_compensation != 0.0) { extruder_plan.applyBackPressureCompensation(back_pressure_compensation); @@ -2455,7 +2455,7 @@ void LayerPlan::setSkirtBrimIsPlanned(unsigned int extruder_nr) size_t LayerPlan::getExtruder() const { - return extruder_plans.back().extruder_nr; + return extruder_plans.back().extruder_nr_; } void LayerPlan::setBridgeWallMask(const Polygons& polys) diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index d5a033a136..f3185deeeb 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -89,14 +89,14 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer Point first_location_new_layer = new_layer_destination_state->first; - assert(newest_layer->extruder_plans.front().paths[0].points.size() == 1); - assert(newest_layer->extruder_plans.front().paths[0].points[0] == first_location_new_layer); + assert(newest_layer->extruder_plans.front().paths_[0].points.size() == 1); + assert(newest_layer->extruder_plans.front().paths_[0].points[0] == first_location_new_layer); // if the last planned position in the previous layer isn't the same as the first location of the new layer, travel to the new location if (! prev_layer->last_planned_position || *prev_layer->last_planned_position != first_location_new_layer) { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_layer->extruder_plans.back().extruder_nr].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings; prev_layer->setIsInside(new_layer_destination_state->second); const bool force_retract = extruder_settings.get("retract_at_layer_change") || (mesh_group_settings.get("travel_retract_before_outer_wall") @@ -140,9 +140,9 @@ void LayerPlanBuffer::processFanSpeedLayerTime() void LayerPlanBuffer::insertPreheatCommand(ExtruderPlan& extruder_plan_before, const Duration time_before_extruder_plan_end, const size_t extruder_nr, const Temperature temp) { Duration acc_time = 0.0; - for (unsigned int path_idx = extruder_plan_before.paths.size() - 1; int(path_idx) != -1; path_idx--) + for (unsigned int path_idx = extruder_plan_before.paths_.size() - 1; int(path_idx) != -1; path_idx--) { - GCodePath& path = extruder_plan_before.paths[path_idx]; + GCodePath& path = extruder_plan_before.paths_[path_idx]; acc_time += path.estimates.getTotalTime(); if (acc_time >= time_before_extruder_plan_end) { @@ -166,20 +166,20 @@ void LayerPlanBuffer::insertPreheatCommand(ExtruderPlan& extruder_plan_before, c Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vector& extruder_plans, unsigned int extruder_plan_idx) { ExtruderPlan& extruder_plan = *extruder_plans[extruder_plan_idx]; - size_t extruder = extruder_plan.extruder_nr; + size_t extruder = extruder_plan.extruder_nr_; Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; - double initial_print_temp = extruder_plan.required_start_temperature; + double initial_print_temp = extruder_plan.required_start_temperature_; Duration in_between_time = 0.0_s; // the duration during which the extruder isn't used for (size_t extruder_plan_before_idx = extruder_plan_idx - 1; int(extruder_plan_before_idx) >= 0; extruder_plan_before_idx--) { // find a previous extruder plan where the same extruder is used to see what time this extruder wasn't used ExtruderPlan& extruder_plan_before = *extruder_plans[extruder_plan_before_idx]; - if (extruder_plan_before.extruder_nr == extruder) + if (extruder_plan_before.extruder_nr_ == extruder) { Temperature temp_before = extruder_settings.get("material_final_print_temperature"); if (temp_before == 0) { - temp_before = extruder_plan_before.extrusion_temperature.value_or(initial_print_temp); + temp_before = extruder_plan_before.extrusion_temperature_.value_or(initial_print_temp); } constexpr bool during_printing = false; Preheat::WarmUpResult warm_up = preheat_config.getWarmUpPointAfterCoolDown( @@ -192,7 +192,7 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vector& extruder_plans, unsigned int extruder_plan_idx, double standby_temp) { ExtruderPlan& extruder_plan = *extruder_plans[extruder_plan_idx]; - size_t extruder = extruder_plan.extruder_nr; + size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_plan_before_idx = extruder_plan_idx - 2; int(extruder_plan_before_idx) >= 0; extruder_plan_before_idx--) { - if (extruder_plans[extruder_plan_before_idx]->extruder_nr == extruder) + if (extruder_plans[extruder_plan_before_idx]->extruder_nr_ == extruder) { - extruder_plans[extruder_plan_before_idx + 1]->prev_extruder_standby_temp = standby_temp; + extruder_plans[extruder_plan_before_idx + 1]->prev_extruder_standby_temp_ = standby_temp; return; } } @@ -247,13 +247,13 @@ void LayerPlanBuffer::handleStandbyTemp(std::vector& extruder_pla void LayerPlanBuffer::insertPreheatCommand_multiExtrusion(std::vector& extruder_plans, unsigned int extruder_plan_idx) { ExtruderPlan& extruder_plan = *extruder_plans[extruder_plan_idx]; - const size_t extruder = extruder_plan.extruder_nr; + const size_t extruder = extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; } - double initial_print_temp = extruder_plan.required_start_temperature; + double initial_print_temp = extruder_plan.required_start_temperature_; Preheat::WarmUpResult heating_time_and_from_temp = computeStandbyTempPlan(extruder_plans, extruder_plan_idx); @@ -272,9 +272,9 @@ void LayerPlanBuffer::insertPreheatCommand_multiExtrusion(std::vector= 0; extruder_plan_before_idx--) { ExtruderPlan& extruder_plan_before = *extruder_plans[extruder_plan_before_idx]; - assert(extruder_plan_before.extruder_nr != extruder); + assert(extruder_plan_before.extruder_nr_ != extruder); - double time_here = extruder_plan_before.estimates.getTotalTime(); + double time_here = extruder_plan_before.estimates_.getTotalTime(); if (time_here >= time_before_extruder_plan_to_insert) { insertPreheatCommand(extruder_plan_before, time_before_extruder_plan_to_insert, extruder, initial_print_temp); @@ -293,27 +293,27 @@ void LayerPlanBuffer::insertPreheatCommand_multiExtrusion(std::vector& extruder_plans, unsigned int extruder_plan_idx) { ExtruderPlan& extruder_plan = *extruder_plans[extruder_plan_idx]; - const size_t extruder = extruder_plan.extruder_nr; + const size_t extruder = extruder_plan.extruder_nr_; ExtruderPlan* prev_extruder_plan = extruder_plans[extruder_plan_idx - 1]; - const size_t prev_extruder = prev_extruder_plan->extruder_nr; + const size_t prev_extruder = prev_extruder_plan->extruder_nr_; if (prev_extruder != extruder) { // set previous extruder to standby temperature const Settings& previous_extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings; - extruder_plan.prev_extruder_standby_temp = previous_extruder_settings.get("material_standby_temperature"); + extruder_plan.prev_extruder_standby_temp_ = previous_extruder_settings.get("material_standby_temperature"); } if (prev_extruder == extruder) { - insertPreheatCommand_singleExtrusion(*prev_extruder_plan, extruder, extruder_plan.required_start_temperature); - prev_extruder_plan->extrusion_temperature_command = --prev_extruder_plan->inserts.end(); + insertPreheatCommand_singleExtrusion(*prev_extruder_plan, extruder, extruder_plan.required_start_temperature_); + prev_extruder_plan->extrusion_temperature_command_ = --prev_extruder_plan->inserts_.end(); } else if (Application::getInstance().current_slice->scene.extruders[extruder].settings.get("machine_extruders_share_heater")) { // extruders share a heater so command the previous extruder to change to the temperature required for this extruder - insertPreheatCommand_singleExtrusion(*prev_extruder_plan, prev_extruder, extruder_plan.required_start_temperature); + insertPreheatCommand_singleExtrusion(*prev_extruder_plan, prev_extruder, extruder_plan.required_start_temperature_); } else { @@ -325,14 +325,14 @@ void LayerPlanBuffer::insertTempCommands(std::vector& extruder_pl void LayerPlanBuffer::insertPrintTempCommand(ExtruderPlan& extruder_plan) { - if (! extruder_plan.extrusion_temperature) + if (! extruder_plan.extrusion_temperature_) { spdlog::warn("Empty extruder plan detected! Discarding extrusion temperature command."); return; } - const double print_temp = *extruder_plan.extrusion_temperature; + const double print_temp = *extruder_plan.extrusion_temperature_; - const unsigned int extruder = extruder_plan.extruder_nr; + const unsigned int extruder = extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { @@ -343,9 +343,9 @@ void LayerPlanBuffer::insertPrintTempCommand(ExtruderPlan& extruder_plan) if (extruder_settings.get("material_initial_print_temperature") != 0) { // handle heating from initial_print_temperature to printing_tempreature unsigned int path_idx; - for (path_idx = 0; path_idx < extruder_plan.paths.size(); path_idx++) + for (path_idx = 0; path_idx < extruder_plan.paths_.size(); path_idx++) { - GCodePath& path = extruder_plan.paths[path_idx]; + GCodePath& path = extruder_plan.paths_[path_idx]; heated_pre_travel_time += path.estimates.getTotalTime(); if (! path.isTravelPath()) { @@ -355,13 +355,13 @@ void LayerPlanBuffer::insertPrintTempCommand(ExtruderPlan& extruder_plan) bool wait = false; extruder_plan.insertCommand(NozzleTempInsert{ .path_idx = path_idx, .extruder = extruder, .temperature = print_temp, .wait = wait }); } - extruder_plan.heated_pre_travel_time = heated_pre_travel_time; + extruder_plan.heated_pre_travel_time_ = heated_pre_travel_time; } void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& extruder_plans, unsigned int last_extruder_plan_idx) { ExtruderPlan& last_extruder_plan = *extruder_plans[last_extruder_plan_idx]; - const size_t extruder = last_extruder_plan.extruder_nr; + const size_t extruder = last_extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { @@ -377,9 +377,9 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex double heated_post_travel_time = 0; // The time after the last extrude move toward the end of the extruder plan during which the nozzle is stable at the final print temperature { // compute heated_post_travel_time unsigned int path_idx; - for (path_idx = last_extruder_plan.paths.size() - 1; int(path_idx) >= 0; path_idx--) + for (path_idx = last_extruder_plan.paths_.size() - 1; int(path_idx) >= 0; path_idx--) { - GCodePath& path = last_extruder_plan.paths[path_idx]; + GCodePath& path = last_extruder_plan.paths_[path_idx]; if (! path.isTravelPath()) { break; @@ -399,18 +399,18 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex for (unsigned int prev_extruder_plan_idx = last_extruder_plan_idx; (int)prev_extruder_plan_idx >= 0; prev_extruder_plan_idx--) { ExtruderPlan& prev_extruder_plan = *extruder_plans[prev_extruder_plan_idx]; - if (prev_extruder_plan.extruder_nr != extruder) + if (prev_extruder_plan.extruder_nr_ != extruder) { break; } - double prev_extruder_plan_time = prev_extruder_plan.estimates.getTotalTime(); + double prev_extruder_plan_time = prev_extruder_plan.estimates_.getTotalTime(); time_window += prev_extruder_plan_time; - heated_pre_travel_time = prev_extruder_plan.heated_pre_travel_time; + heated_pre_travel_time = prev_extruder_plan.heated_pre_travel_time_; - if (prev_extruder_plan.estimates.getTotalUnretractedTime() > 0) + if (prev_extruder_plan.estimates_.getTotalUnretractedTime() > 0) { // handle temp statistics - weighted_average_extrusion_temp += prev_extruder_plan.extrusion_temperature.value_or(prev_extruder_plan.required_start_temperature) * prev_extruder_plan_time; - initial_print_temp = prev_extruder_plan.required_start_temperature; + weighted_average_extrusion_temp += prev_extruder_plan.extrusion_temperature_.value_or(prev_extruder_plan.required_start_temperature_) * prev_extruder_plan_time; + initial_print_temp = prev_extruder_plan.required_start_temperature_; } } if (time_window <= 0.0) // There was a move in this plan but it was length 0. @@ -429,7 +429,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex return; } - assert((time_window >= -0.001 || last_extruder_plan.estimates.material == 0) && "Time window should always be positive if we actually extrude"); + assert((time_window >= -0.001 || last_extruder_plan.estimates_.material == 0) && "Time window should always be positive if we actually extrude"); // ,layer change . // : ,precool command ,layer change . @@ -455,11 +455,11 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex for (unsigned int precool_extruder_plan_idx = last_extruder_plan_idx; (int)precool_extruder_plan_idx >= 0; precool_extruder_plan_idx--) { precool_extruder_plan = extruder_plans[precool_extruder_plan_idx]; - if (precool_extruder_plan->extrusion_temperature_command) + if (precool_extruder_plan->extrusion_temperature_command_) { // the precool command ends up before the command to go to the print temperature of the next extruder plan, so remove that print temp command - precool_extruder_plan->inserts.erase(*precool_extruder_plan->extrusion_temperature_command); + precool_extruder_plan->inserts_.erase(*precool_extruder_plan->extrusion_temperature_command_); } - double time_here = precool_extruder_plan->estimates.getTotalTime(); + double time_here = precool_extruder_plan->estimates_.getTotalTime(); if (cool_down_time < time_here) { break; @@ -474,9 +474,9 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex { // insert temp command in precool_extruder_plan double extrusion_time_seen = 0; unsigned int path_idx; - for (path_idx = precool_extruder_plan->paths.size() - 1; int(path_idx) >= 0; path_idx--) + for (path_idx = precool_extruder_plan->paths_.size() - 1; int(path_idx) >= 0; path_idx--) { - GCodePath& path = precool_extruder_plan->paths[path_idx]; + GCodePath& path = precool_extruder_plan->paths_[path_idx]; extrusion_time_seen += path.estimates.getTotalTime(); if (extrusion_time_seen >= cool_down_time) { @@ -492,7 +492,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex void LayerPlanBuffer::insertTempCommands() { - if (buffer.back()->extruder_plans.size() == 0 || (buffer.back()->extruder_plans.size() == 1 && buffer.back()->extruder_plans[0].paths.size() == 0)) + if (buffer.back()->extruder_plans.size() == 0 || (buffer.back()->extruder_plans.size() == 1 && buffer.back()->extruder_plans[0].paths_.size() == 0)) { // disregard empty layer buffer.pop_back(); return; @@ -515,49 +515,49 @@ void LayerPlanBuffer::insertTempCommands() { const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans.size() + extruder_plan_idx; ExtruderPlan& extruder_plan = layer_plan.extruder_plans[extruder_plan_idx]; - size_t extruder = extruder_plan.extruder_nr; + size_t extruder = extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; - Duration time = extruder_plan.estimates.getTotalUnretractedTime(); + Duration time = extruder_plan.estimates_.getTotalUnretractedTime(); Ratio avg_flow; if (time > 0.0) { - avg_flow = extruder_plan.estimates.material / time; + avg_flow = extruder_plan.estimates_.material / time; } else { - assert(extruder_plan.estimates.material == 0.0 && "No extrusion time should mean no material usage!"); + assert(extruder_plan.estimates_.material == 0.0 && "No extrusion time should mean no material usage!"); avg_flow = 0.0; } - Temperature print_temp = preheat_config.getTemp(extruder, avg_flow, extruder_plan.is_initial_layer); + Temperature print_temp = preheat_config.getTemp(extruder, avg_flow, extruder_plan.is_initial_layer_); Temperature initial_print_temp = extruder_settings.get("material_initial_print_temperature"); - if (extruder_plan.temperatureFactor > 0) // force lower printing temperatures due to minimum layer time + if (extruder_plan.temperature_factor_ > 0) // force lower printing temperatures due to minimum layer time { - print_temp = print_temp * (1 - extruder_plan.temperatureFactor) + extruder_plan.temperatureFactor * extruder_settings.get("cool_min_temperature"); + print_temp = print_temp * (1 - extruder_plan.temperature_factor_) + extruder_plan.temperature_factor_ * extruder_settings.get("cool_min_temperature"); initial_print_temp = std::min(initial_print_temp, print_temp); } if (initial_print_temp == 0.0 // user doesn't want to use initial print temp feature || extruder_settings.get("machine_extruders_share_heater") // ignore initial print temps when extruders share a heater || ! extruder_used_in_meshgroup[extruder] // prime blob uses print temp rather than initial print temp - || (overall_extruder_plan_idx > 0 && extruder_plans[overall_extruder_plan_idx - 1]->extruder_nr == extruder // prev plan has same extruder .. - && extruder_plans[overall_extruder_plan_idx - 1]->estimates.getTotalUnretractedTime() > 0.0) // and prev extruder plan already heated to printing temperature + || (overall_extruder_plan_idx > 0 && extruder_plans[overall_extruder_plan_idx - 1]->extruder_nr_ == extruder // prev plan has same extruder .. + && extruder_plans[overall_extruder_plan_idx - 1]->estimates_.getTotalUnretractedTime() > 0.0) // and prev extruder plan already heated to printing temperature ) { - extruder_plan.required_start_temperature = print_temp; + extruder_plan.required_start_temperature_ = print_temp; extruder_used_in_meshgroup[extruder] = true; } else { - extruder_plan.required_start_temperature = initial_print_temp; - extruder_plan.extrusion_temperature = print_temp; + extruder_plan.required_start_temperature_ = initial_print_temp; + extruder_plan.extrusion_temperature_ = print_temp; } - assert(extruder_plan.required_start_temperature != -1 && "extruder_plan.required_start_temperature should now have been set"); + assert(extruder_plan.required_start_temperature_ != -1 && "extruder_plan.required_start_temperature should now have been set"); if (buffer.size() == 1 && extruder_plan_idx == 0) { // the very first extruder plan of the current meshgroup - size_t extruder = extruder_plan.extruder_nr; + size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_idx = 0; extruder_idx < scene.extruders.size(); extruder_idx++) { // set temperature of the first nozzle, turn other nozzles down const Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_idx].settings; @@ -568,7 +568,7 @@ void LayerPlanBuffer::insertTempCommands() // see FffGcodeWriter::processStartingCode if (extruder_idx == extruder) { - gcode.setInitialTemp(extruder_idx, extruder_plan.extrusion_temperature.value_or(extruder_plan.required_start_temperature)); + gcode.setInitialTemp(extruder_idx, extruder_plan.extrusion_temperature_.value_or(extruder_plan.required_start_temperature_)); } else { @@ -579,7 +579,7 @@ void LayerPlanBuffer::insertTempCommands() { if (extruder_idx != extruder) { // TODO: do we need to do this? - extruder_plan.prev_extruder_standby_temp = other_extruder_settings.get("material_standby_temperature"); + extruder_plan.prev_extruder_standby_temp_ = other_extruder_settings.get("material_standby_temperature"); } } } diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index d98ec095b6..96f961e4c0 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -466,7 +466,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons std::function line_processor = [close_to, _dest_point, &boundary_crossing_point, &dist2_score, &dest_part_poly_indices](const PolygonsPointIndex& boundary_segment) { - if (dest_part_poly_indices.find(boundary_segment.poly_idx) == dest_part_poly_indices.end()) + if (dest_part_poly_indices.find(boundary_segment.poly_idx_) == dest_part_poly_indices.end()) { // we're not looking at a polygon from the dest_part return true; // a.k.a. continue; } @@ -475,7 +475,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons if (dist2_score_here < dist2_score) { dist2_score = dist2_score_here; - boundary_crossing_point = ClosestPolygonPoint(closest_here, boundary_segment.point_idx, boundary_segment.getPolygon(), boundary_segment.poly_idx); + boundary_crossing_point = ClosestPolygonPoint(closest_here, boundary_segment.point_idx_, boundary_segment.getPolygon(), boundary_segment.poly_idx_); } return true; }; diff --git a/src/utils/PolygonsPointIndex.cpp b/src/utils/PolygonsPointIndex.cpp index cdd64f7d5e..9cc2d3cf18 100644 --- a/src/utils/PolygonsPointIndex.cpp +++ b/src/utils/PolygonsPointIndex.cpp @@ -9,7 +9,7 @@ namespace cura template<> ConstPolygonRef PathsPointIndex::getPolygon() const { - return (*polygons)[poly_idx]; + return (*polygons_)[poly_idx_]; } } diff --git a/src/utils/PolylineStitcher.cpp b/src/utils/PolylineStitcher.cpp index 8d101e99da..5bec622839 100644 --- a/src/utils/PolylineStitcher.cpp +++ b/src/utils/PolylineStitcher.cpp @@ -12,7 +12,7 @@ namespace cura template<> bool PolylineStitcher::canReverse(const PathsPointIndex& ppi) { - if ((*ppi.polygons)[ppi.poly_idx].is_odd) + if ((*ppi.polygons_)[ppi.poly_idx_].is_odd) { return true; } diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index 40a1a29d58..574f9061b2 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -31,17 +31,17 @@ const std::function PolygonUtils::no_penalty_function = [](Point) int64_t PolygonUtils::segmentLength(PolygonsPointIndex start, PolygonsPointIndex end) { - assert(start.poly_idx == end.poly_idx); + assert(start.poly_idx_ == end.poly_idx_); int64_t segment_length = 0; Point prev_vert = start.p(); - ConstPolygonRef poly = (*start.polygons)[start.poly_idx]; + ConstPolygonRef poly = (*start.polygons_)[start.poly_idx_]; for (unsigned int point_idx = 1; point_idx <= poly.size(); point_idx++) { - unsigned int vert_idx = (start.point_idx + point_idx) % poly.size(); + unsigned int vert_idx = (start.point_idx_ + point_idx) % poly.size(); Point vert = poly[vert_idx]; segment_length += vSize(vert - prev_vert); - if (vert_idx == end.point_idx) + if (vert_idx == end.point_idx_) { // break at the end of the loop, so that [end] and [start] may be the same return segment_length; } @@ -53,14 +53,14 @@ int64_t PolygonUtils::segmentLength(PolygonsPointIndex start, PolygonsPointIndex void PolygonUtils::spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, unsigned int n_dots, std::vector& result) { - assert(start.poly_idx == end.poly_idx); + assert(start.poly_idx_ == end.poly_idx_); int64_t segment_length = segmentLength(start, end); - ConstPolygonRef poly = (*start.polygons)[start.poly_idx]; + ConstPolygonRef poly = (*start.polygons_)[start.poly_idx_]; unsigned int n_dots_in_between = n_dots; if (start == end) { - result.emplace_back(start.p(), start.point_idx, poly); + result.emplace_back(start.p(), start.point_idx_, poly); n_dots_in_between--; // generate one less below, because we already pushed a point to the result } @@ -78,7 +78,7 @@ void PolygonUtils::spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, for (; dist_past_vert_to_insert_point < p0p1_length && n_points_generated < n_dots_in_between; dist_past_vert_to_insert_point += wipe_point_dist) { - result.emplace_back(p0 + normal(p0p1, dist_past_vert_to_insert_point), vert.point_idx, poly); + result.emplace_back(p0 + normal(p0p1, dist_past_vert_to_insert_point), vert.point_idx_, poly); n_points_generated++; } dist_past_vert_to_insert_point -= p0p1_length; @@ -1013,9 +1013,9 @@ std::optional PolygonsPointIndex best_point_poly_idx(nullptr, NO_INDEX, NO_INDEX); for (PolygonsPointIndex& point_poly_index : near_lines) { - ConstPolygonRef poly = polygons[point_poly_index.poly_idx]; - const Point& p1 = poly[point_poly_index.point_idx]; - const Point& p2 = poly[(point_poly_index.point_idx + 1) % poly.size()]; + ConstPolygonRef poly = polygons[point_poly_index.poly_idx_]; + const Point& p1 = poly[point_poly_index.point_idx_]; + const Point& p2 = poly[(point_poly_index.point_idx_ + 1) % poly.size()]; Point closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); int64_t dist2_score = vSize2(from - closest_here) + penalty_function(closest_here); @@ -1026,13 +1026,13 @@ std::optional best_point_poly_idx = point_poly_index; } } - if (best_point_poly_idx.poly_idx == NO_INDEX) + if (best_point_poly_idx.poly_idx_ == NO_INDEX) { return std::optional(); } else { - return std::optional(std::in_place, best, best_point_poly_idx.point_idx, polygons[best_point_poly_idx.poly_idx], best_point_poly_idx.poly_idx); + return std::optional(std::in_place, best, best_point_poly_idx.point_idx_, polygons[best_point_poly_idx.poly_idx_], best_point_poly_idx.poly_idx_); } } @@ -1497,14 +1497,14 @@ void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) Point& pt = thiss[poly_idx][point_idx]; for (const auto& line : query_grid->getNearby(pt, epsilon * 2)) { - const size_t line_next_idx = (line.point_idx + 1) % thiss[line.poly_idx].size(); - if (poly_idx == line.poly_idx && (point_idx == line.point_idx || point_idx == line_next_idx)) + const size_t line_next_idx = (line.point_idx_ + 1) % thiss[line.poly_idx_].size(); + if (poly_idx == line.poly_idx_ && (point_idx == line.point_idx_ || point_idx == line_next_idx)) { continue; } - const Point& a = thiss[line.poly_idx][line.point_idx]; - const Point& b = thiss[line.poly_idx][line_next_idx]; + const Point& a = thiss[line.poly_idx_][line.point_idx_]; + const Point& b = thiss[line.poly_idx_][line_next_idx]; if (half_epsilon_sqrd >= vSize2(pt - LinearAlg2D::getClosestOnLineSegment(pt, a, b))) { From 14ace62866b5b710b550a0d7a7957578d1392a1a Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 09:04:18 +0100 Subject: [PATCH 054/218] Fixed variable shadowing warnings --- include/mesh.h | 28 +++--- src/ConicalOverhang.cpp | 6 +- src/FffPolygonGenerator.cpp | 10 +- src/InterlockingGenerator.cpp | 12 +-- src/MeshGroup.cpp | 20 ++-- src/Mold.cpp | 18 ++-- src/Scene.cpp | 4 +- .../ArcusCommunicationPrivate.cpp | 8 +- src/communication/CommandLine.cpp | 2 +- src/mesh.cpp | 92 +++++++++---------- src/multiVolumes.cpp | 36 ++++---- src/settings/AdaptiveLayerHeights.cpp | 16 ++-- src/sliceDataStorage.cpp | 4 +- src/slicer.cpp | 80 ++++++++-------- tests/arcus/ArcusCommunicationPrivateTest.cpp | 16 ++-- 15 files changed, 176 insertions(+), 176 deletions(-) diff --git a/include/mesh.h b/include/mesh.h index 37fe3f3e10..8a48c41e28 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -19,10 +19,10 @@ Keeps track of which faces connect to it. class MeshVertex { public: - Point3 p; //!< location of the vertex - std::vector connected_faces; //!< list of the indices of connected faces + Point3 p_; //!< location of the vertex + std::vector connected_faces_; //!< list of the indices of connected faces - MeshVertex(Point3 p) : p(p) {connected_faces.reserve(8);} //!< doesn't set connected_faces + MeshVertex(Point3 p) : p_(p) {connected_faces_.reserve(8);} //!< doesn't set connected_faces }; /*! A MeshFace is a 3 dimensional model triangle with 3 points. These points are already converted to integers @@ -49,8 +49,8 @@ In such a case the face_index stored in connected_face_index is the one connecte class MeshFace { public: - int vertex_index[3] = {-1}; //!< counter-clockwise ordering - int connected_face_index[3]; //!< same ordering as vertex_index (connected_face 0 is connected via vertex 0 and 1, etc.) + int vertex_index_[3] = {-1}; //!< counter-clockwise ordering + int connected_face_index_[3]; //!< same ordering as vertex_index (connected_face 0 is connected via vertex 0 and 1, etc.) }; @@ -62,13 +62,13 @@ See MeshFace for the specifics of how/when faces are connected. class Mesh { //! The vertex_hash_map stores a index reference of each vertex for the hash of that location. Allows for quick retrieval of points with the same location. - std::unordered_map > vertex_hash_map; - AABB3D aabb; + std::unordered_map > vertex_hash_map_; + AABB3D aabb_; public: - std::vector vertices;//!< list of all vertices in the mesh - std::vector faces; //!< list of all faces in the mesh - Settings settings; - std::string mesh_name; + std::vector vertices_;//!< list of all vertices in the mesh + std::vector faces_; //!< list of all faces in the mesh + Settings settings_; + std::string mesh_name_; Mesh(Settings& parent); Mesh(); @@ -89,9 +89,9 @@ class Mesh void translate(Point3 offset) { if (offset == Point3(0,0,0)) { return; } - for(MeshVertex& v : vertices) - v.p += offset; - aabb.translate(offset); + for(MeshVertex& v : vertices_) + v.p_ += offset; + aabb_.translate(offset); } /*! diff --git a/src/ConicalOverhang.cpp b/src/ConicalOverhang.cpp index 03b3b80222..f0afc15af9 100644 --- a/src/ConicalOverhang.cpp +++ b/src/ConicalOverhang.cpp @@ -15,10 +15,10 @@ namespace cura void ConicalOverhang::apply(Slicer* slicer, const Mesh& mesh) { - const AngleRadians angle = mesh.settings.get("conical_overhang_angle"); - const double maxHoleArea = mesh.settings.get("conical_overhang_hole_size"); + const AngleRadians angle = mesh.settings_.get("conical_overhang_angle"); + const double maxHoleArea = mesh.settings_.get("conical_overhang_hole_size"); const double tan_angle = tan(angle); // the XY-component of the angle - const coord_t layer_thickness = mesh.settings.get("layer_height"); + const coord_t layer_thickness = mesh.settings_.get("layer_height"); coord_t max_dist_from_lower_layer = tan_angle * layer_thickness; // max dist which can be bridged for (LayerIndex layer_nr = slicer->layers.size() - 2; static_cast(layer_nr) >= 0; layer_nr--) diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 0ac8e5ce1b..4e59f05ab8 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -146,7 +146,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe continue; } const coord_t mesh_height = mesh.max().z_; - switch (mesh.settings.get("slicing_tolerance")) + switch (mesh.settings_.get("slicing_tolerance")) { case SlicingTolerance::MIDDLE: if (storage.model_max.z_ < initial_layer_thickness) @@ -232,7 +232,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe for (unsigned int mesh_idx = 0; mesh_idx < slicerList.size(); mesh_idx++) { Mesh& mesh = scene.current_mesh_group->meshes[mesh_idx]; - if (mesh.settings.get("conical_overhang_enabled") && ! mesh.settings.get("anti_overhang_mesh")) + if (mesh.settings_.get("conical_overhang_enabled") && ! mesh.settings_.get("anti_overhang_mesh")) { ConicalOverhang::apply(slicerList[mesh_idx], mesh); } @@ -260,7 +260,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe { Mesh& mesh = scene.current_mesh_group->meshes[meshIdx]; Slicer* slicer = slicerList[meshIdx]; - if (! mesh.settings.get("anti_overhang_mesh") && ! mesh.settings.get("infill_mesh") && ! mesh.settings.get("cutting_mesh")) + if (! mesh.settings_.get("anti_overhang_mesh") && ! mesh.settings_.get("infill_mesh") && ! mesh.settings_.get("cutting_mesh")) { storage.print_layer_count = std::max(storage.print_layer_count, slicer->layers.size()); } @@ -279,7 +279,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe SliceMeshStorage& meshStorage = *storage.meshes.back(); // only create layer parts for normal meshes - const bool is_support_modifier = AreaSupport::handleSupportModifierMesh(storage, mesh.settings, slicer); + const bool is_support_modifier = AreaSupport::handleSupportModifierMesh(storage, mesh.settings_, slicer); if (! is_support_modifier) { createLayerParts(meshStorage, slicer); @@ -288,7 +288,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe // Do not add and process support _modifier_ meshes further, and ONLY skip support _modifiers_. They have been // processed in AreaSupport::handleSupportModifierMesh(), but other helper meshes such as infill meshes are // processed in a later stage, except for support mesh itself, so an exception is made for that. - if (is_support_modifier && ! mesh.settings.get("support_mesh")) + if (is_support_modifier && ! mesh.settings_.get("support_mesh")) { storage.meshes.pop_back(); continue; diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 3392f4ee31..86bb724ceb 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -33,11 +33,11 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& for (size_t mesh_a_idx = 0; mesh_a_idx < volumes.size(); mesh_a_idx++) { Slicer& mesh_a = *volumes[mesh_a_idx]; - size_t extruder_nr_a = mesh_a.mesh->settings.get("wall_0_extruder_nr").extruder_nr; + size_t extruder_nr_a = mesh_a.mesh->settings_.get("wall_0_extruder_nr").extruder_nr; for (size_t mesh_b_idx = mesh_a_idx + 1; mesh_b_idx < volumes.size(); mesh_b_idx++) { Slicer& mesh_b = *volumes[mesh_b_idx]; - size_t extruder_nr_b = mesh_b.mesh->settings.get("wall_0_extruder_nr").extruder_nr; + size_t extruder_nr_b = mesh_b.mesh->settings_.get("wall_0_extruder_nr").extruder_nr; if (! mesh_a.mesh->canInterlock() || ! mesh_b.mesh->canInterlock()) { @@ -50,8 +50,8 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& continue; } - coord_t beam_width_a = mesh_a.mesh->settings.get("interlocking_beam_width"); - coord_t beam_width_b = mesh_b.mesh->settings.get("interlocking_beam_width"); + coord_t beam_width_a = mesh_a.mesh->settings_.get("interlocking_beam_width"); + coord_t beam_width_b = mesh_b.mesh->settings_.get("interlocking_beam_width"); // TODO: why are these two kernels different kernel types?! const DilationKernel interface_dilation(GridPoint3(interface_depth, interface_depth, interface_depth), DilationKernel::Type::PRISM); @@ -70,7 +70,7 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& std::pair InterlockingGenerator::growBorderAreasPerpendicular(const Polygons& a, const Polygons& b, const coord_t& detect) const { - const coord_t min_line = std::min(mesh_a.mesh->settings.get("min_wall_line_width"), mesh_b.mesh->settings.get("min_wall_line_width")); + const coord_t min_line = std::min(mesh_a.mesh->settings_.get("min_wall_line_width"), mesh_b.mesh->settings_.get("min_wall_line_width")); const Polygons total_shrunk = a.offset(min_line).unionPolygons(b.offset(min_line)).offset(2 * -min_line); @@ -101,7 +101,7 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set const coord_t max_beam_width = std::max(beam_width_a, beam_width_b); const coord_t detect = (max_beam_width * number_of_beams_detect) + rounding_errors; const coord_t expand = (max_beam_width * number_of_beams_expand) + rounding_errors; - const coord_t close_gaps = std::min(mesh_a.mesh->settings.get("line_width"), mesh_b.mesh->settings.get("line_width")) / 4; + const coord_t close_gaps = std::min(mesh_a.mesh->settings_.get("line_width"), mesh_b.mesh->settings_.get("line_width")) / 4; // Make an inclusionary polygon, to only actually handle thin areas near actual microstructures (so not in skin for example). std::vector near_interlock_per_layer; diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index e14fcc3600..b70e04c45e 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -49,8 +49,8 @@ Point3 MeshGroup::min() const Point3 ret(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); for (const Mesh& mesh : meshes) { - if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") - || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. + if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") + || mesh.settings_.get("anti_overhang_mesh")) // Don't count pieces that are not printed. { continue; } @@ -71,8 +71,8 @@ Point3 MeshGroup::max() const Point3 ret(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); for (const Mesh& mesh : meshes) { - if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") - || mesh.settings.get("anti_overhang_mesh")) // Don't count pieces that are not printed. + if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") + || mesh.settings_.get("anti_overhang_mesh")) // Don't count pieces that are not printed. { continue; } @@ -105,8 +105,8 @@ void MeshGroup::finalize() // If a mesh position was given, put the mesh at this position in 3D space. for (Mesh& mesh : meshes) { - Point3 mesh_offset(mesh.settings.get("mesh_position_x"), mesh.settings.get("mesh_position_y"), mesh.settings.get("mesh_position_z")); - if (mesh.settings.get("center_object")) + Point3 mesh_offset(mesh.settings_.get("mesh_position_x"), mesh.settings_.get("mesh_position_y"), mesh.settings_.get("mesh_position_z")); + if (mesh.settings_.get("center_object")) { Point3 object_min = mesh.min(); Point3 object_max = mesh.max(); @@ -201,8 +201,8 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matr // For each face read: // float(x,y,z) = normal, float(X,Y,Z)*3 = vertexes, uint16_t = flags // Every Face is 50 Bytes: Normal(3*float), Vertices(9*float), 2 Bytes Spacer - mesh->faces.reserve(face_count); - mesh->vertices.reserve(face_count); + mesh->faces_.reserve(face_count); + mesh->vertices_.reserve(face_count); for (unsigned int i = 0; i < face_count; i++) { if (fread(buffer, 50, 1, f) != 1) @@ -231,7 +231,7 @@ bool loadMeshSTL(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) } // assign filename to mesh_name - mesh->mesh_name = filename; + mesh->mesh_name_ = filename; // Skip any whitespace at the beginning of the file. unsigned long long num_whitespace = 0; // Number of whitespace characters. @@ -269,7 +269,7 @@ bool loadMeshSTL(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) // This logic is used to handle the case where the file starts with // "solid" but is a binary file. - if (mesh->faces.size() < 1) + if (mesh->faces_.size() < 1) { mesh->clear(); return loadMeshSTL_binary(mesh, filename, matrix); diff --git a/src/Mold.cpp b/src/Mold.cpp index ccf5ec0cd6..fe5bebe849 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -23,10 +23,10 @@ void Mold::process(std::vector& slicer_list) for (unsigned int mesh_idx = 0; mesh_idx < slicer_list.size(); mesh_idx++) { Mesh& mesh = scene.current_mesh_group->meshes[mesh_idx]; - if (mesh.settings.get("mold_enabled")) + if (mesh.settings_.get("mold_enabled")) { has_any_mold = true; - mesh.expandXY(mesh.settings.get("mold_width")); + mesh.expandXY(mesh.settings_.get("mold_width")); } } if (! has_any_mold) @@ -57,19 +57,19 @@ void Mold::process(std::vector& slicer_list) { const Mesh& mesh = scene.current_mesh_group->meshes[mesh_idx]; Slicer& slicer = *slicer_list[mesh_idx]; - if (! mesh.settings.get("mold_enabled") || layer_nr >= static_cast(slicer.layers.size())) + if (! mesh.settings_.get("mold_enabled") || layer_nr >= static_cast(slicer.layers.size())) { continue; } - coord_t width = mesh.settings.get("mold_width"); - coord_t open_polyline_width = mesh.settings.get("wall_line_width_0"); + coord_t width = mesh.settings_.get("mold_width"); + coord_t open_polyline_width = mesh.settings_.get("wall_line_width_0"); if (layer_nr == 0) { - const ExtruderTrain& train_wall_0 = mesh.settings.get("wall_0_extruder_nr"); + const ExtruderTrain& train_wall_0 = mesh.settings_.get("wall_0_extruder_nr"); open_polyline_width *= train_wall_0.settings.get("initial_layer_line_width_factor"); } - const AngleDegrees angle = mesh.settings.get("mold_angle"); - const coord_t roof_height = mesh.settings.get("mold_roof_height"); + const AngleDegrees angle = mesh.settings_.get("mold_angle"); + const coord_t roof_height = mesh.settings_.get("mold_roof_height"); const coord_t inset = tan(angle / 180 * std::numbers::pi) * layer_height; const size_t roof_layer_count = roof_height / layer_height; @@ -108,7 +108,7 @@ void Mold::process(std::vector& slicer_list) for (unsigned int mesh_idx = 0; mesh_idx < slicer_list.size(); mesh_idx++) { const Mesh& mesh = scene.current_mesh_group->meshes[mesh_idx]; - if (! mesh.settings.get("mold_enabled")) + if (! mesh.settings_.get("mold_enabled")) { continue; // only cut original models out of all molds } diff --git a/src/Scene.cpp b/src/Scene.cpp index ac50185b6d..1e8416181e 100644 --- a/src/Scene.cpp +++ b/src/Scene.cpp @@ -54,7 +54,7 @@ const std::string Scene::getAllSettingsString() const for (size_t mesh_index = 0; mesh_index < mesh_group.meshes.size(); mesh_index++) { const Mesh& mesh = mesh_group.meshes[mesh_index]; - output << " -e" << mesh.settings.get("extruder_nr") << " -l \"" << mesh_index << "\"" << mesh.settings.getAllSettingsString(); + output << " -e" << mesh.settings_.get("extruder_nr") << " -l \"" << mesh_index << "\"" << mesh.settings_.getAllSettingsString(); } } output << "\n"; @@ -72,7 +72,7 @@ void Scene::processMeshGroup(MeshGroup& mesh_group) bool empty = true; for (Mesh& mesh : mesh_group.meshes) { - if (! mesh.settings.get("infill_mesh") && ! mesh.settings.get("anti_overhang_mesh")) + if (! mesh.settings_.get("infill_mesh") && ! mesh.settings_.get("anti_overhang_mesh")) { empty = false; break; diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index 90b23c1e64..3d33f43e74 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -117,10 +117,10 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& // Load the settings for the mesh. for (const cura::proto::Setting& setting : object.settings()) { - mesh.settings.add(setting.name(), setting.value()); + mesh.settings_.add(setting.name(), setting.value()); } - ExtruderTrain& extruder = mesh.settings.get("extruder_nr"); // Set the parent setting to the correct extruder. - mesh.settings.setParent(&extruder.settings); + ExtruderTrain& extruder = mesh.settings_.get("extruder_nr"); // Set the parent setting to the correct extruder. + mesh.settings_.setParent(&extruder.settings); for (size_t face = 0; face < face_count; face++) { @@ -134,7 +134,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& mesh.addFace(verts[0], verts[1], verts[2]); } - mesh.mesh_name = object.name(); + mesh.mesh_name_ = object.name(); mesh.finish(); } object_count++; diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 7b7c0f7163..12b338305f 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -266,7 +266,7 @@ void CommandLine::sliceNext() } else { - last_settings = &slice.scene.mesh_groups[mesh_group_index].meshes.back().settings; + last_settings = &slice.scene.mesh_groups[mesh_group_index].meshes.back().settings_; } break; } diff --git a/src/mesh.cpp b/src/mesh.cpp index eba67cf02c..5e2ca66224 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -22,14 +22,14 @@ static inline uint32_t pointHash(const Point3& p) } Mesh::Mesh(Settings& parent) - : settings(parent) + : settings_(parent) , has_disconnected_faces(false) , has_overlapping_faces(false) { } Mesh::Mesh() - : settings() + : settings_() , has_disconnected_faces(false) , has_overlapping_faces(false) { @@ -43,98 +43,98 @@ void Mesh::addFace(Point3& v0, Point3& v1, Point3& v2) if (vi0 == vi1 || vi1 == vi2 || vi0 == vi2) return; // the face has two vertices which get assigned the same location. Don't add the face. - int idx = faces.size(); // index of face to be added - faces.emplace_back(); - MeshFace& face = faces[idx]; - face.vertex_index[0] = vi0; - face.vertex_index[1] = vi1; - face.vertex_index[2] = vi2; - vertices[face.vertex_index[0]].connected_faces.push_back(idx); - vertices[face.vertex_index[1]].connected_faces.push_back(idx); - vertices[face.vertex_index[2]].connected_faces.push_back(idx); + int idx = faces_.size(); // index of face to be added + faces_.emplace_back(); + MeshFace& face = faces_[idx]; + face.vertex_index_[0] = vi0; + face.vertex_index_[1] = vi1; + face.vertex_index_[2] = vi2; + vertices_[face.vertex_index_[0]].connected_faces_.push_back(idx); + vertices_[face.vertex_index_[1]].connected_faces_.push_back(idx); + vertices_[face.vertex_index_[2]].connected_faces_.push_back(idx); } void Mesh::clear() { - faces.clear(); - vertices.clear(); - vertex_hash_map.clear(); + faces_.clear(); + vertices_.clear(); + vertex_hash_map_.clear(); } void Mesh::finish() { // Finish up the mesh, clear the vertex_hash_map, as it's no longer needed from this point on and uses quite a bit of memory. - vertex_hash_map.clear(); + vertex_hash_map_.clear(); // For each face, store which other face is connected with it. - for (unsigned int i = 0; i < faces.size(); i++) + for (unsigned int i = 0; i < faces_.size(); i++) { - MeshFace& face = faces[i]; + MeshFace& face = faces_[i]; // faces are connected via the outside - face.connected_face_index[0] = getFaceIdxWithPoints(face.vertex_index[0], face.vertex_index[1], i, face.vertex_index[2]); - face.connected_face_index[1] = getFaceIdxWithPoints(face.vertex_index[1], face.vertex_index[2], i, face.vertex_index[0]); - face.connected_face_index[2] = getFaceIdxWithPoints(face.vertex_index[2], face.vertex_index[0], i, face.vertex_index[1]); + face.connected_face_index_[0] = getFaceIdxWithPoints(face.vertex_index_[0], face.vertex_index_[1], i, face.vertex_index_[2]); + face.connected_face_index_[1] = getFaceIdxWithPoints(face.vertex_index_[1], face.vertex_index_[2], i, face.vertex_index_[0]); + face.connected_face_index_[2] = getFaceIdxWithPoints(face.vertex_index_[2], face.vertex_index_[0], i, face.vertex_index_[1]); } } Point3 Mesh::min() const { - return aabb.min; + return aabb_.min; } Point3 Mesh::max() const { - return aabb.max; + return aabb_.max; } AABB3D Mesh::getAABB() const { - return aabb; + return aabb_; } void Mesh::expandXY(int64_t offset) { if (offset) { - aabb.expandXY(offset); + aabb_.expandXY(offset); } } void Mesh::transform(const FMatrix4x3& transformation) { - for (MeshVertex& v : vertices) + for (MeshVertex& v : vertices_) { - v.p = transformation.apply(v.p); + v.p_ = transformation.apply(v.p_); } - aabb.min = transformation.apply(aabb.min); - aabb.max = transformation.apply(aabb.max); + aabb_.min = transformation.apply(aabb_.min); + aabb_.max = transformation.apply(aabb_.max); } bool Mesh::isPrinted() const { - return ! settings.get("infill_mesh") && ! settings.get("cutting_mesh") && ! settings.get("anti_overhang_mesh"); + return ! settings_.get("infill_mesh") && ! settings_.get("cutting_mesh") && ! settings_.get("anti_overhang_mesh"); } bool Mesh::canInterlock() const { - return ! settings.get("infill_mesh") && ! settings.get("anti_overhang_mesh"); + return ! settings_.get("infill_mesh") && ! settings_.get("anti_overhang_mesh"); } int Mesh::findIndexOfVertex(const Point3& v) { uint32_t hash = pointHash(v); - for (unsigned int idx = 0; idx < vertex_hash_map[hash].size(); idx++) + for (unsigned int idx = 0; idx < vertex_hash_map_[hash].size(); idx++) { - if ((vertices[vertex_hash_map[hash][idx]].p - v).testLength(vertex_meld_distance)) + if ((vertices_[vertex_hash_map_[hash][idx]].p_ - v).testLength(vertex_meld_distance)) { - return vertex_hash_map[hash][idx]; + return vertex_hash_map_[hash][idx]; } } - vertex_hash_map[hash].push_back(vertices.size()); - vertices.emplace_back(v); + vertex_hash_map_[hash].push_back(vertices_.size()); + vertices_.emplace_back(v); - aabb.include(v); + aabb_.include(v); - return vertices.size() - 1; + return vertices_.size() - 1; } /*! @@ -164,15 +164,15 @@ See mesh->settings.get("infill_mesh_order"); + return volume_1->mesh->settings_.get("infill_mesh_order") < volume_2->mesh->settings_.get("infill_mesh_order"); }); for (unsigned int volume_1_idx = 1; volume_1_idx < volumes.size(); volume_1_idx++) { Slicer& volume_1 = *ranked_volumes[volume_1_idx]; - if (volume_1.mesh->settings.get("infill_mesh") || volume_1.mesh->settings.get("anti_overhang_mesh") || volume_1.mesh->settings.get("support_mesh") - || volume_1.mesh->settings.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) + if (volume_1.mesh->settings_.get("infill_mesh") || volume_1.mesh->settings_.get("anti_overhang_mesh") || volume_1.mesh->settings_.get("support_mesh") + || volume_1.mesh->settings_.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) { continue; } for (unsigned int volume_2_idx = 0; volume_2_idx < volume_1_idx; volume_2_idx++) { Slicer& volume_2 = *ranked_volumes[volume_2_idx]; - if (volume_2.mesh->settings.get("infill_mesh") || volume_2.mesh->settings.get("anti_overhang_mesh") || volume_2.mesh->settings.get("support_mesh") - || volume_2.mesh->settings.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) + if (volume_2.mesh->settings_.get("infill_mesh") || volume_2.mesh->settings_.get("anti_overhang_mesh") || volume_2.mesh->settings_.get("support_mesh") + || volume_2.mesh->settings_.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) { continue; } @@ -51,7 +51,7 @@ void carveMultipleVolumes(std::vector& volumes) { SlicerLayer& layer1 = volume_1.layers[layerNr]; SlicerLayer& layer2 = volume_2.layers[layerNr]; - if (alternate_carve_order && layerNr % 2 == 0 && volume_1.mesh->settings.get("infill_mesh_order") == volume_2.mesh->settings.get("infill_mesh_order")) + if (alternate_carve_order && layerNr % 2 == 0 && volume_1.mesh->settings_.get("infill_mesh_order") == volume_2.mesh->settings_.get("infill_mesh_order")) { layer2.polygons = layer2.polygons.difference(layer1.polygons); } @@ -76,10 +76,10 @@ void generateMultipleVolumesOverlap(std::vector& volumes) int offset_to_merge_other_merged_volumes = 20; for (Slicer* volume : volumes) { - ClipperLib::PolyFillType fill_type = volume->mesh->settings.get("meshfix_union_all") ? ClipperLib::pftNonZero : ClipperLib::pftEvenOdd; + ClipperLib::PolyFillType fill_type = volume->mesh->settings_.get("meshfix_union_all") ? ClipperLib::pftNonZero : ClipperLib::pftEvenOdd; - coord_t overlap = volume->mesh->settings.get("multiple_mesh_overlap"); - if (volume->mesh->settings.get("infill_mesh") || volume->mesh->settings.get("anti_overhang_mesh") || volume->mesh->settings.get("support_mesh") + coord_t overlap = volume->mesh->settings_.get("multiple_mesh_overlap"); + if (volume->mesh->settings_.get("infill_mesh") || volume->mesh->settings_.get("anti_overhang_mesh") || volume->mesh->settings_.get("support_mesh") || overlap == 0) { continue; @@ -91,8 +91,8 @@ void generateMultipleVolumesOverlap(std::vector& volumes) Polygons all_other_volumes; for (Slicer* other_volume : volumes) { - if (other_volume->mesh->settings.get("infill_mesh") || other_volume->mesh->settings.get("anti_overhang_mesh") - || other_volume->mesh->settings.get("support_mesh") || ! other_volume->mesh->getAABB().hit(aabb) || other_volume == volume) + if (other_volume->mesh->settings_.get("infill_mesh") || other_volume->mesh->settings_.get("anti_overhang_mesh") + || other_volume->mesh->settings_.get("support_mesh") || ! other_volume->mesh->getAABB().hit(aabb) || other_volume == volume) { continue; } @@ -111,7 +111,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: for (unsigned int carving_mesh_idx = 0; carving_mesh_idx < volumes.size(); carving_mesh_idx++) { const Mesh& cutting_mesh = meshes[carving_mesh_idx]; - if (! cutting_mesh.settings.get("cutting_mesh")) + if (! cutting_mesh.settings_.get("cutting_mesh")) { continue; } @@ -122,14 +122,14 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: Polygons& cutting_mesh_polylines = cutting_mesh_volume.layers[layer_nr].openPolylines; Polygons cutting_mesh_area_recomputed; Polygons* cutting_mesh_area; - coord_t surface_line_width = cutting_mesh.settings.get("wall_line_width_0"); + coord_t surface_line_width = cutting_mesh.settings_.get("wall_line_width_0"); { // compute cutting_mesh_area - if (cutting_mesh.settings.get("magic_mesh_surface_mode") == ESurfaceMode::BOTH) + if (cutting_mesh.settings_.get("magic_mesh_surface_mode") == ESurfaceMode::BOTH) { cutting_mesh_area_recomputed = cutting_mesh_polygons.unionPolygons(cutting_mesh_polylines.offsetPolyLine(surface_line_width / 2)); cutting_mesh_area = &cutting_mesh_area_recomputed; } - else if (cutting_mesh.settings.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) + else if (cutting_mesh.settings_.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE) { // break up polygons into polylines // they have to be polylines, because they might break up further when doing the cutting @@ -154,7 +154,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: { const Mesh& carved_mesh = meshes[carved_mesh_idx]; // Do not apply cutting_mesh for meshes which have settings (cutting_mesh, anti_overhang_mesh, support_mesh). - if (carved_mesh.settings.get("cutting_mesh") || carved_mesh.settings.get("anti_overhang_mesh") || carved_mesh.settings.get("support_mesh")) + if (carved_mesh.settings_.get("cutting_mesh") || carved_mesh.settings_.get("anti_overhang_mesh") || carved_mesh.settings_.get("support_mesh")) { continue; } @@ -163,7 +163,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: Polygons intersection = cutting_mesh_polygons.intersection(carved_mesh_layer); new_outlines.add(intersection); - if (cutting_mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) // niet te geleuven + if (cutting_mesh.settings_.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) // niet te geleuven { new_polylines.add(carved_mesh_layer.intersectionPolyLines(cutting_mesh_polylines)); } @@ -171,7 +171,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: carved_mesh_layer = carved_mesh_layer.difference(*cutting_mesh_area); } cutting_mesh_polygons = new_outlines.unionPolygons(); - if (cutting_mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) + if (cutting_mesh.settings_.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { cutting_mesh_polylines.clear(); PolylineStitcher::stitch(new_polylines, cutting_mesh_polylines, cutting_mesh_polygons, surface_line_width); diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index e2ebe6e37b..25f1cca535 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -190,20 +190,20 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() for (const Mesh& mesh : Application::getInstance().current_slice->scene.current_mesh_group->meshes) { // Skip meshes that are not printable - if (mesh.settings.get("infill_mesh") || mesh.settings.get("cutting_mesh") || mesh.settings.get("anti_overhang_mesh")) + if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") || mesh.settings_.get("anti_overhang_mesh")) { continue; } - for (const MeshFace& face : mesh.faces) + for (const MeshFace& face : mesh.faces_) { - const MeshVertex& v0 = mesh.vertices[face.vertex_index[0]]; - const MeshVertex& v1 = mesh.vertices[face.vertex_index[1]]; - const MeshVertex& v2 = mesh.vertices[face.vertex_index[2]]; + const MeshVertex& v0 = mesh.vertices_[face.vertex_index_[0]]; + const MeshVertex& v1 = mesh.vertices_[face.vertex_index_[1]]; + const MeshVertex& v2 = mesh.vertices_[face.vertex_index_[2]]; - const FPoint3 p0 = v0.p; - const FPoint3 p1 = v1.p; - const FPoint3 p2 = v2.p; + const FPoint3 p0 = v0.p_; + const FPoint3 p1 = v1.p_; + const FPoint3 p2 = v2.p_; float min_z = p0.z; min_z = std::min(min_z, p1.z); diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index ff69b9d009..2d2741ad8a 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -91,8 +91,8 @@ void SliceLayer::getOutlines(Polygons& result, bool external_polys_only) const } SliceMeshStorage::SliceMeshStorage(Mesh* mesh, const size_t slice_layer_count) - : settings(mesh->settings) - , mesh_name(mesh->mesh_name) + : settings(mesh->settings_) + , mesh_name(mesh->mesh_name_) , layer_nr_max_filled_layer(0) , bounding_box(mesh->getAABB()) , base_subdiv_cube(nullptr) diff --git a/src/slicer.cpp b/src/slicer.cpp index 94dc2aeb64..832589deb1 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -108,7 +108,7 @@ int SlicerLayer::getNextSegmentIdx(const SlicerSegment& segment, const size_t st { // segment ended at vertex - const std::vector& faces_to_try = segment.endVertex->connected_faces; + const std::vector& faces_to_try = segment.endVertex->connected_faces_; for (int face_to_try : faces_to_try) { const int result_segment_idx = tryFaceNextSegmentIdx(segment, face_to_try, start_segment_idx); @@ -743,18 +743,18 @@ void SlicerLayer::makePolygons(const Mesh* mesh) // TODO: (?) for mesh surface mode: connect open polygons. Maybe the above algorithm can create two open polygons which are actually connected when the starting segment is in // the middle between the two open polygons. - if (mesh->settings.get("magic_mesh_surface_mode") == ESurfaceMode::NORMAL) + if (mesh->settings_.get("magic_mesh_surface_mode") == ESurfaceMode::NORMAL) { // don't stitch when using (any) mesh surface mode, i.e. also don't stitch when using mixed mesh surface and closed polygons, because then polylines which are supposed to be // open will be closed stitch(open_polylines); } - if (mesh->settings.get("meshfix_extensive_stitching")) + if (mesh->settings_.get("meshfix_extensive_stitching")) { stitch_extensive(open_polylines); } - if (mesh->settings.get("meshfix_keep_open_polygons")) + if (mesh->settings_.get("meshfix_keep_open_polygons")) { for (PolygonRef polyline : open_polylines) { @@ -772,7 +772,7 @@ void SlicerLayer::makePolygons(const Mesh* mesh) } // Remove all the tiny polygons, or polygons that are not closed. As they do not contribute to the actual print. - const coord_t snap_distance = std::max(mesh->settings.get("minimum_polygon_circumference"), static_cast(1)); + const coord_t snap_distance = std::max(mesh->settings_.get("minimum_polygon_circumference"), static_cast(1)); auto it = std::remove_if( polygons.begin(), polygons.end(), @@ -786,9 +786,9 @@ void SlicerLayer::makePolygons(const Mesh* mesh) // polygons = Simplify(mesh->settings).polygon(polygons); polygons = slots::instance().modify( polygons, - mesh->settings.get("meshfix_maximum_resolution"), - mesh->settings.get("meshfix_maximum_deviation"), - static_cast(mesh->settings.get("meshfix_maximum_extrusion_area_deviation"))); + mesh->settings_.get("meshfix_maximum_resolution"), + mesh->settings_.get("meshfix_maximum_deviation"), + static_cast(mesh->settings_.get("meshfix_maximum_extrusion_area_deviation"))); polygons.removeDegenerateVerts(); // remove verts connected to overlapping line segments // Clean up polylines for Surface Mode printing @@ -807,7 +807,7 @@ void SlicerLayer::makePolygons(const Mesh* mesh) Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_count, bool use_variable_layer_heights, std::vector* adaptive_layers) : mesh(i_mesh) { - const SlicingTolerance slicing_tolerance = mesh->settings.get("slicing_tolerance"); + const SlicingTolerance slicing_tolerance = mesh->settings_.get("slicing_tolerance"); const coord_t initial_layer_thickness = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height_0"); assert(slice_layer_count > 0); @@ -817,14 +817,14 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c layers = buildLayersWithHeight(slice_layer_count, slicing_tolerance, initial_layer_thickness, thickness, use_variable_layer_heights, adaptive_layers); scripta::setAll( layers, - static_cast(mesh->settings.get("adhesion_type")), - mesh->settings.get("raft_surface_layers"), - mesh->settings.get("raft_surface_thickness"), - mesh->settings.get("raft_interface_layers"), - mesh->settings.get("raft_interface_thickness"), - mesh->settings.get("raft_base_thickness"), - mesh->settings.get("raft_airgap"), - mesh->settings.get("layer_0_z_overlap")); + static_cast(mesh->settings_.get("adhesion_type")), + mesh->settings_.get("raft_surface_layers"), + mesh->settings_.get("raft_surface_thickness"), + mesh->settings_.get("raft_interface_layers"), + mesh->settings_.get("raft_interface_thickness"), + mesh->settings_.get("raft_base_thickness"), + mesh->settings_.get("raft_airgap"), + mesh->settings_.get("layer_0_z_overlap")); std::vector> zbbox = buildZHeightsForFaces(*mesh); @@ -848,7 +848,7 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector zbbox[mesh_idx].second)) { @@ -856,15 +856,15 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector 0 && layers[0].polygons.size() == 0 && ! mesh.settings.get("support_mesh") && ! mesh.settings.get("anti_overhang_mesh") - && ! mesh.settings.get("cutting_mesh") && ! mesh.settings.get("infill_mesh")) + if (layers.size() > 0 && layers[0].polygons.size() == 0 && ! mesh.settings_.get("support_mesh") && ! mesh.settings_.get("anti_overhang_mesh") + && ! mesh.settings_.get("cutting_mesh") && ! mesh.settings_.get("infill_mesh")) { layer_apply_initial_xy_offset = 1; } - const coord_t xy_offset = mesh.settings.get("xy_offset"); - const coord_t xy_offset_0 = mesh.settings.get("xy_offset_layer_0"); - const coord_t xy_offset_hole = mesh.settings.get("hole_xy_offset"); - const coord_t hole_offset_max_diameter = mesh.settings.get("hole_xy_offset_max_diameter"); + const coord_t xy_offset = mesh.settings_.get("xy_offset"); + const coord_t xy_offset_0 = mesh.settings_.get("xy_offset_layer_0"); + const coord_t xy_offset_hole = mesh.settings_.get("hole_xy_offset"); + const coord_t hole_offset_max_diameter = mesh.settings_.get("hole_xy_offset_max_diameter"); const auto max_hole_area = std::numbers::pi / 4 * static_cast(hole_offset_max_diameter * hole_offset_max_diameter); @@ -1113,18 +1113,18 @@ void Slicer::makePolygons(Mesh& mesh, SlicingTolerance slicing_tolerance, std::v std::vector> Slicer::buildZHeightsForFaces(const Mesh& mesh) { std::vector> zHeights; - zHeights.reserve(mesh.faces.size()); - for (const auto& face : mesh.faces) + zHeights.reserve(mesh.faces_.size()); + for (const auto& face : mesh.faces_) { // const MeshFace& face = mesh.faces[mesh_idx]; - const MeshVertex& v0 = mesh.vertices[face.vertex_index[0]]; - const MeshVertex& v1 = mesh.vertices[face.vertex_index[1]]; - const MeshVertex& v2 = mesh.vertices[face.vertex_index[2]]; + const MeshVertex& v0 = mesh.vertices_[face.vertex_index_[0]]; + const MeshVertex& v1 = mesh.vertices_[face.vertex_index_[1]]; + const MeshVertex& v2 = mesh.vertices_[face.vertex_index_[2]]; // get all vertices represented as 3D point - Point3 p0 = v0.p; - Point3 p1 = v1.p; - Point3 p2 = v2.p; + Point3 p0 = v0.p_; + Point3 p1 = v1.p_; + Point3 p2 = v2.p_; // find the minimum and maximum z point int32_t minZ = p0.z_; diff --git a/tests/arcus/ArcusCommunicationPrivateTest.cpp b/tests/arcus/ArcusCommunicationPrivateTest.cpp index b96dd840ff..1538269483 100644 --- a/tests/arcus/ArcusCommunicationPrivateTest.cpp +++ b/tests/arcus/ArcusCommunicationPrivateTest.cpp @@ -212,10 +212,10 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) auto& meshes = scene.mesh_groups[0].meshes; ASSERT_FALSE(meshes.empty()); - auto& vertices = meshes[0].vertices; + auto& vertices = meshes[0].vertices_; ASSERT_FALSE(vertices.empty()); ASSERT_EQ(vertices.size(), size_t(8)); // A cube should have 8 unique vertices. - ASSERT_EQ(meshes[0].faces.size(), size_t(12)); // A cube should have 12 tri-s (2 for each 6 sides of the dice). + ASSERT_EQ(meshes[0].faces_.size(), size_t(12)); // A cube should have 12 tri-s (2 for each 6 sides of the dice). // Distances should be the same: @@ -234,12 +234,12 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) std::array max_coords = { std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min() }; for (const auto& vertex : vertices) { - min_coords[0] = std::min(vertex.p.x, min_coords[0]); - min_coords[1] = std::min(vertex.p.y, min_coords[1]); - min_coords[2] = std::min(vertex.p.z, min_coords[2]); - max_coords[0] = std::max(vertex.p.x, max_coords[0]); - max_coords[1] = std::max(vertex.p.y, max_coords[1]); - max_coords[2] = std::max(vertex.p.z, max_coords[2]); + min_coords[0] = std::min(vertex.p_.x, min_coords[0]); + min_coords[1] = std::min(vertex.p_.y, min_coords[1]); + min_coords[2] = std::min(vertex.p_.z, min_coords[2]); + max_coords[0] = std::max(vertex.p_.x, max_coords[0]); + max_coords[1] = std::max(vertex.p_.y, max_coords[1]); + max_coords[2] = std::max(vertex.p_.z, max_coords[2]); } // - Then, just compare: From cdb108f0e76d5e9142f5f0ba48820881af6fcbf4 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 09:33:03 +0100 Subject: [PATCH 055/218] Fixed variable shadowing warnings --- include/ExtruderTrain.h | 4 +- include/utils/SparseLineGrid.h | 8 +- include/utils/SquareGrid.h | 2 +- include/utils/VoxelUtils.h | 16 +- src/ExtruderTrain.cpp | 6 +- src/FffGcodeWriter.cpp | 228 +++++++++--------- src/FffPolygonGenerator.cpp | 32 +-- src/InterlockingGenerator.cpp | 4 +- src/LayerPlan.cpp | 38 +-- src/LayerPlanBuffer.cpp | 20 +- src/Mold.cpp | 2 +- src/Preheat.cpp | 8 +- src/PrimeTower.cpp | 22 +- src/Scene.cpp | 2 +- src/SkirtBrim.cpp | 34 +-- src/Slice.cpp | 2 +- src/TopSurface.cpp | 2 +- src/WallsComputation.cpp | 35 +-- src/communication/ArcusCommunication.cpp | 4 +- .../ArcusCommunicationPrivate.cpp | 4 +- src/communication/CommandLine.cpp | 10 +- src/gcodeExport.cpp | 52 ++-- src/infill/LightningGenerator.cpp | 29 +-- src/pathPlanning/Comb.cpp | 30 +-- src/raft.cpp | 20 +- src/settings/MeshPathConfigs.cpp | 28 +-- src/settings/PathConfigStorage.cpp | 118 ++++----- src/settings/Settings.cpp | 24 +- src/skin.cpp | 2 +- src/sliceDataStorage.cpp | 76 +++--- src/support.cpp | 76 +++--- src/utils/SquareGrid.cpp | 8 +- src/utils/VoxelUtils.cpp | 14 +- tests/GCodeExportTest.cpp | 32 +-- tests/arcus/ArcusCommunicationPrivateTest.cpp | 6 +- 35 files changed, 502 insertions(+), 496 deletions(-) diff --git a/include/ExtruderTrain.h b/include/ExtruderTrain.h index 59679203cb..14ede169f4 100644 --- a/include/ExtruderTrain.h +++ b/include/ExtruderTrain.h @@ -21,7 +21,7 @@ class ExtruderTrain /* * \brief The settings that this extruder overwrites. */ - Settings settings; + Settings settings_; /* * \brief The position of this extruder. @@ -29,7 +29,7 @@ class ExtruderTrain * This may be used by g-code commands such as T to indicate to which * tool we must switch. */ - const size_t extruder_nr; + const size_t extruder_nr_; }; }//namespace cura diff --git a/include/utils/SparseLineGrid.h b/include/utils/SparseLineGrid.h index 20c0ca3626..385b129df5 100644 --- a/include/utils/SparseLineGrid.h +++ b/include/utils/SparseLineGrid.h @@ -104,13 +104,13 @@ void SGI_THIS::debugHTML(std::string filename) Point rb = SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), 0)); if (lb.X == 0) { - lb.X = -SparseGrid::cell_size; - lt.X = -SparseGrid::cell_size; + lb.X = -SparseGrid::cell_size_; + lt.X = -SparseGrid::cell_size_; } if (lb.Y == 0) { - lb.Y = -SparseGrid::cell_size; - rb.Y = -SparseGrid::cell_size; + lb.Y = -SparseGrid::cell_size_; + rb.Y = -SparseGrid::cell_size_; } // svg.writePoint(lb, true, 1); svg.writeLine(lb, lt, SVG::Color::GRAY); diff --git a/include/utils/SquareGrid.h b/include/utils/SquareGrid.h index 41a23fe5f7..0ed6e7305a 100644 --- a/include/utils/SquareGrid.h +++ b/include/utils/SquareGrid.h @@ -137,7 +137,7 @@ class SquareGrid protected: /*! \brief The cell (square) size. */ - coord_t cell_size; + coord_t cell_size_; /*! * Compute the sign of a number. diff --git a/include/utils/VoxelUtils.h b/include/utils/VoxelUtils.h index b080a4d5b6..30078b51b3 100644 --- a/include/utils/VoxelUtils.h +++ b/include/utils/VoxelUtils.h @@ -63,11 +63,13 @@ class VoxelUtils { public: using grid_coord_t = coord_t; + + Point3 cell_size_; + VoxelUtils(Point3 cell_size) - : cell_size(cell_size) + : cell_size_(cell_size) { } - Point3 cell_size; /*! * Process voxels which a line segment crosses. @@ -156,7 +158,7 @@ class VoxelUtils grid_coord_t toGridCoord(const coord_t& coord, const size_t dim) const { assert(dim < 3); - return coord / cell_size[dim] - (coord < 0); + return coord / cell_size_[dim] - (coord < 0); } Point3 toLowerCorner(const GridPoint3& location) const @@ -167,7 +169,7 @@ class VoxelUtils coord_t toLowerCoord(const grid_coord_t& grid_coord, const size_t dim) const { assert(dim < 3); - return grid_coord * cell_size[dim]; + return grid_coord * cell_size_[dim]; } /*! @@ -178,9 +180,9 @@ class VoxelUtils Polygon ret; Point3 c = toLowerCorner(p); ret.emplace_back(c.x_, c.y_); - ret.emplace_back(c.x_ + cell_size.x_, c.y_); - ret.emplace_back(c.x_ + cell_size.x_, c.y_ + cell_size.y_); - ret.emplace_back(c.x_, c.y_ + cell_size.y_); + ret.emplace_back(c.x_ + cell_size_.x_, c.y_); + ret.emplace_back(c.x_ + cell_size_.x_, c.y_ + cell_size_.y_); + ret.emplace_back(c.x_, c.y_ + cell_size_.y_); return ret; } }; diff --git a/src/ExtruderTrain.cpp b/src/ExtruderTrain.cpp index cb911cda02..a06131472c 100644 --- a/src/ExtruderTrain.cpp +++ b/src/ExtruderTrain.cpp @@ -6,9 +6,9 @@ namespace cura { -ExtruderTrain::ExtruderTrain(const size_t extruder_nr, Settings* parent_settings) : extruder_nr(extruder_nr) +ExtruderTrain::ExtruderTrain(const size_t extruder_nr, Settings* parent_settings) : extruder_nr_(extruder_nr) { - settings.setParent(parent_settings); + settings_.setParent(parent_settings); } -}//namespace cura \ No newline at end of file +}//namespace cura diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index aced5673aa..1376f48a23 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -302,14 +302,14 @@ void FffGcodeWriter::setConfigFanSpeedLayerTime() { fan_speed_layer_time_settings_per_extruder.emplace_back(); FanSpeedLayerTimeSettings& fan_speed_layer_time_settings = fan_speed_layer_time_settings_per_extruder.back(); - fan_speed_layer_time_settings.cool_min_layer_time = train.settings.get("cool_min_layer_time"); - fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max = train.settings.get("cool_min_layer_time_fan_speed_max"); - fan_speed_layer_time_settings.cool_fan_speed_0 = train.settings.get("cool_fan_speed_0") * 100.0; - fan_speed_layer_time_settings.cool_fan_speed_min = train.settings.get("cool_fan_speed_min") * 100.0; - fan_speed_layer_time_settings.cool_fan_speed_max = train.settings.get("cool_fan_speed_max") * 100.0; - fan_speed_layer_time_settings.cool_min_speed = train.settings.get("cool_min_speed"); - fan_speed_layer_time_settings.cool_fan_full_layer = train.settings.get("cool_fan_full_layer"); - if (! train.settings.get("cool_fan_enabled")) + fan_speed_layer_time_settings.cool_min_layer_time = train.settings_.get("cool_min_layer_time"); + fan_speed_layer_time_settings.cool_min_layer_time_fan_speed_max = train.settings_.get("cool_min_layer_time_fan_speed_max"); + fan_speed_layer_time_settings.cool_fan_speed_0 = train.settings_.get("cool_fan_speed_0") * 100.0; + fan_speed_layer_time_settings.cool_fan_speed_min = train.settings_.get("cool_fan_speed_min") * 100.0; + fan_speed_layer_time_settings.cool_fan_speed_max = train.settings_.get("cool_fan_speed_max") * 100.0; + fan_speed_layer_time_settings.cool_min_speed = train.settings_.get("cool_min_speed"); + fan_speed_layer_time_settings.cool_fan_full_layer = train.settings_.get("cool_fan_full_layer"); + if (! train.settings_.get("cool_fan_enabled")) { fan_speed_layer_time_settings.cool_fan_speed_0 = 0; fan_speed_layer_time_settings.cool_fan_speed_min = 0; @@ -374,7 +374,7 @@ void FffGcodeWriter::setConfigRetractionAndWipe(SliceDataStorage& storage) for (size_t extruder_index = 0; extruder_index < scene.extruders.size(); extruder_index++) { ExtruderTrain& train = scene.extruders[extruder_index]; - retractionAndWipeConfigFromSettings(train.settings, &storage.retraction_wipe_config_per_extruder[extruder_index]); + retractionAndWipeConfigFromSettings(train.settings_, &storage.retraction_wipe_config_per_extruder[extruder_index]); } for (std::shared_ptr& mesh : storage.meshes) { @@ -391,26 +391,26 @@ size_t FffGcodeWriter::getStartExtruder(const SliceDataStorage& storage) size_t start_extruder_nr; if (adhesion_type == EPlatformAdhesion::SKIRT && skirt_brim_extruder - && (skirt_brim_extruder->settings.get("skirt_line_count") > 0 || skirt_brim_extruder->settings.get("skirt_brim_minimal_length") > 0)) + && (skirt_brim_extruder->settings_.get("skirt_line_count") > 0 || skirt_brim_extruder->settings_.get("skirt_brim_minimal_length") > 0)) { - start_extruder_nr = skirt_brim_extruder->extruder_nr; + start_extruder_nr = skirt_brim_extruder->extruder_nr_; } else if ( (adhesion_type == EPlatformAdhesion::BRIM || mesh_group_settings.get("prime_tower_brim_enable")) && skirt_brim_extruder - && (skirt_brim_extruder->settings.get("brim_line_count") > 0 || skirt_brim_extruder->settings.get("skirt_brim_minimal_length") > 0)) + && (skirt_brim_extruder->settings_.get("brim_line_count") > 0 || skirt_brim_extruder->settings_.get("skirt_brim_minimal_length") > 0)) { - start_extruder_nr = skirt_brim_extruder->extruder_nr; + start_extruder_nr = skirt_brim_extruder->extruder_nr_; } else if (adhesion_type == EPlatformAdhesion::RAFT && skirt_brim_extruder) { - start_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr; + start_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; } else // No adhesion. { if (mesh_group_settings.get("support_enable") && mesh_group_settings.get("support_brim_enable")) { - start_extruder_nr = mesh_group_settings.get("support_infill_extruder_nr").extruder_nr; + start_extruder_nr = mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; } else { @@ -481,14 +481,14 @@ void FffGcodeWriter::setSupportAngles(SliceDataStorage& storage) { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const ExtruderTrain& support_infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); - storage.support.support_infill_angles = support_infill_extruder.settings.get>("support_infill_angles"); + storage.support.support_infill_angles = support_infill_extruder.settings_.get>("support_infill_angles"); if (storage.support.support_infill_angles.empty()) { storage.support.support_infill_angles.push_back(0); } const ExtruderTrain& support_extruder_nr_layer_0 = mesh_group_settings.get("support_extruder_nr_layer_0"); - storage.support.support_infill_angles_layer_0 = support_extruder_nr_layer_0.settings.get>("support_infill_angles"); + storage.support.support_infill_angles_layer_0 = support_extruder_nr_layer_0.settings_.get>("support_infill_angles"); if (storage.support.support_infill_angles_layer_0.empty()) { storage.support.support_infill_angles_layer_0.push_back(0); @@ -497,7 +497,7 @@ void FffGcodeWriter::setSupportAngles(SliceDataStorage& storage) auto getInterfaceAngles = [&storage](const ExtruderTrain& extruder, const std::string& interface_angles_setting, const EFillMethod pattern, const std::string& interface_height_setting) { - std::vector angles = extruder.settings.get>(interface_angles_setting); + std::vector angles = extruder.settings_.get>(interface_angles_setting); if (angles.empty()) { if (pattern == EFillMethod::CONCENTRIC) @@ -532,11 +532,11 @@ void FffGcodeWriter::setSupportAngles(SliceDataStorage& storage) const ExtruderTrain& roof_extruder = mesh_group_settings.get("support_roof_extruder_nr"); storage.support.support_roof_angles - = getInterfaceAngles(roof_extruder, "support_roof_angles", roof_extruder.settings.get("support_roof_pattern"), "support_roof_height"); + = getInterfaceAngles(roof_extruder, "support_roof_angles", roof_extruder.settings_.get("support_roof_pattern"), "support_roof_height"); const ExtruderTrain& bottom_extruder = mesh_group_settings.get("support_bottom_extruder_nr"); storage.support.support_bottom_angles - = getInterfaceAngles(bottom_extruder, "support_bottom_angles", bottom_extruder.settings.get("support_bottom_pattern"), "support_bottom_height"); + = getInterfaceAngles(bottom_extruder, "support_bottom_angles", bottom_extruder.settings_.get("support_bottom_pattern"), "support_bottom_height"); } void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) @@ -545,9 +545,9 @@ void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) gcode.setZ(max_object_height + MM2INT(5)); Application::getInstance().communication->sendCurrentPosition(gcode.getPositionXY()); - gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings.get("speed_travel")); + gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); Point start_pos(storage.model_min.x_, storage.model_min.y_); - gcode.writeTravel(start_pos, Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings.get("speed_travel")); + gcode.writeTravel(start_pos, Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); gcode.processInitialLayerTemperature(storage, gcode.getExtruderNr()); } @@ -555,16 +555,16 @@ void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) void FffGcodeWriter::processRaft(const SliceDataStorage& storage) { Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr; - const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr; - const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr; + const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; + const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; + const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; const size_t prime_tower_extruder_nr = storage.primeTower.extruder_order.front(); coord_t z = 0; const LayerIndex initial_raft_layer_nr = -Raft::getTotalExtraLayers(); - const Settings& interface_settings = mesh_group_settings.get("raft_interface_extruder_nr").settings; + const Settings& interface_settings = mesh_group_settings.get("raft_interface_extruder_nr").settings_; const size_t num_interface_layers = interface_settings.get("raft_interface_layers"); - const Settings& surface_settings = mesh_group_settings.get("raft_surface_extruder_nr").settings; + const Settings& surface_settings = mesh_group_settings.get("raft_surface_extruder_nr").settings_; const size_t num_surface_layers = surface_settings.get("raft_surface_layers"); // some infill config for all lines infill generation below @@ -579,7 +579,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) unsigned int current_extruder_nr = base_extruder_nr; { // raft base layer - const Settings& base_settings = mesh_group_settings.get("raft_base_extruder_nr").settings; + const Settings& base_settings = mesh_group_settings.get("raft_base_extruder_nr").settings_; LayerIndex layer_nr = initial_raft_layer_nr; const coord_t layer_height = base_settings.get("raft_base_thickness"); z += layer_height; @@ -998,9 +998,9 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS { const ExtruderTrain& extruder = scene.extruders[extruder_nr]; - if (extruder.settings.get("travel_avoid_other_parts")) + if (extruder.settings_.get("travel_avoid_other_parts")) { - avoid_distance = std::max(avoid_distance, extruder.settings.get("travel_avoid_distance")); + avoid_distance = std::max(avoid_distance, extruder.settings_.get("travel_avoid_distance")); } } } @@ -1013,7 +1013,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS if (layer_nr == 0) { const ExtruderTrain& train = mesh.settings.get((mesh.settings.get("wall_line_count") > 1) ? "wall_0_extruder_nr" : "wall_x_extruder_nr"); - mesh_inner_wall_width *= train.settings.get("initial_layer_line_width_factor"); + mesh_inner_wall_width *= train.settings_.get("initial_layer_line_width_factor"); } max_inner_wall_width = std::max(max_inner_wall_width, mesh_inner_wall_width); } @@ -1024,7 +1024,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS const std::vector& extruder_order = (layer_nr < 0) ? extruder_order_per_layer_negative_layers[extruder_order_per_layer_negative_layers.size() + layer_nr] : extruder_order_per_layer[layer_nr]; - const coord_t first_outer_wall_line_width = scene.extruders[extruder_order.front()].settings.get("wall_line_width_0"); + const coord_t first_outer_wall_line_width = scene.extruders[extruder_order.front()].settings_.get("wall_line_width_0"); LayerPlan& gcode_layer = *new LayerPlan( storage, layer_nr, @@ -1055,10 +1055,10 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS time_keeper.registerTime("Draft shield"); } - const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr; - const size_t support_bottom_extruder_nr = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr; - const size_t support_infill_extruder_nr = (layer_nr <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr - : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr; + const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_; + const size_t support_bottom_extruder_nr = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_; + const size_t support_infill_extruder_nr = (layer_nr <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ + : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; for (const size_t& extruder_nr : extruder_order) { @@ -1089,7 +1089,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS const MeshPathConfigs& mesh_config = gcode_layer.configs_storage.mesh_configs[mesh_idx]; if (mesh->settings.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE && extruder_nr - == mesh->settings.get("wall_0_extruder_nr").extruder_nr // mesh surface mode should always only be printed with the outer wall extruder! + == mesh->settings.get("wall_0_extruder_nr").extruder_nr_ // mesh surface mode should always only be printed with the outer wall extruder! ) { addMeshLayerToGCode_meshSurfaceMode(storage, *mesh, mesh_config, gcode_layer); @@ -1139,8 +1139,8 @@ bool FffGcodeWriter::getExtruderNeedPrimeBlobDuringFirstLayer(const SliceDataSto void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan& gcode_layer, unsigned int extruder_nr, LayerIndex layer_nr) const { const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - const int skirt_height = train.settings.get("skirt_height"); - const bool is_skirt = train.settings.get("adhesion_type") == EPlatformAdhesion::SKIRT; + const int skirt_height = train.settings_.get("skirt_height"); + const bool is_skirt = train.settings_.get("adhesion_type") == EPlatformAdhesion::SKIRT; // only create a multilayer SkirtBrim for a skirt for the height of skirt_height if (layer_nr != 0 && (layer_nr >= skirt_height || ! is_skirt)) { @@ -1160,10 +1160,10 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan // Start brim close to the prime location Point start_close_to; - if (train.settings.get("prime_blob_enable")) + if (train.settings_.get("prime_blob_enable")) { - const auto prime_pos_is_abs = train.settings.get("extruder_prime_pos_abs"); - const auto prime_pos = Point(train.settings.get("extruder_prime_pos_x"), train.settings.get("extruder_prime_pos_y")); + const auto prime_pos_is_abs = train.settings_.get("extruder_prime_pos_abs"); + const auto prime_pos = Point(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); start_close_to = prime_pos_is_abs ? prime_pos : gcode_layer.getLastPlannedPositionOrStartingPosition() + prime_pos; } else @@ -1189,7 +1189,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan all_brim_lines.reserve(total_line_count); - const coord_t line_w = train.settings.get("skirt_brim_line_width") * train.settings.get("initial_layer_line_width_factor"); + const coord_t line_w = train.settings_.get("skirt_brim_line_width") * train.settings_.get("initial_layer_line_width_factor"); const coord_t searching_radius = line_w * 2; using GridT = SparsePointGridInclusive; GridT grid(searching_radius); @@ -1222,7 +1222,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan } } - const auto smart_brim_ordering = train.settings.get("brim_smart_ordering") && train.settings.get("adhesion_type") == EPlatformAdhesion::BRIM; + const auto smart_brim_ordering = train.settings_.get("brim_smart_ordering") && train.settings_.get("adhesion_type") == EPlatformAdhesion::BRIM; std::unordered_multimap order_requirements; for (const std::pair>& p : grid) { @@ -1301,7 +1301,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan // Support brim is only added in layer 0 // For support brim we don't care about the order, because support doesn't need to be accurate. const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - if ((layer_nr == 0) && (extruder_nr == mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr)) + if ((layer_nr == 0) && (extruder_nr == mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_)) { total_line_count += storage.support_brim.size(); Polygons support_brim_lines = storage.support_brim; @@ -1462,7 +1462,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s } } const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - const Point layer_start_position(train.settings.get("layer_start_x"), train.settings.get("layer_start_y")); + const Point layer_start_position(train.settings_.get("layer_start_x"), train.settings_.get("layer_start_y")); std::list mesh_indices_order = mesh_idx_order_optimizer.optimize(layer_start_position); std::vector ret; @@ -1566,11 +1566,11 @@ void FffGcodeWriter::addMeshLayerToGCode( } const std::string extruder_identifier = (mesh.settings.get("roofing_layer_count") > 0) ? "roofing_extruder_nr" : "top_bottom_extruder_nr"; - if (extruder_nr == mesh.settings.get(extruder_identifier).extruder_nr) + if (extruder_nr == mesh.settings.get(extruder_identifier).extruder_nr_) { processIroning(storage, mesh, layer, mesh_config.ironing_config, gcode_layer); } - if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr) + if (mesh.settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr_) { addMeshOpenPolyLinesToGCode(mesh, mesh_config, gcode_layer); } @@ -1626,7 +1626,7 @@ bool FffGcodeWriter::processInfill( const MeshPathConfigs& mesh_config, const SliceLayerPart& part) const { - if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr) + if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr_) { return false; } @@ -1643,7 +1643,7 @@ bool FffGcodeWriter::processMultiLayerInfill( const MeshPathConfigs& mesh_config, const SliceLayerPart& part) const { - if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr) + if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr_) { return false; } @@ -1780,7 +1780,7 @@ bool FffGcodeWriter::processSingleLayerInfill( const MeshPathConfigs& mesh_config, const SliceLayerPart& part) const { - if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr) + if (extruder_nr != mesh.settings.get("infill_extruder_nr").extruder_nr_) { return false; } @@ -2283,7 +2283,7 @@ bool FffGcodeWriter::processInsets( const SliceLayerPart& part) const { bool added_something = false; - if (extruder_nr != mesh.settings.get("wall_0_extruder_nr").extruder_nr && extruder_nr != mesh.settings.get("wall_x_extruder_nr").extruder_nr) + if (extruder_nr != mesh.settings.get("wall_0_extruder_nr").extruder_nr_ && extruder_nr != mesh.settings.get("wall_x_extruder_nr").extruder_nr_) { return added_something; } @@ -2309,7 +2309,7 @@ bool FffGcodeWriter::processInsets( spiralize = true; } if (spiralize && gcode_layer.getLayerNr() == static_cast(initial_bottom_layers) - && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr) + && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr_) { // on the last normal layer first make the outer wall normally and then start a second outer wall from the same hight, but gradually moving upward added_something = true; gcode_layer.setIsInside(true); // going to print stuff inside print object @@ -2438,7 +2438,7 @@ bool FffGcodeWriter::processInsets( gcode_layer.setOverhangMask(Polygons()); } - if (spiralize && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr && ! part.spiral_wall.empty()) + if (spiralize && extruder_nr == mesh.settings.get("wall_0_extruder_nr").extruder_nr_ && ! part.spiral_wall.empty()) { added_something = true; gcode_layer.setIsInside(true); // going to print stuff inside print object @@ -2573,8 +2573,8 @@ bool FffGcodeWriter::processInsets( mesh.settings.get("travel_retract_before_outer_wall"), mesh.settings.get("wall_0_wipe_dist"), wall_x_wipe_dist, - mesh.settings.get("wall_0_extruder_nr").extruder_nr, - mesh.settings.get("wall_x_extruder_nr").extruder_nr, + mesh.settings.get("wall_0_extruder_nr").extruder_nr_, + mesh.settings.get("wall_x_extruder_nr").extruder_nr_, z_seam_config, part.wall_toolpaths); added_something |= wall_orderer.addToLayer(); @@ -2623,9 +2623,9 @@ bool FffGcodeWriter::processSkin( const MeshPathConfigs& mesh_config, const SliceLayerPart& part) const { - const size_t top_bottom_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr; - const size_t roofing_extruder_nr = mesh.settings.get("roofing_extruder_nr").extruder_nr; - const size_t wall_0_extruder_nr = mesh.settings.get("wall_0_extruder_nr").extruder_nr; + const size_t top_bottom_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr_; + const size_t roofing_extruder_nr = mesh.settings.get("roofing_extruder_nr").extruder_nr_; + const size_t wall_0_extruder_nr = mesh.settings.get("wall_0_extruder_nr").extruder_nr_; const size_t roofing_layer_count = std::min(mesh.settings.get("roofing_layer_count"), mesh.settings.get("top_layers")); if (extruder_nr != top_bottom_extruder_nr && extruder_nr != wall_0_extruder_nr && (extruder_nr != roofing_extruder_nr || roofing_layer_count <= 0)) { @@ -2678,7 +2678,7 @@ void FffGcodeWriter::processRoofing( const SkinPart& skin_part, bool& added_something) const { - const size_t roofing_extruder_nr = mesh.settings.get("roofing_extruder_nr").extruder_nr; + const size_t roofing_extruder_nr = mesh.settings.get("roofing_extruder_nr").extruder_nr_; if (extruder_nr != roofing_extruder_nr) { return; @@ -2723,7 +2723,7 @@ void FffGcodeWriter::processTopBottom( { return; // bridgeAngle requires a non-empty skin_fill. } - const size_t top_bottom_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr; + const size_t top_bottom_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr_; if (extruder_nr != top_bottom_extruder_nr) { return; @@ -2976,7 +2976,7 @@ void FffGcodeWriter::processSkinPrintFeature( if (! skin_paths.empty()) { // Add skin-walls a.k.a. skin-perimeters, skin-insets. - const size_t skin_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr; + const size_t skin_extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr_; if (extruder_nr == skin_extruder_nr) { constexpr bool retract_before_outer_wall = false; @@ -3111,10 +3111,10 @@ bool FffGcodeWriter::addSupportToGCode(const SliceDataStorage& storage, LayerPla } const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr; - const size_t support_bottom_extruder_nr = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr; - size_t support_infill_extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr - : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr; + const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_; + const size_t support_bottom_extruder_nr = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_; + size_t support_infill_extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ + : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; const SupportLayer& support_layer = storage.support.supportLayers[std::max(LayerIndex{ 0 }, gcode_layer.getLayerNr())]; if (support_layer.support_bottom.empty() && support_layer.support_roof.empty() && support_layer.support_infill_parts.empty()) @@ -3158,19 +3158,19 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer } const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const size_t extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr - : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr; + const size_t extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ + : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; const ExtruderTrain& infill_extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - coord_t default_support_line_distance = infill_extruder.settings.get("support_line_distance"); + coord_t default_support_line_distance = infill_extruder.settings_.get("support_line_distance"); // To improve adhesion for the "support initial layer" the first layer might have different properties if (gcode_layer.getLayerNr() == 0) { - default_support_line_distance = infill_extruder.settings.get("support_initial_layer_line_distance"); + default_support_line_distance = infill_extruder.settings_.get("support_initial_layer_line_distance"); } - const coord_t default_support_infill_overlap = infill_extruder.settings.get("infill_overlap_mm"); + const coord_t default_support_infill_overlap = infill_extruder.settings_.get("infill_overlap_mm"); // Helper to get the support infill angle const auto get_support_infill_angle = [](const SupportStorage& support_storage, const int layer_nr) @@ -3187,13 +3187,13 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer const AngleDegrees support_infill_angle = get_support_infill_angle(storage.support, gcode_layer.getLayerNr()); constexpr size_t infill_multiplier = 1; // there is no frontend setting for this (yet) - const size_t wall_line_count = infill_extruder.settings.get("support_wall_count"); - const coord_t max_resolution = infill_extruder.settings.get("meshfix_maximum_resolution"); - const coord_t max_deviation = infill_extruder.settings.get("meshfix_maximum_deviation"); - coord_t default_support_line_width = infill_extruder.settings.get("support_line_width"); + const size_t wall_line_count = infill_extruder.settings_.get("support_wall_count"); + const coord_t max_resolution = infill_extruder.settings_.get("meshfix_maximum_resolution"); + const coord_t max_deviation = infill_extruder.settings_.get("meshfix_maximum_deviation"); + coord_t default_support_line_width = infill_extruder.settings_.get("support_line_width"); if (gcode_layer.getLayerNr() == 0 && mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) { - default_support_line_width *= infill_extruder.settings.get("initial_layer_line_width_factor"); + default_support_line_width *= infill_extruder.settings_.get("initial_layer_line_width_factor"); } // Helper to get the support pattern @@ -3205,11 +3205,11 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer } return pattern; }; - const EFillMethod support_pattern = get_support_pattern(infill_extruder.settings.get("support_pattern"), gcode_layer.getLayerNr()); + const EFillMethod support_pattern = get_support_pattern(infill_extruder.settings_.get("support_pattern"), gcode_layer.getLayerNr()); - const auto zig_zaggify_infill = infill_extruder.settings.get("zig_zaggify_support"); - const auto skip_some_zags = infill_extruder.settings.get("support_skip_some_zags"); - const auto zag_skip_count = infill_extruder.settings.get("support_zag_skip_count"); + const auto zig_zaggify_infill = infill_extruder.settings_.get("zig_zaggify_support"); + const auto skip_some_zags = infill_extruder.settings_.get("support_skip_some_zags"); + const auto zag_skip_count = infill_extruder.settings_.get("support_zag_skip_count"); // create a list of outlines and use PathOrderOptimizer to optimize the travel move PathOrderOptimizer island_order_optimizer_initial(gcode_layer.getLastPlannedPositionOrStartingPosition()); @@ -3221,8 +3221,8 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer island_order_optimizer_initial.optimize(); island_order_optimizer.optimize(); - const auto support_connect_zigzags = infill_extruder.settings.get("support_connect_zigzags"); - const auto support_structure = infill_extruder.settings.get("support_structure"); + const auto support_connect_zigzags = infill_extruder.settings_.get("support_connect_zigzags"); + const auto support_structure = infill_extruder.settings_.get("support_structure"); const Point infill_origin; constexpr bool use_endpieces = true; @@ -3252,7 +3252,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer *this, storage, gcode_layer, - infill_extruder.settings, + infill_extruder.settings_, extruder_nr, config, config, @@ -3298,7 +3298,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer { support_line_distance_here /= 2; } - const Polygons& area = Simplify(infill_extruder.settings).polygon(part.infill_area_per_combine_per_density[density_idx][combine_idx]); + const Polygons& area = Simplify(infill_extruder.settings_).polygon(part.infill_area_per_combine_per_density[density_idx][combine_idx]); constexpr size_t wall_count = 0; // Walls are generated somewhere else, so their layers aren't vertically combined. const coord_t small_area_width = 0; @@ -3332,18 +3332,18 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer wall_toolpaths_here, support_polygons, support_lines, - infill_extruder.settings, + infill_extruder.settings_, gcode_layer.getLayerNr(), SectionType::SUPPORT, storage.support.cross_fill_provider); } - if (need_travel_to_end_of_last_spiral && infill_extruder.settings.get("magic_spiralize")) + if (need_travel_to_end_of_last_spiral && infill_extruder.settings_.get("magic_spiralize")) { if ((! wall_toolpaths.empty() || ! support_polygons.empty() || ! support_lines.empty())) { int layer_nr = gcode_layer.getLayerNr(); - if (layer_nr > (int)infill_extruder.settings.get("initial_bottom_layers")) + if (layer_nr > (int)infill_extruder.settings_.get("initial_bottom_layers")) { // bit of subtlety here... support is being used on a spiralized model and to ensure the travel move from the end of the last spiral // to the start of the support does not go through the model we have to tell the slicer what the current location of the nozzle is @@ -3361,7 +3361,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer gcode_layer.setIsInside(false); // going to print stuff outside print object, i.e. support - const bool alternate_inset_direction = infill_extruder.settings.get("material_alternate_walls"); + const bool alternate_inset_direction = infill_extruder.settings_.get("material_alternate_walls"); const bool alternate_layer_print_direction = alternate_inset_direction && gcode_layer.getLayerNr() % 2 == 1; if (! support_polygons.empty()) @@ -3428,7 +3428,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer *this, storage, gcode_layer, - infill_extruder.settings, + infill_extruder.settings_, extruder_nr, config, config, @@ -3463,10 +3463,10 @@ bool FffGcodeWriter::addSupportRoofsToGCode( return false; // No need to generate support roof if there's no support. } - const size_t roof_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr; + const size_t roof_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_; const ExtruderTrain& roof_extruder = Application::getInstance().current_slice->scene.extruders[roof_extruder_nr]; - const EFillMethod pattern = roof_extruder.settings.get("support_roof_pattern"); + const EFillMethod pattern = roof_extruder.settings_.get("support_roof_pattern"); AngleDegrees fill_angle = 0; if (! storage.support.support_roof_angles.empty()) { @@ -3480,8 +3480,8 @@ bool FffGcodeWriter::addSupportRoofsToGCode( constexpr coord_t support_roof_overlap = 0; // the roofs should never be expanded outwards constexpr size_t infill_multiplier = 1; constexpr coord_t extra_infill_shift = 0; - const auto wall_line_count = roof_extruder.settings.get("support_roof_wall_count"); - const coord_t small_area_width = roof_extruder.settings.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. + const auto wall_line_count = roof_extruder.settings_.get("support_roof_wall_count"); + const coord_t small_area_width = roof_extruder.settings_.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. const Point infill_origin; constexpr bool skip_stitching = false; constexpr bool fill_gaps = true; @@ -3490,14 +3490,14 @@ bool FffGcodeWriter::addSupportRoofsToGCode( constexpr bool skip_some_zags = false; constexpr size_t zag_skip_count = 0; constexpr coord_t pocket_size = 0; - const coord_t max_resolution = roof_extruder.settings.get("meshfix_maximum_resolution"); - const coord_t max_deviation = roof_extruder.settings.get("meshfix_maximum_deviation"); + const coord_t max_resolution = roof_extruder.settings_.get("meshfix_maximum_resolution"); + const coord_t max_deviation = roof_extruder.settings_.get("meshfix_maximum_deviation"); - coord_t support_roof_line_distance = roof_extruder.settings.get("support_roof_line_distance"); - const coord_t support_roof_line_width = roof_extruder.settings.get("support_roof_line_width"); + coord_t support_roof_line_distance = roof_extruder.settings_.get("support_roof_line_distance"); + const coord_t support_roof_line_width = roof_extruder.settings_.get("support_roof_line_width"); if (gcode_layer.getLayerNr() == 0 && support_roof_line_distance < 2 * support_roof_line_width) { // if roof is dense - support_roof_line_distance *= roof_extruder.settings.get("initial_layer_line_width_factor"); + support_roof_line_distance *= roof_extruder.settings_.get("initial_layer_line_width_factor"); } Polygons infill_outline = support_roof_outlines; @@ -3508,7 +3508,7 @@ bool FffGcodeWriter::addSupportRoofsToGCode( wall = support_layer.support_roof.offset(-support_roof_line_width / 2); infill_outline = wall.offset(-support_roof_line_width / 2); } - infill_outline = Simplify(roof_extruder.settings).polygon(infill_outline); + infill_outline = Simplify(roof_extruder.settings_).polygon(infill_outline); Infill roof_computation( pattern, @@ -3537,7 +3537,7 @@ bool FffGcodeWriter::addSupportRoofsToGCode( Polygons roof_polygons; std::vector roof_paths; Polygons roof_lines; - roof_computation.generate(roof_paths, roof_polygons, roof_lines, roof_extruder.settings, gcode_layer.getLayerNr(), SectionType::SUPPORT); + roof_computation.generate(roof_paths, roof_polygons, roof_lines, roof_extruder.settings_, gcode_layer.getLayerNr(), SectionType::SUPPORT); if ((gcode_layer.getLayerNr() == 0 && wall.empty()) || (gcode_layer.getLayerNr() > 0 && roof_paths.empty() && roof_polygons.empty() && roof_lines.empty())) { return false; // We didn't create any support roof. @@ -3564,7 +3564,7 @@ bool FffGcodeWriter::addSupportRoofsToGCode( *this, storage, gcode_layer, - roof_extruder.settings, + roof_extruder.settings_, roof_extruder_nr, config, config, @@ -3592,10 +3592,10 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L return false; // No need to generate support bottoms if there's no support. } - const size_t bottom_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr; + const size_t bottom_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_; const ExtruderTrain& bottom_extruder = Application::getInstance().current_slice->scene.extruders[bottom_extruder_nr]; - const EFillMethod pattern = bottom_extruder.settings.get("support_bottom_pattern"); + const EFillMethod pattern = bottom_extruder.settings_.get("support_bottom_pattern"); AngleDegrees fill_angle = 0; if (! storage.support.support_bottom_angles.empty()) { @@ -3609,8 +3609,8 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L constexpr coord_t support_bottom_overlap = 0; // the bottoms should never be expanded outwards constexpr size_t infill_multiplier = 1; constexpr coord_t extra_infill_shift = 0; - const auto wall_line_count = bottom_extruder.settings.get("support_bottom_wall_count"); - const coord_t small_area_width = bottom_extruder.settings.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. + const auto wall_line_count = bottom_extruder.settings_.get("support_bottom_wall_count"); + const coord_t small_area_width = bottom_extruder.settings_.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. const Point infill_origin; constexpr bool skip_stitching = false; @@ -3620,10 +3620,10 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L constexpr bool skip_some_zags = false; constexpr int zag_skip_count = 0; constexpr coord_t pocket_size = 0; - const coord_t max_resolution = bottom_extruder.settings.get("meshfix_maximum_resolution"); - const coord_t max_deviation = bottom_extruder.settings.get("meshfix_maximum_deviation"); + const coord_t max_resolution = bottom_extruder.settings_.get("meshfix_maximum_resolution"); + const coord_t max_deviation = bottom_extruder.settings_.get("meshfix_maximum_deviation"); - const coord_t support_bottom_line_distance = bottom_extruder.settings.get( + const coord_t support_bottom_line_distance = bottom_extruder.settings_.get( "support_bottom_line_distance"); // note: no need to apply initial line width factor; support bottoms cannot exist on the first layer Infill bottom_computation( pattern, @@ -3652,7 +3652,7 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L Polygons bottom_polygons; std::vector bottom_paths; Polygons bottom_lines; - bottom_computation.generate(bottom_paths, bottom_polygons, bottom_lines, bottom_extruder.settings, gcode_layer.getLayerNr(), SectionType::SUPPORT); + bottom_computation.generate(bottom_paths, bottom_polygons, bottom_lines, bottom_extruder.settings_, gcode_layer.getLayerNr(), SectionType::SUPPORT); if (bottom_paths.empty() && bottom_polygons.empty() && bottom_lines.empty()) { return false; @@ -3675,7 +3675,7 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L *this, storage, gcode_layer, - bottom_extruder.settings, + bottom_extruder.settings_, bottom_extruder_nr, config, config, @@ -3710,10 +3710,10 @@ void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, Layer // We always prime an extruder, but whether it will be a prime blob/poop depends on if prime blob is enabled. // This is decided in GCodeExport::writePrimeTrain(). - if (train.settings.get("prime_blob_enable")) // Don't travel to the prime-blob position if not enabled though. + if (train.settings_.get("prime_blob_enable")) // Don't travel to the prime-blob position if not enabled though. { - bool prime_pos_is_abs = train.settings.get("extruder_prime_pos_abs"); - Point prime_pos = Point(train.settings.get("extruder_prime_pos_x"), train.settings.get("extruder_prime_pos_y")); + bool prime_pos_is_abs = train.settings_.get("extruder_prime_pos_abs"); + Point prime_pos = Point(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); gcode_layer.addTravel(prime_pos_is_abs ? prime_pos : gcode_layer.getLastPlannedPositionOrStartingPosition() + prime_pos); gcode_layer.planPrime(); } @@ -3764,7 +3764,7 @@ void FffGcodeWriter::finalize() for (size_t extruder_nr = 0; extruder_nr < scene.extruders.size(); extruder_nr++) { filament_used.emplace_back(gcode.getTotalFilamentUsed(extruder_nr)); - material_ids.emplace_back(scene.extruders[extruder_nr].settings.get("material_guid")); + material_ids.emplace_back(scene.extruders[extruder_nr].settings_.get("material_guid")); extruder_is_used.push_back(gcode.getExtruderIsUsed(extruder_nr)); } std::string prefix = gcode.getFileHeader(extruder_is_used, &print_time, filament_used, material_ids); diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 4e59f05ab8..c4a7259538 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -325,12 +325,12 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe if (has_raft) { const ExtruderTrain& train = mesh_group_settings.get("raft_surface_extruder_nr"); - layer.printZ += Raft::getTotalThickness() + train.settings.get("raft_airgap") - - train.settings.get("layer_0_z_overlap"); // shift all layers (except 0) down + layer.printZ += Raft::getTotalThickness() + train.settings_.get("raft_airgap") + - train.settings_.get("layer_0_z_overlap"); // shift all layers (except 0) down if (layer_nr == 0) { - layer.printZ += train.settings.get("layer_0_z_overlap"); // undo shifting down of first layer + layer.printZ += train.settings_.get("layer_0_z_overlap"); // undo shifting down of first layer } } } @@ -879,13 +879,13 @@ void FffPolygonGenerator::computePrintHeightStatistics(SliceDataStorage& storage Scene& scene = Application::getInstance().current_slice->scene; const Settings& mesh_group_settings = scene.current_mesh_group->settings; const size_t support_infill_extruder_nr - = mesh_group_settings.get("support_infill_extruder_nr").extruder_nr; // TODO: Support extruder should be configurable per object. + = mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; // TODO: Support extruder should be configurable per object. max_print_height_per_extruder[support_infill_extruder_nr] = std::max(max_print_height_per_extruder[support_infill_extruder_nr], storage.support.layer_nr_max_filled_layer); const size_t support_roof_extruder_nr - = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr; // TODO: Support roof extruder should be configurable per object. + = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_; // TODO: Support roof extruder should be configurable per object. max_print_height_per_extruder[support_roof_extruder_nr] = std::max(max_print_height_per_extruder[support_roof_extruder_nr], storage.support.layer_nr_max_filled_layer); const size_t support_bottom_extruder_nr - = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr; // TODO: Support bottom extruder should be configurable per object. + = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_; // TODO: Support bottom extruder should be configurable per object. max_print_height_per_extruder[support_bottom_extruder_nr] = std::max(max_print_height_per_extruder[support_bottom_extruder_nr], storage.support.layer_nr_max_filled_layer); // Height of where the platform adhesion reaches. @@ -898,19 +898,19 @@ void FffPolygonGenerator::computePrintHeightStatistics(SliceDataStorage& storage const std::vector skirt_brim_extruder_trains = mesh_group_settings.get>("skirt_brim_extruder_nr"); for (ExtruderTrain* train : skirt_brim_extruder_trains) { - const size_t skirt_brim_extruder_nr = train->extruder_nr; + const size_t skirt_brim_extruder_nr = train->extruder_nr_; max_print_height_per_extruder[skirt_brim_extruder_nr] = std::max(0, max_print_height_per_extruder[skirt_brim_extruder_nr]); // Includes layer 0. } break; } case EPlatformAdhesion::RAFT: { - const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr; + const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; max_print_height_per_extruder[base_extruder_nr] = std::max(-raft_layers, max_print_height_per_extruder[base_extruder_nr]); // Includes the lowest raft layer. - const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr; + const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; max_print_height_per_extruder[interface_extruder_nr] = std::max(-raft_layers + 1, max_print_height_per_extruder[interface_extruder_nr]); // Includes the second-lowest raft layer. - const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr; + const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; max_print_height_per_extruder[surface_extruder_nr] = std::max(-1, max_print_height_per_extruder[surface_extruder_nr]); // Includes up to the first layer below the model (so -1). break; @@ -980,7 +980,7 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) { if (! extruder_is_used[extruder_nr]) continue; - max_line_width = std::max(max_line_width, extruders[extruder_nr].settings.get("skirt_brim_line_width")); + max_line_width = std::max(max_line_width, extruders[extruder_nr].settings_.get("skirt_brim_line_width")); } } for (LayerIndex layer_nr = 0; layer_nr <= storage.max_print_height_second_to_last_extruder; layer_nr++) @@ -1018,8 +1018,8 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) coord_t maximum_deviation = std::numeric_limits::max(); for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) { - maximum_resolution = std::max(maximum_resolution, extruder.settings.get("meshfix_maximum_resolution")); - maximum_deviation = std::min(maximum_deviation, extruder.settings.get("meshfix_maximum_deviation")); + maximum_resolution = std::max(maximum_resolution, extruder.settings_.get("meshfix_maximum_resolution")); + maximum_deviation = std::min(maximum_deviation, extruder.settings_.get("meshfix_maximum_deviation")); } storage.draft_protection_shield = Simplify(maximum_resolution, maximum_deviation, 0).polygon(storage.draft_protection_shield); if (mesh_group_settings.get("prime_tower_enable")) @@ -1032,7 +1032,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) { if (! extruder_is_used[extruder_nr]) continue; - max_line_width = std::max(max_line_width, extruders[extruder_nr].settings.get("skirt_brim_line_width")); + max_line_width = std::max(max_line_width, extruders[extruder_nr].settings_.get("skirt_brim_line_width")); } } storage.draft_protection_shield = storage.draft_protection_shield.difference(storage.primeTower.getGroundPoly().offset(max_line_width / 2)); @@ -1063,8 +1063,8 @@ void FffPolygonGenerator::processPlatformAdhesion(SliceDataStorage& storage) for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) { - Simplify simplifier(extruder.settings); - for (auto skirt_brim_line : storage.skirt_brim[extruder.extruder_nr]) + Simplify simplifier(extruder.settings_); + for (auto skirt_brim_line : storage.skirt_brim[extruder.extruder_nr_]) { skirt_brim_line.closed_polygons = simplifier.polygon(skirt_brim_line.closed_polygons); skirt_brim_line.open_polylines = simplifier.polyline(skirt_brim_line.open_polylines); diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 86bb724ceb..2cafc9b691 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -33,11 +33,11 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& for (size_t mesh_a_idx = 0; mesh_a_idx < volumes.size(); mesh_a_idx++) { Slicer& mesh_a = *volumes[mesh_a_idx]; - size_t extruder_nr_a = mesh_a.mesh->settings_.get("wall_0_extruder_nr").extruder_nr; + size_t extruder_nr_a = mesh_a.mesh->settings_.get("wall_0_extruder_nr").extruder_nr_; for (size_t mesh_b_idx = mesh_a_idx + 1; mesh_b_idx < volumes.size(); mesh_b_idx++) { Slicer& mesh_b = *volumes[mesh_b_idx]; - size_t extruder_nr_b = mesh_b.mesh->settings_.get("wall_0_extruder_nr").extruder_nr; + size_t extruder_nr_b = mesh_b.mesh->settings_.get("wall_0_extruder_nr").extruder_nr_; if (! mesh_a.mesh->canInterlock() || ! mesh_b.mesh->canInterlock()) { diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 18655e5e72..da66aa7601 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -121,7 +121,7 @@ LayerPlan::LayerPlan( } for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) { - layer_start_pos_per_extruder.emplace_back(extruder.settings.get("layer_start_x"), extruder.settings.get("layer_start_y")); + layer_start_pos_per_extruder.emplace_back(extruder.settings_.get("layer_start_x"), extruder.settings_.get("layer_start_y")); } extruder_plans.reserve(Application::getInstance().current_slice->scene.extruders.size()); extruder_plans.emplace_back( @@ -235,15 +235,15 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) setIsInside(false); { // handle end position of the prev extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); - const bool end_pos_absolute = extruder->settings.get("machine_extruder_end_pos_abs"); - Point end_pos(extruder->settings.get("machine_extruder_end_pos_x"), extruder->settings.get("machine_extruder_end_pos_y")); + const bool end_pos_absolute = extruder->settings_.get("machine_extruder_end_pos_abs"); + Point end_pos(extruder->settings_.get("machine_extruder_end_pos_x"), extruder->settings_.get("machine_extruder_end_pos_y")); if (! end_pos_absolute) { end_pos += getLastPlannedPositionOrStartingPosition(); } else { - const Point extruder_offset(extruder->settings.get("machine_nozzle_offset_x"), extruder->settings.get("machine_nozzle_offset_y")); + const Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); end_pos += extruder_offset; // absolute end pos is given as a head position } if (end_pos_absolute || last_planned_position) @@ -268,15 +268,15 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) { // handle starting pos of the new extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); - const bool start_pos_absolute = extruder->settings.get("machine_extruder_start_pos_abs"); - Point start_pos(extruder->settings.get("machine_extruder_start_pos_x"), extruder->settings.get("machine_extruder_start_pos_y")); + const bool start_pos_absolute = extruder->settings_.get("machine_extruder_start_pos_abs"); + Point start_pos(extruder->settings_.get("machine_extruder_start_pos_x"), extruder->settings_.get("machine_extruder_start_pos_y")); if (! start_pos_absolute) { start_pos += getLastPlannedPositionOrStartingPosition(); } else { - Point extruder_offset(extruder->settings.get("machine_nozzle_offset_x"), extruder->settings.get("machine_nozzle_offset_y")); + Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); start_pos += extruder_offset; // absolute start pos is given as a head position } if (start_pos_absolute || last_planned_position) @@ -341,7 +341,7 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const bool combed = false; const ExtruderTrain* extruder = getLastPlannedExtruderTrain(); - const Settings& mesh_or_extruder_settings = current_mesh ? current_mesh->settings : extruder->settings; + const Settings& mesh_or_extruder_settings = current_mesh ? current_mesh->settings : extruder->settings_; const bool is_first_travel_of_extruder_after_switch = extruder_plans.back().paths_.size() == 1 && (extruder_plans.size() > 1 || last_extruder_previous_layer != getExtruder()); @@ -999,7 +999,7 @@ void LayerPlan::addWall( const coord_t small_feature_max_length = settings.get("small_feature_max_length"); const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr == 0 || wall.inset_idx == 0) && cura::shorterThan(wall, small_feature_max_length); Ratio small_feature_speed_factor = settings.get((layer_nr == 0) ? "small_feature_speed_factor_0" : "small_feature_speed_factor"); - const Velocity min_speed = fan_speed_layer_time_settings_per_extruder[getLastPlannedExtruderTrain()->extruder_nr].cool_min_speed; + const Velocity min_speed = fan_speed_layer_time_settings_per_extruder[getLastPlannedExtruderTrain()->extruder_nr_].cool_min_speed; small_feature_speed_factor = std::max((double)small_feature_speed_factor, (double)(min_speed / non_bridge_config.getSpeed())); const coord_t max_area_deviation = std::max(settings.get("meshfix_maximum_extrusion_area_deviation"), 1); // Square micrometres! const coord_t max_resolution = std::max(settings.get("meshfix_maximum_resolution"), coord_t(1)); @@ -1911,7 +1911,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.insertWipeScript(wipe_config); gcode.ResetLastEValueAfterWipe(extruder_nr); } - else if (layer_nr != 0 && Application::getInstance().current_slice->scene.extruders[extruder_nr].settings.get("retract_at_layer_change")) + else if (layer_nr != 0 && Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_.get("retract_at_layer_change")) { // only do the retract if the paths are not spiralized if (! mesh_group_settings.get("magic_spiralize")) @@ -1945,7 +1945,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) if (path.perform_prime) { - gcode.writePrimeTrain(extruder.settings.get("speed_travel")); + gcode.writePrimeTrain(extruder.settings_.get("speed_travel")); // Don't update cumulative path time, as ComputeNaiveTimeEstimates also doesn't. gcode.writeRetraction(retraction_config->retraction_config); } @@ -2074,7 +2074,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // Before the final travel, move up to the next layer height, on the current spot, with a sensible speed. Point3 current_position = gcode.getPosition(); current_position.z_ = final_travel_z; - gcode.writeTravel(current_position, extruder.settings.get("speed_z_hop")); + gcode.writeTravel(current_position, extruder.settings_.get("speed_z_hop")); // Prevent the final travel(s) from resetting to the 'previous' layer height. gcode.setZ(final_travel_z); @@ -2099,7 +2099,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) const double path_fan_speed = path.getFanSpeed(); gcode.writeFanCommand(path_fan_speed != GCodePathConfig::FAN_SPEED_DEFAULT ? path_fan_speed : extruder_plan.getFanSpeed()); - bool coasting = extruder.settings.get("coasting_enable"); + bool coasting = extruder.settings_.get("coasting_enable"); if (coasting) { coasting = writePathWithCoasting(gcode, extruder_plan_idx, path_idx, layer_thickness, insertTempOnTime); @@ -2168,13 +2168,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } } // paths for this extruder /\ . - if (extruder.settings.get("cool_lift_head") && extruder_plan.extra_time_ > 0.0) + if (extruder.settings_.get("cool_lift_head") && extruder_plan.extra_time_ > 0.0) { gcode.writeComment("Small layer, adding delay"); const RetractionAndWipeConfig& retraction_config = current_mesh ? current_mesh->retraction_wipe_config : storage.retraction_wipe_config_per_extruder[gcode.getExtruderNr()]; gcode.writeRetraction(retraction_config.retraction_config); - if (extruder_plan_idx == extruder_plans.size() - 1 || ! extruder.settings.get("machine_extruder_end_pos_abs")) + if (extruder_plan_idx == extruder_plans.size() - 1 || ! extruder.settings_.get("machine_extruder_end_pos_abs")) { // only do the z-hop if it's the last extruder plan; otherwise it's already at the switching bay area // or do it anyway when we switch extruder in-place gcode.writeZhopStart(MM2INT(3.0)); @@ -2250,7 +2250,7 @@ bool LayerPlan::writePathWithCoasting( { ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_]; - const double coasting_volume = extruder.settings.get("coasting_volume"); + const double coasting_volume = extruder.settings_.get("coasting_volume"); if (coasting_volume <= 0) { return false; @@ -2268,7 +2268,7 @@ bool LayerPlan::writePathWithCoasting( const coord_t coasting_dist = MM2INT(MM2_2INT(coasting_volume) / layer_thickness) / path.config.getLineWidth(); // closing brackets of MM2INT at weird places for precision issues - const double coasting_min_volume = extruder.settings.get("coasting_min_volume"); + const double coasting_min_volume = extruder.settings_.get("coasting_min_volume"); const coord_t coasting_min_dist = MM2INT(MM2_2INT(coasting_min_volume + coasting_volume) / layer_thickness) / path.config.getLineWidth(); // closing brackets of MM2INT at weird places for precision issues // /\ the minimal distance when coasting will coast the full coasting volume instead of linearly less with linearly smaller paths @@ -2362,7 +2362,7 @@ bool LayerPlan::writePathWithCoasting( auto [_, time] = extruder_plan.getPointToPointTime(prev_pt, path.points[point_idx], path); insertTempOnTime(time, path_idx); - const Ratio coasting_speed_modifier = extruder.settings.get("coasting_speed"); + const Ratio coasting_speed_modifier = extruder.settings_.get("coasting_speed"); const Velocity speed = Velocity(coasting_speed_modifier * path.config.getSpeed()); gcode.writeTravel(path.points[point_idx], speed); @@ -2420,7 +2420,7 @@ void LayerPlan::applyBackPressureCompensation() for (auto& extruder_plan : extruder_plans) { const Ratio back_pressure_compensation - = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_].settings.get("speed_equalize_flow_width_factor"); + = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_].settings_.get("speed_equalize_flow_width_factor"); if (back_pressure_compensation != 0.0) { extruder_plan.applyBackPressureCompensation(back_pressure_compensation); diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index f3185deeeb..7502bf2cc2 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -96,7 +96,7 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer if (! prev_layer->last_planned_position || *prev_layer->last_planned_position != first_location_new_layer) { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings_; prev_layer->setIsInside(new_layer_destination_state->second); const bool force_retract = extruder_settings.get("retract_at_layer_change") || (mesh_group_settings.get("travel_retract_before_outer_wall") @@ -167,7 +167,7 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vectorscene.extruders[extruder].settings; + Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; double initial_print_temp = extruder_plan.required_start_temperature_; Duration in_between_time = 0.0_s; // the duration during which the extruder isn't used @@ -212,7 +212,7 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vectorscene.extruders[extruder_nr].settings.get("machine_nozzle_temp_enabled")) + if (! Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_.get("machine_nozzle_temp_enabled")) { return; } @@ -248,7 +248,7 @@ void LayerPlanBuffer::insertPreheatCommand_multiExtrusion(std::vectorscene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -301,7 +301,7 @@ void LayerPlanBuffer::insertTempCommands(std::vector& extruder_pl if (prev_extruder != extruder) { // set previous extruder to standby temperature - const Settings& previous_extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings; + const Settings& previous_extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_; extruder_plan.prev_extruder_standby_temp_ = previous_extruder_settings.get("material_standby_temperature"); } @@ -310,7 +310,7 @@ void LayerPlanBuffer::insertTempCommands(std::vector& extruder_pl insertPreheatCommand_singleExtrusion(*prev_extruder_plan, extruder, extruder_plan.required_start_temperature_); prev_extruder_plan->extrusion_temperature_command_ = --prev_extruder_plan->inserts_.end(); } - else if (Application::getInstance().current_slice->scene.extruders[extruder].settings.get("machine_extruders_share_heater")) + else if (Application::getInstance().current_slice->scene.extruders[extruder].settings_.get("machine_extruders_share_heater")) { // extruders share a heater so command the previous extruder to change to the temperature required for this extruder insertPreheatCommand_singleExtrusion(*prev_extruder_plan, prev_extruder, extruder_plan.required_start_temperature_); @@ -333,7 +333,7 @@ void LayerPlanBuffer::insertPrintTempCommand(ExtruderPlan& extruder_plan) const double print_temp = *extruder_plan.extrusion_temperature_; const unsigned int extruder = extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -362,7 +362,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex { ExtruderPlan& last_extruder_plan = *extruder_plans[last_extruder_plan_idx]; const size_t extruder = last_extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -516,7 +516,7 @@ void LayerPlanBuffer::insertTempCommands() const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans.size() + extruder_plan_idx; ExtruderPlan& extruder_plan = layer_plan.extruder_plans[extruder_plan_idx]; size_t extruder = extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; Duration time = extruder_plan.estimates_.getTotalUnretractedTime(); Ratio avg_flow; if (time > 0.0) @@ -560,7 +560,7 @@ void LayerPlanBuffer::insertTempCommands() size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_idx = 0; extruder_idx < scene.extruders.size(); extruder_idx++) { // set temperature of the first nozzle, turn other nozzles down - const Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_idx].settings; + const Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_idx].settings_; if (scene.current_mesh_group == scene.mesh_groups.begin()) // First mesh group. { // override values from GCodeExport::setInitialTemps diff --git a/src/Mold.cpp b/src/Mold.cpp index fe5bebe849..2ef6ce7561 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -66,7 +66,7 @@ void Mold::process(std::vector& slicer_list) if (layer_nr == 0) { const ExtruderTrain& train_wall_0 = mesh.settings_.get("wall_0_extruder_nr"); - open_polyline_width *= train_wall_0.settings.get("initial_layer_line_width_factor"); + open_polyline_width *= train_wall_0.settings_.get("initial_layer_line_width_factor"); } const AngleDegrees angle = mesh.settings_.get("mold_angle"); const coord_t roof_height = mesh.settings_.get("mold_roof_height"); diff --git a/src/Preheat.cpp b/src/Preheat.cpp index e00926144c..6b3b8c3ee9 100644 --- a/src/Preheat.cpp +++ b/src/Preheat.cpp @@ -15,7 +15,7 @@ namespace cura Duration Preheat::getTimeToGoFromTempToTemp(const size_t extruder, const Temperature& temp_before, const Temperature& temp_after, const bool during_printing) { - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; Duration time; if (temp_after > temp_before) { @@ -40,7 +40,7 @@ Duration Preheat::getTimeToGoFromTempToTemp(const size_t extruder, const Tempera Temperature Preheat::getTemp(const size_t extruder, const Ratio& flow, const bool is_initial_layer) { - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; if (is_initial_layer && extruder_settings.get("material_print_temperature_layer_0") != 0) { return extruder_settings.get("material_print_temperature_layer_0"); @@ -51,7 +51,7 @@ Temperature Preheat::getTemp(const size_t extruder, const Ratio& flow, const boo Preheat::WarmUpResult Preheat::getWarmUpPointAfterCoolDown(double time_window, unsigned int extruder, double temp_start, double temp_mid, double temp_end, bool during_printing) { WarmUpResult result; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; Temperature cool_down_speed = extruder_settings.get("machine_nozzle_cool_down_speed"); if (during_printing) { @@ -121,7 +121,7 @@ Preheat::WarmUpResult Preheat::getWarmUpPointAfterCoolDown(double time_window, u Preheat::CoolDownResult Preheat::getCoolDownPointAfterWarmUp(double time_window, unsigned int extruder, double temp_start, double temp_mid, double temp_end, bool during_printing) { CoolDownResult result; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; Temperature cool_down_speed = extruder_settings.get("machine_nozzle_cool_down_speed"); if (during_printing) { diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index bc62d17a46..5ffbd200c7 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -60,8 +60,8 @@ PrimeTower::PrimeTower() extruder_order.end(), [scene_pointer](const unsigned int& extruder_nr_a, const unsigned int& extruder_nr_b) -> bool { - const Ratio adhesion_a = scene_pointer->extruders[extruder_nr_a].settings.get("material_adhesion_tendency"); - const Ratio adhesion_b = scene_pointer->extruders[extruder_nr_b].settings.get("material_adhesion_tendency"); + const Ratio adhesion_a = scene_pointer->extruders[extruder_nr_a].settings_.get("material_adhesion_tendency"); + const Ratio adhesion_b = scene_pointer->extruders[extruder_nr_b].settings_.get("material_adhesion_tendency"); return adhesion_a < adhesion_b; }); } @@ -122,7 +122,7 @@ void PrimeTower::generatePaths_denseInfill() const bool has_raft = mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT; const coord_t base_height = std::max(scene.settings.get("prime_tower_base_height"), has_raft ? layer_height : 0); const double base_curve_magnitude = mesh_group_settings.get("prime_tower_base_curve_magnitude"); - const coord_t line_width = scene.extruders[extruder_order.front()].settings.get("prime_tower_line_width"); + const coord_t line_width = scene.extruders[extruder_order.front()].settings_.get("prime_tower_line_width"); prime_moves.resize(extruder_count); base_extra_moves.resize(extruder_count); @@ -130,9 +130,9 @@ void PrimeTower::generatePaths_denseInfill() coord_t cumulative_inset = 0; // Each tower shape is going to be printed inside the other. This is the inset we're doing for each extruder. for (size_t extruder_nr : extruder_order) { - const coord_t line_width = scene.extruders[extruder_nr].settings.get("prime_tower_line_width"); - const coord_t required_volume = MM3_2INT(scene.extruders[extruder_nr].settings.get("prime_tower_min_volume")); - const Ratio flow = scene.extruders[extruder_nr].settings.get("prime_tower_flow"); + const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); + const coord_t required_volume = MM3_2INT(scene.extruders[extruder_nr].settings_.get("prime_tower_min_volume")); + const Ratio flow = scene.extruders[extruder_nr].settings_.get("prime_tower_flow"); coord_t current_volume = 0; Polygons& pattern = prime_moves[extruder_nr]; @@ -210,7 +210,7 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la return; } - bool post_wipe = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings.get("prime_tower_wipe_enabled"); + bool post_wipe = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_.get("prime_tower_wipe_enabled"); // Do not wipe on the first layer, we will generate non-hollow prime tower there for better bed adhesion. if (prev_extruder == new_extruder || layer_nr == 0) @@ -230,9 +230,9 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la if (post_wipe) { // Make sure we wipe the old extruder on the prime tower. - const Settings& previous_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings; + const Settings& previous_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_; const Point previous_nozzle_offset = Point(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); - const Settings& new_settings = Application::getInstance().current_slice->scene.extruders[new_extruder].settings; + const Settings& new_settings = Application::getInstance().current_slice->scene.extruders[new_extruder].settings_; const Point new_nozzle_offset = Point(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); gcode_layer.addTravel(post_wipe_point - previous_nozzle_offset + new_nozzle_offset); } @@ -302,8 +302,8 @@ void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr const ClosestPolygonPoint wipe_location = prime_tower_start_locations[current_start_location_idx]; const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - const coord_t inward_dist = train.settings.get("machine_nozzle_size") * 3 / 2; - const coord_t start_dist = train.settings.get("machine_nozzle_size") * 2; + const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; + const coord_t start_dist = train.settings_.get("machine_nozzle_size") * 2; const Point prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); const Point outward_dir = wipe_location.location_ - prime_end; const Point prime_start = wipe_location.location_ + normal(outward_dir, start_dist); diff --git a/src/Scene.cpp b/src/Scene.cpp index 1e8416181e..f7c81777f6 100644 --- a/src/Scene.cpp +++ b/src/Scene.cpp @@ -32,7 +32,7 @@ const std::string Scene::getAllSettingsString() const // Per-extruder settings. for (size_t extruder_nr = 0; extruder_nr < extruders.size(); extruder_nr++) { - output << " -e" << extruder_nr << extruders[extruder_nr].settings.getAllSettingsString(); + output << " -e" << extruder_nr << extruders[extruder_nr].settings_.getAllSettingsString(); } for (size_t mesh_group_index = 0; mesh_group_index < mesh_groups.size(); mesh_group_index++) diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index 4b77b449d3..3769760253 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -56,11 +56,11 @@ SkirtBrim::SkirtBrim(SliceDataStorage& storage) } const ExtruderTrain& extruder = extruders[extruder_nr]; - line_widths[extruder_nr] = extruder.settings.get("skirt_brim_line_width") * extruder.settings.get("initial_layer_line_width_factor"); - skirt_brim_minimal_length[extruder_nr] = extruder.settings.get("skirt_brim_minimal_length"); - external_polys_only[extruder_nr] = adhesion_type == EPlatformAdhesion::SKIRT || extruder.settings.get("brim_outside_only"); - line_count[extruder_nr] = extruder.settings.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); - gap[extruder_nr] = extruder.settings.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); + line_widths[extruder_nr] = extruder.settings_.get("skirt_brim_line_width") * extruder.settings_.get("initial_layer_line_width_factor"); + skirt_brim_minimal_length[extruder_nr] = extruder.settings_.get("skirt_brim_minimal_length"); + external_polys_only[extruder_nr] = adhesion_type == EPlatformAdhesion::SKIRT || extruder.settings_.get("brim_outside_only"); + line_count[extruder_nr] = extruder.settings_.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); + gap[extruder_nr] = extruder.settings_.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); } } @@ -226,7 +226,7 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri Polygons SkirtBrim::getInternalHoleExclusionArea(const Polygons& outline, const int extruder_nr) { assert(extruder_nr >= 0); - const Settings& settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings; + const Settings& settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; // If brim is external_only, the distance between the external brim of a part inside a hole and the inside hole of the outer part. const coord_t hole_brim_distance = settings.get("brim_inside_margin"); @@ -300,7 +300,7 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, } { // limit brim lines to allowed areas, stitch them and store them in the result - brim = Simplify(Application::getInstance().current_slice->scene.extruders[offset.extruder_nr].settings).polygon(brim); + brim = Simplify(Application::getInstance().current_slice->scene.extruders[offset.extruder_nr].settings_).polygon(brim); brim.toPolylines(); Polygons brim_lines = allowed_areas_per_extruder[offset.extruder_nr].intersectionPolyLines(brim, false); length_added = brim_lines.polyLineLength(); @@ -361,9 +361,9 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) int skirt_height = 0; for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) { - if (extruder_nr == -1 || extruder_nr == extruder.extruder_nr) + if (extruder_nr == -1 || extruder_nr == extruder.extruder_nr_) { - skirt_height = std::max(skirt_height, extruder.settings.get("skirt_height")); + skirt_height = std::max(skirt_height, extruder.settings_.get("skirt_height")); } } skirt_height = std::min(skirt_height, static_cast(storage.print_layer_count)); @@ -373,7 +373,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) { first_layer_outline - = first_layer_outline.unionPolygons(storage.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr)); + = first_layer_outline.unionPolygons(storage.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr_)); } } @@ -418,7 +418,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) { // remove model-brim from support SupportLayer& support_layer = storage.support.supportLayers[0]; const ExtruderTrain& support_infill_extruder = global_settings.get("support_infill_extruder_nr"); - if (support_infill_extruder.settings.get("brim_replaces_support")) + if (support_infill_extruder.settings_.get("brim_replaces_support")) { // avoid gap in the middle // V @@ -581,9 +581,9 @@ void SkirtBrim::generateSupportBrim() Scene& scene = Application::getInstance().current_slice->scene; const ExtruderTrain& support_infill_extruder = scene.current_mesh_group->settings.get("support_infill_extruder_nr"); const coord_t brim_line_width - = support_infill_extruder.settings.get("skirt_brim_line_width") * support_infill_extruder.settings.get("initial_layer_line_width_factor"); - size_t line_count = support_infill_extruder.settings.get("support_brim_line_count"); - const coord_t minimal_length = support_infill_extruder.settings.get("skirt_brim_minimal_length"); + = support_infill_extruder.settings_.get("skirt_brim_line_width") * support_infill_extruder.settings_.get("initial_layer_line_width_factor"); + size_t line_count = support_infill_extruder.settings_.get("support_brim_line_count"); + const coord_t minimal_length = support_infill_extruder.settings_.get("skirt_brim_minimal_length"); if (! storage.support.generated || line_count <= 0 || storage.support.supportLayers.empty()) { return; @@ -592,12 +592,12 @@ void SkirtBrim::generateSupportBrim() const coord_t brim_width = brim_line_width * line_count; coord_t skirt_brim_length = 0; - if (storage.skirt_brim[support_infill_extruder.extruder_nr].empty()) + if (storage.skirt_brim[support_infill_extruder.extruder_nr_].empty()) { - storage.skirt_brim[support_infill_extruder.extruder_nr].emplace_back(); + storage.skirt_brim[support_infill_extruder.extruder_nr_].emplace_back(); } - for (const SkirtBrimLine& brim_line : storage.skirt_brim[support_infill_extruder.extruder_nr]) + for (const SkirtBrimLine& brim_line : storage.skirt_brim[support_infill_extruder.extruder_nr_]) { skirt_brim_length += brim_line.closed_polygons.polygonLength(); skirt_brim_length += brim_line.open_polylines.polyLineLength(); diff --git a/src/Slice.cpp b/src/Slice.cpp index c95321d0de..4782604e00 100644 --- a/src/Slice.cpp +++ b/src/Slice.cpp @@ -21,7 +21,7 @@ void Slice::compute() scene.current_mesh_group = mesh_group; for (ExtruderTrain& extruder : scene.extruders) { - extruder.settings.setParent(&scene.current_mesh_group->settings); + extruder.settings_.setParent(&scene.current_mesh_group->settings); } scene.processMeshGroup(*mesh_group); } diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index 9ed9cc7ede..2e5a2a4465 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -48,7 +48,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage return false; // Nothing to do. } // Generate the lines to cover the surface. - const int extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr; + const int extruder_nr = mesh.settings.get("top_bottom_extruder_nr").extruder_nr_; const EFillMethod pattern = mesh.settings.get("ironing_pattern"); const bool zig_zaggify_infill = pattern == EFillMethod::ZIG_ZAG; constexpr bool connect_polygons = false; // midway connections can make the surface less smooth diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index 09dfa368ed..f0415ce0d1 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -2,6 +2,7 @@ // CuraEngine is released under the terms of the AGPLv3 or higher #include "WallsComputation.h" + #include "Application.h" #include "ExtruderTrain.h" #include "Slice.h" @@ -13,7 +14,9 @@ namespace cura { -WallsComputation::WallsComputation(const Settings& settings, const LayerIndex layer_nr) : settings(settings), layer_nr(layer_nr) +WallsComputation::WallsComputation(const Settings& settings, const LayerIndex layer_nr) + : settings(settings) + , layer_nr(layer_nr) { } @@ -35,7 +38,8 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t const bool spiralize = settings.get("magic_spiralize"); const size_t alternate = ((layer_nr % 2) + 2) % 2; - if (spiralize && layer_nr < LayerIndex(settings.get("initial_bottom_layers")) && alternate == 1) //Add extra insets every 2 layers when spiralizing. This makes bottoms of cups watertight. + if (spiralize && layer_nr < LayerIndex(settings.get("initial_bottom_layers")) + && alternate == 1) // Add extra insets every 2 layers when spiralizing. This makes bottoms of cups watertight. { wall_count += 5; } @@ -45,18 +49,17 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t } const bool first_layer = layer_nr == 0; - const Ratio line_width_0_factor = first_layer ? settings.get("wall_0_extruder_nr").settings.get("initial_layer_line_width_factor") : 1.0_r; + const Ratio line_width_0_factor = first_layer ? settings.get("wall_0_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; const coord_t line_width_0 = settings.get("wall_line_width_0") * line_width_0_factor; const coord_t wall_0_inset = settings.get("wall_0_inset"); - const Ratio line_width_x_factor = first_layer ? settings.get("wall_x_extruder_nr").settings.get("initial_layer_line_width_factor") : 1.0_r; + const Ratio line_width_x_factor = first_layer ? settings.get("wall_x_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; const coord_t line_width_x = settings.get("wall_line_width_x") * line_width_x_factor; // When spiralizing, generate the spiral insets using simple offsets instead of generating toolpaths if (spiralize) { - const bool recompute_outline_based_on_outer_wall = - settings.get("support_enable") && !settings.get("fill_outline_gaps"); + const bool recompute_outline_based_on_outer_wall = settings.get("support_enable") && ! settings.get("fill_outline_gaps"); generateSpiralInsets(part, line_width_0, wall_0_inset, recompute_outline_based_on_outer_wall); if (layer_nr <= static_cast(settings.get("initial_bottom_layers"))) @@ -72,7 +75,7 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t part->wall_toolpaths = wall_tool_paths.getToolPaths(); part->inner_area = wall_tool_paths.getInnerContour(); } - part->outline = PolygonsPart { Simplify(settings).polygon(part->outline) }; + part->outline = PolygonsPart{ Simplify(settings).polygon(part->outline) }; part->print_outline = part->outline; } @@ -84,16 +87,16 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t */ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) { - for(SliceLayerPart& part : layer->parts) + for (SliceLayerPart& part : layer->parts) { generateWalls(&part, section); } - //Remove the parts which did not generate a wall. As these parts are too small to print, - // and later code can now assume that there is always minimal 1 wall line. - if(settings.get("wall_line_count") >= 1 && !settings.get("fill_outline_gaps")) + // Remove the parts which did not generate a wall. As these parts are too small to print, + // and later code can now assume that there is always minimal 1 wall line. + if (settings.get("wall_line_count") >= 1 && ! settings.get("fill_outline_gaps")) { - for(size_t part_idx = 0; part_idx < layer->parts.size(); part_idx++) + for (size_t part_idx = 0; part_idx < layer->parts.size(); part_idx++) { if (layer->parts[part_idx].wall_toolpaths.empty() && layer->parts[part_idx].spiral_wall.empty()) { @@ -108,13 +111,13 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) } } -void WallsComputation::generateSpiralInsets(SliceLayerPart *part, coord_t line_width_0, coord_t wall_0_inset, bool recompute_outline_based_on_outer_wall) +void WallsComputation::generateSpiralInsets(SliceLayerPart* part, coord_t line_width_0, coord_t wall_0_inset, bool recompute_outline_based_on_outer_wall) { part->spiral_wall = part->outline.offset(-line_width_0 / 2 - wall_0_inset); - //Optimize the wall. This prevents buffer underruns in the printer firmware, and reduces processing time in CuraEngine. + // Optimize the wall. This prevents buffer underruns in the printer firmware, and reduces processing time in CuraEngine. const ExtruderTrain& train_wall = settings.get("wall_0_extruder_nr"); - part->spiral_wall = Simplify(train_wall.settings).polygon(part->spiral_wall); + part->spiral_wall = Simplify(train_wall.settings_).polygon(part->spiral_wall); part->spiral_wall.removeDegenerateVerts(); if (recompute_outline_based_on_outer_wall) { @@ -126,4 +129,4 @@ void WallsComputation::generateSpiralInsets(SliceLayerPart *part, coord_t line_w } } -}//namespace cura +} // namespace cura diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 44cc58cbe2..54ace60375 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -116,10 +116,10 @@ class ArcusCommunication::PathCompiler */ void setExtruder(const ExtruderTrain& new_extruder) { - if (extruder != new_extruder.extruder_nr) + if (extruder != new_extruder.extruder_nr_) { flushPathSegments(); - extruder = new_extruder.extruder_nr; + extruder = new_extruder.extruder_nr_; } } diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index 3d33f43e74..afff5800fa 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -78,7 +78,7 @@ void ArcusCommunication::Private::readExtruderSettingsMessage(const google::prot .extruders[extruder_nr]; // Extruder messages may arrive out of order, so don't iteratively get the next extruder but take the extruder_nr from this message. for (const cura::proto::Setting& setting_message : extruder_message.settings().settings()) { - extruder.settings.add(setting_message.name(), setting_message.value()); + extruder.settings_.add(setting_message.name(), setting_message.value()); } } } @@ -120,7 +120,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& mesh.settings_.add(setting.name(), setting.value()); } ExtruderTrain& extruder = mesh.settings_.get("extruder_nr"); // Set the parent setting to the correct extruder. - mesh.settings_.setParent(&extruder.settings); + mesh.settings_.setParent(&extruder.settings_); for (size_t face = 0; face < face_count; face++) { diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 12b338305f..ae9fd28ee6 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -229,9 +229,9 @@ void CommandLine::sliceNext() } } // If this was an extruder stack, make sure that the extruder_nr setting is correct. - if (last_settings == &last_extruder->settings) + if (last_settings == &last_extruder->settings_) { - last_extruder->settings.add("extruder_nr", std::to_string(last_extruder->extruder_nr)); + last_extruder->settings_.add("extruder_nr", std::to_string(last_extruder->extruder_nr_)); } break; } @@ -242,7 +242,7 @@ void CommandLine::sliceNext() { slice.scene.extruders.emplace_back(extruder_nr, &slice.scene.settings); } - last_settings = &slice.scene.extruders[extruder_nr].settings; + last_settings = &slice.scene.extruders[extruder_nr].settings_; last_settings->add("extruder_nr", argument.substr(2)); last_extruder = &slice.scene.extruders[extruder_nr]; break; @@ -259,7 +259,7 @@ void CommandLine::sliceNext() const FMatrix4x3 transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. - if (! loadMeshIntoMeshGroup(&slice.scene.mesh_groups[mesh_group_index], argument.c_str(), transformation, last_extruder->settings)) + if (! loadMeshIntoMeshGroup(&slice.scene.mesh_groups[mesh_group_index], argument.c_str(), transformation, last_extruder->settings_)) { spdlog::error("Failed to load model: {}. (error number {})", argument, errno); exit(1); @@ -462,7 +462,7 @@ int CommandLine::loadJSON( } const std::string extruder_definition_id(extruder_id.GetString()); const std::string extruder_file = findDefinitionFile(extruder_definition_id, search_directories); - loadJSON(extruder_file, scene.extruders[extruder_nr].settings, force_read_parent, force_read_nondefault); + loadJSON(extruder_file, scene.extruders[extruder_nr].settings_, force_read_parent, force_read_nondefault); } } } diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 210c319c8d..deb58664dc 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -88,14 +88,14 @@ void GCodeExport::preSetup(const size_t start_extruder) for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { const ExtruderTrain& train = scene.extruders[extruder_nr]; - setFilamentDiameter(extruder_nr, train.settings.get("material_diameter")); + setFilamentDiameter(extruder_nr, train.settings_.get("material_diameter")); extruder_attr[extruder_nr].last_retraction_prime_speed - = train.settings.get("retraction_prime_speed"); // the alternative would be switch_extruder_prime_speed, but dual extrusion might not even be configured... - extruder_attr[extruder_nr].fan_number = train.settings.get("machine_extruder_cooling_fan_number"); + = train.settings_.get("retraction_prime_speed"); // the alternative would be switch_extruder_prime_speed, but dual extrusion might not even be configured... + extruder_attr[extruder_nr].fan_number = train.settings_.get("machine_extruder_cooling_fan_number"); // Cache some settings that we use frequently. - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; if (use_extruder_offset_to_offset_coords) { extruder_attr[extruder_nr].nozzle_offset = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); @@ -150,9 +150,9 @@ void GCodeExport::setInitialAndBuildVolumeTemps(const unsigned int start_extrude { const ExtruderTrain& train = scene.extruders[extruder_nr]; - const Temperature print_temp_0 = train.settings.get("material_print_temperature_layer_0"); - const Temperature print_temp_here = (print_temp_0 != 0) ? print_temp_0 : train.settings.get("material_print_temperature"); - const Temperature temp = (extruder_nr == start_extruder_nr) ? print_temp_here : train.settings.get("material_standby_temperature"); + const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); + const Temperature print_temp_here = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); + const Temperature temp = (extruder_nr == start_extruder_nr) ? print_temp_here : train.settings_.get("material_standby_temperature"); setInitialTemp(extruder_nr, temp); } @@ -231,7 +231,7 @@ std::string GCodeExport::getFileHeader( { prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.GUID:" << mat_ids[extr_nr] << new_line; } - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extr_nr].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extr_nr].settings_; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.DIAMETER:" << extruder_settings.get("machine_nozzle_size") << new_line; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.NAME:" << extruder_settings.get("machine_nozzle_id") << new_line; } @@ -272,7 +272,7 @@ std::string GCodeExport::getFileHeader( prefix << ";MATERIAL:" << ((filament_used.size() >= 1) ? static_cast(filament_used[0]) : 6666) << new_line; prefix << ";MATERIAL2:" << ((filament_used.size() >= 2) ? static_cast(filament_used[1]) : 0) << new_line; - prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice->scene.extruders[0].settings.get("machine_nozzle_size") << new_line; + prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice->scene.extruders[0].settings_.get("machine_nozzle_size") << new_line; } else if (flavor == EGCodeFlavor::REPRAP || flavor == EGCodeFlavor::MARLIN || flavor == EGCodeFlavor::MARLIN_VOLUMATRIC) { @@ -676,7 +676,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons { for (const ExtruderTrain& train : Application::getInstance().current_slice->scene.extruders) { - resetExtruderToPrimed(train.extruder_nr, train.settings.get("machine_extruders_shared_nozzle_initial_retraction")); + resetExtruderToPrimed(train.extruder_nr_, train.settings_.get("machine_extruders_shared_nozzle_initial_retraction")); } } @@ -699,7 +699,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons { // initialize extruder trains ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[start_extruder_nr]; processInitialLayerTemperature(storage, start_extruder_nr); - writePrimeTrain(train.settings.get("speed_travel")); + writePrimeTrain(train.settings_.get("speed_travel")); should_prime_extruder = false; const RetractionConfig& retraction_config = storage.retraction_wipe_config_per_extruder[start_extruder_nr].retraction_config; writeRetraction(retraction_config); @@ -748,8 +748,8 @@ void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage ExtruderTrain& train = scene.extruders[start_extruder_nr]; constexpr bool wait = true; - const Temperature print_temp_0 = train.settings.get("material_print_temperature_layer_0"); - const Temperature print_temp_here = (print_temp_0 != 0) ? print_temp_0 : train.settings.get("material_print_temperature"); + const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); + const Temperature print_temp_here = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); writeTemperatureCommand(start_extruder_nr, print_temp_here, wait); } else if (getFlavor() != EGCodeFlavor::ULTIGCODE) @@ -773,12 +773,12 @@ void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage Temperature extruder_temp; if (extruder_nr == start_extruder_nr) { - const Temperature print_temp_0 = train.settings.get("material_print_temperature_layer_0"); - extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings.get("material_print_temperature"); + const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); + extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); } else { - extruder_temp = train.settings.get("material_standby_temperature"); + extruder_temp = train.settings_.get("material_standby_temperature"); } writeTemperatureCommand(extruder_nr, extruder_temp); } @@ -793,12 +793,12 @@ void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage Temperature extruder_temp; if (extruder_nr == start_extruder_nr) { - const Temperature print_temp_0 = train.settings.get("material_print_temperature_layer_0"); - extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings.get("material_print_temperature"); + const Temperature print_temp_0 = train.settings_.get("material_print_temperature_layer_0"); + extruder_temp = (print_temp_0 != 0) ? print_temp_0 : train.settings_.get("material_print_temperature"); } else { - extruder_temp = train.settings.get("material_standby_temperature"); + extruder_temp = train.settings_.get("material_standby_temperature"); } writeTemperatureCommand(extruder_nr, extruder_temp, true); } @@ -1207,7 +1207,7 @@ void GCodeExport::writeZhopStart(const coord_t hop_height, Velocity speed /*= 0* if (speed == 0) { const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[current_extruder]; - speed = extruder.settings.get("speed_z_hop"); + speed = extruder.settings_.get("speed_z_hop"); } is_z_hopped = hop_height; currentSpeed = speed; @@ -1224,7 +1224,7 @@ void GCodeExport::writeZhopEnd(Velocity speed /*= 0*/) if (speed == 0) { const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[current_extruder]; - speed = extruder.settings.get("speed_z_hop"); + speed = extruder.settings_.get("speed_z_hop"); } is_z_hopped = 0; currentPosition.z_ = current_layer_z; @@ -1254,7 +1254,7 @@ void GCodeExport::startExtruder(const size_t new_extruder) assert(getCurrentExtrudedVolume() == 0.0 && "Just after an extruder switch we haven't extruded anything yet!"); resetExtrusionValue(); // zero the E value on the new extruder, just to be sure - const std::string start_code = Application::getInstance().current_slice->scene.extruders[new_extruder].settings.get("machine_extruder_start_code"); + const std::string start_code = Application::getInstance().current_slice->scene.extruders[new_extruder].settings_.get("machine_extruder_start_code"); if (! start_code.empty()) { @@ -1287,7 +1287,7 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re return; } - const Settings& old_extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings; + const Settings& old_extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings_; if (old_extruder_settings.get("retraction_enable")) { constexpr bool force = true; @@ -1340,7 +1340,7 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) { // extruder is already primed once! return; } - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings; + const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings_; if (extruder_settings.get("prime_blob_enable")) { // only move to prime position if we do a blob/poop // ideally the prime position would be respected whether we do a blob or not, @@ -1442,12 +1442,12 @@ void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperatu { const ExtruderTrain& extruder_train = Application::getInstance().current_slice->scene.extruders[extruder]; - if (! extruder_train.settings.get("machine_nozzle_temp_enabled")) + if (! extruder_train.settings_.get("machine_nozzle_temp_enabled")) { return; } - if (extruder_train.settings.get("machine_extruders_share_heater")) + if (extruder_train.settings_.get("machine_extruders_share_heater")) { // extruders share a single heater if (extruder != current_extruder) diff --git a/src/infill/LightningGenerator.cpp b/src/infill/LightningGenerator.cpp index e3ec58436f..a5a7749655 100644 --- a/src/infill/LightningGenerator.cpp +++ b/src/infill/LightningGenerator.cpp @@ -1,14 +1,14 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/LightningGenerator.h" -#include "infill/LightningLayer.h" -#include "infill/LightningTreeNode.h" #include "ExtruderTrain.h" +#include "infill/LightningLayer.h" +#include "infill/LightningTreeNode.h" #include "sliceDataStorage.h" -#include "utils/linearAlg2D.h" #include "utils/SparsePointGridInclusive.h" +#include "utils/linearAlg2D.h" /* Possible future tasks/optimizations,etc.: * - Improve connecting heuristic to favor connecting to shorter trees @@ -29,12 +29,13 @@ using namespace cura; LightningGenerator::LightningGenerator(const SliceMeshStorage& mesh) { const auto infill_extruder = mesh.settings.get("infill_extruder_nr"); - const auto layer_thickness = infill_extruder.settings.get("layer_height"); // Note: There's not going to be a layer below the first one, so the 'initial layer height' doesn't have to be taken into account. + const auto layer_thickness = infill_extruder.settings_.get( + "layer_height"); // Note: There's not going to be a layer below the first one, so the 'initial layer height' doesn't have to be taken into account. - supporting_radius = std::max(infill_extruder.settings.get("infill_line_distance"), infill_extruder.settings.get("infill_line_width")) / 2; - wall_supporting_radius = layer_thickness * std::tan(infill_extruder.settings.get("lightning_infill_overhang_angle")); - prune_length = layer_thickness * std::tan(infill_extruder.settings.get("lightning_infill_prune_angle")); - straightening_max_distance = layer_thickness * std::tan(infill_extruder.settings.get("lightning_infill_straightening_angle")); + supporting_radius = std::max(infill_extruder.settings_.get("infill_line_distance"), infill_extruder.settings_.get("infill_line_width")) / 2; + wall_supporting_radius = layer_thickness * std::tan(infill_extruder.settings_.get("lightning_infill_overhang_angle")); + prune_length = layer_thickness * std::tan(infill_extruder.settings_.get("lightning_infill_prune_angle")); + straightening_max_distance = layer_thickness * std::tan(infill_extruder.settings_.get("lightning_infill_straightening_angle")); generateInitialInternalOverhangs(mesh); generateTrees(mesh); @@ -45,10 +46,10 @@ void LightningGenerator::generateInitialInternalOverhangs(const SliceMeshStorage overhang_per_layer.resize(mesh.layers.size()); const auto infill_wall_line_count = static_cast(mesh.settings.get("infill_wall_line_count")); const auto infill_line_width = mesh.settings.get("infill_line_width"); - const coord_t infill_wall_offset = - infill_wall_line_count * infill_line_width; + const coord_t infill_wall_offset = -infill_wall_line_count * infill_line_width; Polygons infill_area_above; - //Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging. + // Iterate from top to bottom, to subtract the overhang areas above from the overhang areas on the layer below, to get only overhang in the top layer where it is overhanging. for (int layer_nr = mesh.layers.size() - 1; layer_nr >= 0; layer_nr--) { const SliceLayer& current_layer = mesh.layers[layer_nr]; @@ -58,7 +59,7 @@ void LightningGenerator::generateInitialInternalOverhangs(const SliceMeshStorage infill_area_here.add(part.getOwnInfillArea().offset(infill_wall_offset)); } - //Remove the part of the infill area that is already supported by the walls. + // Remove the part of the infill area that is already supported by the walls. Polygons overhang = infill_area_here.offset(-wall_supporting_radius).difference(infill_area_above); overhang_per_layer[layer_nr] = overhang; @@ -77,7 +78,7 @@ void LightningGenerator::generateTrees(const SliceMeshStorage& mesh) lightning_layers.resize(mesh.layers.size()); const auto infill_wall_line_count = static_cast(mesh.settings.get("infill_wall_line_count")); const auto infill_line_width = mesh.settings.get("infill_line_width"); - const coord_t infill_wall_offset = - infill_wall_line_count * infill_line_width; + const coord_t infill_wall_offset = -infill_wall_line_count * infill_line_width; std::vector infill_outlines; infill_outlines.insert(infill_outlines.end(), mesh.layers.size(), Polygons()); diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index 96f961e4c0..328ec18b97 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -22,40 +22,40 @@ namespace cura LocToLineGrid& Comb::getOutsideLocToLine(const ExtruderTrain& train) { - if (outside_loc_to_line[train.extruder_nr] == nullptr) + if (outside_loc_to_line[train.extruder_nr_] == nullptr) { - outside_loc_to_line[train.extruder_nr] = PolygonUtils::createLocToLineGrid(getBoundaryOutside(train), offset_from_inside_to_outside * 3 / 2); + outside_loc_to_line[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getBoundaryOutside(train), offset_from_inside_to_outside * 3 / 2); } - return *outside_loc_to_line[train.extruder_nr]; + return *outside_loc_to_line[train.extruder_nr_]; } Polygons& Comb::getBoundaryOutside(const ExtruderTrain& train) { - if (boundary_outside[train.extruder_nr].empty()) + if (boundary_outside[train.extruder_nr_].empty()) { - bool travel_avoid_supports = train.settings.get("travel_avoid_supports"); - boundary_outside[train.extruder_nr] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports).offset(travel_avoid_distance); + bool travel_avoid_supports = train.settings_.get("travel_avoid_supports"); + boundary_outside[train.extruder_nr_] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports).offset(travel_avoid_distance); } - return boundary_outside[train.extruder_nr]; + return boundary_outside[train.extruder_nr_]; } Polygons& Comb::getModelBoundary(const ExtruderTrain& train) { - if (model_boundary[train.extruder_nr].empty()) + if (model_boundary[train.extruder_nr_].empty()) { - bool travel_avoid_supports = train.settings.get("travel_avoid_supports"); - model_boundary[train.extruder_nr] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports); + bool travel_avoid_supports = train.settings_.get("travel_avoid_supports"); + model_boundary[train.extruder_nr_] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports); } - return boundary_outside[train.extruder_nr]; + return boundary_outside[train.extruder_nr_]; } LocToLineGrid& Comb::getModelBoundaryLocToLine(const ExtruderTrain& train) { - if (model_boundary_loc_to_line[train.extruder_nr] == nullptr) + if (model_boundary_loc_to_line[train.extruder_nr_] == nullptr) { - model_boundary_loc_to_line[train.extruder_nr] = PolygonUtils::createLocToLineGrid(getModelBoundary(train), offset_from_inside_to_outside * 3 / 2); + model_boundary_loc_to_line[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getModelBoundary(train), offset_from_inside_to_outside * 3 / 2); } - return *model_boundary_loc_to_line[train.extruder_nr]; + return *model_boundary_loc_to_line[train.extruder_nr_]; } Comb::Comb( @@ -202,7 +202,7 @@ bool Comb::calc( skip_avoid_other_parts_path = true; } - const bool travel_avoid_other_parts = train.settings.get("travel_avoid_other_parts"); + const bool travel_avoid_other_parts = train.settings_.get("travel_avoid_other_parts"); if (travel_avoid_other_parts && ! skip_avoid_other_parts_path) { // compute the crossing points when moving through air diff --git a/src/raft.cpp b/src/raft.cpp index e13836b43f..aed16063f8 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -18,7 +18,7 @@ namespace cura void Raft::generate(SliceDataStorage& storage) { assert(storage.raftOutline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); - const Settings& settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings; + const Settings& settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; const coord_t distance = settings.get("raft_margin"); constexpr bool include_support = true; constexpr bool dont_include_prime_tower = false; // Prime tower raft will be handled separately in 'storage.primeRaftOutline'; see below. @@ -56,9 +56,9 @@ void Raft::generate(SliceDataStorage& storage) // Find out if the prime-tower part of the raft still needs to be printed, even if there is no actual tower. // This will only happen if the different raft layers are printed by different extruders. const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr; - const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr; - const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr; + const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; + const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; + const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; if (base_extruder_nr == interface_extruder_nr && base_extruder_nr == surface_extruder_nr) { return; @@ -72,9 +72,9 @@ coord_t Raft::getTotalThickness() const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); - return base_train.settings.get("raft_base_thickness") - + interface_train.settings.get("raft_interface_layers") * interface_train.settings.get("raft_interface_thickness") - + surface_train.settings.get("raft_surface_layers") * surface_train.settings.get("raft_surface_thickness"); + return base_train.settings_.get("raft_base_thickness") + + interface_train.settings_.get("raft_interface_layers") * interface_train.settings_.get("raft_interface_thickness") + + surface_train.settings_.get("raft_surface_layers") * surface_train.settings_.get("raft_surface_thickness"); } coord_t Raft::getZdiffBetweenRaftAndLayer0() @@ -85,7 +85,7 @@ coord_t Raft::getZdiffBetweenRaftAndLayer0() { return 0; } - const coord_t airgap = std::max(coord_t(0), train.settings.get("raft_airgap")); + const coord_t airgap = std::max(coord_t(0), train.settings_.get("raft_airgap")); return airgap; } @@ -114,11 +114,11 @@ size_t Raft::getTotalExtraLayers() const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); - if (base_train.settings.get("adhesion_type") != EPlatformAdhesion::RAFT) + if (base_train.settings_.get("adhesion_type") != EPlatformAdhesion::RAFT) { return 0; } - return 1 + interface_train.settings.get("raft_interface_layers") + surface_train.settings.get("raft_surface_layers") + getFillerLayerCount(); + return 1 + interface_train.settings_.get("raft_interface_layers") + surface_train.settings_.get("raft_surface_layers") + getFillerLayerCount(); } diff --git a/src/settings/MeshPathConfigs.cpp b/src/settings/MeshPathConfigs.cpp index d91595ce37..fffc0d311a 100644 --- a/src/settings/MeshPathConfigs.cpp +++ b/src/settings/MeshPathConfigs.cpp @@ -3,18 +3,18 @@ #include "settings/MeshPathConfigs.h" +#include + #include "ExtruderTrain.h" #include "PrintFeature.h" -#include - namespace cura { MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t layer_thickness, const LayerIndex layer_nr, const std::vector& line_width_factor_per_extruder) : inset0_config{ .type = PrintFeatureType::OuterWall, .line_width = static_cast( - mesh.settings.get("wall_line_width_0") * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr]), + mesh.settings.get("wall_line_width_0") * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("wall_0_material_flow") * (layer_nr == 0 ? mesh.settings.get("wall_0_material_flow_layer_0") : Ratio{ 1.0 }), .speed_derivatives = { .speed = mesh.settings.get("speed_wall_0"), @@ -22,7 +22,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay .jerk = mesh.settings.get("jerk_wall_0") } } , insetX_config{ .type = PrintFeatureType::InnerWall, .line_width = static_cast( - mesh.settings.get("wall_line_width_x") * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr]), + mesh.settings.get("wall_line_width_x") * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("wall_x_material_flow") * (layer_nr == 0 ? mesh.settings.get("wall_x_material_flow_layer_0") : Ratio{ 1.0 }), .speed_derivatives = { .speed = mesh.settings.get("speed_wall_x"), @@ -31,7 +31,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , inset0_roofing_config{ .type = PrintFeatureType::OuterWall, .line_width = static_cast( mesh.settings.get("wall_line_width_0") - * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("wall_0_material_flow_roofing") * (layer_nr == 0 ? mesh.settings.get("wall_0_material_flow_layer_0") : Ratio{ 1.0 }), @@ -41,7 +41,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , insetX_roofing_config{ .type = PrintFeatureType::InnerWall, .line_width = static_cast( mesh.settings.get("wall_line_width_x") - * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("wall_x_material_flow_roofing") * (layer_nr == 0 ? mesh.settings.get("wall_x_material_flow_layer_0") : Ratio{ 1.0 }), @@ -51,7 +51,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , bridge_inset0_config{ .type = PrintFeatureType::OuterWall, .line_width = static_cast( mesh.settings.get("wall_line_width_0") - * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("wall_0_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("bridge_wall_material_flow"), .speed_derivatives = { .speed = mesh.settings.get("bridge_wall_speed"), @@ -62,7 +62,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , bridge_insetX_config{ .type = PrintFeatureType::InnerWall, .line_width = static_cast( mesh.settings.get("wall_line_width_x") - * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("wall_x_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("bridge_wall_material_flow"), .speed_derivatives = { .speed = mesh.settings.get("bridge_wall_speed"), @@ -72,7 +72,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay .fan_speed = mesh.settings.get("bridge_fan_speed") * 100.0 } , skin_config{ .type = PrintFeatureType::Skin, .line_width = static_cast( - mesh.settings.get("skin_line_width") * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr]), + mesh.settings.get("skin_line_width") * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("skin_material_flow") * (layer_nr == 0 ? mesh.settings.get("skin_material_flow_layer_0") : Ratio{ 1.0 }), .speed_derivatives = { .speed = mesh.settings.get("speed_topbottom"), @@ -81,7 +81,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , bridge_skin_config{ .type = PrintFeatureType::Skin, .line_width = static_cast( mesh.settings.get("skin_line_width") - * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("bridge_skin_material_flow"), .speed_derivatives = { .speed = mesh.settings.get("bridge_skin_speed"), @@ -92,7 +92,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , bridge_skin_config2{ .type = PrintFeatureType::Skin, .line_width = static_cast( mesh.settings.get("skin_line_width") - * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("bridge_skin_material_flow_2"), .speed_derivatives = { .speed = mesh.settings.get("bridge_skin_speed_2"), @@ -103,7 +103,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay , bridge_skin_config3{ .type = PrintFeatureType::Skin, .line_width = static_cast( mesh.settings.get("skin_line_width") - * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr]), + * line_width_factor_per_extruder[mesh.settings.get("top_bottom_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("bridge_skin_material_flow_3"), .speed_derivatives = { .speed = mesh.settings.get("bridge_skin_speed_3"), @@ -134,7 +134,7 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay infill_config.emplace_back(GCodePathConfig{ .type = PrintFeatureType::Infill, .line_width = static_cast( - mesh.settings.get("infill_line_width") * line_width_factor_per_extruder[mesh.settings.get("infill_extruder_nr").extruder_nr]), + mesh.settings.get("infill_line_width") * line_width_factor_per_extruder[mesh.settings.get("infill_extruder_nr").extruder_nr_]), .layer_thickness = layer_thickness, .flow = mesh.settings.get("infill_material_flow") * (layer_nr == 0 ? mesh.settings.get("material_flow_layer_0") : Ratio{ 1.0 }) * combine_idx, .speed_derivatives = { .speed = mesh.settings.get("speed_infill"), @@ -143,4 +143,4 @@ MeshPathConfigs::MeshPathConfigs(const SliceMeshStorage& mesh, const coord_t lay } } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/settings/PathConfigStorage.cpp b/src/settings/PathConfigStorage.cpp index 2ecf94eb70..5ac58e7950 100644 --- a/src/settings/PathConfigStorage.cpp +++ b/src/settings/PathConfigStorage.cpp @@ -21,7 +21,7 @@ std::vector PathConfigStorage::getLineWidthFactorPerExtruder(const LayerI { if (layer_nr <= 0) { - const Ratio factor = train.settings.get("initial_layer_line_width_factor"); + const Ratio factor = train.settings_.get("initial_layer_line_width_factor"); ret.push_back(factor); } else @@ -33,9 +33,9 @@ std::vector PathConfigStorage::getLineWidthFactorPerExtruder(const LayerI } PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const LayerIndex& layer_nr, const coord_t layer_thickness) - : support_infill_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").extruder_nr) - , support_roof_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr) - , support_bottom_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr) + : support_infill_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").extruder_nr_) + , support_roof_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_) + , support_bottom_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_) , raft_base_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_base_extruder_nr")) , raft_interface_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_interface_extruder_nr")) , raft_surface_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_surface_extruder_nr")) @@ -44,44 +44,44 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye , support_bottom_train(Application::getInstance().current_slice->scene.extruders[support_bottom_extruder_nr]) , line_width_factor_per_extruder(PathConfigStorage::getLineWidthFactorPerExtruder(layer_nr)) , raft_base_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, - .line_width = raft_base_train.settings.get("raft_base_line_width"), - .layer_thickness = raft_base_train.settings.get("raft_base_thickness"), + .line_width = raft_base_train.settings_.get("raft_base_line_width"), + .layer_thickness = raft_base_train.settings_.get("raft_base_thickness"), .flow = Ratio(1.0), - .speed_derivatives = SpeedDerivatives{ .speed = raft_base_train.settings.get("raft_base_speed"), - .acceleration = raft_base_train.settings.get("raft_base_acceleration"), - .jerk = raft_base_train.settings.get("raft_base_jerk") } }) + .speed_derivatives = SpeedDerivatives{ .speed = raft_base_train.settings_.get("raft_base_speed"), + .acceleration = raft_base_train.settings_.get("raft_base_acceleration"), + .jerk = raft_base_train.settings_.get("raft_base_jerk") } }) , raft_interface_config(GCodePathConfig{ .type = PrintFeatureType::Support, - .line_width = raft_interface_train.settings.get("raft_interface_line_width"), - .layer_thickness = raft_interface_train.settings.get("raft_interface_thickness"), + .line_width = raft_interface_train.settings_.get("raft_interface_line_width"), + .layer_thickness = raft_interface_train.settings_.get("raft_interface_thickness"), .flow = Ratio(1.0), - .speed_derivatives = SpeedDerivatives{ .speed = raft_interface_train.settings.get("raft_interface_speed"), - .acceleration = raft_interface_train.settings.get("raft_interface_acceleration"), - .jerk = raft_interface_train.settings.get("raft_interface_jerk") } }) + .speed_derivatives = SpeedDerivatives{ .speed = raft_interface_train.settings_.get("raft_interface_speed"), + .acceleration = raft_interface_train.settings_.get("raft_interface_acceleration"), + .jerk = raft_interface_train.settings_.get("raft_interface_jerk") } }) , raft_surface_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, - .line_width = raft_surface_train.settings.get("raft_surface_line_width"), - .layer_thickness = raft_surface_train.settings.get("raft_surface_thickness"), + .line_width = raft_surface_train.settings_.get("raft_surface_line_width"), + .layer_thickness = raft_surface_train.settings_.get("raft_surface_thickness"), .flow = Ratio(1.0), - .speed_derivatives = SpeedDerivatives{ .speed = raft_surface_train.settings.get("raft_surface_speed"), - .acceleration = raft_surface_train.settings.get("raft_surface_acceleration"), - .jerk = raft_surface_train.settings.get("raft_surface_jerk") } }) + .speed_derivatives = SpeedDerivatives{ .speed = raft_surface_train.settings_.get("raft_surface_speed"), + .acceleration = raft_surface_train.settings_.get("raft_surface_acceleration"), + .jerk = raft_surface_train.settings_.get("raft_surface_jerk") } }) , support_roof_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, - .line_width = static_cast(support_roof_train.settings.get("support_roof_line_width") * line_width_factor_per_extruder[support_roof_extruder_nr]), + .line_width = static_cast(support_roof_train.settings_.get("support_roof_line_width") * line_width_factor_per_extruder[support_roof_extruder_nr]), .layer_thickness = layer_thickness, - .flow - = support_roof_train.settings.get("support_roof_material_flow") * ((layer_nr == 0) ? support_roof_train.settings.get("material_flow_layer_0") : Ratio(1.0)), - .speed_derivatives = { .speed = support_roof_train.settings.get("speed_support_roof"), - .acceleration = support_roof_train.settings.get("acceleration_support_roof"), - .jerk = support_roof_train.settings.get("jerk_support_roof") } }) + .flow = support_roof_train.settings_.get("support_roof_material_flow") + * ((layer_nr == 0) ? support_roof_train.settings_.get("material_flow_layer_0") : Ratio(1.0)), + .speed_derivatives = { .speed = support_roof_train.settings_.get("speed_support_roof"), + .acceleration = support_roof_train.settings_.get("acceleration_support_roof"), + .jerk = support_roof_train.settings_.get("jerk_support_roof") } }) , support_bottom_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, - .line_width = static_cast(support_bottom_train.settings.get("support_bottom_line_width") * line_width_factor_per_extruder[support_bottom_extruder_nr]), + .line_width = static_cast(support_bottom_train.settings_.get("support_bottom_line_width") * line_width_factor_per_extruder[support_bottom_extruder_nr]), .layer_thickness = layer_thickness, - .flow = support_roof_train.settings.get("support_bottom_material_flow") - * ((layer_nr == 0) ? support_roof_train.settings.get("material_flow_layer_0") : Ratio(1.0)), - .speed_derivatives = SpeedDerivatives{ .speed = support_bottom_train.settings.get("speed_support_bottom"), - .acceleration = support_bottom_train.settings.get("acceleration_support_bottom"), - .jerk = support_bottom_train.settings.get("jerk_support_bottom") } }) + .flow = support_roof_train.settings_.get("support_bottom_material_flow") + * ((layer_nr == 0) ? support_roof_train.settings_.get("material_flow_layer_0") : Ratio(1.0)), + .speed_derivatives = SpeedDerivatives{ .speed = support_bottom_train.settings_.get("speed_support_bottom"), + .acceleration = support_bottom_train.settings_.get("acceleration_support_bottom"), + .jerk = support_bottom_train.settings_.get("jerk_support_bottom") } }) { const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); travel_config_per_extruder.reserve(extruder_count); @@ -95,32 +95,32 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye .line_width = 0, .layer_thickness = 0, .flow = 0.0, - .speed_derivatives = SpeedDerivatives{ .speed = train.settings.get("speed_travel"), - .acceleration = train.settings.get("acceleration_travel"), - .jerk = train.settings.get("jerk_travel") } }); + .speed_derivatives = SpeedDerivatives{ .speed = train.settings_.get("speed_travel"), + .acceleration = train.settings_.get("acceleration_travel"), + .jerk = train.settings_.get("jerk_travel") } }); skirt_brim_config_per_extruder.emplace_back( GCodePathConfig{ .type = PrintFeatureType::SkirtBrim, .line_width = static_cast( - train.settings.get("skirt_brim_line_width") + train.settings_.get("skirt_brim_line_width") * ((mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT) ? 1.0_r : line_width_factor_per_extruder[extruder_nr])) // cause it's also used for the draft/ooze shield , .layer_thickness = layer_thickness, - .flow = train.settings.get("skirt_brim_material_flow") * ((layer_nr == 0) ? train.settings.get("material_flow_layer_0") : Ratio(1.0)), - .speed_derivatives = SpeedDerivatives{ .speed = train.settings.get("skirt_brim_speed"), - .acceleration = train.settings.get("acceleration_skirt_brim"), - .jerk = train.settings.get("jerk_skirt_brim") } }); + .flow = train.settings_.get("skirt_brim_material_flow") * ((layer_nr == 0) ? train.settings_.get("material_flow_layer_0") : Ratio(1.0)), + .speed_derivatives = SpeedDerivatives{ .speed = train.settings_.get("skirt_brim_speed"), + .acceleration = train.settings_.get("acceleration_skirt_brim"), + .jerk = train.settings_.get("jerk_skirt_brim") } }); prime_tower_config_per_extruder.emplace_back(GCodePathConfig{ .type = PrintFeatureType::PrimeTower, .line_width = static_cast( - train.settings.get("prime_tower_line_width") + train.settings_.get("prime_tower_line_width") * ((mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT) ? 1.0_r : line_width_factor_per_extruder[extruder_nr])), .layer_thickness = layer_thickness, - .flow = train.settings.get("prime_tower_flow") * ((layer_nr == 0) ? train.settings.get("material_flow_layer_0") : Ratio(1.0)), - .speed_derivatives = SpeedDerivatives{ .speed = train.settings.get("speed_prime_tower"), - .acceleration = train.settings.get("acceleration_prime_tower"), - .jerk = train.settings.get("jerk_prime_tower") } }); + .flow = train.settings_.get("prime_tower_flow") * ((layer_nr == 0) ? train.settings_.get("material_flow_layer_0") : Ratio(1.0)), + .speed_derivatives = SpeedDerivatives{ .speed = train.settings_.get("speed_prime_tower"), + .acceleration = train.settings_.get("acceleration_prime_tower"), + .jerk = train.settings_.get("jerk_prime_tower") } }); } mesh_configs.reserve(storage.meshes.size()); @@ -136,13 +136,13 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye { support_infill_config.emplace_back( GCodePathConfig{ .type = PrintFeatureType::Support, - .line_width = static_cast(support_infill_train.settings.get("support_line_width") * support_infill_line_width_factor), + .line_width = static_cast(support_infill_train.settings_.get("support_line_width") * support_infill_line_width_factor), .layer_thickness = layer_thickness, - .flow = support_infill_train.settings.get("support_material_flow") - * ((layer_nr == 0) ? support_infill_train.settings.get("material_flow_layer_0") : Ratio(1.0)) * (combine_idx + 1), - .speed_derivatives = SpeedDerivatives{ .speed = support_infill_train.settings.get("speed_support_infill"), - .acceleration = support_infill_train.settings.get("acceleration_support_infill"), - .jerk = support_infill_train.settings.get("jerk_support_infill") } }); + .flow = support_infill_train.settings_.get("support_material_flow") + * ((layer_nr == 0) ? support_infill_train.settings_.get("material_flow_layer_0") : Ratio(1.0)) * (combine_idx + 1), + .speed_derivatives = SpeedDerivatives{ .speed = support_infill_train.settings_.get("speed_support_infill"), + .acceleration = support_infill_train.settings_.get("acceleration_support_infill"), + .jerk = support_infill_train.settings_.get("jerk_support_infill") } }); } const size_t initial_speedup_layer_count = mesh_group_settings.get("speed_slowdown_layers"); @@ -186,9 +186,9 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag global_first_layer_config_per_extruder.reserve(Application::getInstance().current_slice->scene.extruders.size()); for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) { - global_first_layer_config_per_extruder.emplace_back(SpeedDerivatives{ .speed = extruder.settings.get("speed_print_layer_0"), - .acceleration = extruder.settings.get("acceleration_print_layer_0"), - .jerk = extruder.settings.get("jerk_print_layer_0") }); + global_first_layer_config_per_extruder.emplace_back(SpeedDerivatives{ .speed = extruder.settings_.get("speed_print_layer_0"), + .acceleration = extruder.settings_.get("acceleration_print_layer_0"), + .jerk = extruder.settings_.get("jerk_print_layer_0") }); } { // support @@ -196,7 +196,7 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const size_t extruder_nr_support_infill - = mesh_group_settings.get((layer_nr <= 0) ? "support_extruder_nr_layer_0" : "support_infill_extruder_nr").extruder_nr; + = mesh_group_settings.get((layer_nr <= 0) ? "support_extruder_nr_layer_0" : "support_infill_extruder_nr").extruder_nr_; for (unsigned int idx = 0; idx < MAX_INFILL_COMBINE; idx++) { support_infill_config[idx].speed_derivatives.smoothSpeed( @@ -204,12 +204,12 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag std::max(LayerIndex(0), layer_nr), initial_speedup_layer_count); } - const size_t extruder_nr_support_roof = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr; + const size_t extruder_nr_support_roof = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_; support_roof_config.speed_derivatives.smoothSpeed( global_first_layer_config_per_extruder[extruder_nr_support_roof], std::max(LayerIndex(0), layer_nr), initial_speedup_layer_count); - const size_t extruder_nr_support_bottom = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr; + const size_t extruder_nr_support_bottom = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_; support_bottom_config.speed_derivatives.smoothSpeed( global_first_layer_config_per_extruder[extruder_nr_support_bottom], std::max(LayerIndex(0), layer_nr), @@ -221,9 +221,9 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) { const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - const SpeedDerivatives initial_layer_travel_speed_config{ .speed = train.settings.get("speed_travel_layer_0"), - .acceleration = train.settings.get("acceleration_travel_layer_0"), - .jerk = train.settings.get("jerk_travel_layer_0") }; + const SpeedDerivatives initial_layer_travel_speed_config{ .speed = train.settings_.get("speed_travel_layer_0"), + .acceleration = train.settings_.get("acceleration_travel_layer_0"), + .jerk = train.settings_.get("jerk_travel_layer_0") }; GCodePathConfig& travel = travel_config_per_extruder[extruder_nr]; travel.speed_derivatives.smoothSpeed(initial_layer_travel_speed_config, std::max(LayerIndex(0), layer_nr), initial_speedup_layer_count); diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index 22cf7d1c8b..9b8e609df4 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -3,6 +3,17 @@ #include "settings/Settings.h" +#include +#include +#include // regex parsing for temp flow graph +#include // ostringstream +#include +#include //Parsing strings (stod, stoul). + +#include +#include +#include + #include "Application.h" //To get the extruders. #include "BeadingStrategy/BeadingStrategyFactory.h" #include "ExtruderTrain.h" @@ -20,17 +31,6 @@ #include "utils/string.h" //For Escaped. #include "utils/types/string_switch.h" //For string switch. -#include -#include -#include - -#include -#include -#include // regex parsing for temp flow graph -#include // ostringstream -#include -#include //Parsing strings (stod, stoul). - namespace cura { @@ -63,7 +63,7 @@ std::string Settings::get(const std::string& key) const const std::unordered_map& limit_to_extruder = Application::getInstance().current_slice->scene.limit_to_extruder; if (limit_to_extruder.find(key) != limit_to_extruder.end()) { - return limit_to_extruder.at(key)->settings.getWithoutLimiting(key); + return limit_to_extruder.at(key)->settings_.getWithoutLimiting(key); } if (parent) diff --git a/src/skin.cpp b/src/skin.cpp index 28fc60c238..3b01559d4e 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -28,7 +28,7 @@ coord_t SkinInfillAreaComputation::getSkinLineWidth(const SliceMeshStorage& mesh if (layer_nr == 0) { const ExtruderTrain& train_skin = mesh.settings.get("top_bottom_extruder_nr"); - skin_line_width *= train_skin.settings.get("initial_layer_line_width_factor"); + skin_line_width *= train_skin.settings_.get("initial_layer_line_width_factor"); } return skin_line_width; } diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 2d2741ad8a..bbffb53e7d 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -111,7 +111,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr) const } if (settings.get("magic_spiralize")) { - if (settings.get("wall_0_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr) { return true; } @@ -120,29 +120,29 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr) const return false; } } - if (settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && settings.get("wall_0_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr) { return true; } - if (settings.get("wall_line_count") > 0 && settings.get("wall_0_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("wall_line_count") > 0 && settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr) { return true; } if ((settings.get("wall_line_count") > 1 || settings.get("alternate_extra_perimeter")) - && settings.get("wall_x_extruder_nr").extruder_nr == extruder_nr) + && settings.get("wall_x_extruder_nr").extruder_nr_ == extruder_nr) { return true; } - if (settings.get("infill_line_distance") > 0 && settings.get("infill_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("infill_line_distance") > 0 && settings.get("infill_extruder_nr").extruder_nr_ == extruder_nr) { return true; } - if ((settings.get("top_layers") > 0 || settings.get("bottom_layers") > 0) && settings.get("top_bottom_extruder_nr").extruder_nr == extruder_nr) + if ((settings.get("top_layers") > 0 || settings.get("bottom_layers") > 0) && settings.get("top_bottom_extruder_nr").extruder_nr_ == extruder_nr) { return true; } const size_t roofing_layer_count = std::min(settings.get("roofing_layer_count"), settings.get("top_layers")); - if (roofing_layer_count > 0 && settings.get("roofing_extruder_nr").extruder_nr == extruder_nr) + if (roofing_layer_count > 0 && settings.get("roofing_extruder_nr").extruder_nr_ == extruder_nr) { return true; } @@ -160,7 +160,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn return false; } const SliceLayer& layer = layers[layer_nr]; - if (settings.get("wall_0_extruder_nr").extruder_nr == extruder_nr + if (settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr && (settings.get("wall_line_count") > 0 || settings.get("skin_outline_count") > 0)) { for (const SliceLayerPart& part : layer.parts) @@ -171,13 +171,13 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn } } } - if (settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && settings.get("wall_0_extruder_nr").extruder_nr == extruder_nr + if (settings.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL && settings.get("wall_0_extruder_nr").extruder_nr_ == extruder_nr && layer.openPolyLines.size() > 0) { return true; } if ((settings.get("wall_line_count") > 1 || settings.get("alternate_extra_perimeter")) - && settings.get("wall_x_extruder_nr").extruder_nr == extruder_nr) + && settings.get("wall_x_extruder_nr").extruder_nr_ == extruder_nr) { for (const SliceLayerPart& part : layer.parts) { @@ -187,7 +187,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn } } } - if (settings.get("infill_line_distance") > 0 && settings.get("infill_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("infill_line_distance") > 0 && settings.get("infill_extruder_nr").extruder_nr_ == extruder_nr) { for (const SliceLayerPart& part : layer.parts) { @@ -197,7 +197,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn } } } - if (settings.get("top_bottom_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("top_bottom_extruder_nr").extruder_nr_ == extruder_nr) { for (const SliceLayerPart& part : layer.parts) { @@ -210,7 +210,7 @@ bool SliceMeshStorage::getExtruderIsUsed(const size_t extruder_nr, const LayerIn } } } - if (settings.get("roofing_extruder_nr").extruder_nr == extruder_nr) + if (settings.get("roofing_extruder_nr").extruder_nr_ == extruder_nr) { for (const SliceLayerPart& part : layer.parts) { @@ -273,7 +273,7 @@ Polygons const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; if (layer_nr < 0 && layer_nr < -static_cast(Raft::getFillerLayerCount())) { // when processing raft - if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("adhesion_extruder_nr").extruder_nr))) + if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("adhesion_extruder_nr").extruder_nr_))) { if (external_polys_only) { @@ -303,7 +303,7 @@ Polygons for (const std::shared_ptr& mesh : meshes) { if (mesh->settings.get("infill_mesh") || mesh->settings.get("anti_overhang_mesh") - || (extruder_nr != -1 && extruder_nr != int(mesh->settings.get("wall_0_extruder_nr").extruder_nr))) + || (extruder_nr != -1 && extruder_nr != int(mesh->settings.get("wall_0_extruder_nr").extruder_nr_))) { continue; } @@ -315,7 +315,7 @@ Polygons } } } - if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("support_infill_extruder_nr").extruder_nr))) + if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_))) { const SupportLayer& support_layer = support.supportLayers[std::max(LayerIndex(0), layer_nr)]; if (support.generated) @@ -364,16 +364,16 @@ std::vector SliceDataStorage::getExtrudersUsed() const } else if (adhesion_type == EPlatformAdhesion::RAFT) { - ret[mesh_group_settings.get("raft_base_extruder_nr").extruder_nr] = true; - const size_t num_interface_layers = mesh_group_settings.get("raft_interface_extruder_nr").settings.get("raft_interface_layers"); + ret[mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_] = true; + const size_t num_interface_layers = mesh_group_settings.get("raft_interface_extruder_nr").settings_.get("raft_interface_layers"); if (num_interface_layers > 0) { - ret[mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_] = true; } - const size_t num_surface_layers = mesh_group_settings.get("raft_surface_extruder_nr").settings.get("raft_surface_layers"); + const size_t num_surface_layers = mesh_group_settings.get("raft_surface_extruder_nr").settings_.get("raft_surface_layers"); if (num_surface_layers > 0) { - ret[mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_] = true; } } @@ -385,15 +385,15 @@ std::vector SliceDataStorage::getExtrudersUsed() const { if (mesh->settings.get("support_enable") || mesh->settings.get("support_mesh")) { - ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr] = true; - ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_] = true; + ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_] = true; if (mesh_group_settings.get("support_roof_enable")) { - ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_] = true; } if (mesh_group_settings.get("support_bottom_enable")) { - ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_] = true; } } } @@ -451,11 +451,11 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) const LayerIndex raft_layers = Raft::getTotalExtraLayers(); if (layer_nr == -raft_layers) // Base layer. { - ret[mesh_group_settings.get("raft_base_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_] = true; // When using a raft, all prime blobs need to be on the lowest layer (the build plate). for (size_t extruder_nr = 0; extruder_nr < extruders.size(); ++extruder_nr) { - if (extruders[extruder_nr].settings.get("prime_blob_enable")) + if (extruders[extruder_nr].settings_.get("prime_blob_enable")) { ret[extruder_nr] = true; } @@ -463,11 +463,11 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) } else if (layer_nr == -raft_layers + 1) // Interface layer. { - ret[mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_] = true; } else if (layer_nr < -static_cast(Raft::getFillerLayerCount())) // Any of the surface layers. { - ret[mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_] = true; } } } @@ -485,23 +485,23 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) { if (! support_layer.support_infill_parts.empty()) { - ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr] = true; + ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_] = true; } } else { if (! support_layer.support_infill_parts.empty()) { - ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_] = true; } } if (! support_layer.support_bottom.empty()) { - ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_] = true; } if (! support_layer.support_roof.empty()) { - ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr] = true; + ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_] = true; } } } @@ -527,7 +527,7 @@ bool SliceDataStorage::getExtruderPrimeBlobEnabled(const size_t extruder_nr) con } const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - return train.settings.get("prime_blob_enable"); + return train.settings_.get("prime_blob_enable"); } Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const @@ -583,7 +583,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings; + Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; if (! (extruder_settings.get("prime_blob_enable") && mesh_group_settings.get("extruder_prime_pos_abs"))) { continue; @@ -608,7 +608,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings; + Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); Polygons extruder_border = disallowed_areas; extruder_border.translate(translation); @@ -633,7 +633,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings; + Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); for (size_t other_extruder_nr = 0; other_extruder_nr < extruder_is_used.size(); other_extruder_nr++) { @@ -642,7 +642,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[other_extruder_nr].settings; + Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[other_extruder_nr].settings_; Point other_translation(other_extruder_settings.get("machine_nozzle_offset_x"), other_extruder_settings.get("machine_nozzle_offset_y")); Polygons translated_border = border; translated_border.translate(translation - other_translation); diff --git a/src/support.cpp b/src/support.cpp index 233c8ab499..fb896445ce 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -92,11 +92,11 @@ void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); - const EFillMethod support_pattern = infill_extruder.settings.get("support_pattern"); - const coord_t support_line_width = infill_extruder.settings.get("support_line_width"); + const EFillMethod support_pattern = infill_extruder.settings_.get("support_pattern"); + const coord_t support_line_width = infill_extruder.settings_.get("support_line_width"); // The wall line count is used for calculating insets, and we generate support infill patterns within the insets - const size_t wall_line_count = infill_extruder.settings.get("support_wall_count"); + const size_t wall_line_count = infill_extruder.settings_.get("support_wall_count"); // Generate separate support islands for (LayerIndex layer_nr = 0; layer_nr < total_layer_count - 1; ++layer_nr) @@ -118,7 +118,7 @@ void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( coord_t support_line_width_here = support_line_width; if (layer_nr == 0 && mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) { - support_line_width_here *= infill_extruder.settings.get("initial_layer_line_width_factor"); + support_line_width_here *= infill_extruder.settings_.get("initial_layer_line_width_factor"); } // We don't generate insets and infill area for the parts yet because later the skirt/brim and prime // tower will remove themselves from the support, so the outlines of the parts can be changed. @@ -183,11 +183,11 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const size_t total_layer_count = storage.print_layer_count; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); - const coord_t gradual_support_step_height = infill_extruder.settings.get("gradual_support_infill_step_height"); - const size_t max_density_steps = infill_extruder.settings.get("gradual_support_infill_steps"); + const coord_t gradual_support_step_height = infill_extruder.settings_.get("gradual_support_infill_step_height"); + const size_t max_density_steps = infill_extruder.settings_.get("gradual_support_infill_steps"); - const coord_t wall_count = infill_extruder.settings.get("support_wall_count"); - const coord_t wall_width = infill_extruder.settings.get("support_line_width"); + const coord_t wall_count = infill_extruder.settings_.get("support_wall_count"); + const coord_t wall_width = infill_extruder.settings_.get("support_line_width"); // no early-out for this function; it needs to initialize the [infill_area_per_combine_per_density] double layer_skip_count{ 8.0 }; // skip every so many layers as to ignore small gaps in the model making computation more easy @@ -228,7 +228,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) support_infill_part.inset_count_to_generate, wall_width, 0, - infill_extruder.settings, + infill_extruder.settings_, layer_nr, SectionType::SUPPORT); const AABB& this_part_boundary_box = support_infill_part.outline_boundary_box; @@ -320,7 +320,7 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) // How many support infill layers to combine to obtain the requested sparse thickness. const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); const size_t combine_layers_amount - = std::max(uint64_t(1), round_divide(infill_extruder.settings.get("support_infill_sparse_thickness"), std::max(layer_height, coord_t(1)))); + = std::max(uint64_t(1), round_divide(infill_extruder.settings_.get("support_infill_sparse_thickness"), std::max(layer_height, coord_t(1)))); if (combine_layers_amount <= 1) { return; @@ -462,7 +462,7 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp { Polygons joined; - const Settings& infill_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").settings; + const Settings& infill_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").settings_; const AngleRadians conical_support_angle = infill_settings.get("support_conical_angle"); const coord_t layer_thickness = infill_settings.get("layer_height"); coord_t conical_support_offset; @@ -515,7 +515,7 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp continue; } const ExtruderTrain& other_extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; - extra_skirt_line_width += other_extruder.settings.get("skirt_brim_line_width") * other_extruder.settings.get("initial_layer_line_width_factor"); + extra_skirt_line_width += other_extruder.settings_.get("skirt_brim_line_width") * other_extruder.settings_.get("initial_layer_line_width_factor"); } const std::vector skirt_brim_extruders = mesh_group_settings.get>("skirt_brim_extruder_nr"); auto adhesion_width_str{ "brim_width" }; @@ -533,18 +533,18 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp adhesion_size = std::max( adhesion_size, coord_t( - skirt_brim_extruder.settings.get(adhesion_width_str) - + skirt_brim_extruder.settings.get("skirt_brim_line_width") - * (skirt_brim_extruder.settings.get(adhesion_line_count_str) - 1) // - 1 because the line is also included in extra_skirt_line_width - * skirt_brim_extruder.settings.get("initial_layer_line_width_factor") + skirt_brim_extruder.settings_.get(adhesion_width_str) + + skirt_brim_extruder.settings_.get("skirt_brim_line_width") + * (skirt_brim_extruder.settings_.get(adhesion_line_count_str) - 1) // - 1 because the line is also included in extra_skirt_line_width + * skirt_brim_extruder.settings_.get("initial_layer_line_width_factor") + extra_skirt_line_width)); } break; case EPlatformAdhesion::RAFT: { - adhesion_size = std::max({ mesh_group_settings.get("raft_base_extruder_nr").settings.get("raft_margin"), - mesh_group_settings.get("raft_interface_extruder_nr").settings.get("raft_margin"), - mesh_group_settings.get("raft_surface_extruder_nr").settings.get("raft_margin") }); + adhesion_size = std::max({ mesh_group_settings.get("raft_base_extruder_nr").settings_.get("raft_margin"), + mesh_group_settings.get("raft_interface_extruder_nr").settings_.get("raft_margin"), + mesh_group_settings.get("raft_surface_extruder_nr").settings_.get("raft_margin") }); break; } case EPlatformAdhesion::NONE: @@ -657,9 +657,9 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) // use extruder train settings rather than the per-object settings of the first support mesh encountered. // because all support meshes are processed at the same time it doesn't make sense to use the per-object settings of the first support mesh encountered. // instead we must use the support extruder settings, which is the settings base common to all support meshes. - infill_settings = &mesh_group_settings.get("support_infill_extruder_nr").settings; - roof_settings = &mesh_group_settings.get("support_roof_extruder_nr").settings; - bottom_settings = &mesh_group_settings.get("support_bottom_extruder_nr").settings; + infill_settings = &mesh_group_settings.get("support_infill_extruder_nr").settings_; + roof_settings = &mesh_group_settings.get("support_roof_extruder_nr").settings_; + bottom_settings = &mesh_group_settings.get("support_bottom_extruder_nr").settings_; if (mesh.settings.get("support_mesh_drop_down")) { support_meshes_drop_down_handled = true; @@ -711,8 +711,8 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) { const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); - const EFillMethod& support_pattern = infill_extruder.settings.get("support_pattern"); - if ((support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D) && infill_extruder.settings.get("support_line_distance") > 0) + const EFillMethod& support_pattern = infill_extruder.settings_.get("support_pattern"); + if ((support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D) && infill_extruder.settings_.get("support_line_distance") > 0) { AABB3D aabb; for (unsigned int mesh_idx = 0; mesh_idx < storage.meshes.size(); mesh_idx++) @@ -728,7 +728,7 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) // use extruder train settings rather than the per-object settings of the first support mesh encountered. // because all support meshes are processed at the same time it doesn't make sense to use the per-object settings of the first support mesh encountered. // instead we must use the support extruder settings, which is the settings base common to all support meshes. - infill_settings = mesh_group_settings.get("support_infill_extruder_nr").settings; + infill_settings = mesh_group_settings.get("support_infill_extruder_nr").settings_; } const coord_t aabb_expansion = infill_settings.get("support_offset"); AABB3D aabb_here(mesh.bounding_box); @@ -737,14 +737,14 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) aabb.include(aabb_here); } - std::string cross_subdisivion_spec_image_file = infill_extruder.settings.get("cross_support_density_image"); + std::string cross_subdisivion_spec_image_file = infill_extruder.settings_.get("cross_support_density_image"); std::ifstream cross_fs(cross_subdisivion_spec_image_file.c_str()); if (cross_subdisivion_spec_image_file != "" && cross_fs.good()) { storage.support.cross_fill_provider = std::make_shared( aabb, - infill_extruder.settings.get("support_line_distance"), - infill_extruder.settings.get("support_line_width"), + infill_extruder.settings_.get("support_line_distance"), + infill_extruder.settings_.get("support_line_width"), cross_subdisivion_spec_image_file); } else @@ -755,8 +755,8 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) } storage.support.cross_fill_provider = std::make_shared( aabb, - infill_extruder.settings.get("support_line_distance"), - infill_extruder.settings.get("support_line_width")); + infill_extruder.settings_.get("support_line_distance"), + infill_extruder.settings_.get("support_line_width")); } } } @@ -1071,7 +1071,7 @@ void AreaSupport::generateSupportAreasForMesh( const double tan_angle = tan(angle) - 0.01; // the XY-component of the supportAngle constexpr bool no_support = false; constexpr bool no_prime_tower = false; - const coord_t support_line_width = mesh_group_settings.get("support_infill_extruder_nr").settings.get("support_line_width"); + const coord_t support_line_width = mesh_group_settings.get("support_infill_extruder_nr").settings_.get("support_line_width"); const double sloped_areas_angle = mesh.settings.get("support_bottom_stair_step_min_slope"); const coord_t sloped_area_detection_width = 10 + static_cast(layer_thickness / std::tan(sloped_areas_angle)) / 2; const double minimum_support_area = mesh.settings.get("minimum_support_area"); @@ -1144,19 +1144,19 @@ void AreaSupport::generateSupportAreasForMesh( coord_t smoothing_distance; { // compute best smoothing_distance const ExtruderTrain& infill_train = mesh_group_settings.get("support_infill_extruder_nr"); - const coord_t infill_line_width = infill_train.settings.get("support_line_width"); + const coord_t infill_line_width = infill_train.settings_.get("support_line_width"); smoothing_distance = infill_line_width; if (mesh.settings.get("support_roof_enable")) { const ExtruderTrain& roof_train = mesh_group_settings.get("support_roof_extruder_nr"); - const coord_t roof_line_width = roof_train.settings.get("support_roof_line_width"); + const coord_t roof_line_width = roof_train.settings_.get("support_roof_line_width"); smoothing_distance = std::max(smoothing_distance, roof_line_width); } if (mesh.settings.get("support_bottom_enable")) { const ExtruderTrain& bottom_train = mesh_group_settings.get("support_bottom_extruder_nr"); - const coord_t bottom_line_width = bottom_train.settings.get("support_bottom_line_width"); + const coord_t bottom_line_width = bottom_train.settings_.get("support_bottom_line_width"); smoothing_distance = std::max(smoothing_distance, bottom_line_width); } } @@ -1749,8 +1749,8 @@ void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMe const coord_t z_distance_bottom = round_up_divide(mesh.settings.get("support_bottom_distance"), layer_height); // Number of layers between support bottom and model. const size_t skip_layer_count = std::max(uint64_t(1), round_divide(mesh.settings.get("support_interface_skip_height"), layer_height)); // Resolution of generating support bottoms above model. - const coord_t bottom_line_width = mesh_group_settings.get("support_bottom_extruder_nr").settings.get("support_bottom_line_width"); - const coord_t bottom_outline_offset = mesh_group_settings.get("support_bottom_extruder_nr").settings.get("support_bottom_offset"); + const coord_t bottom_line_width = mesh_group_settings.get("support_bottom_extruder_nr").settings_.get("support_bottom_line_width"); + const coord_t bottom_outline_offset = mesh_group_settings.get("support_bottom_extruder_nr").settings_.get("support_bottom_offset"); const size_t scan_count = std::max(size_t(1), (bottom_layer_count - 1) / skip_layer_count); // How many measurements to take to generate bottom areas. const float z_skip = std::max( @@ -1786,8 +1786,8 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh const coord_t z_distance_top = round_up_divide(mesh.settings.get("support_top_distance"), layer_height); // Number of layers between support roof and model. const size_t skip_layer_count = std::max(uint64_t(1), round_divide(mesh.settings.get("support_interface_skip_height"), layer_height)); // Resolution of generating support roof below model. - const coord_t roof_line_width = mesh_group_settings.get("support_roof_extruder_nr").settings.get("support_roof_line_width"); - const coord_t roof_outline_offset = mesh_group_settings.get("support_roof_extruder_nr").settings.get("support_roof_offset"); + const coord_t roof_line_width = mesh_group_settings.get("support_roof_extruder_nr").settings_.get("support_roof_line_width"); + const coord_t roof_outline_offset = mesh_group_settings.get("support_roof_extruder_nr").settings_.get("support_roof_offset"); const size_t scan_count = std::max(size_t(1), (roof_layer_count - 1) / skip_layer_count); // How many measurements to take to generate roof areas. const float z_skip = std::max( diff --git a/src/utils/SquareGrid.cpp b/src/utils/SquareGrid.cpp index c02c2cde59..46f7a41534 100644 --- a/src/utils/SquareGrid.cpp +++ b/src/utils/SquareGrid.cpp @@ -8,7 +8,7 @@ using namespace cura; -SquareGrid::SquareGrid(coord_t cell_size) : cell_size(cell_size) +SquareGrid::SquareGrid(coord_t cell_size) : cell_size_(cell_size) { assert(cell_size > 0U); } @@ -28,7 +28,7 @@ SquareGrid::grid_coord_t SquareGrid::toGridCoord(const coord_t& coord) const // just changes the running time slightly. The change in running // time from this is probably not worth doing a proper floor // operation. - return coord / cell_size; + return coord / cell_size_; } @@ -46,7 +46,7 @@ cura::coord_t SquareGrid::toLowerCoord(const grid_coord_t& grid_coord) const // just changes the running time slightly. The change in running // time from this is probably not worth doing a proper floor // operation. - return grid_coord * cell_size; + return grid_coord * cell_size_; } @@ -199,5 +199,5 @@ SquareGrid::grid_coord_t SquareGrid::nonzeroSign(const grid_coord_t z) const coord_t SquareGrid::getCellSize() const { - return cell_size; + return cell_size_; } diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index 22150a2b95..0c006ba910 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -75,7 +75,7 @@ bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function 0) * cell_size[dim]; + coord_t crossing_boundary = toLowerCoord(current_cell[dim], dim) + (diff[dim] > 0) * cell_size_[dim]; float percentage_along_line_here = (crossing_boundary - start[dim]) / static_cast(diff[dim]); if (percentage_along_line_here < percentage_along_line) { @@ -116,7 +116,7 @@ bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::funct bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size / 2; + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size_ / 2; if (translation.x_ && translation.y_) { translated.translate(Point(translation.x_, translation.y_)); @@ -127,7 +127,7 @@ bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const Dil bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = -cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + const Point3 translation = -cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { translated.translate(Point(translation.x_, translation.y_)); @@ -137,10 +137,10 @@ bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { - std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point(cell_size.x_, cell_size.y_)); + std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point(cell_size_.x_, cell_size_.y_)); for (Point p : skin_points) { - bool continue_ = process_cell_func(toGridPoint(Point3(p.X + cell_size.x_ / 2, p.Y + cell_size.y_ / 2, z))); + bool continue_ = process_cell_func(toGridPoint(Point3(p.X + cell_size_.x_ / 2, p.Y + cell_size_.y_ / 2, z))); if (! continue_) { return false; @@ -152,8 +152,8 @@ bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::functio bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size / 2 // offset half a cell when using a n even kernel - - cell_size / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel + - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { translated.translate(Point(translation.x_, translation.y_)); diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index 3fb07c9be9..696bbaffcf 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -246,8 +246,8 @@ TEST_P(GriffinHeaderTest, HeaderGriffinFormat) { Application::getInstance().current_slice->scene.extruders.emplace_back(extruder_index, nullptr); ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders.back(); - train.settings.add("machine_nozzle_size", "0.4"); - train.settings.add("machine_nozzle_id", "TestNozzle"); + train.settings_.add("machine_nozzle_size", "0.4"); + train.settings_.add("machine_nozzle_id", "TestNozzle"); } const std::vector extruder_is_used(num_extruders, true); @@ -326,7 +326,7 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) { Application::getInstance().current_slice->scene.extruders.emplace_back(extruder_index, nullptr); ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders.back(); - train.settings.add("machine_nozzle_size", "0.4"); + train.settings_.add("machine_nozzle_size", "0.4"); } gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); @@ -459,16 +459,16 @@ TEST_F(GCodeExportTest, SwitchExtruderSimple) scene.extruders.emplace_back(0, nullptr); ExtruderTrain& train1 = scene.extruders.back(); - train1.settings.add("machine_extruder_start_code", ";FIRST EXTRUDER START G-CODE!"); - train1.settings.add("machine_extruder_end_code", ";FIRST EXTRUDER END G-CODE!"); - train1.settings.add("machine_firmware_retract", "True"); - train1.settings.add("retraction_enable", "True"); + train1.settings_.add("machine_extruder_start_code", ";FIRST EXTRUDER START G-CODE!"); + train1.settings_.add("machine_extruder_end_code", ";FIRST EXTRUDER END G-CODE!"); + train1.settings_.add("machine_firmware_retract", "True"); + train1.settings_.add("retraction_enable", "True"); scene.extruders.emplace_back(1, nullptr); ExtruderTrain& train2 = scene.extruders.back(); - train2.settings.add("machine_extruder_start_code", ";SECOND EXTRUDER START G-CODE!"); - train2.settings.add("machine_extruder_end_code", ";SECOND EXTRUDER END G-CODE!"); - train2.settings.add("machine_firmware_retract", "True"); - train2.settings.add("retraction_enable", "True"); + train2.settings_.add("machine_extruder_start_code", ";SECOND EXTRUDER START G-CODE!"); + train2.settings_.add("machine_extruder_end_code", ";SECOND EXTRUDER END G-CODE!"); + train2.settings_.add("machine_firmware_retract", "True"); + train2.settings_.add("retraction_enable", "True"); RetractionConfig no_retraction; no_retraction.distance = 0; @@ -489,7 +489,7 @@ TEST_F(GCodeExportTest, WriteZHopStartZero) TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) { Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; constexpr coord_t hop_height = 3000; gcode.writeZhopStart(hop_height); @@ -499,7 +499,7 @@ TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopStartCustomSpeed) { Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; constexpr coord_t hop_height = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. @@ -517,7 +517,7 @@ TEST_F(GCodeExportTest, WriteZHopEndZero) TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) { Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; gcode.is_z_hopped = 3000; gcode.writeZhopEnd(); @@ -527,7 +527,7 @@ TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopEndCustomSpeed) { Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings.add("speed_z_hop", "1"); + Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); gcode.current_layer_z = 2000; gcode.is_z_hopped = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. @@ -649,7 +649,7 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) gcode.currentSpeed = 1.0; Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); Application::getInstance().current_slice->scene.extruders.emplace_back(0, &Application::getInstance().current_slice->scene.current_mesh_group->settings); - Application::getInstance().current_slice->scene.extruders.back().settings.add("machine_firmware_retract", "false"); + Application::getInstance().current_slice->scene.extruders.back().settings_.add("machine_firmware_retract", "false"); WipeScriptConfig config; config.retraction_enable = true; diff --git a/tests/arcus/ArcusCommunicationPrivateTest.cpp b/tests/arcus/ArcusCommunicationPrivateTest.cpp index 1538269483..b35f7fdf25 100644 --- a/tests/arcus/ArcusCommunicationPrivateTest.cpp +++ b/tests/arcus/ArcusCommunicationPrivateTest.cpp @@ -119,7 +119,7 @@ TEST_F(ArcusCommunicationPrivateTest, ReadSingleExtruderSettingsMessage) instance->readExtruderSettingsMessage(messages); ASSERT_EQ(size_t(1), Application::getInstance().current_slice->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; - EXPECT_EQ(setting_value, Application::getInstance().current_slice->scene.extruders[0].settings.get("test_setting")); + EXPECT_EQ(setting_value, Application::getInstance().current_slice->scene.extruders[0].settings_.get("test_setting")); } TEST_F(ArcusCommunicationPrivateTest, ReadMultiExtruderSettingsMessage) @@ -147,8 +147,8 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMultiExtruderSettingsMessage) instance->readExtruderSettingsMessage(messages); ASSERT_EQ(size_t(2), Application::getInstance().current_slice->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; - EXPECT_EQ(std::string("First"), Application::getInstance().current_slice->scene.extruders[0].settings.get("What extruder are you?")); - EXPECT_EQ(std::string("Second"), Application::getInstance().current_slice->scene.extruders[1].settings.get("What extruder are you?")); + EXPECT_EQ(std::string("First"), Application::getInstance().current_slice->scene.extruders[0].settings_.get("What extruder are you?")); + EXPECT_EQ(std::string("Second"), Application::getInstance().current_slice->scene.extruders[1].settings_.get("What extruder are you?")); } TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) From 5e849dc8c1d3112d3929223746c6aa5b4dbda42a Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 10:13:16 +0100 Subject: [PATCH 056/218] Fixed variable shadowing warnings --- include/PathOrder.h | 8 +- include/PathOrderMonotonic.h | 94 +++++++------- include/PathOrderOptimizer.h | 124 +++++++++---------- include/PathOrdering.h | 20 +-- include/gcodeExport.h | 8 +- include/pathPlanning/LinePolygonsCrossings.h | 34 ++--- src/FffGcodeWriter.cpp | 6 +- src/InsetOrderOptimizer.cpp | 16 +-- src/LayerPlan.cpp | 22 ++-- src/PathOrderPath.cpp | 16 +-- src/gcodeExport.cpp | 2 +- src/pathPlanning/LinePolygonsCrossings.cpp | 98 +++++++-------- tests/PathOrderMonotonicTest.cpp | 4 +- 13 files changed, 226 insertions(+), 226 deletions(-) diff --git a/include/PathOrder.h b/include/PathOrder.h index 5861d7aeb0..9b909a6605 100644 --- a/include/PathOrder.h +++ b/include/PathOrder.h @@ -110,18 +110,18 @@ class PathOrder { for(PathOrdering& path : paths) { - if(path.is_closed) //Already a polygon. No need to detect loops. + if(path.is_closed_) //Already a polygon. No need to detect loops. { continue; } - if(path.converted->size() < 3) //Not enough vertices to really be a closed loop. + if(path.converted_->size() < 3) //Not enough vertices to really be a closed loop. { continue; } - if(vSize2(path.converted->back() - path.converted->front()) < coincident_point_distance * coincident_point_distance) + if(vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance * coincident_point_distance) { //Endpoints are really close to one another. Consider it a closed loop. - path.is_closed = true; + path.is_closed_ = true; } } } diff --git a/include/PathOrderMonotonic.h b/include/PathOrderMonotonic.h index 9501ca7e32..fa35bb513a 100644 --- a/include/PathOrderMonotonic.h +++ b/include/PathOrderMonotonic.h @@ -62,7 +62,7 @@ class PathOrderMonotonic : public PathOrder //Get the vertex data and store it in the paths. for(Path& path : this->paths) { - path.converted = path.getVertexData(); + path.converted_ = path.getVertexData(); } std::vector reordered; //To store the result in. At the end, we'll std::swap with the real paths. @@ -73,7 +73,7 @@ class PathOrderMonotonic : public PathOrder this->detectLoops(); //Always filter out loops. We don't specifically want to print those in monotonic order. for(Path& path : this->paths) { - if(path.is_closed || path.vertices->size() <= 1) + if(path.is_closed_ || path.vertices_->size() <= 1) { reordered.push_back(path); } @@ -81,18 +81,18 @@ class PathOrderMonotonic : public PathOrder { polylines.push_back(&path); // Assign an invalid starting vertex to indicate we don't know the starting point yet. - polylines.back()->start_vertex = polylines.back()->converted->size(); + polylines.back()->start_vertex_ = polylines.back()->converted_->size(); } } //Sort the polylines by their projection on the monotonic vector. This helps find adjacent lines quickly. std::sort(polylines.begin(), polylines.end(), [this](Path* a, Path* b) { - const coord_t a_start_projection = dot(a->converted->front(), monotonic_vector); - const coord_t a_end_projection = dot(a->converted->back(), monotonic_vector); + const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector); + const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector); const coord_t a_projection = std::min(a_start_projection, a_end_projection); //The projection of a path is the endpoint furthest back of the two endpoints. - const coord_t b_start_projection = dot(b->converted->front(), monotonic_vector); - const coord_t b_end_projection = dot(b->converted->back(), monotonic_vector); + const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector); + const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector); const coord_t b_projection = std::min(b_start_projection, b_end_projection); return a_projection < b_projection; @@ -101,10 +101,10 @@ class PathOrderMonotonic : public PathOrder SparsePointGridInclusive line_bucket_grid(MM2INT(2)); //Grid size of 2mm. for(Path* polyline : polylines) { - if(! polyline->converted->empty()) + if(! polyline->converted_->empty()) { - line_bucket_grid.insert(polyline->converted->front(), polyline); - line_bucket_grid.insert(polyline->converted->back(), polyline); + line_bucket_grid.insert(polyline->converted_->front(), polyline); + line_bucket_grid.insert(polyline->converted_->back(), polyline); } } @@ -191,13 +191,13 @@ class PathOrderMonotonic : public PathOrder std::vector starting_lines_monotonic; starting_lines_monotonic.resize(starting_lines.size()); std::partial_sort_copy(starting_lines.begin(), starting_lines.end(), starting_lines_monotonic.begin(), starting_lines_monotonic.end(), [this](Path* a, Path* b) { - const coord_t a_start_projection = dot(a->converted->front(), monotonic_vector); - const coord_t a_end_projection = dot(a->converted->back(), monotonic_vector); + const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector); + const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector); const coord_t a_projection_min = std::min(a_start_projection, a_end_projection); //The projection of a path is the endpoint furthest back of the two endpoints. const coord_t a_projection_max = std::max(a_start_projection, a_end_projection); //But in case of ties, the other endpoint counts too. Important for polylines where multiple endpoints have the same position! - const coord_t b_start_projection = dot(b->converted->front(), monotonic_vector); - const coord_t b_end_projection = dot(b->converted->back(), monotonic_vector); + const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector); + const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector); const coord_t b_projection_min = std::min(b_start_projection, b_end_projection); const coord_t b_projection_max = std::max(b_start_projection, b_end_projection); @@ -266,22 +266,22 @@ class PathOrderMonotonic : public PathOrder */ void optimizeClosestStartPoint(Path& path, Point& current_pos) { - if(path.start_vertex == path.converted->size()) + if(path.start_vertex_ == path.converted_->size()) { - const coord_t dist_start = vSize2(current_pos - path.converted->front()); - const coord_t dist_end = vSize2(current_pos - path.converted->back()); + const coord_t dist_start = vSize2(current_pos - path.converted_->front()); + const coord_t dist_end = vSize2(current_pos - path.converted_->back()); if(dist_start < dist_end) { - path.start_vertex = 0; - path.backwards = false; + path.start_vertex_ = 0; + path.backwards_ = false; } else { - path.start_vertex = path.converted->size() - 1; - path.backwards = true; + path.start_vertex_ = path.converted_->size() - 1; + path.backwards_ = true; } } - current_pos = (*path.converted)[path.converted->size() - 1 - path.start_vertex]; //Opposite of the start vertex. + current_pos = (*path.converted_)[path.converted_->size() - 1 - path.start_vertex_]; //Opposite of the start vertex. } /*! @@ -298,16 +298,16 @@ class PathOrderMonotonic : public PathOrder std::deque findPolylineString(Path* polyline, const SparsePointGridInclusive& line_bucket_grid, const Point monotonic_vector) { std::deque result; - if(polyline->converted->empty()) + if(polyline->converted_->empty()) { return result; } //Find the two endpoints of the polyline string, on either side. result.push_back(polyline); - polyline->start_vertex = 0; - Point first_endpoint = polyline->converted->front(); - Point last_endpoint = polyline->converted->back(); + polyline->start_vertex_ = 0; + Point first_endpoint = polyline->converted_->front(); + Point last_endpoint = polyline->converted_->back(); std::vector> lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance); auto close_line_before = std::find_if(lines_before.begin(), lines_before.end(), [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { return canConnectToPolyline(first_endpoint, found_path); @@ -322,9 +322,9 @@ class PathOrderMonotonic : public PathOrder Path* first = close_line_before->val; result.push_front(first); //Store this one in the sequence. It's a good one. size_t farthest_vertex = getFarthestEndpoint(first, close_line_before->point); //Get to the opposite side. - first->start_vertex = farthest_vertex; - first->backwards = farthest_vertex != 0; - first_endpoint = (*first->converted)[farthest_vertex]; + first->start_vertex_ = farthest_vertex; + first->backwards_ = farthest_vertex != 0; + first_endpoint = (*first->converted_)[farthest_vertex]; lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance); close_line_before = std::find_if(lines_before.begin(), lines_before.end(), [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { return canConnectToPolyline(first_endpoint, found_path); @@ -335,9 +335,9 @@ class PathOrderMonotonic : public PathOrder Path* last = close_line_after->val; result.push_back(last); size_t farthest_vertex = getFarthestEndpoint(last, close_line_after->point); //Get to the opposite side. - last->start_vertex = (farthest_vertex == 0) ? last->converted->size() - 1 : 0; - last->backwards = farthest_vertex != 0; - last_endpoint = (*last->converted)[farthest_vertex]; + last->start_vertex_ = (farthest_vertex == 0) ? last->converted_->size() - 1 : 0; + last->backwards_ = farthest_vertex != 0; + last_endpoint = (*last->converted_)[farthest_vertex]; lines_after = line_bucket_grid.getNearby(last_endpoint, coincident_point_distance); close_line_after = std::find_if(lines_after.begin(), lines_after.end(), [last_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { return canConnectToPolyline(last_endpoint, found_path); @@ -353,14 +353,14 @@ class PathOrderMonotonic : public PathOrder std::reverse(result.begin(), result.end()); for(Path* path : result) //Also reverse their start_vertex. { - path->start_vertex = (path->start_vertex == 0) ? path->converted->size() - 1 : 0; - path->backwards = !path->backwards; + path->start_vertex_ = (path->start_vertex_ == 0) ? path->converted_->size() - 1 : 0; + path->backwards_ = !path->backwards_; } } if(result.size() == 1) { - result[0]->start_vertex = result[0]->converted->size(); //Reset start vertex as "unknown" again if it's not a string of polylines. + result[0]->start_vertex_ = result[0]->converted_->size(); //Reset start vertex as "unknown" again if it's not a string of polylines. } return result; } @@ -374,11 +374,11 @@ class PathOrderMonotonic : public PathOrder */ size_t getFarthestEndpoint(Path* polyline, const Point point) { - const coord_t front_dist = vSize2(polyline->converted->front() - point); - const coord_t back_dist = vSize2(polyline->converted->back() - point); + const coord_t front_dist = vSize2(polyline->converted_->front() - point); + const coord_t back_dist = vSize2(polyline->converted_->back() - point); if(front_dist < back_dist) { - return polyline->converted->size() - 1; + return polyline->converted_->size() - 1; } else { @@ -400,15 +400,15 @@ class PathOrderMonotonic : public PathOrder { const coord_t max_adjacent_projected_distance = max_adjacent_distance * monotonic_vector_resolution; //How far this extends in the monotonic direction, to make sure we only go up to max_adjacent_distance in that direction. - const coord_t start_monotonic = dot((*polyline_it)->converted->front(), monotonic_vector); - const coord_t end_monotonic = dot((*polyline_it)->converted->back(), monotonic_vector); + const coord_t start_monotonic = dot((*polyline_it)->converted_->front(), monotonic_vector); + const coord_t end_monotonic = dot((*polyline_it)->converted_->back(), monotonic_vector); const coord_t my_farthest_monotonic = std::max(start_monotonic, end_monotonic); const coord_t my_closest_monotonic = std::min(start_monotonic, end_monotonic); const coord_t my_farthest_monotonic_padded = my_farthest_monotonic + max_adjacent_projected_distance; const coord_t my_closest_monotonic_padded = my_closest_monotonic - max_adjacent_projected_distance; //How far this line reaches in the perpendicular direction -- the range at which the line overlaps other lines. - const coord_t my_start = dot((*polyline_it)->converted->front(), perpendicular); - const coord_t my_end = dot((*polyline_it)->converted->back(), perpendicular); + const coord_t my_start = dot((*polyline_it)->converted_->front(), perpendicular); + const coord_t my_end = dot((*polyline_it)->converted_->back(), perpendicular); const coord_t my_farthest = std::max(my_start, my_end); const coord_t my_closest = std::min(my_start, my_end); const coord_t my_farthest_padded = my_farthest + max_adjacent_projected_distance; @@ -418,8 +418,8 @@ class PathOrderMonotonic : public PathOrder for(auto overlapping_line = polyline_it + 1; overlapping_line != polylines.end(); overlapping_line++) { //Don't go beyond the maximum adjacent distance. - const coord_t start_their_projection = dot((*overlapping_line)->converted->front(), monotonic_vector); - const coord_t end_their_projection = dot((*overlapping_line)->converted->back(), monotonic_vector); + const coord_t start_their_projection = dot((*overlapping_line)->converted_->front(), monotonic_vector); + const coord_t end_their_projection = dot((*overlapping_line)->converted_->back(), monotonic_vector); const coord_t their_farthest_projection = std::max(start_their_projection, end_their_projection); const coord_t their_closest_projection = std::min(start_their_projection, end_their_projection); // Multiply by the length of the vector since we need to compare actual distances here. @@ -429,8 +429,8 @@ class PathOrderMonotonic : public PathOrder } //Does this one overlap? - const coord_t their_start = dot((*overlapping_line)->converted->front(), perpendicular); - const coord_t their_end = dot((*overlapping_line)->converted->back(), perpendicular); + const coord_t their_start = dot((*overlapping_line)->converted_->front(), perpendicular); + const coord_t their_end = dot((*overlapping_line)->converted_->back(), perpendicular); const coord_t their_farthest = std::max(their_start, their_end); const coord_t their_closest = std::min(their_start, their_end); /*There are 5 possible cases of overlapping: @@ -476,7 +476,7 @@ class PathOrderMonotonic : public PathOrder */ static bool canConnectToPolyline(const Point nearby_endpoint, SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return found_path.val->start_vertex == found_path.val->converted->size() //Don't find any line already in the string. + return found_path.val->start_vertex_ == found_path.val->converted_->size() //Don't find any line already in the string. && vSize2(found_path.point - nearby_endpoint) < coincident_point_distance * coincident_point_distance; //And only find close lines. } }; diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index ae7591db45..8072a501a8 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -4,15 +4,7 @@ #ifndef PATHORDEROPTIMIZER_H #define PATHORDEROPTIMIZER_H -#include "InsetOrderOptimizer.h" // for makeOrderIncludeTransitive -#include "PathOrdering.h" -#include "pathPlanning/CombPath.h" //To calculate the combing distance if we want to use combing. -#include "pathPlanning/LinePolygonsCrossings.h" //To prevent calculating combing distances if we don't cross the combing borders. -#include "settings/EnumSettings.h" //To get the seam settings. -#include "settings/ZSeamConfig.h" //To read the seam configuration. -#include "utils/linearAlg2D.h" //To find the angle of corners to hide seams. -#include "utils/polygonUtils.h" -#include "utils/views/dfs.h" +#include #include #include @@ -23,7 +15,15 @@ #include #include -#include +#include "InsetOrderOptimizer.h" // for makeOrderIncludeTransitive +#include "PathOrdering.h" +#include "pathPlanning/CombPath.h" //To calculate the combing distance if we want to use combing. +#include "pathPlanning/LinePolygonsCrossings.h" //To prevent calculating combing distances if we don't cross the combing borders. +#include "settings/EnumSettings.h" //To get the seam settings. +#include "settings/ZSeamConfig.h" //To read the seam configuration. +#include "utils/linearAlg2D.h" //To find the angle of corners to hide seams. +#include "utils/polygonUtils.h" +#include "utils/views/dfs.h" namespace cura { @@ -155,8 +155,8 @@ class PathOrderOptimizer // Get the vertex data and store it in the paths. for (auto& path : paths) { - path.converted = path.getVertexData(); - vertices_to_paths.emplace(path.vertices, &path); + path.converted_ = path.getVertexData(); + vertices_to_paths.emplace(path.vertices_, &path); } // If necessary, check polylines to see if they are actually polygons. @@ -164,10 +164,10 @@ class PathOrderOptimizer { for (auto& path : paths) { - if (! path.is_closed) + if (! path.is_closed_) { // If we want to detect chains, first check if some of the polylines are secretly polygons. - path.is_closed = isLoopingPolyline(path); // If it is, we'll set the seam position correctly later. + path.is_closed_ = isLoopingPolyline(path); // If it is, we'll set the seam position correctly later. } } } @@ -177,21 +177,21 @@ class PathOrderOptimizer SparsePointGridInclusive line_bucket_grid(snap_radius); for (const auto& [i, path] : paths | ranges::views::enumerate) { - if (path.converted->empty()) + if (path.converted_->empty()) { continue; } - if (path.is_closed) + if (path.is_closed_) { - for (const Point& point : *path.converted) + for (const Point& point : *path.converted_) { line_bucket_grid.insert(point, i); // Store by index so that we can also mark them down in the `picked` vector. } } else // For polylines, only insert the endpoints. Those are the only places we can start from so the only relevant vertices to be near to. { - line_bucket_grid.insert(path.converted->front(), i); - line_bucket_grid.insert(path.converted->back(), i); + line_bucket_grid.insert(path.converted_->front(), i); + line_bucket_grid.insert(path.converted_->back(), i); } } @@ -202,11 +202,11 @@ class PathOrderOptimizer { for (auto& path : paths) { - if (! path.is_closed || path.converted->empty()) + if (! path.is_closed_ || path.converted_->empty()) { continue; // Can't pre-compute the seam for open polylines since they're at the endpoint nearest to the current position. } - path.start_vertex = findStartLocation(path, seam_config.pos); + path.start_vertex_ = findStartLocation(path, seam_config.pos); } } @@ -331,16 +331,16 @@ class PathOrderOptimizer optimized_order.push_back(*best_path); picked[best_path] = true; - if (! best_path->converted->empty()) // If all paths were empty, the best path is still empty. We don't upate the current position then. + if (! best_path->converted_->empty()) // If all paths were empty, the best path is still empty. We don't upate the current position then. { - if (best_path->is_closed) + if (best_path->is_closed_) { - current_position = (*best_path->converted)[best_path->start_vertex]; // We end where we started. + current_position = (*best_path->converted_)[best_path->start_vertex_]; // We end where we started. } else { // Pick the other end from where we started. - current_position = best_path->start_vertex == 0 ? best_path->converted->back() : best_path->converted->front(); + current_position = best_path->start_vertex_ == 0 ? best_path->converted_->back() : best_path->converted_->front(); } } } @@ -358,8 +358,8 @@ class PathOrderOptimizer std::unordered_set leaves; for (const auto& path : paths) { - roots.insert(path.vertices); - leaves.insert(path.vertices); + roots.insert(path.vertices_); + leaves.insert(path.vertices_); } // remove all edges from roots with an incoming edge @@ -399,14 +399,14 @@ class PathOrderOptimizer // update local_current_position auto path = vertices_to_paths[best_candidate]; - if (path->is_closed) + if (path->is_closed_) { - local_current_position = (*path->converted)[path->start_vertex]; // We end where we started. + local_current_position = (*path->converted_)[path->start_vertex_]; // We end where we started. } else { // Pick the other end from where we started. - local_current_position = path->start_vertex == 0 ? path->converted->back() : path->converted->front(); + local_current_position = path->start_vertex_ == 0 ? path->converted_->back() : path->converted_->front(); } } @@ -419,16 +419,16 @@ class PathOrderOptimizer // We should make map from node <-> path for this stuff for (auto& path : paths) { - if (path.vertices == current_node) + if (path.vertices_ == current_node) { - if (path.is_closed) + if (path.is_closed_) { - current_position = (*path.converted)[path.start_vertex]; // We end where we started. + current_position = (*path.converted_)[path.start_vertex_]; // We end where we started. } else { // Pick the other end from where we started. - current_position = path.start_vertex == 0 ? path.converted->back() : path.converted->front(); + current_position = path.start_vertex_ == 0 ? path.converted_->back() : path.converted_->front(); } // Add to optimized order @@ -518,10 +518,10 @@ class PathOrderOptimizer for (auto& path : pathsOrderPaths | ranges::views::reverse) { reversed.push_back(path); - reversed.back().backwards = ! reversed.back().backwards; - if (! reversed.back().is_closed) + reversed.back().backwards_ = ! reversed.back().backwards_; + if (! reversed.back().is_closed_) { - reversed.back().start_vertex = reversed.back().converted->size() - 1 - reversed.back().start_vertex; + reversed.back().start_vertex_ = reversed.back().converted_->size() - 1 - reversed.back().start_vertex_; } } @@ -538,7 +538,7 @@ class PathOrderOptimizer } OrderablePath* best_candidate = findClosestPath(start_position, candidate_orderable_paths); - return best_candidate->vertices; + return best_candidate->vertices_; } OrderablePath* findClosestPath(Point start_position, std::vector candidate_paths) @@ -548,7 +548,7 @@ class PathOrderOptimizer for (OrderablePath* path : candidate_paths) { - if (path->converted->empty()) // No vertices in the path. Can't find the start position then or really plan it in. Put that at the end. + if (path->converted_->empty()) // No vertices in the path. Can't find the start position then or really plan it in. Put that at the end. { if (best_distance2 == std::numeric_limits::max()) { @@ -559,15 +559,15 @@ class PathOrderOptimizer const bool precompute_start = seam_config.type == EZSeamType::RANDOM || seam_config.type == EZSeamType::USER_SPECIFIED || seam_config.type == EZSeamType::SHARPEST_CORNER; - if (! path->is_closed || ! precompute_start) // Find the start location unless we've already precomputed it. + if (! path->is_closed_ || ! precompute_start) // Find the start location unless we've already precomputed it. { - path->start_vertex = findStartLocation(*path, start_position); - if (! path->is_closed) // Open polylines start at vertex 0 or vertex N-1. Indicate that they should be reversed if they start at N-1. + path->start_vertex_ = findStartLocation(*path, start_position); + if (! path->is_closed_) // Open polylines start at vertex 0 or vertex N-1. Indicate that they should be reversed if they start at N-1. { - path->backwards = path->start_vertex > 0; + path->backwards_ = path->start_vertex_ > 0; } } - const Point candidate_position = (*path->converted)[path->start_vertex]; + const Point candidate_position = (*path->converted_)[path->start_vertex_]; coord_t distance2 = getDirectDistance(start_position, candidate_position); if (distance2 < best_distance2 && combing_boundary) // If direct distance is longer than best combing distance, the combing distance can never be better, so only compute combing if necessary. @@ -612,16 +612,16 @@ class PathOrderOptimizer */ size_t findStartLocation(const OrderablePath& path, const Point& target_pos) { - if (! path.is_closed) + if (! path.is_closed_) { // For polylines, the seam settings are not applicable. Simply choose the position closest to target_pos then. const coord_t back_distance - = (combing_boundary == nullptr) ? getDirectDistance(path.converted->back(), target_pos) : getCombingDistance(path.converted->back(), target_pos); - if (back_distance < getDirectDistance(path.converted->front(), target_pos) + = (combing_boundary == nullptr) ? getDirectDistance(path.converted_->back(), target_pos) : getCombingDistance(path.converted_->back(), target_pos); + if (back_distance < getDirectDistance(path.converted_->front(), target_pos) || (combing_boundary - && back_distance < getCombingDistance(path.converted->front(), target_pos))) // Lazy or: Only compute combing distance if direct distance is closer. + && back_distance < getCombingDistance(path.converted_->front(), target_pos))) // Lazy or: Only compute combing distance if direct distance is closer. { - return path.converted->size() - 1; // Back end is closer. + return path.converted_->size() - 1; // Back end is closer. } else { @@ -633,16 +633,16 @@ class PathOrderOptimizer if (seam_config.type == EZSeamType::RANDOM) { - size_t vert = getRandomPointInPolygon(*path.converted); + size_t vert = getRandomPointInPolygon(*path.converted_); return vert; } // Precompute segments lengths because we are going to need them multiple times - std::vector segments_sizes(path.converted->size()); + std::vector segments_sizes(path.converted_->size()); coord_t total_length = 0; - for (const auto& [i, here] : **path.converted | ranges::views::enumerate) + for (const auto& [i, here] : **path.converted_ | ranges::views::enumerate) { - const Point& next = (*path.converted)[(i + 1) % path.converted->size()]; + const Point& next = (*path.converted_)[(i + 1) % path.converted_->size()]; const coord_t segment_size = vSize(next - here); segments_sizes[i] = segment_size; total_length += segment_size; @@ -650,7 +650,7 @@ class PathOrderOptimizer size_t best_i; float best_score = std::numeric_limits::infinity(); - for (const auto& [i, here] : **path.converted | ranges::views::drop_last(1) | ranges::views::enumerate) + for (const auto& [i, here] : **path.converted_ | ranges::views::drop_last(1) | ranges::views::enumerate) { // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. @@ -716,7 +716,7 @@ class PathOrderOptimizer // ties are broken by favouring points with lower x-coord // if x-coord for both points are equal then break ties by // favouring points with lower y-coord - const Point& best_point = (*path.converted)[best_i]; + const Point& best_point = (*path.converted_)[best_i]; if (std::abs(here.Y - best_point.Y) <= EPSILON ? best_point.X < here.X : best_point.Y < here.Y) { best_score = std::min(best_score, score); @@ -762,17 +762,17 @@ class PathOrderOptimizer while (travelled_distance < distance) { actual_delta += direction; - segment_size = segments_sizes[(here + actual_delta + size_delta + path.converted->size()) % path.converted->size()]; + segment_size = segments_sizes[(here + actual_delta + size_delta + path.converted_->size()) % path.converted_->size()]; travelled_distance += segment_size; } - const Point& next_pos = (*path.converted)[(here + actual_delta + path.converted->size()) % path.converted->size()]; + const Point& next_pos = (*path.converted_)[(here + actual_delta + path.converted_->size()) % path.converted_->size()]; if (travelled_distance > distance) [[likely]] { // We have overtaken the required distance, go backward on the last segment - int prev = (here + actual_delta - direction + path.converted->size()) % path.converted->size(); - const Point& prev_pos = (*path.converted)[prev]; + int prev = (here + actual_delta - direction + path.converted_->size()) % path.converted_->size(); + const Point& prev_pos = (*path.converted_)[prev]; const Point vector = next_pos - prev_pos; const Point unit_vector = (vector * 1000) / segment_size; @@ -802,7 +802,7 @@ class PathOrderOptimizer static float cornerAngle(const OrderablePath& path, int i, const std::vector& segments_sizes, coord_t total_length, const coord_t angle_query_distance = 1000) { const coord_t bounded_distance = std::min(angle_query_distance, total_length / 2); - const Point& here = (*path.converted)[i]; + const Point& here = (*path.converted_)[i]; const Point next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); const Point previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); @@ -881,11 +881,11 @@ class PathOrderOptimizer bool isLoopingPolyline(const OrderablePath& path) { - if (path.converted->empty()) + if (path.converted_->empty()) { return false; } - return vSize2(path.converted->back() - path.converted->front()) < coincident_point_distance * coincident_point_distance; + return vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance * coincident_point_distance; } }; diff --git a/include/PathOrdering.h b/include/PathOrdering.h index 4893195786..96ce53863d 100644 --- a/include/PathOrdering.h +++ b/include/PathOrdering.h @@ -34,22 +34,22 @@ struct PathOrdering * invalidating the pointers. */ PathOrdering(const PathType& vertices, const bool is_closed = false, const size_t start_vertex = 0, const bool backwards = false) - : vertices(vertices) - , start_vertex(start_vertex) - , is_closed(is_closed) - , backwards(backwards) + : vertices_(vertices) + , start_vertex_(start_vertex) + , is_closed_(is_closed) + , backwards_(backwards) {} /*! * The vertex data of the path. */ - PathType vertices; + PathType vertices_; /*! * Vertex data, converted into a Polygon so that the orderer knows how * to deal with this data. */ - ConstPolygonPointer converted; + ConstPolygonPointer converted_; /*! * Which vertex along the path to start printing with. @@ -57,7 +57,7 @@ struct PathOrdering * If this path represents a polyline, this will always be one of the * endpoints of the path; either 0 or ``vertices->size() - 1``. */ - size_t start_vertex; + size_t start_vertex_; /*! * Whether the path should be closed at the ends or not. @@ -65,7 +65,7 @@ struct PathOrdering * If this path should be closed, it represents a polygon. If it should * not be closed, it represents a polyline. */ - bool is_closed; + bool is_closed_; /*! * Whether the path should be traversed in backwards direction. @@ -73,7 +73,7 @@ struct PathOrdering * For a polyline it may be more efficient to print the path in * backwards direction, if the last vertex is closer than the first. */ - bool backwards; + bool backwards_; /*! @@ -99,7 +99,7 @@ struct PathOrdering * For example, if the ``PathType`` is a list of ``ExtrusionJunction``s, * this will store the coordinates of those junctions. */ - std::optional cached_vertices; + std::optional cached_vertices_; }; } diff --git a/include/gcodeExport.h b/include/gcodeExport.h index c332ef0f52..b16512569b 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -8,6 +8,9 @@ #ifdef BUILD_TESTS #include //To allow tests to use protected members. #endif +#include // for stream.str() +#include + #include "settings/EnumSettings.h" #include "settings/Settings.h" //For MAX_EXTRUDERS. #include "settings/types/LayerIndex.h" @@ -19,9 +22,6 @@ #include "utils/IntPoint.h" #include "utils/NoCopy.h" -#include // for stream.str() -#include - namespace cura { @@ -223,7 +223,7 @@ class GCodeExport : public NoCopy * \param flavor The g-code flavor to print. * \return A serialized form of this flavor. */ - const std::string flavorToString(const EGCodeFlavor& flavor) const; + static std::string flavorToString(const EGCodeFlavor& flavor); /*! * Get the gcode file header (e.g. ";FLAVOR:UltiGCode\n") diff --git a/include/pathPlanning/LinePolygonsCrossings.h b/include/pathPlanning/LinePolygonsCrossings.h index 13a0115964..70802800f2 100644 --- a/include/pathPlanning/LinePolygonsCrossings.h +++ b/include/pathPlanning/LinePolygonsCrossings.h @@ -33,9 +33,9 @@ class LinePolygonsCrossings */ struct Crossing { - size_t poly_idx; //!< The index of the polygon which crosses the scanline - coord_t x; //!< x coordinate of crossings between the polygon and the scanline. - size_t point_idx; //!< The index of the first point of the line segment which crosses the scanline + size_t poly_idx_; //!< The index of the polygon which crosses the scanline + coord_t x_; //!< x coordinate of crossings between the polygon and the scanline. + size_t point_idx_; //!< The index of the first point of the line segment which crosses the scanline /*! * Creates a Crossing with minimal initialization @@ -46,18 +46,18 @@ class LinePolygonsCrossings Crossing(const size_t poly_idx, const coord_t x, const size_t point_idx); }; - std::vector crossings; //!< All crossings of polygons in the LinePolygonsCrossings::boundary with the scanline. + std::vector crossings_; //!< All crossings of polygons in the LinePolygonsCrossings::boundary with the scanline. - const Polygons& boundary; //!< The boundary not to cross during combing. - LocToLineGrid& loc_to_line_grid; //!< Mapping from locations to line segments of \ref LinePolygonsCrossings::boundary - Point startPoint; //!< The start point of the scanline. - Point endPoint; //!< The end point of the scanline. + const Polygons& boundary_; //!< The boundary not to cross during combing. + LocToLineGrid& loc_to_line_grid_; //!< Mapping from locations to line segments of \ref LinePolygonsCrossings::boundary + Point start_point_; //!< The start point of the scanline. + Point end_point_; //!< The end point of the scanline. - int64_t dist_to_move_boundary_point_outside; //!< The distance used to move outside or inside so that a boundary point doesn't intersect with the boundary anymore. Neccesary due to computational rounding problems. Use negative value for insicde combing. + int64_t dist_to_move_boundary_point_outside_; //!< The distance used to move outside or inside so that a boundary point doesn't intersect with the boundary anymore. Neccesary due to computational rounding problems. Use negative value for insicde combing. - PointMatrix transformation_matrix; //!< The transformation which rotates everything such that the scanline is aligned with the x-axis. - Point transformed_startPoint; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_endPoint - Point transformed_endPoint; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_startPoint + PointMatrix transformation_matrix_; //!< The transformation which rotates everything such that the scanline is aligned with the x-axis. + Point transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_endPoint + Point transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_startPoint /*! @@ -123,11 +123,11 @@ class LinePolygonsCrossings * \param dist_to_move_boundary_point_outside Distance used to move a point from a boundary so that it doesn't intersect with it anymore. (Precision issue) */ LinePolygonsCrossings(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point& start, Point& end, int64_t dist_to_move_boundary_point_outside) - : boundary(boundary) - , loc_to_line_grid(loc_to_line_grid) - , startPoint(start) - , endPoint(end) - , dist_to_move_boundary_point_outside(dist_to_move_boundary_point_outside) + : boundary_(boundary) + , loc_to_line_grid_(loc_to_line_grid) + , start_point_(start) + , end_point_(end) + , dist_to_move_boundary_point_outside_(dist_to_move_boundary_point_outside) { } diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 1376f48a23..1167cc0168 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -1562,7 +1562,7 @@ void FffGcodeWriter::addMeshLayerToGCode( part_order_optimizer.optimize(false); for (const PathOrdering& path : part_order_optimizer.paths) { - addMeshPartToGCode(storage, mesh, extruder_nr, mesh_config, *path.vertices, gcode_layer); + addMeshPartToGCode(storage, mesh, extruder_nr, mesh_config, *path.vertices_, gcode_layer); } const std::string extruder_identifier = (mesh.settings.get("roofing_layer_count") > 0) ? "roofing_extruder_nr" : "top_bottom_extruder_nr"; @@ -2642,7 +2642,7 @@ bool FffGcodeWriter::processSkin( for (const PathOrdering& path : part_order_optimizer.paths) { - const SkinPart& skin_part = *path.vertices; + const SkinPart& skin_part = *path.vertices_; added_something = added_something | processSkinPart(storage, gcode_layer, mesh, extruder_nr, mesh_config, skin_part); } @@ -3233,7 +3233,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer // Print the thicker infill lines first. (double or more layer thickness, infill combined with previous layers) for (const PathOrdering& path : ranges::views::concat(island_order_optimizer_initial.paths, island_order_optimizer.paths)) { - const SupportInfillPart& part = *path.vertices; + const SupportInfillPart& part = *path.vertices_; const auto& configs = part.use_fractional_config ? gcode_layer.configs_storage.support_fractional_infill_config : gcode_layer.configs_storage.support_infill_config; // always process the wall overlap if walls are generated diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 05b1fa3f3f..62d9382e62 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -115,24 +115,24 @@ bool InsetOrderOptimizer::addToLayer() for (const PathOrdering& path : order_optimizer.paths) { - if (path.vertices->empty()) + if (path.vertices_->empty()) continue; - const bool is_outer_wall = path.vertices->inset_idx == 0; // or thin wall 'gap filler' - const bool is_gap_filler = path.vertices->is_odd; + const bool is_outer_wall = path.vertices_->inset_idx == 0; // or thin wall 'gap filler' + const bool is_gap_filler = path.vertices_->is_odd; const GCodePathConfig& non_bridge_config = is_outer_wall ? inset_0_non_bridge_config : inset_X_non_bridge_config; const GCodePathConfig& bridge_config = is_outer_wall ? inset_0_bridge_config : inset_X_bridge_config; const coord_t wipe_dist = is_outer_wall && ! is_gap_filler ? wall_0_wipe_dist : wall_x_wipe_dist; const bool retract_before = is_outer_wall ? retract_before_outer_wall : false; - const bool revert_inset = alternate_walls && (path.vertices->inset_idx % 2); + const bool revert_inset = alternate_walls && (path.vertices_->inset_idx % 2); const bool revert_layer = alternate_walls && (layer_nr % 2); - const bool backwards = path.backwards != (revert_inset != revert_layer); - const size_t start_index = (backwards != path.backwards) ? path.vertices->size() - (path.start_vertex + 1) : path.start_vertex; - const bool linked_path = ! path.is_closed; + const bool backwards = path.backwards_ != (revert_inset != revert_layer); + const size_t start_index = (backwards != path.backwards_) ? path.vertices_->size() - (path.start_vertex_ + 1) : path.start_vertex_; + const bool linked_path = ! path.is_closed_; gcode_layer.setIsInside(true); // Going to print walls, which are always inside. - gcode_layer.addWall(*path.vertices, start_index, settings, non_bridge_config, bridge_config, wipe_dist, flow, retract_before, path.is_closed, backwards, linked_path); + gcode_layer.addWall(*path.vertices_, start_index, settings, non_bridge_config, bridge_config, wipe_dist, flow, retract_before, path.is_closed_, backwards, linked_path); added_something = true; } return added_something; diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index da66aa7601..7774241e5d 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -610,7 +610,7 @@ void LayerPlan::addPolygonsByOptimizer( { for (const PathOrdering& path : orderOptimizer.paths) { - addPolygon(*path.vertices, path.start_vertex, path.backwards, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); + addPolygon(*path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } } else @@ -618,7 +618,7 @@ void LayerPlan::addPolygonsByOptimizer( for (int index = orderOptimizer.paths.size() - 1; index >= 0; --index) { const PathOrdering& path = orderOptimizer.paths[index]; - addPolygon(**path.vertices, path.start_vertex, path.backwards, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); + addPolygon(**path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } } } @@ -1166,7 +1166,7 @@ void LayerPlan::addWalls( orderOptimizer.optimize(); for (const PathOrdering& path : orderOptimizer.paths) { - addWall(**path.vertices, path.start_vertex, settings, non_bridge_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract); + addWall(**path.vertices_, path.start_vertex_, settings, non_bridge_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract); } } @@ -1236,9 +1236,9 @@ void LayerPlan::addLinesInGivenOrder( for (size_t order_idx = 0; order_idx < paths.size(); order_idx++) { const PathOrdering& path = paths[order_idx]; - ConstPolygonRef polyline = *path.vertices; - const size_t start_idx = path.start_vertex; - assert(start_idx == 0 || start_idx == polyline.size() - 1 || path.is_closed); + ConstPolygonRef polyline = *path.vertices_; + const size_t start_idx = path.start_vertex_; + assert(start_idx == 0 || start_idx == polyline.size() - 1 || path.is_closed_); const Point start = polyline[start_idx]; if (vSize2(getLastPlannedPositionOrStartingPosition() - start) < line_width_2) @@ -1260,7 +1260,7 @@ void LayerPlan::addLinesInGivenOrder( for (size_t idx = 0; idx < polyline.size(); idx++) { size_t point_idx; - if (path.is_closed) + if (path.is_closed_) { point_idx = (start_idx + idx + 1) % polyline.size(); } @@ -1305,8 +1305,8 @@ void LayerPlan::addLinesInGivenOrder( if (wipe && (order_idx < paths.size() - 1)) { const PathOrdering& next_path = paths[order_idx + 1]; - ConstPolygonRef next_polygon = *next_path.vertices; - const size_t next_start = next_path.start_vertex; + ConstPolygonRef next_polygon = *next_path.vertices_; + const size_t next_start = next_path.start_vertex_; const Point& next_p0 = next_polygon[next_start]; if (vSize2(next_p0 - p1) <= line_width * line_width * 4) { @@ -1361,9 +1361,9 @@ void LayerPlan::addLinesMonotonic( bool last_would_have_been_excluded = false; for (size_t line_idx = 0; line_idx < line_order.paths.size(); ++line_idx) { - const ConstPolygonRef polyline = *line_order.paths[line_idx].vertices; + const ConstPolygonRef polyline = *line_order.paths[line_idx].vertices_; const bool inside_exclusion = is_inside_exclusion(polyline); - const bool next_would_have_been_included = inside_exclusion && (line_idx < line_order.paths.size() - 1 && is_inside_exclusion(*line_order.paths[line_idx + 1].vertices)); + const bool next_would_have_been_included = inside_exclusion && (line_idx < line_order.paths.size() - 1 && is_inside_exclusion(*line_order.paths[line_idx + 1].vertices_)); if (inside_exclusion && last_would_have_been_excluded && next_would_have_been_included) { left_over.add(polyline); diff --git a/src/PathOrderPath.cpp b/src/PathOrderPath.cpp index 510b52e31e..45039c98d4 100644 --- a/src/PathOrderPath.cpp +++ b/src/PathOrderPath.cpp @@ -11,40 +11,40 @@ namespace cura template<> ConstPolygonRef PathOrdering::getVertexData() { - return *vertices; + return *vertices_; } template<> ConstPolygonRef PathOrdering::getVertexData() { - return *vertices; + return *vertices_; } template<> ConstPolygonRef PathOrdering::getVertexData() { - return vertices->outline.outerPolygon(); + return vertices_->outline.outerPolygon(); } template<> ConstPolygonRef PathOrdering::getVertexData() { - return vertices->outline.outerPolygon(); + return vertices_->outline.outerPolygon(); } template<> ConstPolygonRef PathOrdering::getVertexData() { - return vertices->outline.outerPolygon(); + return vertices_->outline.outerPolygon(); } template<> ConstPolygonRef PathOrdering::getVertexData() { - if ( ! cached_vertices) + if ( ! cached_vertices_) { - cached_vertices = vertices->toPolygon(); + cached_vertices_ = vertices_->toPolygon(); } - return ConstPolygonRef(*cached_vertices); + return ConstPolygonRef(*cached_vertices_); } } diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index deb58664dc..68c060dc61 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -170,7 +170,7 @@ void GCodeExport::setInitialTemp(int extruder_nr, double temp) } } -const std::string GCodeExport::flavorToString(const EGCodeFlavor& flavor) const +std::string GCodeExport::flavorToString(const EGCodeFlavor& flavor) { switch (flavor) { diff --git a/src/pathPlanning/LinePolygonsCrossings.cpp b/src/pathPlanning/LinePolygonsCrossings.cpp index 4d5ef8d5dd..85896739b2 100644 --- a/src/pathPlanning/LinePolygonsCrossings.cpp +++ b/src/pathPlanning/LinePolygonsCrossings.cpp @@ -11,77 +11,77 @@ namespace cura { LinePolygonsCrossings::Crossing::Crossing(const size_t poly_idx, const coord_t x, const size_t point_idx) -: poly_idx(poly_idx) -, x(x) -, point_idx(point_idx) +: poly_idx_(poly_idx) +, x_(x) +, point_idx_(point_idx) { } bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obstacles) { - for(unsigned int poly_idx = 0; poly_idx < boundary.size(); poly_idx++) + for(unsigned int poly_idx = 0; poly_idx < boundary_.size(); poly_idx++) { - ConstPolygonRef poly = boundary[poly_idx]; - Point p0 = transformation_matrix.apply(poly[poly.size() - 1]); + ConstPolygonRef poly = boundary_[poly_idx]; + Point p0 = transformation_matrix_.apply(poly[poly.size() - 1]); for(unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { - Point p1 = transformation_matrix.apply(poly[point_idx]); - if ((p0.Y >= transformed_startPoint.Y && p1.Y <= transformed_startPoint.Y) || (p1.Y >= transformed_startPoint.Y && p0.Y <= transformed_startPoint.Y)) + Point p1 = transformation_matrix_.apply(poly[point_idx]); + if ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y)) { // if line segment crosses the line through the transformed start and end point (aka scanline) if (p1.Y == p0.Y) //Line segment is parallel with the scanline. That means that both endpoints lie on the scanline, so they will have intersected with the adjacent line. { p0 = p1; continue; } - const coord_t x = p0.X + (p1.X - p0.X) * (transformed_startPoint.Y - p0.Y) / (p1.Y - p0.Y); // intersection point between line segment and the scanline + const coord_t x = p0.X + (p1.X - p0.X) * (transformed_start_point_.Y - p0.Y) / (p1.Y - p0.Y); // intersection point between line segment and the scanline - if (x >= transformed_startPoint.X && x <= transformed_endPoint.X) + if (x >= transformed_start_point_.X && x <= transformed_end_point_.X) { - if (!((p1.Y == transformed_startPoint.Y && p1.Y < p0.Y) || (p0.Y == transformed_startPoint.Y && p0.Y < p1.Y))) + if (!((p1.Y == transformed_start_point_.Y && p1.Y < p0.Y) || (p0.Y == transformed_start_point_.Y && p0.Y < p1.Y))) { // perform edge case only for line segments on and below the scanline, not for line segments on and above. // \/ will be no crossings and /\ two, but most importantly | will be one crossing. - crossings.emplace_back(poly_idx, x, point_idx); + crossings_.emplace_back(poly_idx, x, point_idx); } } } p0 = p1; } - if (fail_on_unavoidable_obstacles && crossings.size() % 2 == 1) + if (fail_on_unavoidable_obstacles && crossings_.size() % 2 == 1) { // if start area and end area are not the same return false; } } // order crossings by increasing x - std::sort(crossings.begin(), crossings.end(), [](const Crossing& a, const Crossing& b) -> bool { return a.x < b.x; }); + std::sort(crossings_.begin(), crossings_.end(), [](const Crossing& a, const Crossing& b) -> bool { return a.x_ < b.x_; }); return true; } bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() { - Point diff = endPoint - startPoint; + Point diff = end_point_ - start_point_; - transformation_matrix = PointMatrix(diff); - transformed_startPoint = transformation_matrix.apply(startPoint); - transformed_endPoint = transformation_matrix.apply(endPoint); + transformation_matrix_ = PointMatrix(diff); + transformed_start_point_ = transformation_matrix_.apply(start_point_); + transformed_end_point_ = transformation_matrix_.apply(end_point_); - for(ConstPolygonRef poly : boundary) + for(ConstPolygonRef poly : boundary_) { - Point p0 = transformation_matrix.apply(poly.back()); + Point p0 = transformation_matrix_.apply(poly.back()); for(Point p1_ : poly) { - Point p1 = transformation_matrix.apply(p1_); + Point p1 = transformation_matrix_.apply(p1_); // when the boundary just touches the line don't disambiguate between the boundary moving on to actually cross the line // and the boundary bouncing back, resulting in not a real collision - to keep the algorithm simple. // // disregard overlapping line segments; probably the next or previous line segment is not overlapping, but will give a collision // when the boundary line segment fully overlaps with the line segment this edge case is not viewed as a collision - if (p1.Y != p0.Y && ((p0.Y >= transformed_startPoint.Y && p1.Y <= transformed_startPoint.Y) || (p1.Y >= transformed_startPoint.Y && p0.Y <= transformed_startPoint.Y))) + if (p1.Y != p0.Y && ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y))) { - int64_t x = p0.X + (p1.X - p0.X) * (transformed_startPoint.Y - p0.Y) / (p1.Y - p0.Y); + int64_t x = p0.X + (p1.X - p0.X) * (transformed_start_point_.Y - p0.Y) / (p1.Y - p0.Y); - if (x > transformed_startPoint.X && x < transformed_endPoint.X) + if (x > transformed_start_point_.X && x < transformed_end_point_.X) { return true; } @@ -96,11 +96,11 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() bool LinePolygonsCrossings::generateCombingPath(CombPath& combPath, int64_t max_comb_distance_ignored, bool fail_on_unavoidable_obstacles) { - if (shorterThen(endPoint - startPoint, max_comb_distance_ignored) || !lineSegmentCollidesWithBoundary()) + if (shorterThen(end_point_ - start_point_, max_comb_distance_ignored) || !lineSegmentCollidesWithBoundary()) { //We're not crossing any boundaries. So skip the comb generation. - combPath.push_back(startPoint); - combPath.push_back(endPoint); + combPath.push_back(start_point_); + combPath.push_back(end_point_); return true; } @@ -121,46 +121,46 @@ bool LinePolygonsCrossings::generateCombingPath(CombPath& combPath, int64_t max_ void LinePolygonsCrossings::generateBasicCombingPath(CombPath& combPath) { // crossings are ordered by increasing x - for (unsigned i = 0; i < crossings.size(); ++i) + for (unsigned i = 0; i < crossings_.size(); ++i) { // find the next crossing that belongs to the same polygon - for (unsigned j = i + 1; j < crossings.size(); ++j) + for (unsigned j = i + 1; j < crossings_.size(); ++j) { - if (crossings[i].poly_idx == crossings[j].poly_idx) + if (crossings_[i].poly_idx_ == crossings_[j].poly_idx_) { // comb between the two crossings - generateBasicCombingPath(crossings[i], crossings[j], combPath); + generateBasicCombingPath(crossings_[i], crossings_[j], combPath); // update outer loop variable to skip any crossings on other polygons i = j; break; } } } - combPath.push_back(endPoint); + combPath.push_back(end_point_); } void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const Crossing& max, CombPath& combPath) { // minimise the path length by measuring the length of both paths around the polygon so we can determine the shorter path - ConstPolygonRef poly = boundary[min.poly_idx]; - combPath.push_back(transformation_matrix.unapply(Point(min.x - std::abs(dist_to_move_boundary_point_outside), transformed_startPoint.Y))); + ConstPolygonRef poly = boundary_[min.poly_idx_]; + combPath.push_back(transformation_matrix_.unapply(Point(min.x_ - std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y))); // follow the path in the same direction as the winding order of the boundary polygon std::vector fwd_points; Point prev = combPath.back(); coord_t fwd_len = 0; - for (unsigned int point_idx = min.point_idx - ; point_idx != max.point_idx + for (unsigned int point_idx = min.point_idx_ + ; point_idx != max.point_idx_ ; point_idx = (point_idx < poly.size() - 1) ? (point_idx + 1) : (0)) { - const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside); + const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); fwd_points.push_back(p); fwd_len += vSize(p - prev); prev = p; } - const Point last = transformation_matrix.unapply(Point(max.x + std::abs(dist_to_move_boundary_point_outside), transformed_startPoint.Y)); + const Point last = transformation_matrix_.unapply(Point(max.x_ + std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y)); if (fwd_points.size() > 0) { @@ -171,13 +171,13 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const std::vector rev_points; prev = combPath.back(); coord_t rev_len = 0; - unsigned int min_idx = (min.point_idx == 0)? poly.size() - 1 : min.point_idx - 1; - unsigned int max_idx = (max.point_idx == 0)? poly.size() - 1 : max.point_idx - 1; + unsigned int min_idx = (min.point_idx_ == 0)? poly.size() - 1 : min.point_idx_ - 1; + unsigned int max_idx = (max.point_idx_ == 0)? poly.size() - 1 : max.point_idx_ - 1; for (unsigned int point_idx = min_idx ; point_idx != max_idx ; point_idx = (point_idx > 0) ? (point_idx - 1) : (poly.size() - 1)) { - const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside); + const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); rev_points.push_back(p); rev_len += vSize(p - prev); prev = p; @@ -203,7 +203,7 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimized_comb_path) { - optimized_comb_path.push_back(startPoint); + optimized_comb_path.push_back(start_point_); for(unsigned int point_idx = 1; point_idx 0; n >>= 1) { - if (optimized_comb_path.size() > n && !PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - n - 1], comb_path[point_idx - 1], loc_to_line_grid)) + if (optimized_comb_path.size() > n && !PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - n - 1], comb_path[point_idx - 1], loc_to_line_grid_)) { // we can remove n points from the path without it clashing with the combing boundary for (unsigned i = 0; i < n; ++i) @@ -254,7 +254,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { // slide p towards the second point in the comb path p = comb_path[1] + (p - comb_path[1]) * frac; - if (!PolygonUtils::polygonCollidesWithLineSegment(startPoint, p, loc_to_line_grid)) + if (!PolygonUtils::polygonCollidesWithLineSegment(start_point_, p, loc_to_line_grid_)) { // using the new corner doesn't cause a conflict optimized_comb_path.back() = p; @@ -274,7 +274,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize // TODO: add the below extra optimization? (+/- 7% extra computation time, +/- 2% faster print for Dual_extrusion_support_generation.stl) while (optimized_comb_path.size() > 1) { - if (PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - 2], comb_path[point_idx], loc_to_line_grid)) + if (PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - 2], comb_path[point_idx], loc_to_line_grid_)) { break; } @@ -290,7 +290,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { const unsigned n = optimized_comb_path.size(); // the penultimate corner may be deleted if the resulting path doesn't conflict with the boundary - if (!PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[n - 2], comb_path.back(), loc_to_line_grid)) + if (!PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[n - 2], comb_path.back(), loc_to_line_grid_)) { optimized_comb_path.pop_back(); } @@ -301,7 +301,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { // make a new point between the penultimate corner and the corner before that Point p = optimized_comb_path[n - 2] + (optimized_comb_path[n - 1] - optimized_comb_path[n - 2]) * frac; - if (!PolygonUtils::polygonCollidesWithLineSegment(p, comb_path.back(), loc_to_line_grid)) + if (!PolygonUtils::polygonCollidesWithLineSegment(p, comb_path.back(), loc_to_line_grid_)) { // using the new corner doesn't cause a conflict optimized_comb_path[n - 1] = p; diff --git a/tests/PathOrderMonotonicTest.cpp b/tests/PathOrderMonotonicTest.cpp index 1a0ca213a4..775376c7d1 100644 --- a/tests/PathOrderMonotonicTest.cpp +++ b/tests/PathOrderMonotonicTest.cpp @@ -32,12 +32,12 @@ class PathOrderMonotonicTest : public testing::TestWithParam& path) { - return (*path.vertices)[path.start_vertex]; + return (*path.vertices_)[path.start_vertex_]; } inline Point endVertex(const PathOrdering& path) { - return (*path.vertices)[path.vertices->size() - (1 + path.start_vertex)]; + return (*path.vertices_)[path.vertices_->size() - (1 + path.start_vertex_)]; } coord_t projectPathAlongAxis(const PathOrdering& path, const Point& vector) From 01b03243710875836fbe241e89b06735bab1da76 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 10:37:04 +0100 Subject: [PATCH 057/218] Fixed variable shadowing warnings --- include/LayerPlan.h | 2 +- include/PathOrderOptimizer.h | 144 +++++++++++++++++------------------ include/utils/views/dfs.h | 28 +++---- src/FffGcodeWriter.cpp | 6 +- src/InsetOrderOptimizer.cpp | 2 +- src/LayerPlan.cpp | 16 ++-- 6 files changed, 98 insertions(+), 100 deletions(-) diff --git a/include/LayerPlan.h b/include/LayerPlan.h index 972af3e6d3..4ad62a6584 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -530,7 +530,7 @@ class LayerPlan : public NoCopy const std::optional near_start_location = std::optional(), const double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT, const bool reverse_print_direction = false, - const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements); + const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements_); /*! * Add polygons to the g-code with monotonic order. diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 8072a501a8..2206ece605 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -69,23 +69,25 @@ class PathOrderOptimizer * pointer to the vertex data, whether or not to close the loop, the * direction in which to print the path and where to start the path. */ - std::vector paths; + std::vector paths_; /*! * Maps the path implementation to it's orderable path container */ - std::unordered_map vertices_to_paths; + std::unordered_map vertices_to_paths_; /*! * The location where the nozzle is assumed to start from before printing * these parts. */ - Point start_point; + const Point start_point_; /*! * Seam settings. */ - ZSeamConfig seam_config; + const ZSeamConfig seam_config_; + + static const std::unordered_multimap no_order_requirements_; /*! * Construct a new optimizer. @@ -107,15 +109,15 @@ class PathOrderOptimizer const bool detect_loops = false, const Polygons* combing_boundary = nullptr, const bool reverse_direction = false, - const std::unordered_multimap& order_requirements = no_order_requirements, + const std::unordered_multimap& order_requirements = no_order_requirements_, const bool group_outer_walls = false) - : start_point(start_point) - , seam_config(seam_config) - , combing_boundary((combing_boundary != nullptr && ! combing_boundary->empty()) ? combing_boundary : nullptr) - , detect_loops(detect_loops) - , reverse_direction(reverse_direction) - , order_requirements(&order_requirements) - , group_outer_walls(group_outer_walls) + : start_point_(start_point) + , seam_config_(seam_config) + , combing_boundary_((combing_boundary != nullptr && ! combing_boundary->empty()) ? combing_boundary : nullptr) + , detect_loops_(detect_loops) + , reverse_direction_(reverse_direction) + , order_requirements_(&order_requirements) + , _group_outer_walls(group_outer_walls) { } @@ -126,7 +128,7 @@ class PathOrderOptimizer void addPolygon(const Path& polygon) { constexpr bool is_closed = true; - paths.emplace_back(polygon, is_closed); + paths_.emplace_back(polygon, is_closed); } /*! @@ -136,7 +138,7 @@ class PathOrderOptimizer void addPolyline(const Path& polyline) { constexpr bool is_closed = false; - paths.emplace_back(polyline, is_closed); + paths_.emplace_back(polyline, is_closed); } /*! @@ -147,22 +149,22 @@ class PathOrderOptimizer */ void optimize(bool precompute_start = true) { - if (paths.empty()) + if (paths_.empty()) { return; } // Get the vertex data and store it in the paths. - for (auto& path : paths) + for (auto& path : paths_) { path.converted_ = path.getVertexData(); - vertices_to_paths.emplace(path.vertices_, &path); + vertices_to_paths_.emplace(path.vertices_, &path); } // If necessary, check polylines to see if they are actually polygons. - if (detect_loops) + if (detect_loops_) { - for (auto& path : paths) + for (auto& path : paths_) { if (! path.is_closed_) { @@ -175,7 +177,7 @@ class PathOrderOptimizer // Add all vertices to a bucket grid so that we can find nearby endpoints quickly. const coord_t snap_radius = 10_mu; // 0.01mm grid cells. Chaining only needs to consider polylines which are next to each other. SparsePointGridInclusive line_bucket_grid(snap_radius); - for (const auto& [i, path] : paths | ranges::views::enumerate) + for (const auto& [i, path] : paths_ | ranges::views::enumerate) { if (path.converted_->empty()) { @@ -197,42 +199,42 @@ class PathOrderOptimizer // For some Z seam types the start position can be pre-computed. // This is faster since we don't need to re-compute the start position at each step then. - precompute_start &= seam_config.type == EZSeamType::RANDOM || seam_config.type == EZSeamType::USER_SPECIFIED || seam_config.type == EZSeamType::SHARPEST_CORNER; + precompute_start &= seam_config_.type == EZSeamType::RANDOM || seam_config_.type == EZSeamType::USER_SPECIFIED || seam_config_.type == EZSeamType::SHARPEST_CORNER; if (precompute_start) { - for (auto& path : paths) + for (auto& path : paths_) { if (! path.is_closed_ || path.converted_->empty()) { continue; // Can't pre-compute the seam for open polylines since they're at the endpoint nearest to the current position. } - path.start_vertex_ = findStartLocation(path, seam_config.pos); + path.start_vertex_ = findStartLocation(path, seam_config_.pos); } } std::vector optimized_order; // To store our result in. At the end we'll std::swap. - if (order_requirements->empty()) + if (order_requirements_->empty()) { optimized_order = getOptimizedOrder(line_bucket_grid, snap_radius); } else { - optimized_order = getOptimizerOrderWithConstraints(line_bucket_grid, snap_radius, *order_requirements); + optimized_order = getOptimizerOrderWithConstraints(line_bucket_grid, snap_radius, *order_requirements_); } - if (reverse_direction && order_requirements->empty()) + if (reverse_direction_ && order_requirements_->empty()) { std::vector reversed = reverseOrderPaths(optimized_order); // Reverse-insert the optimized order, to invert the ordering. - std::swap(reversed, paths); + std::swap(reversed, paths_); } else { - std::swap(optimized_order, paths); + std::swap(optimized_order, paths_); } - combing_grid.reset(); + combing_grid_.reset(); } protected: @@ -241,7 +243,7 @@ class PathOrderOptimizer * than this distance together will be considered to be coincident, closing * that polyline into a polygon. */ - constexpr static coord_t coincident_point_distance = 10; + constexpr static coord_t _coincident_point_distance = 10; /*! * Bucket grid to store the locations of the combing boundary. @@ -250,12 +252,12 @@ class PathOrderOptimizer * combing boundary. We only need to generate this mapping once for the * combing boundary, since the combing boundary can't change. */ - std::unique_ptr combing_grid; + std::unique_ptr combing_grid_; /*! * Boundary to avoid when making travel moves. */ - const Polygons* combing_boundary; + const Polygons* combing_boundary_; /*! * Whether to check polylines to see if they are closed, before optimizing. @@ -266,7 +268,7 @@ class PathOrderOptimizer * polygons. This then allows the optimizer to decide on a seam location * that is not one of the endpoints of the polyline. */ - bool detect_loops; + const bool detect_loops_; /*! * Whether to reverse the ordering completely. @@ -274,7 +276,7 @@ class PathOrderOptimizer * This reverses the order in which parts are printed, and inverts the * direction of each path as well. */ - bool reverse_direction; + const bool reverse_direction_; /* * Whether to print all outer walls in a group, one after another. @@ -282,15 +284,21 @@ class PathOrderOptimizer * If this is enabled outer walls will be printed first and then all other * walls will be printed. If reversed they will be printed last. */ - bool group_outer_walls; + const bool _group_outer_walls; + + /*! + * Order requirements on the paths. + * For each pair the first needs to be printe before the second. + */ + const std::unordered_multimap* order_requirements_; std::vector getOptimizedOrder(SparsePointGridInclusive line_bucket_grid, size_t snap_radius) { std::vector optimized_order; // To store our result in. - Point current_position = start_point; + Point current_position = start_point_; - std::unordered_map picked(paths.size()); // Fixed size boolean flag for whether each path is already in the optimized vector. + std::unordered_map picked(paths_.size()); // Fixed size boolean flag for whether each path is already in the optimized vector. auto isPicked = [&picked](OrderablePath* c) { @@ -301,13 +309,13 @@ class PathOrderOptimizer return ! picked[c]; }; - while (optimized_order.size() < paths.size()) + while (optimized_order.size() < paths_.size()) { // Use bucket grid to find paths within snap_radius std::vector nearby_candidates; for (const auto i : line_bucket_grid.getNearbyVals(current_position, snap_radius)) { - nearby_candidates.push_back(&paths[i]); // Convert bucket indexes to corresponding paths + nearby_candidates.push_back(&paths_[i]); // Convert bucket indexes to corresponding paths } std::vector available_candidates; @@ -319,7 +327,7 @@ class PathOrderOptimizer if (available_candidates.empty()) // We need to broaden our search through all candidates { - for (auto path : paths | ranges::views::addressof | ranges::views::filter(notPicked)) + for (auto path : paths_ | ranges::views::addressof | ranges::views::filter(notPicked)) { available_candidates.push_back(path); } @@ -356,7 +364,7 @@ class PathOrderOptimizer // initialize the roots set with all possible nodes std::unordered_set roots; std::unordered_set leaves; - for (const auto& path : paths) + for (const auto& path : paths_) { roots.insert(path.vertices_); leaves.insert(path.vertices_); @@ -373,7 +381,7 @@ class PathOrderOptimizer // We used a shared visited set between runs of dfs. This is for the case when we reverse the ordering tree. // In this case two roots can share the same children nodes, but we don't want to print them twice. std::unordered_set visited; - Point current_position = start_point; + Point current_position = start_point_; std::function(const Path, const std::unordered_multimap&)> get_neighbours = [current_position, this](const Path current_node, const std::unordered_multimap& graph) @@ -397,7 +405,7 @@ class PathOrderOptimizer order.push_back(best_candidate); // update local_current_position - auto path = vertices_to_paths[best_candidate]; + auto path = vertices_to_paths_[best_candidate]; if (path->is_closed_) { @@ -417,7 +425,7 @@ class PathOrderOptimizer = [¤t_position, &optimized_order, this](const Path current_node, const std::nullptr_t _state) { // We should make map from node <-> path for this stuff - for (auto& path : paths) + for (auto& path : paths_) { if (path.vertices_ == current_node) { @@ -441,9 +449,9 @@ class PathOrderOptimizer return nullptr; }; - if (group_outer_walls) + if (_group_outer_walls) { - if (reverse_direction) + if (reverse_direction_) { // When the order is reverse the leaves of the order requirement are the outer walls std::unordered_set outer_walls = leaves; @@ -534,7 +542,7 @@ class PathOrderOptimizer for (auto& path : candidate_paths) { - candidate_orderable_paths.push_back(vertices_to_paths.at(path)); + candidate_orderable_paths.push_back(vertices_to_paths_.at(path)); } OrderablePath* best_candidate = findClosestPath(start_position, candidate_orderable_paths); @@ -558,7 +566,7 @@ class PathOrderOptimizer } const bool precompute_start - = seam_config.type == EZSeamType::RANDOM || seam_config.type == EZSeamType::USER_SPECIFIED || seam_config.type == EZSeamType::SHARPEST_CORNER; + = seam_config_.type == EZSeamType::RANDOM || seam_config_.type == EZSeamType::USER_SPECIFIED || seam_config_.type == EZSeamType::SHARPEST_CORNER; if (! path->is_closed_ || ! precompute_start) // Find the start location unless we've already precomputed it. { path->start_vertex_ = findStartLocation(*path, start_position); @@ -570,7 +578,7 @@ class PathOrderOptimizer const Point candidate_position = (*path->converted_)[path->start_vertex_]; coord_t distance2 = getDirectDistance(start_position, candidate_position); if (distance2 < best_distance2 - && combing_boundary) // If direct distance is longer than best combing distance, the combing distance can never be better, so only compute combing if necessary. + && combing_boundary_) // If direct distance is longer than best combing distance, the combing distance can never be better, so only compute combing if necessary. { distance2 = getCombingDistance(start_position, candidate_position); } @@ -584,16 +592,6 @@ class PathOrderOptimizer return best_candidate; } -public: - static const std::unordered_multimap no_order_requirements; - -protected: - /*! - * Order requirements on the paths. - * For each pair the first needs to be printe before the second. - */ - const std::unordered_multimap* order_requirements; - /*! * Find the vertex which will be the starting point of printing a polygon or * polyline. @@ -616,9 +614,9 @@ class PathOrderOptimizer { // For polylines, the seam settings are not applicable. Simply choose the position closest to target_pos then. const coord_t back_distance - = (combing_boundary == nullptr) ? getDirectDistance(path.converted_->back(), target_pos) : getCombingDistance(path.converted_->back(), target_pos); + = (combing_boundary_ == nullptr) ? getDirectDistance(path.converted_->back(), target_pos) : getCombingDistance(path.converted_->back(), target_pos); if (back_distance < getDirectDistance(path.converted_->front(), target_pos) - || (combing_boundary + || (combing_boundary_ && back_distance < getCombingDistance(path.converted_->front(), target_pos))) // Lazy or: Only compute combing distance if direct distance is closer. { return path.converted_->size() - 1; // Back end is closer. @@ -631,7 +629,7 @@ class PathOrderOptimizer // Rest of the function only deals with (closed) polygons. We need to be able to find the seam location of those polygons. - if (seam_config.type == EZSeamType::RANDOM) + if (seam_config_.type == EZSeamType::RANDOM) { size_t vert = getRandomPointInPolygon(*path.converted_); return vert; @@ -654,8 +652,8 @@ class PathOrderOptimizer { // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. - const coord_t distance = (combing_boundary == nullptr) ? getDirectDistance(here, target_pos) : getCombingDistance(here, target_pos); - const float score_distance = (seam_config.type == EZSeamType::SHARPEST_CORNER && seam_config.corner_pref != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) + const coord_t distance = (combing_boundary_ == nullptr) ? getDirectDistance(here, target_pos) : getCombingDistance(here, target_pos); + const float score_distance = (seam_config_.type == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) ? MM2INT(10) : vSize2(here - target_pos); @@ -664,7 +662,7 @@ class PathOrderOptimizer // angles > 0 are convex (right turning) float corner_shift; - if (seam_config.type == EZSeamType::SHORTEST) + if (seam_config_.type == EZSeamType::SHORTEST) { // the more a corner satisfies our criteria, the closer it appears to be // shift 10mm for a very acute corner @@ -680,7 +678,7 @@ class PathOrderOptimizer } float score = score_distance; - switch (seam_config.corner_pref) + switch (seam_config_.corner_pref) { default: case EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_INNER: @@ -835,11 +833,11 @@ class PathOrderOptimizer */ coord_t getCombingDistance(const Point& a, const Point& b) { - if (! PolygonUtils::polygonCollidesWithLineSegment(*combing_boundary, a, b)) + if (! PolygonUtils::polygonCollidesWithLineSegment(*combing_boundary_, a, b)) { return getDirectDistance(a, b); // No collision with any line. Just compute the direct distance then. } - if (paths.size() > 100) + if (paths_.size() > 100) { /* If we have many paths to optimize the order for, this combing calculation can become very expensive. Instead, penalize travels @@ -847,17 +845,17 @@ class PathOrderOptimizer return getDirectDistance(a, b) * 5; } - if (combing_grid == nullptr) + if (combing_grid_ == nullptr) { constexpr coord_t grid_size = 2000; // 2mm grid cells. Smaller will use more memory, but reduce chance of unnecessary collision checks. - combing_grid = PolygonUtils::createLocToLineGrid(*combing_boundary, grid_size); + combing_grid_ = PolygonUtils::createLocToLineGrid(*combing_boundary_, grid_size); } CombPath comb_path; // Output variable. constexpr coord_t rounding_error = -25; constexpr coord_t tiny_travel_threshold = 0; constexpr bool fail_on_unavoidable_obstacles = false; - LinePolygonsCrossings::comb(*combing_boundary, *combing_grid, a, b, comb_path, rounding_error, tiny_travel_threshold, fail_on_unavoidable_obstacles); + LinePolygonsCrossings::comb(*combing_boundary_, *combing_grid_, a, b, comb_path, rounding_error, tiny_travel_threshold, fail_on_unavoidable_obstacles); coord_t sum = 0; Point last_point = a; @@ -885,12 +883,12 @@ class PathOrderOptimizer { return false; } - return vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance * coincident_point_distance; + return vSize2(path.converted_->back() - path.converted_->front()) < _coincident_point_distance * _coincident_point_distance; } }; template -const std::unordered_multimap PathOrderOptimizer::no_order_requirements; +const std::unordered_multimap PathOrderOptimizer::no_order_requirements_; } // namespace cura diff --git a/include/utils/views/dfs.h b/include/utils/views/dfs.h index 0d509b8004..3a64e8c8d8 100644 --- a/include/utils/views/dfs.h +++ b/include/utils/views/dfs.h @@ -36,17 +36,17 @@ std::function(const Node, const Graph&)> get_neighbours = [](c } return neighbours; }; -}; +} template -constexpr void dfs( - const Node& current_node, - const Graph& graph, - std::function handle_node, - std::unordered_set& visited, - const State& state = nullptr, - std::function(const Node, const Graph&)> get_neighbours = details::get_neighbours -) { +constexpr void + dfs(const Node& current_node, + const Graph& graph, + std::function handle_node, + std::unordered_set& visited, + const State& state = nullptr, + std::function(const Node, const Graph&)> get_neighbours = details::get_neighbours) +{ if (visited.contains(current_node)) { return; @@ -64,10 +64,10 @@ constexpr void dfs( template constexpr void dfs_parent_state(const Node& current_node, const Graph& graph, std::function handle_node) { - const std::function parent_view = [handle_node](auto current_node, auto parent_node) + const std::function parent_view = [handle_node](auto node, auto parent_node) { - handle_node(current_node, parent_node); - return current_node; + handle_node(node, parent_node); + return node; }; auto visited = std::unordered_set(); @@ -77,9 +77,9 @@ constexpr void dfs_parent_state(const Node& current_node, const Graph& graph, st template constexpr void dfs_depth_state(const Node& current_node, const Graph& graph, std::function handle_node) { - const std::function depth_view = [handle_node](auto current_node, auto depth) + const std::function depth_view = [handle_node](auto node, auto depth) { - handle_node(current_node, depth); + handle_node(node, depth); return depth + 1; }; auto visited = std::unordered_set(); diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 1167cc0168..406b365eab 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -1560,7 +1560,7 @@ void FffGcodeWriter::addMeshLayerToGCode( part_order_optimizer.addPolygon(&part); } part_order_optimizer.optimize(false); - for (const PathOrdering& path : part_order_optimizer.paths) + for (const PathOrdering& path : part_order_optimizer.paths_) { addMeshPartToGCode(storage, mesh, extruder_nr, mesh_config, *path.vertices_, gcode_layer); } @@ -2640,7 +2640,7 @@ bool FffGcodeWriter::processSkin( } part_order_optimizer.optimize(); - for (const PathOrdering& path : part_order_optimizer.paths) + for (const PathOrdering& path : part_order_optimizer.paths_) { const SkinPart& skin_part = *path.vertices_; @@ -3231,7 +3231,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer bool need_travel_to_end_of_last_spiral = true; // Print the thicker infill lines first. (double or more layer thickness, infill combined with previous layers) - for (const PathOrdering& path : ranges::views::concat(island_order_optimizer_initial.paths, island_order_optimizer.paths)) + for (const PathOrdering& path : ranges::views::concat(island_order_optimizer_initial.paths_, island_order_optimizer.paths_)) { const SupportInfillPart& part = *path.vertices_; const auto& configs = part.use_fractional_config ? gcode_layer.configs_storage.support_fractional_infill_config : gcode_layer.configs_storage.support_infill_config; diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 62d9382e62..7549ae53da 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -113,7 +113,7 @@ bool InsetOrderOptimizer::addToLayer() order_optimizer.optimize(); - for (const PathOrdering& path : order_optimizer.paths) + for (const PathOrdering& path : order_optimizer.paths_) { if (path.vertices_->empty()) continue; diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 7774241e5d..a9ff85c5e6 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -608,16 +608,16 @@ void LayerPlan::addPolygonsByOptimizer( if (! reverse_order) { - for (const PathOrdering& path : orderOptimizer.paths) + for (const PathOrdering& path : orderOptimizer.paths_) { addPolygon(*path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } } else { - for (int index = orderOptimizer.paths.size() - 1; index >= 0; --index) + for (int index = orderOptimizer.paths_.size() - 1; index >= 0; --index) { - const PathOrdering& path = orderOptimizer.paths[index]; + const PathOrdering& path = orderOptimizer.paths_[index]; addPolygon(**path.vertices_, path.start_vertex_, path.backwards_, config, wall_0_wipe_dist, spiralize, flow_ratio, always_retract); } } @@ -1164,7 +1164,7 @@ void LayerPlan::addWalls( orderOptimizer.addPolygon(walls[poly_idx]); } orderOptimizer.optimize(); - for (const PathOrdering& path : orderOptimizer.paths) + for (const PathOrdering& path : orderOptimizer.paths_) { addWall(**path.vertices_, path.start_vertex_, settings, non_bridge_config, bridge_config, wall_0_wipe_dist, flow_ratio, always_retract); } @@ -1219,7 +1219,7 @@ void LayerPlan::addLinesByOptimizer( } order_optimizer.optimize(); - addLinesInGivenOrder(order_optimizer.paths, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); + addLinesInGivenOrder(order_optimizer.paths_, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); } @@ -1359,11 +1359,11 @@ void LayerPlan::addLinesMonotonic( PathOrderMonotonic order(monotonic_direction, max_adjacent_distance, last_position); Polygons left_over; bool last_would_have_been_excluded = false; - for (size_t line_idx = 0; line_idx < line_order.paths.size(); ++line_idx) + for (size_t line_idx = 0; line_idx < line_order.paths_.size(); ++line_idx) { - const ConstPolygonRef polyline = *line_order.paths[line_idx].vertices_; + const ConstPolygonRef polyline = *line_order.paths_[line_idx].vertices_; const bool inside_exclusion = is_inside_exclusion(polyline); - const bool next_would_have_been_included = inside_exclusion && (line_idx < line_order.paths.size() - 1 && is_inside_exclusion(*line_order.paths[line_idx + 1].vertices_)); + const bool next_would_have_been_included = inside_exclusion && (line_idx < line_order.paths_.size() - 1 && is_inside_exclusion(*line_order.paths_[line_idx + 1].vertices_)); if (inside_exclusion && last_would_have_been_excluded && next_would_have_been_included) { left_over.add(polyline); From 02cb17c831d17702caddaaa7c0d8b60336024f6e Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Nov 2023 10:50:43 +0100 Subject: [PATCH 058/218] Store sentry logs in correct place By default it stores them in the cwd, which won't work for actual instals. It now places them in the root Cura folder CURA-11364 --- src/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 84920c5006..c185c6d163 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,7 +45,19 @@ int main(int argc, char** argv) sentry_options_set_dsn(options, "https://734f9ec9024f73e53701d59c3ffddfe3@o323038.ingest.sentry.io/4506257745510401"); // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path - sentry_options_set_database_path(options, ".sentry-native"); + std::string config_path = ""; + +#if defined(__linux__) + config_path += getenv("HOME"); + config_path += "/.local/share/cura/"; +#elif defined(__APPLE__) && defined(__MACH__) + config_path += getenv("HOME"); + config_path += "/Library/Application Support/cura/"; +#elif defined(_WIN64) + config_path = "%APPDATA%\\cura\\"; +#endif + config_path += ".sentry-native"; + sentry_options_set_database_path(options, config_path.c_str()); std::string version = "curaengine@"; version += std::string(CURA_ENGINE_VERSION); sentry_options_set_release(options, version.c_str()); From f40e6c31d4d009529ed5b70770ea9354138effa2 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 11:06:33 +0100 Subject: [PATCH 059/218] Fixed variable shadowing warnings --- include/InterlockingGenerator.h | 46 +-- include/LayerPlanBuffer.h | 19 +- include/infill.h | 270 ++++++++--------- include/infill/ZigzagConnectorProcessor.h | 108 +++---- src/InterlockingGenerator.cpp | 72 ++--- src/LayerPlanBuffer.cpp | 68 ++--- src/infill.cpp | 342 +++++++++++----------- src/infill/ZigzagConnectorProcessor.cpp | 54 ++-- 8 files changed, 493 insertions(+), 486 deletions(-) diff --git a/include/InterlockingGenerator.h b/include/InterlockingGenerator.h index 4f780f3fd5..5ff35fd9fc 100644 --- a/include/InterlockingGenerator.h +++ b/include/InterlockingGenerator.h @@ -74,17 +74,17 @@ class InterlockingGenerator * \param air_filtering Whether to fully remove all of the interlocking cells which would be visible on the outside (i.e. touching air). If no air filtering then those cells will be cut off in the middle of a beam. */ InterlockingGenerator(Slicer& mesh_a, Slicer& mesh_b, coord_t beam_width_a, coord_t beam_width_b, const PointMatrix& rotation, Point3 cell_size, coord_t beam_layer_count, DilationKernel interface_dilation, DilationKernel air_dilation, bool air_filtering) - : mesh_a(mesh_a) - , mesh_b(mesh_b) - , beam_width_a(beam_width_a) - , beam_width_b(beam_width_b) - , vu(cell_size) - , rotation(rotation) - , cell_size(cell_size) - , beam_layer_count(beam_layer_count) - , interface_dilation(interface_dilation) - , air_dilation(air_dilation) - , air_filtering(air_filtering) + : mesh_a_(mesh_a) + , mesh_b_(mesh_b) + , beam_width_a_(beam_width_a) + , beam_width_b_(beam_width_b) + , vu_(cell_size) + , rotation_(rotation) + , cell_size_(cell_size) + , beam_layer_count_(beam_layer_count) + , interface_dilation_(interface_dilation) + , air_dilation_(air_dilation) + , air_filtering_(air_filtering) {} /*! Given two polygons, return the parts that border on air, and grow 'perpendicular' up to 'detect' distance. @@ -144,21 +144,21 @@ class InterlockingGenerator */ void applyMicrostructureToOutlines(const std::unordered_set& cells, const std::vector& layer_regions) const; - static const coord_t ignored_gap = 100u; //!< Distance between models to be considered next to each other so that an interlocking structure will be generated there + static const coord_t ignored_gap_ = 100u; //!< Distance between models to be considered next to each other so that an interlocking structure will be generated there - Slicer& mesh_a; - Slicer& mesh_b; - coord_t beam_width_a; - coord_t beam_width_b; + Slicer& mesh_a_; + Slicer& mesh_b_; + coord_t beam_width_a_; + coord_t beam_width_b_; - const VoxelUtils vu; + const VoxelUtils vu_; - const PointMatrix rotation; - const Point3 cell_size; - const coord_t beam_layer_count; - const DilationKernel interface_dilation; - const DilationKernel air_dilation; - const bool air_filtering; //!< Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells will be cut off midway in a beam. + const PointMatrix rotation_; + const Point3 cell_size_; + const coord_t beam_layer_count_; + const DilationKernel interface_dilation_; + const DilationKernel air_dilation_; + const bool air_filtering_; //!< Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells will be cut off midway in a beam. }; }//namespace cura diff --git a/include/LayerPlanBuffer.h b/include/LayerPlanBuffer.h index 2b1ce8cefc..14a97219a6 100644 --- a/include/LayerPlanBuffer.h +++ b/include/LayerPlanBuffer.h @@ -36,19 +36,20 @@ class GCodeExport; class LayerPlanBuffer { friend class LayerPlan; - GCodeExport& gcode; - Preheat preheat_config; //!< the nozzle and material temperature settings for each extruder train. + GCodeExport& gcode_; - static constexpr size_t buffer_size + Preheat preheat_config_; //!< the nozzle and material temperature settings for each extruder train. + + static constexpr size_t buffer_size_ = 5; // should be as low as possible while still allowing enough time in the buffer to heat up from standby temp to printing temp // TODO: hardcoded value // this value should be higher than 1, cause otherwise each layer is viewed as the first layer and no temp commands are inserted. - static constexpr Duration extra_preheat_time + static constexpr Duration extra_preheat_time_ = 1.0_s; //!< Time to start heating earlier than computed to avoid accummulative discrepancy between actual heating times and computed ones. - std::vector extruder_used_in_meshgroup; //!< For each extruder whether it has already been planned once in this meshgroup. This is used to see whether we should heat to - //!< the initial_print_temp or to the extrusion_temperature + std::vector extruder_used_in_meshgroup_; //!< For each extruder whether it has already been planned once in this meshgroup. This is used to see whether we should heat to + //!< the initial_print_temp or to the extrusion_temperature /*! * The buffer containing several layer plans (LayerPlan) before writing them to gcode. @@ -56,12 +57,12 @@ class LayerPlanBuffer * The front is the lowest/oldest layer. * The back is the highest/newest layer. */ - std::list buffer; + std::list buffer_; public: LayerPlanBuffer(GCodeExport& gcode) - : gcode(gcode) - , extruder_used_in_meshgroup(MAX_EXTRUDERS, false) + : gcode_(gcode) + , extruder_used_in_meshgroup_(MAX_EXTRUDERS, false) { } diff --git a/include/infill.h b/include/infill.h index 289a0850bb..d8d2f83768 100644 --- a/include/infill.h +++ b/include/infill.h @@ -4,6 +4,10 @@ #ifndef INFILL_H #define INFILL_H +#include + +#include + #include "infill/LightningGenerator.h" #include "infill/ZigzagConnectorProcessor.h" #include "settings/EnumSettings.h" //For infill types. @@ -14,10 +18,6 @@ #include "utils/IntPoint.h" #include "utils/section_type.h" -#include - -#include - namespace cura { @@ -28,35 +28,35 @@ class Infill { friend class InfillTest; - EFillMethod pattern{}; //!< the space filling pattern of the infill to generate - bool zig_zaggify{}; //!< Whether to connect the end pieces of the support lines via the wall - bool connect_lines{ calcConnectLines(pattern, zig_zaggify) }; //!< Whether the lines and zig_zaggification are generated by the connectLines algorithm + EFillMethod pattern_{}; //!< the space filling pattern of the infill to generate + bool zig_zaggify_{}; //!< Whether to connect the end pieces of the support lines via the wall + bool connect_lines_{ calcConnectLines(pattern_, zig_zaggify_) }; //!< Whether the lines and zig_zaggification are generated by the connectLines algorithm // TODO: The connected lines algorithm is only available for linear-based infill, for now. // We skip ZigZag, Cross and Cross3D because they have their own algorithms. Eventually we want to replace all that with the new algorithm. // Cubic Subdivision ends lines in the center of the infill so it won't be effective. - bool connect_polygons{}; //!< Whether to connect as much polygons together into a single path - Polygons outer_contour{}; //!< The area that originally needs to be filled with infill. The input of the algorithm. - Polygons inner_contour{}; //!< The part of the contour that will get filled with an infill pattern. Equals outer_contour minus the extra infill walls. - coord_t infill_line_width{}; //!< The line width of the infill lines to generate - coord_t line_distance{}; //!< The distance between two infill lines / polygons - coord_t infill_overlap{}; //!< the distance by which to overlap with the actual area within which to generate infill - size_t infill_multiplier{}; //!< the number of infill lines next to each other - AngleDegrees fill_angle{}; //!< for linear infill types: the angle of the infill lines (or the angle of the grid) - coord_t z{}; //!< height of the layer for which we generate infill - coord_t shift{}; //!< shift of the scanlines in the direction perpendicular to the fill_angle - coord_t max_resolution{}; //!< Min feature size of the output - coord_t max_deviation{}; //!< Max deviation fro the original poly when enforcing max_resolution - size_t wall_line_count{}; //!< Number of walls to generate at the boundary of the infill region, spaced \ref infill_line_width apart - coord_t small_area_width{}; //!< Maximum width of a small infill region to be filled with walls - Point infill_origin{}; //!< origin of the infill pattern - bool skip_line_stitching{ false }; //!< Whether to bypass the line stitching normally performed for polyline type infills - bool fill_gaps{ true }; //!< Whether to fill gaps in strips of infill that would be too thin to fit the infill lines. If disabled, those areas are left empty. - bool connected_zigzags{ false }; //!< (ZigZag) Whether endpieces of zigzag infill should be connected to the nearest infill line on both sides of the zigzag connector - bool use_endpieces{ false }; //!< (ZigZag) Whether to include endpieces: zigzag connector segments from one infill line to itself - bool skip_some_zags{ false }; //!< (ZigZag) Whether to skip some zags - size_t zag_skip_count{}; //!< (ZigZag) To skip one zag in every N if skip some zags is enabled - coord_t pocket_size{}; //!< The size of the pockets at the intersections of the fractal in the cross 3d pattern - bool mirror_offset{}; //!< Indication in which offset direction the extra infill lines are made + bool connect_polygons_{}; //!< Whether to connect as much polygons together into a single path + Polygons outer_contour_{}; //!< The area that originally needs to be filled with infill. The input of the algorithm. + Polygons inner_contour_{}; //!< The part of the contour that will get filled with an infill pattern. Equals outer_contour minus the extra infill walls. + coord_t infill_line_width_{}; //!< The line width of the infill lines to generate + coord_t line_distance_{}; //!< The distance between two infill lines / polygons + coord_t infill_overlap_{}; //!< the distance by which to overlap with the actual area within which to generate infill + size_t infill_multiplier_{}; //!< the number of infill lines next to each other + AngleDegrees fill_angle_{}; //!< for linear infill types: the angle of the infill lines (or the angle of the grid) + coord_t z_{}; //!< height of the layer for which we generate infill + coord_t shift_{}; //!< shift of the scanlines in the direction perpendicular to the fill_angle + coord_t max_resolution_{}; //!< Min feature size of the output + coord_t max_deviation_{}; //!< Max deviation fro the original poly when enforcing max_resolution + size_t wall_line_count_{}; //!< Number of walls to generate at the boundary of the infill region, spaced \ref infill_line_width apart + coord_t small_area_width_{}; //!< Maximum width of a small infill region to be filled with walls + Point infill_origin_{}; //!< origin of the infill pattern + bool skip_line_stitching_{ false }; //!< Whether to bypass the line stitching normally performed for polyline type infills + bool fill_gaps_{ true }; //!< Whether to fill gaps in strips of infill that would be too thin to fit the infill lines. If disabled, those areas are left empty. + bool connected_zigzags_{ false }; //!< (ZigZag) Whether endpieces of zigzag infill should be connected to the nearest infill line on both sides of the zigzag connector + bool use_endpieces_{ false }; //!< (ZigZag) Whether to include endpieces: zigzag connector segments from one infill line to itself + bool skip_some_zags_{ false }; //!< (ZigZag) Whether to skip some zags + size_t zag_skip_count_{}; //!< (ZigZag) To skip one zag in every N if skip some zags is enabled + coord_t pocket_size_{}; //!< The size of the pockets at the intersections of the fractal in the cross 3d pattern + bool mirror_offset_{}; //!< Indication in which offset direction the extra infill lines are made static constexpr auto one_over_sqrt_2 = 1.0 / std::numbers::sqrt2; @@ -84,19 +84,21 @@ class Infill coord_t shift, coord_t max_resolution, coord_t max_deviation) noexcept - : pattern{ pattern } - , zig_zaggify{ zig_zaggify } - , connect_polygons{ connect_polygons } - , outer_contour{ in_outline } - , infill_line_width{ infill_line_width } - , line_distance{ line_distance } - , infill_overlap{ infill_overlap } - , infill_multiplier{ infill_multiplier } - , fill_angle{ fill_angle } - , z{ z } - , shift{ shift } - , max_resolution{ max_resolution } - , max_deviation{ max_deviation } {}; + : pattern_{ pattern } + , zig_zaggify_{ zig_zaggify } + , connect_polygons_{ connect_polygons } + , outer_contour_{ in_outline } + , infill_line_width_{ infill_line_width } + , line_distance_{ line_distance } + , infill_overlap_{ infill_overlap } + , infill_multiplier_{ infill_multiplier } + , fill_angle_{ fill_angle } + , z_{ z } + , shift_{ shift } + , max_resolution_{ max_resolution } + , max_deviation_{ max_deviation } + { + } Infill( EFillMethod pattern, @@ -116,23 +118,25 @@ class Infill coord_t small_area_width, Point infill_origin, bool skip_line_stitching) noexcept - : pattern{ pattern } - , zig_zaggify{ zig_zaggify } - , connect_polygons{ connect_polygons } - , outer_contour{ in_outline } - , infill_line_width{ infill_line_width } - , line_distance{ line_distance } - , infill_overlap{ infill_overlap } - , infill_multiplier{ infill_multiplier } - , fill_angle{ fill_angle } - , z{ z } - , shift{ shift } - , max_resolution{ max_resolution } - , max_deviation{ max_deviation } - , wall_line_count{ wall_line_count } - , small_area_width{ small_area_width } - , infill_origin{ infill_origin } - , skip_line_stitching{ skip_line_stitching } {}; + : pattern_{ pattern } + , zig_zaggify_{ zig_zaggify } + , connect_polygons_{ connect_polygons } + , outer_contour_{ in_outline } + , infill_line_width_{ infill_line_width } + , line_distance_{ line_distance } + , infill_overlap_{ infill_overlap } + , infill_multiplier_{ infill_multiplier } + , fill_angle_{ fill_angle } + , z_{ z } + , shift_{ shift } + , max_resolution_{ max_resolution } + , max_deviation_{ max_deviation } + , wall_line_count_{ wall_line_count } + , small_area_width_{ small_area_width } + , infill_origin_{ infill_origin } + , skip_line_stitching_{ skip_line_stitching } + { + } Infill( EFillMethod pattern, @@ -158,30 +162,30 @@ class Infill bool skip_some_zags, size_t zag_skip_count, coord_t pocket_size) noexcept - : pattern{ pattern } - , zig_zaggify{ zig_zaggify } - , connect_polygons{ connect_polygons } - , outer_contour{ in_outline } - , infill_line_width{ infill_line_width } - , line_distance{ line_distance } - , infill_overlap{ infill_overlap } - , infill_multiplier{ infill_multiplier } - , fill_angle{ fill_angle } - , z{ z } - , shift{ shift } - , max_resolution{ max_resolution } - , max_deviation{ max_deviation } - , wall_line_count{ wall_line_count } - , small_area_width{ small_area_width } - , infill_origin{ infill_origin } - , skip_line_stitching{ skip_line_stitching } - , fill_gaps{ fill_gaps } - , connected_zigzags{ connected_zigzags } - , use_endpieces{ use_endpieces } - , skip_some_zags{ skip_some_zags } - , zag_skip_count{ zag_skip_count } - , pocket_size{ pocket_size } - , mirror_offset{ zig_zaggify } + : pattern_{ pattern } + , zig_zaggify_{ zig_zaggify } + , connect_polygons_{ connect_polygons } + , outer_contour_{ in_outline } + , infill_line_width_{ infill_line_width } + , line_distance_{ line_distance } + , infill_overlap_{ infill_overlap } + , infill_multiplier_{ infill_multiplier } + , fill_angle_{ fill_angle } + , z_{ z } + , shift_{ shift } + , max_resolution_{ max_resolution } + , max_deviation_{ max_deviation } + , wall_line_count_{ wall_line_count } + , small_area_width_{ small_area_width } + , infill_origin_{ infill_origin } + , skip_line_stitching_{ skip_line_stitching } + , fill_gaps_{ fill_gaps } + , connected_zigzags_{ connected_zigzags } + , use_endpieces_{ use_endpieces } + , skip_some_zags_{ skip_some_zags } + , zag_skip_count_{ zag_skip_count } + , pocket_size_{ pocket_size } + , mirror_offset_{ zig_zaggify } { } @@ -231,31 +235,6 @@ class Infill SectionType section_type); private: - /*! - * Generate the infill pattern without the infill_multiplier functionality - */ - void _generate( - std::vector& toolpaths, - Polygons& result_polygons, - Polygons& result_lines, - const Settings& settings, - const std::shared_ptr& cross_fill_pattern = nullptr, - const std::shared_ptr& lightning_layer = nullptr, - const SliceMeshStorage* mesh = nullptr); - - /*! - * Multiply the infill lines, so that any single line becomes [infill_multiplier] lines next to each other. - * - * This is done in a way such that there is not overlap between the lines - * except the middle original one if the multiplier is odd. - * - * This introduces a lot of line segments. - * - * \param[in,out] result_polygons The polygons to be multiplied (input and output) - * \param[in,out] result_lines The lines to be multiplied (input and output) - */ - void multiplyInfill(Polygons& result_polygons, Polygons& result_lines); - struct InfillLineSegment { /*! @@ -267,28 +246,30 @@ class Infill * \param end Where the line segment ends. */ InfillLineSegment(const Point start, const size_t start_segment, const size_t start_polygon, const Point end, const size_t end_segment, const size_t end_polygon) - : start(start) - , altered_start(start) - , start_segment(start_segment) - , start_polygon(start_polygon) - , end(end) - , altered_end(end) - , end_segment(end_segment) - , end_polygon(end_polygon) - , previous(nullptr) - , next(nullptr){}; + : start_(start) + , altered_start_(start) + , start_segment_(start_segment) + , start_polygon_(start_polygon) + , end_(end) + , altered_end_(end) + , end_segment_(end_segment) + , end_polygon_(end_polygon) + , previous_(nullptr) + , next_(nullptr) + { + } /*! * Where the line segment starts. */ - Point start; + Point start_; /*! * If the line-segment starts at a different point due to prevention of crossing near the boundary, it gets saved here. * * The original start-point is still used to determine ordering then, so it can't just be overwritten. */ - Point altered_start; + Point altered_start_; /*! * Which polygon line segment the start of this infill line belongs to. @@ -297,7 +278,7 @@ class Infill * is inside. It is used to disambiguate between the start and end of * the line segment. */ - size_t start_segment; + size_t start_segment_; /*! * Which polygon the start of this infill line belongs to. @@ -305,24 +286,24 @@ class Infill * This is an index of a PolygonRef that this infill line * is inside. It is used to know which polygon the start segment belongs to. */ - size_t start_polygon; + size_t start_polygon_; /*! * If the line-segment needs to prevent crossing with another line near its start, a point is inserted near the start. */ - std::optional start_bend; + std::optional start_bend_; /*! * Where the line segment ends. */ - Point end; + Point end_; /*! * If the line-segment ends at a different point due to prevention of crossing near the boundary, it gets saved here. * * The original end-point is still used to determine ordering then, so it can't just be overwritten. */ - Point altered_end; + Point altered_end_; /*! * Which polygon line segment the end of this infill line belongs to. @@ -331,7 +312,7 @@ class Infill * is inside. It is used to disambiguate between the start and end of * the line segment. */ - size_t end_segment; + size_t end_segment_; /*! * Which polygon the end of this infill line belongs to. @@ -339,23 +320,23 @@ class Infill * This is an index of a PolygonRef that this infill line * is inside. It is used to know which polygon the end segment belongs to. */ - size_t end_polygon; + size_t end_polygon_; /*! * If the line-segment needs to prevent crossing with another line near its end, a point is inserted near the end. */ - std::optional end_bend; + std::optional end_bend_; /*! * The previous line segment that this line segment is connected to, if * any. */ - InfillLineSegment* previous; + InfillLineSegment* previous_; /*! * The next line segment that this line segment is connected to, if any. */ - InfillLineSegment* next; + InfillLineSegment* next_; /*! * Compares two infill line segments for equality. @@ -385,7 +366,32 @@ class Infill * for each polygon in a Polygons object that we create a zig-zaggified * infill pattern for. */ - std::vector>> crossings_on_line; + std::vector>> crossings_on_line_; + + /*! + * Generate the infill pattern without the infill_multiplier functionality + */ + void _generate( + std::vector& toolpaths, + Polygons& result_polygons, + Polygons& result_lines, + const Settings& settings, + const std::shared_ptr& cross_fill_pattern = nullptr, + const std::shared_ptr& lightning_layer = nullptr, + const SliceMeshStorage* mesh = nullptr); + + /*! + * Multiply the infill lines, so that any single line becomes [infill_multiplier] lines next to each other. + * + * This is done in a way such that there is not overlap between the lines + * except the middle original one if the multiplier is odd. + * + * This introduces a lot of line segments. + * + * \param[in,out] result_polygons The polygons to be multiplied (input and output) + * \param[in,out] result_lines The lines to be multiplied (input and output) + */ + void multiplyInfill(Polygons& result_polygons, Polygons& result_lines); /*! * Generate gyroid infill diff --git a/include/infill/ZigzagConnectorProcessor.h b/include/infill/ZigzagConnectorProcessor.h index 7da5c2e043..46761af97a 100644 --- a/include/infill/ZigzagConnectorProcessor.h +++ b/include/infill/ZigzagConnectorProcessor.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_ZIGZAG_CONNECTOR_PROCESSOR_H #define INFILL_ZIGZAG_CONNECTOR_PROCESSOR_H @@ -11,8 +11,8 @@ namespace cura /*! * Processor class for processing the connections between lines which makes the infill a zigzag pattern. - * - * During the creation of the infill lines, calls are made to a ZigzagConnectorProcessor so that the zigzag connector segments are created + * + * During the creation of the infill lines, calls are made to a ZigzagConnectorProcessor so that the zigzag connector segments are created * at the same time as the lines are created. * * generate lines within the area of [in_outline], at regular intervals of [line_distance] @@ -20,17 +20,17 @@ namespace cura * intersect a regular grid of 'scanlines' with the area inside [in_outline] (see generateLineInfill) * zigzag: * include pieces of boundary, connecting the lines, forming an accordion like zigzag instead of separate lines |_|^|_| - * + * * we call the areas between two consecutive scanlines a 'scansegment' - * + * * algorithm: * 1. for each line segment of each polygon: * store the intersections of that line segment with all scanlines in a mapping (vector of vectors) from scanline to intersections * (zigzag): add boundary segments to result * 2. for each scanline: - * sort the associated intersections + * sort the associated intersections * and connect them using the even-odd rule - * + * * zigzag algorithm: * while walking around (each) polygon (1.) * if polygon intersects with even scanline @@ -39,13 +39,13 @@ namespace cura * stop boundary segment (stop adding segments to the [result]) * if polygon intersects with even scanline again (instead of odd) * dont add the last line segment to the boundary (unless [connected_zigzags]) - * + * * Note that ZigZag consists of 3 types: * - without endpieces * - with disconnected endpieces * - with connected endpieces * <> there is also a NoZigzagConnector which creates no zags. It is used for the Line infill pattern - * + * * v v zigzag connectors * <-- * :___: : < scanlines @@ -54,29 +54,29 @@ namespace cura * | |___| * : : : * --> winding order of polygon - * + * * ^ = even scanline * ^ ^ no endpieces - * + * * start boundary from even scanline! :D * include only a boundary segment if it starts in an even scanline and ends in an odd scanline - * + * * ________ * | | | \ . * | | | | * |_____| |__/ . - * + * * ^ ^ ^ scanlines * ^ connected end piece - * include a boundary segment also if it starts in an odd scanline and ends odd, + * include a boundary segment also if it starts in an odd scanline and ends odd, * or starts in an even scanline and ends in an even scanline, * but not when it starts in an odd and ends in an even scanline (see top left or bottom middle). - * + * * _____ * | | | \ . * | | | | * |_____| |__/ - * + * * ^ ^ ^ scanlines * ^ disconnected end piece * Leave out the last line segment of the boundary polygon: from a vertex to the linesegment-scanline intersection. @@ -95,12 +95,12 @@ namespace cura * the first point (the "from" point) will be kept as the starting point until there is a line that is * long enough, and then that line will be added. */ -class ZigzagConnectorProcessor +class ZigzagConnectorProcessor { public: /*! * Constructor. - * + * * \param rotation_matrix The rotation matrix used to enforce the infill angle * \param result The resulting line segments (Each line segment is a Polygon with 2 points) * \param use_endpieces Whether to include end pieces or not @@ -108,22 +108,22 @@ class ZigzagConnectorProcessor * \param skip_some_zags Whether to skip some zags * \param zag_skip_count Skip 1 zag in every N zags */ - ZigzagConnectorProcessor(const PointMatrix& rotation_matrix, Polygons& result, - bool use_endpieces, bool connected_endpieces, - bool skip_some_zags, int zag_skip_count) - : rotation_matrix(rotation_matrix) - , result(result) - , use_endpieces(use_endpieces) - , connected_endpieces(connected_endpieces) - , skip_some_zags(skip_some_zags) - , zag_skip_count(zag_skip_count) - , is_first_connector(true) - , first_connector_end_scanline_index(0) - , last_connector_index(0) - {} + ZigzagConnectorProcessor(const PointMatrix& rotation_matrix, Polygons& result, bool use_endpieces, bool connected_endpieces, bool skip_some_zags, int zag_skip_count) + : rotation_matrix_(rotation_matrix) + , result_(result) + , use_endpieces_(use_endpieces) + , connected_endpieces_(connected_endpieces) + , skip_some_zags_(skip_some_zags) + , zag_skip_count_(zag_skip_count) + , is_first_connector_(true) + , first_connector_end_scanline_index_(0) + , last_connector_index_(0) + { + } virtual ~ZigzagConnectorProcessor() - {} + { + } /*! * Handle the next vertex on the outer boundary. @@ -133,7 +133,7 @@ class ZigzagConnectorProcessor /*! * Handle the next intersection between a scanline and the outer boundary. - * + * * \param intersection The intersection * \param scanline_index Index of the current scanline */ @@ -153,7 +153,7 @@ class ZigzagConnectorProcessor /*! * Add a line to the result while reverse-applying the rotation matrix. - * + * * \param polyline The polyline to add */ void addPolyline(PolygonRef polyline); @@ -187,17 +187,17 @@ class ZigzagConnectorProcessor void addZagConnector(std::vector& points, bool is_endpiece); protected: - const PointMatrix& rotation_matrix; //!< The rotation matrix used to enforce the infill angle - Polygons& result; //!< The result of the computation + const PointMatrix& rotation_matrix_; //!< The rotation matrix used to enforce the infill angle + Polygons& result_; //!< The result of the computation - bool use_endpieces; //!< Whether to include end pieces or not - bool connected_endpieces; //!< Whether the end pieces should be connected with the rest part of the infill - int skip_some_zags; //!< Whether to skip some zags - int zag_skip_count; //!< Skip 1 zag in every N zags + const bool use_endpieces_; //!< Whether to include end pieces or not + const bool connected_endpieces_; //!< Whether the end pieces should be connected with the rest part of the infill + const int skip_some_zags_; //!< Whether to skip some zags + const int zag_skip_count_; //!< Skip 1 zag in every N zags - bool is_first_connector; //!< indicating whether we are still looking for the first connector or not - int first_connector_end_scanline_index; //!< scanline segment index of the first connector - int last_connector_index; //!< scanline segment index of the last connector + bool is_first_connector_; //!< indicating whether we are still looking for the first connector or not + int first_connector_end_scanline_index_; //!< scanline segment index of the first connector + int last_connector_index_; //!< scanline segment index of the last connector /*! * The line segments belonging the zigzag connector to which the very first vertex belongs. @@ -205,11 +205,11 @@ class ZigzagConnectorProcessor * * Because the boundary polygon may start in in the middle of a zigzag connector, */ - std::vector first_connector; + std::vector first_connector_; /*! * The currently built up zigzag connector (not the first/last) or end piece or discarded boundary segment */ - std::vector current_connector; + std::vector current_connector_; }; // @@ -218,19 +218,19 @@ class ZigzagConnectorProcessor inline void ZigzagConnectorProcessor::reset() { - is_first_connector = true; - first_connector_end_scanline_index = 0; - last_connector_index = 0; - first_connector.clear(); - current_connector.clear(); + is_first_connector_ = true; + first_connector_end_scanline_index_ = 0; + last_connector_index_ = 0; + first_connector_.clear(); + current_connector_.clear(); } inline void ZigzagConnectorProcessor::addPolyline(PolygonRef polyline) { - result.emplace_back(polyline); - for (Point& p : result.back()) + result_.emplace_back(polyline); + for (Point& p : result_.back()) { - p = rotation_matrix.unapply(p); + p = rotation_matrix_.unapply(p); } } diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 2cafc9b691..fc0c2bc54a 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -44,7 +44,7 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& continue; } - if (extruder_nr_a == extruder_nr_b || ! mesh_a.mesh->getAABB().expand(ignored_gap).hit(mesh_b.mesh->getAABB())) + if (extruder_nr_a == extruder_nr_b || ! mesh_a.mesh->getAABB().expand(ignored_gap_).hit(mesh_b.mesh->getAABB())) { // early out for when meshes don't share any overlap in their bounding box continue; @@ -70,7 +70,7 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& std::pair InterlockingGenerator::growBorderAreasPerpendicular(const Polygons& a, const Polygons& b, const coord_t& detect) const { - const coord_t min_line = std::min(mesh_a.mesh->settings_.get("min_wall_line_width"), mesh_b.mesh->settings_.get("min_wall_line_width")); + const coord_t min_line = std::min(mesh_a_.mesh->settings_.get("min_wall_line_width"), mesh_b_.mesh->settings_.get("min_wall_line_width")); const Polygons total_shrunk = a.offset(min_line).unionPolygons(b.offset(min_line)).offset(2 * -min_line); @@ -98,30 +98,30 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set const coord_t number_of_beams_expand = boundary_avoidance - 1; constexpr coord_t rounding_errors = 5; - const coord_t max_beam_width = std::max(beam_width_a, beam_width_b); + const coord_t max_beam_width = std::max(beam_width_a_, beam_width_b_); const coord_t detect = (max_beam_width * number_of_beams_detect) + rounding_errors; const coord_t expand = (max_beam_width * number_of_beams_expand) + rounding_errors; - const coord_t close_gaps = std::min(mesh_a.mesh->settings_.get("line_width"), mesh_b.mesh->settings_.get("line_width")) / 4; + const coord_t close_gaps = std::min(mesh_a_.mesh->settings_.get("line_width"), mesh_b_.mesh->settings_.get("line_width")) / 4; // Make an inclusionary polygon, to only actually handle thin areas near actual microstructures (so not in skin for example). std::vector near_interlock_per_layer; - near_interlock_per_layer.assign(std::min(mesh_a.layers.size(), mesh_b.layers.size()), Polygons()); + near_interlock_per_layer.assign(std::min(mesh_a_.layers.size(), mesh_b_.layers.size()), Polygons()); for (const auto& cell : has_all_meshes) { - const Point3 bottom_corner = vu.toLowerCorner(cell); - for (int layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size.z_ && layer_nr < near_interlock_per_layer.size(); ++layer_nr) + const Point3 bottom_corner = vu_.toLowerCorner(cell); + for (int layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < near_interlock_per_layer.size(); ++layer_nr) { - near_interlock_per_layer[layer_nr].add(vu.toPolygon(cell)); + near_interlock_per_layer[layer_nr].add(vu_.toPolygon(cell)); } } for (auto& near_interlock : near_interlock_per_layer) { near_interlock = near_interlock.offset(rounding_errors).offset(-rounding_errors).unionPolygons().offset(detect); - near_interlock.applyMatrix(rotation.inverse()); + near_interlock.applyMatrix(rotation_.inverse()); } // Only alter layers when they are present in both meshes, zip should take care if that. - for (auto [layer_nr, layer] : ranges::views::zip(mesh_a.layers, mesh_b.layers) | ranges::views::enumerate) + for (auto [layer_nr, layer] : ranges::views::zip(mesh_a_.layers, mesh_b_.layers) | ranges::views::enumerate) { Polygons& polys_a = std::get<0>(layer).polygons; Polygons& polys_b = std::get<1>(layer).polygons; @@ -149,7 +149,7 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set void InterlockingGenerator::generateInterlockingStructure() const { - std::vector> voxels_per_mesh = getShellVoxels(interface_dilation); + std::vector> voxels_per_mesh = getShellVoxels(interface_dilation_); std::unordered_set& has_any_mesh = voxels_per_mesh[0]; std::unordered_set& has_all_meshes = voxels_per_mesh[1]; @@ -157,10 +157,10 @@ void InterlockingGenerator::generateInterlockingStructure() const const std::vector layer_regions = computeUnionedVolumeRegions(); - if (air_filtering) + if (air_filtering_) { std::unordered_set air_cells; - addBoundaryCells(layer_regions, air_dilation, air_cells); + addBoundaryCells(layer_regions, air_dilation_, air_cells); for (const GridPoint3& p : air_cells) { @@ -180,7 +180,7 @@ std::vector> InterlockingGenerator::getShellVoxel // mark all cells which contain some boundary for (size_t mesh_idx = 0; mesh_idx < 2; mesh_idx++) { - Slicer* mesh = (mesh_idx == 0) ? &mesh_a : &mesh_b; + Slicer* mesh = (mesh_idx == 0) ? &mesh_a_ : &mesh_b_; std::unordered_set& mesh_voxels = voxels_per_mesh[mesh_idx]; std::vector rotated_polygons_per_layer(mesh->layers.size()); @@ -188,7 +188,7 @@ std::vector> InterlockingGenerator::getShellVoxel { SlicerLayer& layer = mesh->layers[layer_nr]; rotated_polygons_per_layer[layer_nr] = layer.polygons; - rotated_polygons_per_layer[layer_nr].applyMatrix(rotation); + rotated_polygons_per_layer[layer_nr].applyMatrix(rotation_); } addBoundaryCells(rotated_polygons_per_layer, kernel, mesh_voxels); @@ -208,26 +208,26 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& layers for (size_t layer_nr = 0; layer_nr < layers.size(); layer_nr++) { const coord_t z = layer_nr; - vu.walkDilatedPolygons(layers[layer_nr], z, kernel, voxel_emplacer); + vu_.walkDilatedPolygons(layers[layer_nr], z, kernel, voxel_emplacer); Polygons skin = layers[layer_nr]; if (layer_nr > 0) { skin = skin.xorPolygons(layers[layer_nr - 1]); } - skin = skin.offset(-cell_size.x_ / 2).offset(cell_size.x_ / 2); // remove superfluous small areas, which would anyway be included because of walkPolygons - vu.walkDilatedAreas(skin, z, kernel, voxel_emplacer); + skin = skin.offset(-cell_size_.x_ / 2).offset(cell_size_.x_ / 2); // remove superfluous small areas, which would anyway be included because of walkPolygons + vu_.walkDilatedAreas(skin, z, kernel, voxel_emplacer); } } std::vector InterlockingGenerator::computeUnionedVolumeRegions() const { - const size_t max_layer_count = std::max(mesh_a.layers.size(), mesh_b.layers.size()) + 1; // introduce ghost layer on top for correct skin computation of topmost layer. + const size_t max_layer_count = std::max(mesh_a_.layers.size(), mesh_b_.layers.size()) + 1; // introduce ghost layer on top for correct skin computation of topmost layer. std::vector layer_regions(max_layer_count); for (LayerIndex layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { Polygons& layer_region = layer_regions[layer_nr]; - for (Slicer* mesh : { &mesh_a, &mesh_b }) + for (Slicer* mesh : { &mesh_a_, &mesh_b_ }) { if (layer_nr >= mesh->layers.size()) { @@ -236,8 +236,8 @@ std::vector InterlockingGenerator::computeUnionedVolumeRegions() const const SlicerLayer& layer = mesh->layers[layer_nr]; layer_region.add(layer.polygons); } - layer_region = layer_region.offset(ignored_gap).offset(-ignored_gap); // Morphological close to merge meshes into single volume - layer_region.applyMatrix(rotation); + layer_region = layer_region.offset(ignored_gap_).offset(-ignored_gap_); // Morphological close to merge meshes into single volume + layer_region.applyMatrix(rotation_); } return layer_regions; } @@ -247,13 +247,13 @@ std::vector> InterlockingGenerator::generateMicrostructure std::vector> cell_area_per_mesh_per_layer; cell_area_per_mesh_per_layer.resize(2); cell_area_per_mesh_per_layer[0].resize(2); - const coord_t beam_w_sum = beam_width_a + beam_width_b; - const coord_t middle = cell_size.x_ * beam_width_a / beam_w_sum; - const coord_t width[2] = { middle, cell_size.x_ - middle }; + const coord_t beam_w_sum = beam_width_a_ + beam_width_b_; + const coord_t middle = cell_size_.x_ * beam_width_a_ / beam_w_sum; + const coord_t width[2] = { middle, cell_size_.x_ - middle }; for (size_t mesh_idx : { 0, 1 }) { Point offset(mesh_idx ? middle : 0, 0); - Point area_size(width[mesh_idx], cell_size.y_); + Point area_size(width[mesh_idx], cell_size_.y_); PolygonRef poly = cell_area_per_mesh_per_layer[0][mesh_idx].newPoly(); poly.emplace_back(offset); @@ -279,29 +279,29 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s { std::vector> cell_area_per_mesh_per_layer = generateMicrostructure(); - const PointMatrix unapply_rotation = rotation.inverse(); - const size_t max_layer_count = std::max(mesh_a.layers.size(), mesh_b.layers.size()); + const PointMatrix unapply_rotation = rotation_.inverse(); + const size_t max_layer_count = std::max(mesh_a_.layers.size(), mesh_b_.layers.size()); std::vector structure_per_layer[2]; // for each mesh the structure on each layer // Every `beam_layer_count` number of layers are combined to an interlocking beam layer // to store these we need ceil(max_layer_count / beam_layer_count) of these layers // the formula is rewritten as (max_layer_count + beam_layer_count - 1) / beam_layer_count, so it works for integer division - size_t num_interlocking_layers = (max_layer_count + beam_layer_count - 1) / beam_layer_count; + size_t num_interlocking_layers = (max_layer_count + beam_layer_count_ - 1) / beam_layer_count_; structure_per_layer[0].resize(num_interlocking_layers); structure_per_layer[1].resize(num_interlocking_layers); // Only compute cell structure for half the layers, because since our beams are two layers high, every odd layer of the structure will be the same as the layer below. for (const GridPoint3& grid_loc : cells) { - Point3 bottom_corner = vu.toLowerCorner(grid_loc); + Point3 bottom_corner = vu_.toLowerCorner(grid_loc); for (size_t mesh_idx = 0; mesh_idx < 2; mesh_idx++) { - for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count) + for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count_) { - Polygons areas_here = cell_area_per_mesh_per_layer[(layer_nr / beam_layer_count) % cell_area_per_mesh_per_layer.size()][mesh_idx]; + Polygons areas_here = cell_area_per_mesh_per_layer[(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; areas_here.translate(Point(bottom_corner.x_, bottom_corner.y_)); - structure_per_layer[mesh_idx][layer_nr / beam_layer_count].add(areas_here); + structure_per_layer[mesh_idx][layer_nr / beam_layer_count_].add(areas_here); } } } @@ -318,7 +318,7 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s for (size_t mesh_idx = 0; mesh_idx < 2; mesh_idx++) { - Slicer* mesh = (mesh_idx == 0) ? &mesh_a : &mesh_b; + Slicer* mesh = (mesh_idx == 0) ? &mesh_a_ : &mesh_b_; for (size_t layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { if (layer_nr >= mesh->layers.size()) @@ -329,8 +329,8 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s Polygons layer_outlines = layer_regions[layer_nr]; layer_outlines.applyMatrix(unapply_rotation); - const Polygons areas_here = structure_per_layer[mesh_idx][layer_nr / beam_layer_count].intersection(layer_outlines); - const Polygons& areas_other = structure_per_layer[! mesh_idx][layer_nr / beam_layer_count]; + const Polygons areas_here = structure_per_layer[mesh_idx][layer_nr / beam_layer_count_].intersection(layer_outlines); + const Polygons& areas_other = structure_per_layer[! mesh_idx][layer_nr / beam_layer_count_]; SlicerLayer& layer = mesh->layers[layer_nr]; layer.polygons = layer.polygons diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index 7502bf2cc2..aa339d5836 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -17,11 +17,11 @@ namespace cura { -constexpr Duration LayerPlanBuffer::extra_preheat_time; +constexpr Duration LayerPlanBuffer::extra_preheat_time_; void LayerPlanBuffer::push(LayerPlan& layer_plan) { - buffer.push_back(&layer_plan); + buffer_.push_back(&layer_plan); } void LayerPlanBuffer::handle(LayerPlan& layer_plan, GCodeExport& gcode) @@ -38,24 +38,24 @@ void LayerPlanBuffer::handle(LayerPlan& layer_plan, GCodeExport& gcode) LayerPlan* LayerPlanBuffer::processBuffer() { - if (buffer.empty()) + if (buffer_.empty()) { return nullptr; } processFanSpeedLayerTime(); - if (buffer.size() >= 2) + if (buffer_.size() >= 2) { - addConnectingTravelMove(*--(--buffer.end()), *--buffer.end()); + addConnectingTravelMove(*--(--buffer_.end()), *--buffer_.end()); } - if (buffer.size() > 0) + if (buffer_.size() > 0) { insertTempCommands(); // insert preheat commands of the just completed layer plan (not the newly emplaced one) } - if (buffer.size() > buffer_size) + if (buffer_.size() > buffer_size_) { - LayerPlan* ret = buffer.front(); + LayerPlan* ret = buffer_.front(); Application::getInstance().communication->flushGCode(); - buffer.pop_front(); + buffer_.pop_front(); return ret; } return nullptr; @@ -64,16 +64,16 @@ LayerPlan* LayerPlanBuffer::processBuffer() void LayerPlanBuffer::flush() { Application::getInstance().communication->flushGCode(); // If there was still g-code in a layer, flush that as a separate layer. Don't want to group them together accidentally. - if (buffer.size() > 0) + if (buffer_.size() > 0) { insertTempCommands(); // insert preheat commands of the very last layer } - while (! buffer.empty()) + while (! buffer_.empty()) { - buffer.front()->writeGCode(gcode); + buffer_.front()->writeGCode(gcode_); Application::getInstance().communication->flushGCode(); - delete buffer.front(); - buffer.pop_front(); + delete buffer_.front(); + buffer_.pop_front(); } } @@ -119,13 +119,13 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer void LayerPlanBuffer::processFanSpeedLayerTime() { - assert(buffer.size() > 0); - auto newest_layer_it = --buffer.end(); + assert(buffer_.size() > 0); + auto newest_layer_it = --buffer_.end(); // Assume the print head is homed at the start of a mesh group. // This introduces small inaccuracies for the naive layer time estimates of the first layer of the second mesh group. // It's not that bad, though. They are naive estimates any way. Point starting_position(0, 0); - if (buffer.size() >= 2) + if (buffer_.size() >= 2) { auto prev_layer_it = newest_layer_it; prev_layer_it--; @@ -182,14 +182,14 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vector("material_standby_temperature"), initial_print_temp, during_printing); - warm_up.heating_time = std::min(in_between_time, warm_up.heating_time + extra_preheat_time); + warm_up.heating_time = std::min(in_between_time, warm_up.heating_time + extra_preheat_time_); return warm_up; } in_between_time += extruder_plan_before.estimates_.getTotalTime(); @@ -200,13 +200,13 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vector("material_standby_temperature"); constexpr bool during_printing = false; - warm_up.heating_time = preheat_config.getTimeToGoFromTempToTemp(extruder, warm_up.lowest_temperature, initial_print_temp, during_printing); + warm_up.heating_time = preheat_config_.getTimeToGoFromTempToTemp(extruder, warm_up.lowest_temperature, initial_print_temp, during_printing); if (warm_up.heating_time > in_between_time) { warm_up.heating_time = in_between_time; warm_up.lowest_temperature = initial_print_temp - in_between_time * extruder_settings.get("machine_nozzle_heat_up_speed"); } - warm_up.heating_time = warm_up.heating_time + extra_preheat_time; + warm_up.heating_time = warm_up.heating_time + extra_preheat_time_; return warm_up; } @@ -219,7 +219,7 @@ void LayerPlanBuffer::insertPreheatCommand_singleExtrusion(ExtruderPlan& prev_ex // time_before_extruder_plan_end is halved, so that at the layer change the temperature will be half way betewen the two requested temperatures constexpr bool during_printing = true; const double prev_extrusion_temp = prev_extruder_plan.extrusion_temperature_.value_or(prev_extruder_plan.required_start_temperature_); - double time_before_extruder_plan_end = 0.5 * preheat_config.getTimeToGoFromTempToTemp(extruder_nr, prev_extrusion_temp, required_temp, during_printing); + double time_before_extruder_plan_end = 0.5 * preheat_config_.getTimeToGoFromTempToTemp(extruder_nr, prev_extrusion_temp, required_temp, during_printing); time_before_extruder_plan_end = std::min(prev_extruder_plan.estimates_.getTotalTime(), time_before_extruder_plan_end); insertPreheatCommand(prev_extruder_plan, time_before_extruder_plan_end, extruder_nr, required_temp); @@ -445,7 +445,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex // which means the stable temperature of the previous extruder plan and the stable temperature of the next extruder plan couldn't be reached constexpr bool during_printing = true; Preheat::CoolDownResult warm_cool_result - = preheat_config.getCoolDownPointAfterWarmUp(time_window, extruder, *initial_print_temp, weighted_average_extrusion_temp, final_print_temp, during_printing); + = preheat_config_.getCoolDownPointAfterWarmUp(time_window, extruder, *initial_print_temp, weighted_average_extrusion_temp, final_print_temp, during_printing); double cool_down_time = warm_cool_result.cooling_time; assert(cool_down_time >= 0); @@ -492,15 +492,15 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex void LayerPlanBuffer::insertTempCommands() { - if (buffer.back()->extruder_plans.size() == 0 || (buffer.back()->extruder_plans.size() == 1 && buffer.back()->extruder_plans[0].paths_.size() == 0)) + if (buffer_.back()->extruder_plans.size() == 0 || (buffer_.back()->extruder_plans.size() == 1 && buffer_.back()->extruder_plans[0].paths_.size() == 0)) { // disregard empty layer - buffer.pop_back(); + buffer_.pop_back(); return; } std::vector extruder_plans; // sorted in print order - extruder_plans.reserve(buffer.size() * 2); - for (LayerPlan* layer_plan : buffer) + extruder_plans.reserve(buffer_.size() * 2); + for (LayerPlan* layer_plan : buffer_) { for (ExtruderPlan& extr_plan : layer_plan->extruder_plans) { @@ -510,7 +510,7 @@ void LayerPlanBuffer::insertTempCommands() // insert commands for all extruder plans on this layer Scene& scene = Application::getInstance().current_slice->scene; - LayerPlan& layer_plan = *buffer.back(); + LayerPlan& layer_plan = *buffer_.back(); for (size_t extruder_plan_idx = 0; extruder_plan_idx < layer_plan.extruder_plans.size(); extruder_plan_idx++) { const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans.size() + extruder_plan_idx; @@ -529,7 +529,7 @@ void LayerPlanBuffer::insertTempCommands() avg_flow = 0.0; } - Temperature print_temp = preheat_config.getTemp(extruder, avg_flow, extruder_plan.is_initial_layer_); + Temperature print_temp = preheat_config_.getTemp(extruder, avg_flow, extruder_plan.is_initial_layer_); Temperature initial_print_temp = extruder_settings.get("material_initial_print_temperature"); if (extruder_plan.temperature_factor_ > 0) // force lower printing temperatures due to minimum layer time @@ -540,13 +540,13 @@ void LayerPlanBuffer::insertTempCommands() if (initial_print_temp == 0.0 // user doesn't want to use initial print temp feature || extruder_settings.get("machine_extruders_share_heater") // ignore initial print temps when extruders share a heater - || ! extruder_used_in_meshgroup[extruder] // prime blob uses print temp rather than initial print temp + || ! extruder_used_in_meshgroup_[extruder] // prime blob uses print temp rather than initial print temp || (overall_extruder_plan_idx > 0 && extruder_plans[overall_extruder_plan_idx - 1]->extruder_nr_ == extruder // prev plan has same extruder .. && extruder_plans[overall_extruder_plan_idx - 1]->estimates_.getTotalUnretractedTime() > 0.0) // and prev extruder plan already heated to printing temperature ) { extruder_plan.required_start_temperature_ = print_temp; - extruder_used_in_meshgroup[extruder] = true; + extruder_used_in_meshgroup_[extruder] = true; } else { @@ -555,7 +555,7 @@ void LayerPlanBuffer::insertTempCommands() } assert(extruder_plan.required_start_temperature_ != -1 && "extruder_plan.required_start_temperature should now have been set"); - if (buffer.size() == 1 && extruder_plan_idx == 0) + if (buffer_.size() == 1 && extruder_plan_idx == 0) { // the very first extruder plan of the current meshgroup size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_idx = 0; extruder_idx < scene.extruders.size(); extruder_idx++) @@ -568,11 +568,11 @@ void LayerPlanBuffer::insertTempCommands() // see FffGcodeWriter::processStartingCode if (extruder_idx == extruder) { - gcode.setInitialTemp(extruder_idx, extruder_plan.extrusion_temperature_.value_or(extruder_plan.required_start_temperature_)); + gcode_.setInitialTemp(extruder_idx, extruder_plan.extrusion_temperature_.value_or(extruder_plan.required_start_temperature_)); } else { - gcode.setInitialTemp(extruder_idx, other_extruder_settings.get("material_standby_temperature")); + gcode_.setInitialTemp(extruder_idx, other_extruder_settings.get("material_standby_temperature")); } } else diff --git a/src/infill.cpp b/src/infill.cpp index 645c3f653e..0c7dd8b641 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -92,40 +92,40 @@ void Infill::generate( const SliceMeshStorage* mesh, const Polygons& prevent_small_exposed_to_air) { - if (outer_contour.empty()) + if (outer_contour_.empty()) { return; } - inner_contour = generateWallToolPaths(toolpaths, outer_contour, wall_line_count, infill_line_width, infill_overlap, settings, layer_idx, section_type); - scripta::log("infill_inner_contour_0", inner_contour, section_type, layer_idx); + inner_contour_ = generateWallToolPaths(toolpaths, outer_contour_, wall_line_count_, infill_line_width_, infill_overlap_, settings, layer_idx, section_type); + scripta::log("infill_inner_contour_0", inner_contour_, section_type, layer_idx); // It does not make sense to print a pattern in a small region. So the infill region // is split into a small region that will be filled with walls and the normal region // that will be filled with the pattern. This split of regions is not needed if the // infill pattern is concentric or if the small_area_width is zero. - if (pattern != EFillMethod::CONCENTRIC && small_area_width > 0) + if (pattern_ != EFillMethod::CONCENTRIC && small_area_width_ > 0) { - const auto too_small_length = INT2MM(static_cast(infill_line_width) / 2.0); + const auto too_small_length = INT2MM(static_cast(infill_line_width_) / 2.0); // Split the infill region in a narrow region and the normal region. - Polygons small_infill = inner_contour; - inner_contour = inner_contour.offset(-small_area_width / 2); - inner_contour.removeSmallAreas(too_small_length * too_small_length, true); - inner_contour = inner_contour.offset(small_area_width / 2); - inner_contour = inner_contour.unionPolygons(prevent_small_exposed_to_air).intersection(small_infill); - inner_contour = Simplify(max_resolution, max_deviation, 0).polygon(inner_contour); - small_infill = small_infill.difference(inner_contour); + Polygons small_infill = inner_contour_; + inner_contour_ = inner_contour_.offset(-small_area_width_ / 2); + inner_contour_.removeSmallAreas(too_small_length * too_small_length, true); + inner_contour_ = inner_contour_.offset(small_area_width_ / 2); + inner_contour_ = inner_contour_.unionPolygons(prevent_small_exposed_to_air).intersection(small_infill); + inner_contour_ = Simplify(max_resolution_, max_deviation_, 0).polygon(inner_contour_); + small_infill = small_infill.difference(inner_contour_); // Small corners of a bigger area should not be considered narrow and are therefore added to the bigger area again. auto small_infill_parts = small_infill.splitIntoParts(); small_infill.clear(); for (const auto& small_infill_part : small_infill_parts) { - if (small_infill_part.offset(-infill_line_width / 2).offset(infill_line_width / 2).area() < infill_line_width * infill_line_width * 10 - && ! inner_contour.intersection(small_infill_part.offset(infill_line_width / 4)).empty()) + if (small_infill_part.offset(-infill_line_width_ / 2).offset(infill_line_width_ / 2).area() < infill_line_width_ * infill_line_width_ * 10 + && ! inner_contour_.intersection(small_infill_part.offset(infill_line_width_ / 4)).empty()) { - inner_contour.add(small_infill_part); + inner_contour_.add(small_infill_part); } else { @@ -133,11 +133,11 @@ void Infill::generate( small_infill.add(small_infill_part); } } - inner_contour.unionPolygons(); + inner_contour_.unionPolygons(); // Fill narrow area with walls. - const size_t narrow_wall_count = small_area_width / infill_line_width + 1; - WallToolPaths wall_toolpaths(small_infill, infill_line_width, narrow_wall_count, 0, settings, layer_idx, section_type); + const size_t narrow_wall_count = small_area_width_ / infill_line_width_ + 1; + WallToolPaths wall_toolpaths(small_infill, infill_line_width_, narrow_wall_count, 0, settings, layer_idx, section_type); std::vector small_infill_paths = wall_toolpaths.getToolPaths(); scripta::log( "infill_small_infill_paths_0", @@ -154,36 +154,36 @@ void Infill::generate( toolpaths.emplace_back(small_infill_path); } } - scripta::log("infill_inner_contour_1", inner_contour, section_type, layer_idx); + scripta::log("infill_inner_contour_1", inner_contour_, section_type, layer_idx); // apply an extra offset in case the pattern prints along the sides of the area. - if (pattern == EFillMethod::ZIG_ZAG // Zig-zag prints the zags along the walls. - || (zig_zaggify - && (pattern == EFillMethod::LINES // Zig-zaggified infill patterns print their zags along the walls. - || pattern == EFillMethod::TRIANGLES || pattern == EFillMethod::GRID || pattern == EFillMethod::CUBIC || pattern == EFillMethod::TETRAHEDRAL - || pattern == EFillMethod::QUARTER_CUBIC || pattern == EFillMethod::TRIHEXAGON || pattern == EFillMethod::GYROID || pattern == EFillMethod::CROSS - || pattern == EFillMethod::CROSS_3D)) - || infill_multiplier % 2 + if (pattern_ == EFillMethod::ZIG_ZAG // Zig-zag prints the zags along the walls. + || (zig_zaggify_ + && (pattern_ == EFillMethod::LINES // Zig-zaggified infill patterns print their zags along the walls. + || pattern_ == EFillMethod::TRIANGLES || pattern_ == EFillMethod::GRID || pattern_ == EFillMethod::CUBIC || pattern_ == EFillMethod::TETRAHEDRAL + || pattern_ == EFillMethod::QUARTER_CUBIC || pattern_ == EFillMethod::TRIHEXAGON || pattern_ == EFillMethod::GYROID || pattern_ == EFillMethod::CROSS + || pattern_ == EFillMethod::CROSS_3D)) + || infill_multiplier_ % 2 == 0) // Multiplied infill prints loops of infill, partly along the walls, if even. For odd multipliers >1 it gets offset by the multiply algorithm itself. { - inner_contour = inner_contour.offset(-infill_line_width / 2); - inner_contour = Simplify(max_resolution, max_deviation, 0).polygon(inner_contour); + inner_contour_ = inner_contour_.offset(-infill_line_width_ / 2); + inner_contour_ = Simplify(max_resolution_, max_deviation_, 0).polygon(inner_contour_); } - scripta::log("infill_inner_contour_2", inner_contour, section_type, layer_idx); + scripta::log("infill_inner_contour_2", inner_contour_, section_type, layer_idx); - if (infill_multiplier > 1) + if (infill_multiplier_ > 1) { - bool zig_zaggify_real = zig_zaggify; - if (infill_multiplier % 2 == 0) + bool zig_zaggify_real = zig_zaggify_; + if (infill_multiplier_ % 2 == 0) { - zig_zaggify = false; + zig_zaggify_ = false; } Polygons generated_result_polygons; Polygons generated_result_lines; _generate(toolpaths, generated_result_polygons, generated_result_lines, settings, cross_fill_provider, lightning_trees, mesh); - zig_zaggify = zig_zaggify_real; + zig_zaggify_ = zig_zaggify_real; multiplyInfill(generated_result_polygons, generated_result_lines); result_polygons.add(generated_result_polygons); result_lines.add(generated_result_lines); @@ -212,10 +212,10 @@ void Infill::generate( scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, scripta::PointVDI{ "width", &ExtrusionJunction::w }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); - if (connect_polygons) + if (connect_polygons_) { // remove too small polygons - coord_t snap_distance = infill_line_width * 2; // polygons with a span of max 1 * nozzle_size are too small + coord_t snap_distance = infill_line_width_ * 2; // polygons with a span of max 1 * nozzle_size are too small auto it = std::remove_if( result_polygons.begin(), result_polygons.end(), @@ -225,7 +225,7 @@ void Infill::generate( }); result_polygons.erase(it, result_polygons.end()); - PolygonConnector connector(infill_line_width); + PolygonConnector connector(infill_line_width_); connector.add(result_polygons); connector.add(toolpaths); Polygons connected_polygons; @@ -257,18 +257,18 @@ void Infill::_generate( const std::shared_ptr& lightning_trees, const SliceMeshStorage* mesh) { - if (inner_contour.empty()) + if (inner_contour_.empty()) return; - if (line_distance == 0) + if (line_distance_ == 0) return; - switch (pattern) + switch (pattern_) { case EFillMethod::GRID: generateGridInfill(result_lines); break; case EFillMethod::LINES: - generateLineInfill(result_lines, line_distance, fill_angle, 0); + generateLineInfill(result_lines, line_distance_, fill_angle_, 0); break; case EFillMethod::CUBIC: generateCubicInfill(result_lines); @@ -289,7 +289,7 @@ void Infill::_generate( generateConcentricInfill(toolpaths, settings); break; case EFillMethod::ZIG_ZAG: - generateZigZagInfill(result_lines, line_distance, fill_angle); + generateZigZagInfill(result_lines, line_distance_, fill_angle_); break; case EFillMethod::CUBICSUBDIV: if (! mesh) @@ -318,7 +318,7 @@ void Infill::_generate( case EFillMethod::PLUGIN: { auto [toolpaths_, generated_result_polygons_, generated_result_lines_] = slots::instance().generate( - inner_contour, + inner_contour_, mesh ? mesh->settings.get("infill_pattern") : settings.get("infill_pattern"), mesh ? mesh->settings : settings); toolpaths.insert(toolpaths.end(), toolpaths_.begin(), toolpaths_.end()); @@ -331,7 +331,7 @@ void Infill::_generate( break; } - if (connect_lines) + if (connect_lines_) { // The list should be empty because it will be again filled completely. Otherwise, might have double lines. assert(result_lines.empty()); @@ -339,15 +339,15 @@ void Infill::_generate( connectLines(result_lines); } - Simplify simplifier(max_resolution, max_deviation, 0); + Simplify simplifier(max_resolution_, max_deviation_, 0); result_polygons = simplifier.polygon(result_polygons); - if (! skip_line_stitching - && (zig_zaggify || pattern == EFillMethod::CROSS || pattern == EFillMethod::CROSS_3D || pattern == EFillMethod::CUBICSUBDIV || pattern == EFillMethod::GYROID - || pattern == EFillMethod::ZIG_ZAG)) + if (! skip_line_stitching_ + && (zig_zaggify_ || pattern_ == EFillMethod::CROSS || pattern_ == EFillMethod::CROSS_3D || pattern_ == EFillMethod::CUBICSUBDIV || pattern_ == EFillMethod::GYROID + || pattern_ == EFillMethod::ZIG_ZAG)) { // don't stich for non-zig-zagged line infill types Polygons stitched_lines; - PolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width); + PolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width_); result_lines = stitched_lines; } result_lines = simplifier.polyline(result_lines); @@ -355,13 +355,13 @@ void Infill::_generate( void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) { - if (pattern == EFillMethod::CONCENTRIC) + if (pattern_ == EFillMethod::CONCENTRIC) { result_polygons = result_polygons.processEvenOdd(); // make into areas } - bool odd_multiplier = infill_multiplier % 2 == 1; - coord_t offset = (odd_multiplier) ? infill_line_width : infill_line_width / 2; + bool odd_multiplier = infill_multiplier_ % 2 == 1; + coord_t offset = (odd_multiplier) ? infill_line_width_ : infill_line_width_ / 2; // Get the first offset these are mirrored from the original center line Polygons result; @@ -373,21 +373,21 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) const Polygons first_offset_polygons = first_offset_polygons_outward.difference(first_offset_polygons_inward); first_offset = first_offset_lines.unionPolygons( first_offset_polygons); // usually we only have either lines or polygons, but this code also handles an infill pattern which generates both - if (zig_zaggify) + if (zig_zaggify_) { - first_offset = inner_contour.difference(first_offset); + first_offset = inner_contour_.difference(first_offset); } } result.add(first_offset); // Create the additional offsets from the first offsets, generated earlier, the direction of these offsets is // depended on whether these lines should be connected or not. - if (infill_multiplier > 3) + if (infill_multiplier_ > 3) { Polygons reference_polygons = first_offset; - const size_t multiplier = static_cast(infill_multiplier / 2); + const size_t multiplier = static_cast(infill_multiplier_ / 2); - const int extra_offset = mirror_offset ? -infill_line_width : infill_line_width; + const int extra_offset = mirror_offset_ ? -infill_line_width_ : infill_line_width_; for (size_t infill_line = 1; infill_line < multiplier; ++infill_line) { Polygons extra_polys = reference_polygons.offset(extra_offset); @@ -395,9 +395,9 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) reference_polygons = std::move(extra_polys); } } - if (zig_zaggify) + if (zig_zaggify_) { - result = result.intersection(inner_contour); + result = result.intersection(inner_contour_); } // Remove the original center lines when there are an even number of lines required. @@ -407,7 +407,7 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) result_lines.clear(); } result_polygons.add(result); - if (! zig_zaggify) + if (! zig_zaggify_) { for (PolygonRef poly : result_polygons) { // make polygons into polylines @@ -417,40 +417,40 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) } poly.add(poly[0]); } - Polygons polylines = inner_contour.intersectionPolyLines(result_polygons); + Polygons polylines = inner_contour_.intersectionPolyLines(result_polygons); result_polygons.clear(); - PolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width); + PolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width_); } } void Infill::generateGyroidInfill(Polygons& result_lines, Polygons& result_polygons) { Polygons line_segments; - GyroidInfill::generateTotalGyroidInfill(line_segments, zig_zaggify, line_distance, inner_contour, z); - PolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width); + GyroidInfill::generateTotalGyroidInfill(line_segments, zig_zaggify_, line_distance_, inner_contour_, z_); + PolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width_); } void Infill::generateLightningInfill(const std::shared_ptr& trees, Polygons& result_lines) { // Don't need to support areas smaller than line width, as they are always within radius: - if (std::abs(inner_contour.area()) < infill_line_width || ! trees) + if (std::abs(inner_contour_.area()) < infill_line_width_ || ! trees) { return; } - result_lines.add(trees->convertToLines(inner_contour, infill_line_width)); + result_lines.add(trees->convertToLines(inner_contour_, infill_line_width_)); } void Infill::generateConcentricInfill(std::vector& toolpaths, const Settings& settings) { - const coord_t min_area = infill_line_width * infill_line_width; + const coord_t min_area = infill_line_width_ * infill_line_width_; - Polygons current_inset = inner_contour; + Polygons current_inset = inner_contour_; Simplify simplifier(settings); while (true) { // If line_distance is 0, start from the same contour as the previous line, except where the previous line closed up the shape. // So we add the whole nominal line width first (to allow lines to be closer together than 1 line width if the line distance is smaller) and then subtract line_distance. - current_inset = current_inset.offset(infill_line_width - line_distance); + current_inset = current_inset.offset(infill_line_width_ - line_distance_); current_inset = simplifier.polygon(current_inset); // Many insets lead to increasingly detailed shapes. Simplify to speed up processing. if (current_inset.area() < min_area) // So small that it's inconsequential. Stop here. { @@ -459,7 +459,7 @@ void Infill::generateConcentricInfill(std::vector& toolpaths constexpr size_t inset_wall_count = 1; // 1 wall at a time. constexpr coord_t wall_0_inset = 0; // Don't apply any outer wall inset for these. That's just for the outer wall. - WallToolPaths wall_toolpaths(current_inset, infill_line_width, inset_wall_count, wall_0_inset, settings, 0, SectionType::CONCENTRIC_INFILL); // FIXME: @jellespijker pass + WallToolPaths wall_toolpaths(current_inset, infill_line_width_, inset_wall_count, wall_0_inset, settings, 0, SectionType::CONCENTRIC_INFILL); // FIXME: @jellespijker pass // the correct layer const std::vector inset_paths = wall_toolpaths.getToolPaths(); toolpaths.insert(toolpaths.end(), inset_paths.begin(), inset_paths.end()); @@ -470,16 +470,16 @@ void Infill::generateConcentricInfill(std::vector& toolpaths void Infill::generateGridInfill(Polygons& result) { - generateLineInfill(result, line_distance, fill_angle, 0); - generateLineInfill(result, line_distance, fill_angle + 90, 0); + generateLineInfill(result, line_distance_, fill_angle_, 0); + generateLineInfill(result, line_distance_, fill_angle_ + 90, 0); } void Infill::generateCubicInfill(Polygons& result) { - const coord_t shift = one_over_sqrt_2 * z; - generateLineInfill(result, line_distance, fill_angle, shift); - generateLineInfill(result, line_distance, fill_angle + 120, shift); - generateLineInfill(result, line_distance, fill_angle + 240, shift); + const coord_t shift = one_over_sqrt_2 * z_; + generateLineInfill(result, line_distance_, fill_angle_, shift); + generateLineInfill(result, line_distance_, fill_angle_ + 120, shift); + generateLineInfill(result, line_distance_, fill_angle_ + 240, shift); } void Infill::generateTetrahedralInfill(Polygons& result) @@ -496,51 +496,51 @@ void Infill::generateQuarterCubicInfill(Polygons& result) void Infill::generateHalfTetrahedralInfill(float pattern_z_shift, int angle_shift, Polygons& result) { - const coord_t period = line_distance * 2; - coord_t shift = coord_t(one_over_sqrt_2 * (z + pattern_z_shift * period * 2)) % period; + const coord_t period = line_distance_ * 2; + coord_t shift = coord_t(one_over_sqrt_2 * (z_ + pattern_z_shift * period * 2)) % period; shift = std::min(shift, period - shift); // symmetry due to the fact that we are applying the shift in both directions - shift = std::min(shift, period / 2 - infill_line_width / 2); // don't put lines too close to each other - shift = std::max(shift, infill_line_width / 2); // don't put lines too close to each other - generateLineInfill(result, period, fill_angle + angle_shift, shift); - generateLineInfill(result, period, fill_angle + angle_shift, -shift); + shift = std::min(shift, period / 2 - infill_line_width_ / 2); // don't put lines too close to each other + shift = std::max(shift, infill_line_width_ / 2); // don't put lines too close to each other + generateLineInfill(result, period, fill_angle_ + angle_shift, shift); + generateLineInfill(result, period, fill_angle_ + angle_shift, -shift); } void Infill::generateTriangleInfill(Polygons& result) { - generateLineInfill(result, line_distance, fill_angle, 0); - generateLineInfill(result, line_distance, fill_angle + 60, 0); - generateLineInfill(result, line_distance, fill_angle + 120, 0); + generateLineInfill(result, line_distance_, fill_angle_, 0); + generateLineInfill(result, line_distance_, fill_angle_ + 60, 0); + generateLineInfill(result, line_distance_, fill_angle_ + 120, 0); } void Infill::generateTrihexagonInfill(Polygons& result) { - generateLineInfill(result, line_distance, fill_angle, 0); - generateLineInfill(result, line_distance, fill_angle + 60, 0); - generateLineInfill(result, line_distance, fill_angle + 120, line_distance / 2); + generateLineInfill(result, line_distance_, fill_angle_, 0); + generateLineInfill(result, line_distance_, fill_angle_ + 60, 0); + generateLineInfill(result, line_distance_, fill_angle_ + 120, line_distance_ / 2); } void Infill::generateCubicSubDivInfill(Polygons& result, const SliceMeshStorage& mesh) { Polygons uncropped; - mesh.base_subdiv_cube->generateSubdivisionLines(z, uncropped); + mesh.base_subdiv_cube->generateSubdivisionLines(z_, uncropped); constexpr bool restitch = false; // cubic subdivision lines are always single line segments - not polylines consisting of multiple segments. - result = outer_contour.offset(infill_overlap).intersectionPolyLines(uncropped, restitch); + result = outer_contour_.offset(infill_overlap_).intersectionPolyLines(uncropped, restitch); } void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provider, Polygons& result_polygons, Polygons& result_lines) { - Polygon cross_pattern_polygon = cross_fill_provider.generate(pattern, z, infill_line_width, pocket_size); + Polygon cross_pattern_polygon = cross_fill_provider.generate(pattern_, z_, infill_line_width_, pocket_size_); if (cross_pattern_polygon.empty()) { return; } - if (zig_zaggify) + if (zig_zaggify_) { Polygons cross_pattern_polygons; cross_pattern_polygons.add(cross_pattern_polygon); - result_polygons.add(inner_contour.intersection(cross_pattern_polygons)); + result_polygons.add(inner_contour_.intersection(cross_pattern_polygons)); } else { @@ -549,8 +549,8 @@ void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provid Polygons cross_pattern_polylines; cross_pattern_polylines.add(cross_pattern_polygon); - Polygons poly_lines = inner_contour.intersectionPolyLines(cross_pattern_polylines); - PolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width); + Polygons poly_lines = inner_contour_.intersectionPolyLines(cross_pattern_polylines); + PolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width_); } } @@ -563,7 +563,7 @@ void Infill::addLineInfill( std::vector>& cut_list, coord_t shift) { - assert(! connect_lines && "connectLines() should add the infill lines, not addLineInfill"); + assert(! connect_lines_ && "connectLines() should add the infill lines, not addLineInfill"); unsigned int scanline_idx = 0; for (coord_t x = scanline_min_idx * line_distance + shift; x < boundary.max.X; x += line_distance) @@ -576,7 +576,7 @@ void Infill::addLineInfill( std::sort(crossings.begin(), crossings.end()); // sort by increasing Y coordinates for (unsigned int crossing_idx = 0; crossing_idx + 1 < crossings.size(); crossing_idx += 2) { - if (crossings[crossing_idx + 1] - crossings[crossing_idx] < infill_line_width / 5) + if (crossings[crossing_idx + 1] - crossings[crossing_idx] < infill_line_width_ / 5) { // segment is too short to create infill continue; } @@ -588,10 +588,10 @@ void Infill::addLineInfill( coord_t Infill::getShiftOffsetFromInfillOriginAndRotation(const double& infill_rotation) { - if (infill_origin.X != 0 || infill_origin.Y != 0) + if (infill_origin_.X != 0 || infill_origin_.Y != 0) { const double rotation_rads = infill_rotation * std::numbers::pi / 180; - return infill_origin.X * std::cos(rotation_rads) - infill_origin.Y * std::sin(rotation_rads); + return infill_origin_.X * std::cos(rotation_rads) - infill_origin_.Y * std::sin(rotation_rads); } return 0; } @@ -611,8 +611,8 @@ void Infill::generateZigZagInfill(Polygons& result, const coord_t line_distance, const coord_t shift = getShiftOffsetFromInfillOriginAndRotation(infill_rotation); PointMatrix rotation_matrix(infill_rotation); - ZigzagConnectorProcessor zigzag_processor(rotation_matrix, result, use_endpieces, connected_zigzags, skip_some_zags, zag_skip_count); - generateLinearBasedInfill(result, line_distance, rotation_matrix, zigzag_processor, connected_zigzags, shift); + ZigzagConnectorProcessor zigzag_processor(rotation_matrix, result, use_endpieces_, connected_zigzags_, skip_some_zags_, zag_skip_count_); + generateLinearBasedInfill(result, line_distance, rotation_matrix, zigzag_processor, connected_zigzags_, shift); } /* @@ -646,15 +646,15 @@ void Infill::generateLinearBasedInfill( const bool connected_zigzags, coord_t extra_shift) { - if (line_distance == 0 || inner_contour.empty()) // No infill to generate (0% density) or no area to generate it in. + if (line_distance == 0 || inner_contour_.empty()) // No infill to generate (0% density) or no area to generate it in. { return; } - Polygons outline = inner_contour; // Make a copy. We'll be rotating this outline to make intersections always horizontal, for better performance. + Polygons outline = inner_contour_; // Make a copy. We'll be rotating this outline to make intersections always horizontal, for better performance. outline.applyMatrix(rotation_matrix); - coord_t shift = extra_shift + this->shift; + coord_t shift = extra_shift + this->shift_; if (shift < 0) { shift = line_distance - (-shift) % line_distance; @@ -691,17 +691,17 @@ void Infill::generateLinearBasedInfill( const int min_scanline_index = computeScanSegmentIdx(boundary.min.X - shift, line_distance) + 1; const int max_scanline_index = computeScanSegmentIdx(boundary.max.X - shift, line_distance) + 1; crossings_per_scanline.resize(max_scanline_index - min_scanline_index); - if (connect_lines) + if (connect_lines_) { - crossings_on_line.resize(outline.size()); // One for each polygon. + crossings_on_line_.resize(outline.size()); // One for each polygon. } for (size_t poly_idx = 0; poly_idx < outline.size(); poly_idx++) { PolygonRef poly = outline[poly_idx]; - if (connect_lines) + if (connect_lines_) { - crossings_on_line[poly_idx].resize(poly.size()); // One for each line in this polygon. + crossings_on_line_[poly_idx].resize(poly.size()); // One for each line in this polygon. } Point p0 = poly.back(); zigzag_connector_processor.registerVertex(p0); // always adds the first point to ZigzagConnectorProcessorEndPieces::first_zigzag_connector when using a zigzag infill type @@ -754,7 +754,7 @@ void Infill::generateLinearBasedInfill( zigzag_connector_processor.registerPolyFinished(); } - if (connect_lines) + if (connect_lines_) { // Gather all crossings per scanline and find out which crossings belong together, then store them in crossings_on_line. for (int scanline_index = min_scanline_index; scanline_index < max_scanline_index; scanline_index++) @@ -777,8 +777,8 @@ void Infill::generateLinearBasedInfill( InfillLineSegment* new_segment = new InfillLineSegment(unrotated_first, first.vertex_index, first.polygon_index, unrotated_second, second.vertex_index, second.polygon_index); // Put the same line segment in the data structure twice: Once for each of the polygon line segment that it crosses. - crossings_on_line[first.polygon_index][first.vertex_index].push_back(new_segment); - crossings_on_line[second.polygon_index][second.vertex_index].push_back(new_segment); + crossings_on_line_[first.polygon_index][first.vertex_index].push_back(new_segment); + crossings_on_line_[second.polygon_index][second.vertex_index].push_back(new_segment); } } } @@ -801,12 +801,12 @@ void Infill::generateLinearBasedInfill( void Infill::resolveIntersection(const coord_t at_distance, const Point& intersect, Point& connect_start, Point& connect_end, InfillLineSegment* a, InfillLineSegment* b) { // Select wich ends of the line need to 'bend'. - const bool forward_line_a = a->end == connect_start; - const bool forward_line_b = b->start == connect_end; - auto& bend_a = forward_line_a ? a->end_bend : a->start_bend; - auto& bend_b = forward_line_b ? b->start_bend : b->end_bend; - auto& end_a = forward_line_a ? a->altered_end : a->altered_start; - auto& end_b = forward_line_b ? b->altered_start : b->altered_end; + const bool forward_line_a = a->end_ == connect_start; + const bool forward_line_b = b->start_ == connect_end; + auto& bend_a = forward_line_a ? a->end_bend_ : a->start_bend_; + auto& bend_b = forward_line_b ? b->start_bend_ : b->end_bend_; + auto& end_a = forward_line_a ? a->altered_end_ : a->altered_start_; + auto& end_b = forward_line_b ? b->altered_start_ : b->altered_end_; // Set values ('pre existing' values are needed when feeding these as reference parameters to functions that need a value). assert(! bend_a.has_value()); @@ -827,8 +827,8 @@ void Infill::resolveIntersection(const coord_t at_distance, const Point& interse bool is_resolved = true; // Use both of the resulting lines to place the 'bends' by intersecting with the original line-segments. - is_resolved &= LinearAlg2D::lineLineIntersection(q, r, a->start, a->end, bend_a.value()) && LinearAlg2D::pointIsProjectedBeyondLine(bend_a.value(), a->start, a->end) == 0; - is_resolved &= LinearAlg2D::lineLineIntersection(s, t, b->start, b->end, bend_b.value()) && LinearAlg2D::pointIsProjectedBeyondLine(bend_b.value(), b->start, b->end) == 0; + is_resolved &= LinearAlg2D::lineLineIntersection(q, r, a->start_, a->end_, bend_a.value()) && LinearAlg2D::pointIsProjectedBeyondLine(bend_a.value(), a->start_, a->end_) == 0; + is_resolved &= LinearAlg2D::lineLineIntersection(s, t, b->start_, b->end_, bend_b.value()) && LinearAlg2D::pointIsProjectedBeyondLine(bend_b.value(), b->start_, b->end_) == 0; // Also set the new end-points is_resolved &= LinearAlg2D::lineLineIntersection(connect_start, connect_end, q, r, end_a) && LinearAlg2D::pointIsProjectedBeyondLine(end_a, connect_start, connect_end) == 0; @@ -851,7 +851,7 @@ void Infill::resolveIntersection(const coord_t at_distance, const Point& interse void Infill::connectLines(Polygons& result_lines) { UnionFind connected_lines; // Keeps track of which lines are connected to which. - for (const std::vector>& crossings_on_polygon : crossings_on_line) + for (const std::vector>& crossings_on_polygon : crossings_on_line_) { for (const std::vector& crossings_on_polygon_segment : crossings_on_polygon) { @@ -865,16 +865,16 @@ void Infill::connectLines(Polygons& result_lines) } } - const auto half_line_distance_squared = (line_distance * line_distance) / 4; - for (size_t polygon_index = 0; polygon_index < inner_contour.size(); polygon_index++) + const auto half_line_distance_squared = (line_distance_ * line_distance_) / 4; + for (size_t polygon_index = 0; polygon_index < inner_contour_.size(); polygon_index++) { - ConstPolygonRef inner_contour_polygon = inner_contour[polygon_index]; + ConstPolygonRef inner_contour_polygon = inner_contour_[polygon_index]; if (inner_contour_polygon.empty()) { continue; } - assert(crossings_on_line.size() > polygon_index && "crossings dimension should be bigger then polygon index"); - std::vector>& crossings_on_polygon = crossings_on_line[polygon_index]; + assert(crossings_on_line_.size() > polygon_index && "crossings dimension should be bigger then polygon index"); + std::vector>& crossings_on_polygon = crossings_on_line_[polygon_index]; InfillLineSegment* previous_crossing = nullptr; // The crossing that we should connect to. If nullptr, we have been skipping until we find the next crossing. InfillLineSegment* previous_segment = nullptr; // The last segment we were connecting while drawing a line along the border. Point vertex_before = inner_contour_polygon.back(); @@ -891,10 +891,10 @@ void Infill::connectLines(Polygons& result_lines) [&vertex_before, polygon_index, vertex_index](InfillLineSegment* left_hand_side, InfillLineSegment* right_hand_side) { // Find the two endpoints that are relevant. - const bool choose_left = (left_hand_side->start_segment == vertex_index && left_hand_side->start_polygon == polygon_index); - const bool choose_right = (right_hand_side->start_segment == vertex_index && right_hand_side->start_polygon == polygon_index); - const Point left_hand_point = choose_left ? left_hand_side->start : left_hand_side->end; - const Point right_hand_point = choose_right ? right_hand_side->start : right_hand_side->end; + const bool choose_left = (left_hand_side->start_segment_ == vertex_index && left_hand_side->start_polygon_ == polygon_index); + const bool choose_right = (right_hand_side->start_segment_ == vertex_index && right_hand_side->start_polygon_ == polygon_index); + const Point left_hand_point = choose_left ? left_hand_side->start_ : left_hand_side->end_; + const Point right_hand_point = choose_right ? right_hand_side->start_ : right_hand_side->end_; return vSize(left_hand_point - vertex_before) < vSize(right_hand_point - vertex_before); }); @@ -919,16 +919,16 @@ void Infill::connectLines(Polygons& result_lines) // Join two infill lines together with a connecting line. // Here the InfillLineSegments function as a linked list, so that they can easily be joined. - const bool previous_forward = (previous_segment->start_segment == vertex_index && previous_segment->start_polygon == polygon_index); - const bool next_forward = (crossing->start_segment == vertex_index && crossing->start_polygon == polygon_index); - Point& previous_point = previous_forward ? previous_segment->start : previous_segment->end; - Point& next_point = next_forward ? crossing->start : crossing->end; + const bool previous_forward = (previous_segment->start_segment_ == vertex_index && previous_segment->start_polygon_ == polygon_index); + const bool next_forward = (crossing->start_segment_ == vertex_index && crossing->start_polygon_ == polygon_index); + Point& previous_point = previous_forward ? previous_segment->start_ : previous_segment->end_; + Point& next_point = next_forward ? crossing->start_ : crossing->end_; InfillLineSegment* new_segment; // If the segment is near length, we avoid creating it but still want to connect the crossing with the previous segment. if (previous_point == next_point) { - (previous_forward ? previous_segment->previous : previous_segment->next) = crossing; + (previous_forward ? previous_segment->previous_ : previous_segment->next_) = crossing; new_segment = previous_segment; } else @@ -936,23 +936,23 @@ void Infill::connectLines(Polygons& result_lines) // Resolve any intersections of the fill lines close to the boundary, by inserting extra points so the lines don't create a tiny 'loop'. Point intersect; if (vSize2(previous_point - next_point) < half_line_distance_squared - && LinearAlg2D::lineLineIntersection(previous_segment->start, previous_segment->end, crossing->start, crossing->end, intersect) - && LinearAlg2D::pointIsProjectedBeyondLine(intersect, previous_segment->start, previous_segment->end) == 0 - && LinearAlg2D::pointIsProjectedBeyondLine(intersect, crossing->start, crossing->end) == 0) + && LinearAlg2D::lineLineIntersection(previous_segment->start_, previous_segment->end_, crossing->start_, crossing->end_, intersect) + && LinearAlg2D::pointIsProjectedBeyondLine(intersect, previous_segment->start_, previous_segment->end_) == 0 + && LinearAlg2D::pointIsProjectedBeyondLine(intersect, crossing->start_, crossing->end_) == 0) { - resolveIntersection(infill_line_width, intersect, previous_point, next_point, previous_segment, crossing); + resolveIntersection(infill_line_width_, intersect, previous_point, next_point, previous_segment, crossing); } // A connecting line between them. new_segment = new InfillLineSegment(previous_point, vertex_index, polygon_index, next_point, vertex_index, polygon_index); - new_segment->altered_start = previous_point; - new_segment->altered_end = next_point; - new_segment->previous = previous_segment; - (previous_forward ? previous_segment->previous : previous_segment->next) = new_segment; - new_segment->next = crossing; + new_segment->altered_start_ = previous_point; + new_segment->altered_end_ = next_point; + new_segment->previous_ = previous_segment; + (previous_forward ? previous_segment->previous_ : previous_segment->next_) = new_segment; + new_segment->next_ = crossing; } - (next_forward ? crossing->previous : crossing->next) = new_segment; + (next_forward ? crossing->previous_ : crossing->next_) = new_segment; connected_lines.unite(crossing_handle, previous_crossing_handle); previous_crossing = nullptr; previous_segment = nullptr; @@ -964,8 +964,8 @@ void Infill::connectLines(Polygons& result_lines) { InfillLineSegment* new_segment; - const bool choose_side = (vertex_index == previous_segment->start_segment && polygon_index == previous_segment->start_polygon); - const auto& previous_side = choose_side ? previous_segment->start : previous_segment->end; + const bool choose_side = (vertex_index == previous_segment->start_segment_ && polygon_index == previous_segment->start_polygon_); + const auto& previous_side = choose_side ? previous_segment->start_ : previous_segment->end_; if (previous_side == vertex_after) { // Edge case when an infill line ends directly on top of vertex_after: We skip the extra connecting line segment, as that would be 0-length. @@ -975,9 +975,9 @@ void Infill::connectLines(Polygons& result_lines) else { new_segment - = new InfillLineSegment(previous_side, vertex_index, polygon_index, vertex_after, (vertex_index + 1) % inner_contour[polygon_index].size(), polygon_index); - (choose_side ? previous_segment->previous : previous_segment->next) = new_segment; - new_segment->previous = previous_segment; + = new InfillLineSegment(previous_side, vertex_index, polygon_index, vertex_after, (vertex_index + 1) % inner_contour_[polygon_index].size(), polygon_index); + (choose_side ? previous_segment->previous_ : previous_segment->next_) = new_segment; + new_segment->previous_ = previous_segment; previous_segment = new_segment; } } @@ -999,38 +999,38 @@ void Infill::connectLines(Polygons& result_lines) // Find where the polyline ends by searching through previous and next lines. // Note that the "previous" and "next" lines don't necessarily match up though, because the direction while connecting infill lines was not yet known. - Point previous_vertex = infill_line->start; // Take one side arbitrarily to start from. This variable indicates the vertex that connects to the previous line. + Point previous_vertex = infill_line->start_; // Take one side arbitrarily to start from. This variable indicates the vertex that connects to the previous line. InfillLineSegment* current_infill_line = infill_line; - while (current_infill_line->next && current_infill_line->previous) // Until we reached an endpoint. + while (current_infill_line->next_ && current_infill_line->previous_) // Until we reached an endpoint. { - const bool choose_side = (previous_vertex == current_infill_line->start); - const Point next_vertex = choose_side ? current_infill_line->end : current_infill_line->start; - current_infill_line = choose_side ? current_infill_line->next : current_infill_line->previous; + const bool choose_side = (previous_vertex == current_infill_line->start_); + const Point next_vertex = choose_side ? current_infill_line->end_ : current_infill_line->start_; + current_infill_line = choose_side ? current_infill_line->next_ : current_infill_line->previous_; previous_vertex = next_vertex; } // Now go along the linked list of infill lines and output the infill lines to the actual result. PolygonRef result_line = result_lines.newPoly(); InfillLineSegment* old_line = current_infill_line; - if (current_infill_line->previous) + if (current_infill_line->previous_) { current_infill_line->swapDirection(); } current_infill_line->appendTo(result_line); - previous_vertex = current_infill_line->end; - current_infill_line = current_infill_line->next; + previous_vertex = current_infill_line->end_; + current_infill_line = current_infill_line->next_; delete old_line; while (current_infill_line) { old_line = current_infill_line; // We'll delete this after we've traversed to the next line. - if (previous_vertex != current_infill_line->start) + if (previous_vertex != current_infill_line->start_) { current_infill_line->swapDirection(); } - const Point next_vertex = current_infill_line->end; // Opposite side of the line. + const Point next_vertex = current_infill_line->end_; // Opposite side of the line. constexpr bool polyline_break = false; current_infill_line->appendTo(result_line, polyline_break); - current_infill_line = current_infill_line->next; + current_infill_line = current_infill_line->next_; previous_vertex = next_vertex; delete old_line; } @@ -1041,32 +1041,32 @@ void Infill::connectLines(Polygons& result_lines) bool Infill::InfillLineSegment::operator==(const InfillLineSegment& other) const { - return start == other.start && end == other.end; + return start_ == other.start_ && end_ == other.end_; } void Infill::InfillLineSegment::swapDirection() { - std::swap(start, end); - std::swap(altered_start, altered_end); - std::swap(start_bend, end_bend); - std::swap(next, previous); + std::swap(start_, end_); + std::swap(altered_start_, altered_end_); + std::swap(start_bend_, end_bend_); + std::swap(next_, previous_); } void Infill::InfillLineSegment::appendTo(PolygonRef& result_polyline, const bool include_start) { if (include_start) { - result_polyline.add(altered_start); + result_polyline.add(altered_start_); } - if (start_bend.has_value()) + if (start_bend_.has_value()) { - result_polyline.add(start_bend.value()); + result_polyline.add(start_bend_.value()); } - if (end_bend.has_value()) + if (end_bend_.has_value()) { - result_polyline.add(end_bend.value()); + result_polyline.add(end_bend_.value()); } - result_polyline.add(altered_end); + result_polyline.add(altered_end_); } } // namespace cura diff --git a/src/infill/ZigzagConnectorProcessor.cpp b/src/infill/ZigzagConnectorProcessor.cpp index 4bab85b550..1853ff77a5 100644 --- a/src/infill/ZigzagConnectorProcessor.cpp +++ b/src/infill/ZigzagConnectorProcessor.cpp @@ -9,13 +9,13 @@ using namespace cura; void ZigzagConnectorProcessor::registerVertex(const Point& vertex) { - if (is_first_connector) + if (is_first_connector_) { - first_connector.push_back(vertex); + first_connector_.push_back(vertex); } else { // it's yet unclear whether the polygon segment should be included, so we store it until we know - current_connector.push_back(vertex); + current_connector_.push_back(vertex); } } @@ -41,7 +41,7 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, const bool is_this_endpiece = start_scanline_idx == end_scanline_idx; const bool is_this_connection_even = start_scanline_idx % 2 == 0; bool should_skip_this_connection = false; - if (skip_some_zags && zag_skip_count > 0) + if (skip_some_zags_ && zag_skip_count_ > 0) { // // Here is an illustration of how the zags will be removed. @@ -68,17 +68,17 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, // if (direction > 0) { - should_skip_this_connection = start_scanline_idx % zag_skip_count == 0; + should_skip_this_connection = start_scanline_idx % zag_skip_count_ == 0; } else { - should_skip_this_connection = (start_scanline_idx - 1) % zag_skip_count == 0; + should_skip_this_connection = (start_scanline_idx - 1) % zag_skip_count_ == 0; } } const bool should_add = (is_this_connection_even && !is_this_endpiece && !should_skip_this_connection) // normal connections that should be added - || (use_endpieces && is_this_endpiece); // end piece if it is enabled; + || (use_endpieces_ && is_this_endpiece); // end piece if it is enabled; return should_add; } @@ -86,50 +86,50 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point& intersection, int scanline_index) { - if (is_first_connector) + if (is_first_connector_) { // process as the first connector if we haven't found one yet // this will be processed with the last remaining piece at the end (when the polygon finishes) - first_connector.push_back(intersection); - first_connector_end_scanline_index = scanline_index; - is_first_connector = false; + first_connector_.push_back(intersection); + first_connector_end_scanline_index_ = scanline_index; + is_first_connector_ = false; } else { // add the current connector if needed - if (shouldAddCurrentConnector(last_connector_index, scanline_index)) + if (shouldAddCurrentConnector(last_connector_index_, scanline_index)) { - const bool is_this_endpiece = scanline_index == last_connector_index; - current_connector.push_back(intersection); - addZagConnector(current_connector, is_this_endpiece); + const bool is_this_endpiece = scanline_index == last_connector_index_; + current_connector_.push_back(intersection); + addZagConnector(current_connector_, is_this_endpiece); } } // update state - current_connector.clear(); // we're starting a new (odd) zigzag connector, so clear the old one - current_connector.push_back(intersection); - last_connector_index = scanline_index; + current_connector_.clear(); // we're starting a new (odd) zigzag connector, so clear the old one + current_connector_.push_back(intersection); + last_connector_index_ = scanline_index; } void ZigzagConnectorProcessor::registerPolyFinished() { - int scanline_start_index = last_connector_index; - int scanline_end_index = first_connector_end_scanline_index; - const bool is_endpiece = is_first_connector || (!is_first_connector && scanline_start_index == scanline_end_index); + int scanline_start_index = last_connector_index_; + int scanline_end_index = first_connector_end_scanline_index_; + const bool is_endpiece = is_first_connector_ || (!is_first_connector_ && scanline_start_index == scanline_end_index); // decides whether to add this zag according to the following rules - if ((is_endpiece && use_endpieces) + if ((is_endpiece && use_endpieces_) || (!is_endpiece && shouldAddCurrentConnector(scanline_start_index, scanline_end_index))) { // for convenience, put every point in one vector - for (const Point& point : first_connector) + for (const Point& point : first_connector_) { - current_connector.push_back(point); + current_connector_.push_back(point); } - first_connector.clear(); + first_connector_.clear(); - addZagConnector(current_connector, is_endpiece); + addZagConnector(current_connector_, is_endpiece); } // reset member variables @@ -145,7 +145,7 @@ void ZigzagConnectorProcessor::addZagConnector(std::vector& points, bool return; } Polygon polyline(points); - if (is_endpiece && !connected_endpieces) + if (is_endpiece && !connected_endpieces_) { polyline.pop_back(); } From 32d17c54643dec09dc39902efaefb4d14f88f49a Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 11:14:48 +0100 Subject: [PATCH 060/218] Fix variable shadowing warnings --- include/Application.h | 20 +- include/plugins/pluginproxy.h | 2 +- include/utils/ThreadPool.h | 196 ++++++++++-------- src/Application.cpp | 60 +++--- src/FffGcodeWriter.cpp | 98 ++++----- src/FffPolygonGenerator.cpp | 34 +-- src/InterlockingGenerator.cpp | 4 +- src/LayerPlan.cpp | 34 +-- src/LayerPlanBuffer.cpp | 30 +-- src/Mold.cpp | 2 +- src/Preheat.cpp | 8 +- src/PrimeTower.cpp | 14 +- src/Scene.cpp | 4 +- src/SkirtBrim.cpp | 20 +- src/communication/ArcusCommunication.cpp | 4 +- .../ArcusCommunicationPrivate.cpp | 6 +- src/communication/CommandLine.cpp | 6 +- src/gcodeExport.cpp | 60 +++--- src/multiVolumes.cpp | 2 +- src/progress/Progress.cpp | 2 +- src/raft.cpp | 14 +- src/settings/AdaptiveLayerHeights.cpp | 4 +- src/settings/PathConfigStorage.cpp | 40 ++-- src/settings/Settings.cpp | 8 +- src/sliceDataStorage.cpp | 30 +-- src/slicer.cpp | 2 +- src/support.cpp | 30 +-- tests/GCodeExportTest.cpp | 60 +++--- tests/LayerPlanTest.cpp | 8 +- tests/arcus/ArcusCommunicationPrivateTest.cpp | 22 +- tests/integration/SlicePhaseTest.cpp | 8 +- tests/settings/SettingsTest.cpp | 6 +- 32 files changed, 433 insertions(+), 405 deletions(-) diff --git a/include/Application.h b/include/Application.h index 4a3f793daf..a301f3565b 100644 --- a/include/Application.h +++ b/include/Application.h @@ -4,12 +4,12 @@ #ifndef APPLICATION_H #define APPLICATION_H -#include "utils/NoCopy.h" - #include #include #include +#include "utils/NoCopy.h" + namespace cura { @@ -38,19 +38,21 @@ class Application : NoCopy * can assume that it is safe to access this without checking whether it is * initialised. */ - Communication* communication = nullptr; + Communication* communication_ = nullptr; /* * \brief The slice that is currently ongoing. * * If no slice has started yet, this will be a nullptr. */ - Slice* current_slice = nullptr; + Slice* current_slice_ = nullptr; /*! * \brief ThreadPool with lifetime tied to Application */ - ThreadPool* thread_pool = nullptr; + ThreadPool* thread_pool_ = nullptr; + + std::string instance_uuid_; /*! * Gets the instance of this application class. @@ -92,8 +94,6 @@ class Application : NoCopy */ void startThreadPool(int nworkers = 0); - std::string instance_uuid; - protected: #ifdef ARCUS /*! @@ -120,13 +120,13 @@ class Application : NoCopy /* * \brief The number of arguments that the application was called with. */ - size_t argc; + size_t argc_; /* * \brief An array of C strings containing the arguments that the * application was called with. */ - char** argv; + char** argv_; /*! * \brief Constructs a new Application instance. @@ -147,4 +147,4 @@ class Application : NoCopy } // namespace cura -#endif // APPLICATION_H \ No newline at end of file +#endif // APPLICATION_H diff --git a/include/plugins/pluginproxy.h b/include/plugins/pluginproxy.h index 2ff7b5c0c3..3059287b4a 100644 --- a/include/plugins/pluginproxy.h +++ b/include/plugins/pluginproxy.h @@ -341,7 +341,7 @@ class PluginProxy rsp_converter_type rsp_{}; ///< The Invoke response converter object. slot_metadata slot_info_{ .slot_id = SlotID, .version = SlotVersion.value, - .engine_uuid = Application::getInstance().instance_uuid }; ///< Holds information about the plugin slot. + .engine_uuid = Application::getInstance().instance_uuid_ }; ///< Holds information about the plugin slot. std::optional plugin_info_{ std::optional(std::nullopt) }; ///< Optional object that holds the plugin metadata, set after handshake }; diff --git a/include/utils/ThreadPool.h b/include/utils/ThreadPool.h index 28f17b8080..ed8db06c92 100644 --- a/include/utils/ThreadPool.h +++ b/include/utils/ThreadPool.h @@ -1,12 +1,9 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef THREADPOOL_H #define THREADPOOL_H -#include "../Application.h" // accessing singleton's Application::thread_pool -#include "../utils/math.h" // round_up_divide - #include #include #include @@ -15,6 +12,9 @@ #include #include +#include "../Application.h" // accessing singleton's Application::thread_pool +#include "../utils/math.h" // round_up_divide + namespace cura { @@ -27,20 +27,29 @@ namespace cura */ class ThreadPool { - public: +public: using lock_t = std::unique_lock; using task_t = std::function; //! Spawns a thread pool with `nthreads` threads ThreadPool(size_t nthreads); - ~ThreadPool() { join(); } + ~ThreadPool() + { + join(); + } //! Returns the number of threads - size_t thread_count() const { return threads.size(); } + size_t thread_count() const + { + return threads.size(); + } //! Gets a lock on the queue, stopping the queuing or execution of new tasks while held - lock_t get_lock() { return lock_t(mutex); } + lock_t get_lock() + { + return lock_t(mutex); + } /*! * \brief Pushes a new task while the queue is locked. @@ -58,12 +67,13 @@ class ThreadPool * \brief Executes pending tasks while the predicates returns true * This method doesn't wait unless predicate does (like implementation of ThreadPool::worker()) */ - template void work_while(lock_t& lock, P predicate) + template + void work_while(lock_t& lock, P predicate) { assert(lock); - while(predicate() && !tasks.empty()) // Order is important: predicate() might wait on an empty queue + while (predicate() && ! tasks.empty()) // Order is important: predicate() might wait on an empty queue { - assert(!tasks.empty()); + assert(! tasks.empty()); task_t task = std::move(tasks.front()); tasks.pop_front(); @@ -72,7 +82,7 @@ class ThreadPool } } - private: +private: void worker(); void join(); @@ -86,10 +96,11 @@ class ThreadPool /// `std::make_signed_t` fails for non integral types in a way that doesn't allows SFINAE fallbacks. This alias solves that. -template using make_signed_if_integral_t = typename std::enable_if_t, std::make_signed>::type; +template +using make_signed_if_integral_t = typename std::enable_if_t, std::make_signed>::type; /// Overloads `std::distance()` to work on integral types -template> +template> inline Signed distance(const Int& first, const Int& last) { return static_cast(last) - static_cast(first); @@ -109,7 +120,7 @@ inline Signed distance(const Int& first, const Int& last) * \param chunks_per_worker Maximum number of tasks that are queue at once (defaults to 4 times the number of workers). */ template -void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, const size_t chunks_per_worker=8) +void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor = 1, const size_t chunks_per_worker = 8) { using lock_t = ThreadPool::lock_t; @@ -121,7 +132,7 @@ void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, co } const size_t nitems = dist; - ThreadPool* const thread_pool = Application::getInstance().thread_pool; + ThreadPool* const thread_pool = Application::getInstance().thread_pool_; assert(thread_pool); const size_t nworkers = thread_pool->thread_count() + 1; // One task per std::thread + 1 for main thread @@ -132,7 +143,7 @@ void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, co blocks = nitems; } else - { // User wants to divide the work in blocks of chunk_size_factor items + { // User wants to divide the work in blocks of chunk_size_factor items blocks = round_up_divide(nitems, chunk_size_factor); } @@ -155,21 +166,23 @@ void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, co // Schedules a task per chunk on the thread pool lock_t lock = thread_pool->get_lock(); T chunk_last; - for (T chunk_first = first ; chunk_first < last ; chunk_first = chunk_last) + for (T chunk_first = first; chunk_first < last; chunk_first = chunk_last) { if (distance(chunk_first, last) > chunk_increment) - { // Full size chunk + { // Full size chunk chunk_last = chunk_first + chunk_increment; } else - { // Adjust for the size of the last chunk + { // Adjust for the size of the last chunk chunk_last = last; } - thread_pool->push(lock, [&shared_state, chunk_first, chunk_last](lock_t& th_lock) + thread_pool->push( + lock, + [&shared_state, chunk_first, chunk_last](lock_t& th_lock) { th_lock.unlock(); // Enter unsynchronized region - for (T i = chunk_first ; i < chunk_last ; ++i) + for (T i = chunk_first; i < chunk_last; ++i) { shared_state.loop_body(i); } @@ -182,8 +195,13 @@ void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, co } // Do work while parallel_for's tasks are running - thread_pool->work_while(lock, [&]{ return shared_state.chunks_remaining > 0; }); - while(shared_state.chunks_remaining > 0) // Wait until all the task are completed + thread_pool->work_while( + lock, + [&] + { + return shared_state.chunks_remaining > 0; + }); + while (shared_state.chunks_remaining > 0) // Wait until all the task are completed { shared_state.work_done.wait(lock); } @@ -194,15 +212,15 @@ void parallel_for(T first, T last, F&& loop_body, size_t chunk_size_factor=1, co * Overload for iterating over containers with random access iterators. */ template -auto parallel_for(Container& container, F&& loop_body, size_t chunk_size_factor=1, size_t chunks_per_worker=8) - -> std::void_t +auto parallel_for(Container& container, F&& loop_body, size_t chunk_size_factor = 1, size_t chunks_per_worker = 8) -> std::void_t { parallel_for(container.begin(), container.end(), std::forward(loop_body), chunk_size_factor, chunks_per_worker); } //! \private Internal state for run_multiple_producers_ordered_consumer() -template class MultipleProducersOrderedConsumer; +template +class MultipleProducersOrderedConsumer; /*! * \brief Runs parallel producers and buffers the results to be consumed serially in indices order. @@ -223,9 +241,9 @@ template class MultipleProducersOrderedCon * \param max_pending_per_worker Number of allocated slots per worker for items waiting to be consumed. */ template -void run_multiple_producers_ordered_consumer(ptrdiff_t first, ptrdiff_t last, P&& producer, C&& consumer, size_t max_pending_per_worker=8) +void run_multiple_producers_ordered_consumer(ptrdiff_t first, ptrdiff_t last, P&& producer, C&& consumer, size_t max_pending_per_worker = 8) { - ThreadPool* thread_pool = Application::getInstance().thread_pool; + ThreadPool* thread_pool = Application::getInstance().thread_pool_; assert(thread_pool); assert(max_pending_per_worker > 0); const size_t max_pending = max_pending_per_worker * (thread_pool->thread_count() + 1); @@ -238,59 +256,69 @@ class MultipleProducersOrderedConsumer using item_t = std::invoke_result_t; using lock_t = ThreadPool::lock_t; - public: +public: /*! * \see run_multiple_producers_ordered_consumer * \param max_pending Number of allocated slots for items waiting to be consumed. */ template MultipleProducersOrderedConsumer(ptrdiff_t first, ptrdiff_t last, P&& producer, C&& consumer, size_t max_pending) - : producer(std::forward

(producer)), consumer(std::forward(consumer)), - max_pending(max_pending), - queue(std::make_unique(max_pending)), - last_idx(last), write_idx(first), read_idx(first), consumer_wait_idx(first) - {} + : producer_(std::forward

(producer)) + , consumer_(std::forward(consumer)) + , max_pending_(max_pending) + , queue_(std::make_unique(max_pending)) + , last_idx_(last) + , write_idx_(first) + , read_idx_(first) + , consumer_wait_idx_(first) + { + } //! Schedules the tasks on thread_pool, then run one on the main thread until completion. void run(ThreadPool& thread_pool) { - if (write_idx >= last_idx) + if (write_idx_ >= last_idx_) { return; } - workers_count = thread_pool.thread_count() + 1; + workers_count_ = thread_pool.thread_count() + 1; // Start thread_pool.thread_count() workers on the thread pool auto lock = thread_pool.get_lock(); - for (size_t i = 1 ; i < workers_count ; i++) + for (size_t i = 1; i < workers_count_; i++) { - thread_pool.push(lock, [this](lock_t& th_lock){ worker(th_lock); }); + thread_pool.push( + lock, + [this](lock_t& th_lock) + { + worker(th_lock); + }); } // Run a worker on the main thread worker(lock); // Wait for completion of all workers - if (workers_count > 0) + if (workers_count_ > 0) { - work_done_cond.wait(lock); + work_done_cond_.wait(lock); } } - protected: +protected: //! Waits for free space in the ring. Returns false when work is completed. bool wait(lock_t& lock) { - while(true) + while (true) { - if (write_idx >= last_idx) - { // Work completed: stop worker + if (write_idx_ >= last_idx_) + { // Work completed: stop worker return false; } - if (write_idx - read_idx < max_pending) - { // Continue as a producer + if (write_idx_ - read_idx_ < max_pending_) + { // Continue as a producer return true; } else - { // Queue is full, wait for consumer signal - free_slot_cond.wait(lock); // Signaled by consume_many() and worker() completion + { // Queue is full, wait for consumer signal + free_slot_cond_.wait(lock); // Signaled by consume_many() and worker() completion } } } @@ -298,16 +326,16 @@ class MultipleProducersOrderedConsumer //! Produces an item and store in in the ring buffer. Assumes that there is items to produce and free space in the ring ptrdiff_t produce(lock_t& lock) { - ptrdiff_t produced_idx = write_idx++; - item_t* slot = &queue[(produced_idx + max_pending) % max_pending]; - assert(produced_idx < last_idx); + ptrdiff_t produced_idx = write_idx_++; + item_t* slot = &queue_[(produced_idx + max_pending_) % max_pending_]; + assert(produced_idx < last_idx_); // Unlocks global mutex while producing an item lock.unlock(); - item_t item = producer(produced_idx); + item_t item = producer_(produced_idx); lock.lock(); - assert(!*slot); + assert(! *slot); *slot = std::move(item); assert(*slot); @@ -317,68 +345,68 @@ class MultipleProducersOrderedConsumer //! Consumes items, until an empty slot (not yet produced) is found. void consume_many(lock_t& lock) { - assert(read_idx < write_idx); - for (item_t* slot = &queue[(read_idx + max_pending) % max_pending]; *slot ; slot = &queue[(read_idx + max_pending) % max_pending]) + assert(read_idx_ < write_idx_); + for (item_t* slot = &queue_[(read_idx_ + max_pending_) % max_pending_]; *slot; slot = &queue_[(read_idx_ + max_pending_) % max_pending_]) { // Unlocks global mutex while consuming an item lock.unlock(); - consumer(std::move(*slot)); + consumer_(std::move(*slot)); *slot = {}; lock.lock(); // Increment read index and signal a waiting worker if there is one - bool queue_was_full = write_idx - read_idx >= max_pending; - read_idx++; + bool queue_was_full = write_idx_ - read_idx_ >= max_pending_; + read_idx_++; // Notify producers that are waiting for a queue slot if (queue_was_full) { - free_slot_cond.notify_one(); + free_slot_cond_.notify_one(); } } - consumer_wait_idx = read_idx; // The producer filling this slot will resume consumption + consumer_wait_idx_ = read_idx_; // The producer filling this slot will resume consumption } //! Task pushed on the ThreadPool void worker(lock_t& lock) { - while(wait(lock)) // While there is work to do + while (wait(lock)) // While there is work to do { ptrdiff_t produced_idx = produce(lock); - if (produced_idx == consumer_wait_idx) - { // This thread just produced the item that was waited for by the consumer + if (produced_idx == consumer_wait_idx_) + { // This thread just produced the item that was waited for by the consumer consume_many(lock); // Consume a contiguous block starting at consumer_wait_idx } } // Notify eventual workers waiting for a free slot but never got one during the interval of producing the last items - free_slot_cond.notify_all(); + free_slot_cond_.notify_all(); - if (--workers_count == 0) - { // Last worker exiting: signal run() about workers completion - work_done_cond.notify_one(); + if (--workers_count_ == 0) + { // Last worker exiting: signal run() about workers completion + work_done_cond_.notify_one(); } } // Tracks worker completion - size_t workers_count; - std::condition_variable work_done_cond; - - Producer producer; - Consumer consumer; - const ptrdiff_t max_pending; // Number of produced items that can wait in the queue - const std::unique_ptr queue; // Ring buffer mapping each intermediary result to a slot - const ptrdiff_t last_idx; - - ptrdiff_t write_idx; // Next slot to produce - ptrdiff_t read_idx; // Next slot to consume - ptrdiff_t consumer_wait_idx; // First slot that is waited for by the consumer - std::condition_variable free_slot_cond; // Condition to wait for available space in the buffer + size_t workers_count_; + std::condition_variable work_done_cond_; + + Producer producer_; + Consumer consumer_; + const ptrdiff_t max_pending_; // Number of produced items that can wait in the queue + const std::unique_ptr queue_; // Ring buffer mapping each intermediary result to a slot + const ptrdiff_t last_idx_; + + ptrdiff_t write_idx_; // Next slot to produce + ptrdiff_t read_idx_; // Next slot to consume + ptrdiff_t consumer_wait_idx_; // First slot that is waited for by the consumer + std::condition_variable free_slot_cond_; // Condition to wait for available space in the buffer }; //! \private Template deduction guide: defaults to inlining closures into the class layout template -MultipleProducersOrderedConsumer(ptrdiff_t, ptrdiff_t, P , C, size_t) -> MultipleProducersOrderedConsumer; +MultipleProducersOrderedConsumer(ptrdiff_t, ptrdiff_t, P, C, size_t) -> MultipleProducersOrderedConsumer; -} //Cura namespace. +} // namespace cura #endif // THREADPOOL_H diff --git a/src/Application.cpp b/src/Application.cpp index 0074940150..440bb09f3c 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -3,13 +3,9 @@ #include "Application.h" -#include "FffProcessor.h" -#include "communication/ArcusCommunication.h" //To connect via Arcus to the front-end. -#include "communication/CommandLine.h" //To use the command line to slice stuff. -#include "plugins/slots.h" -#include "progress/Progress.h" -#include "utils/ThreadPool.h" -#include "utils/string.h" //For stringcasecompare. +#include +#include +#include #include //For generating a UUID. #include //For generating a UUID. @@ -22,15 +18,19 @@ #include #include -#include -#include -#include +#include "FffProcessor.h" +#include "communication/ArcusCommunication.h" //To connect via Arcus to the front-end. +#include "communication/CommandLine.h" //To use the command line to slice stuff. +#include "plugins/slots.h" +#include "progress/Progress.h" +#include "utils/ThreadPool.h" +#include "utils/string.h" //For stringcasecompare. namespace cura { Application::Application() - : instance_uuid(boost::uuids::to_string(boost::uuids::random_generator()())) + : instance_uuid_(boost::uuids::to_string(boost::uuids::random_generator()())) { auto dup_sink = std::make_shared(std::chrono::seconds{ 10 }); auto base_sink = std::make_shared(); @@ -47,8 +47,8 @@ Application::Application() Application::~Application() { - delete communication; - delete thread_pool; + delete communication_; + delete thread_pool_; } Application& Application::getInstance() @@ -64,7 +64,7 @@ void Application::connect() int port = 49674; // Parse port number from IP address. - std::string ip_port(argv[2]); + std::string ip_port(argv_[2]); std::size_t found_pos = ip_port.find(':'); if (found_pos != std::string::npos) { @@ -74,9 +74,9 @@ void Application::connect() int n_threads; - for (size_t argn = 3; argn < argc; argn++) + for (size_t argn = 3; argn < argc_; argn++) { - char* str = argv[argn]; + char* str = argv_[argn]; if (str[0] == '-') { for (str++; *str; str++) @@ -104,13 +104,13 @@ void Application::connect() ArcusCommunication* arcus_communication = new ArcusCommunication(); arcus_communication->connect(ip, port); - communication = arcus_communication; + communication_ = arcus_communication; } #endif // ARCUS void Application::printCall() const { - spdlog::error("Command called: {}", *argv); + spdlog::error("Command called: {}", *argv_); } void Application::printHelp() const @@ -171,18 +171,18 @@ void Application::printLicense() const void Application::slice() { std::vector arguments; - for (size_t argument_index = 0; argument_index < argc; argument_index++) + for (size_t argument_index = 0; argument_index < argc_; argument_index++) { - arguments.emplace_back(argv[argument_index]); + arguments.emplace_back(argv_[argument_index]); } - communication = new CommandLine(arguments); + communication_ = new CommandLine(arguments); } void Application::run(const size_t argc, char** argv) { - this->argc = argc; - this->argv = argv; + argc_ = argc; + argv_ = argv; printLicense(); Progress::init(); @@ -216,7 +216,7 @@ void Application::run(const size_t argc, char** argv) exit(1); } - if (! communication) + if (! communication_) { // No communication channel is open any more, so either: //- communication failed to connect, or @@ -225,9 +225,9 @@ void Application::run(const size_t argc, char** argv) exit(0); } startThreadPool(); // Start the thread pool - while (communication->hasSlice()) + while (communication_->hasSlice()) { - communication->sliceNext(); + communication_->sliceNext(); } } @@ -236,7 +236,7 @@ void Application::startThreadPool(int nworkers) size_t nthreads; if (nworkers <= 0) { - if (thread_pool) + if (thread_pool_) { return; // Keep the previous ThreadPool } @@ -246,12 +246,12 @@ void Application::startThreadPool(int nworkers) { nthreads = nworkers - 1; // Minus one for the main thread } - if (thread_pool && thread_pool->thread_count() == nthreads) + if (thread_pool_ && thread_pool_->thread_count() == nthreads) { return; // Keep the previous ThreadPool } - delete thread_pool; - thread_pool = new ThreadPool(nthreads); + delete thread_pool_; + thread_pool_ = new ThreadPool(nthreads); } } // namespace cura diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 406b365eab..52aa1cd876 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -41,7 +41,7 @@ namespace cura FffGcodeWriter::FffGcodeWriter() : max_object_height(0) , layer_plan_buffer(gcode) - , slice_uuid(Application::getInstance().instance_uuid) + , slice_uuid(Application::getInstance().instance_uuid_) { for (unsigned int extruder_nr = 0; extruder_nr < MAX_EXTRUDERS; extruder_nr++) { // initialize all as max layer_nr, so that they get updated to the lowest layer on which they are used. @@ -81,14 +81,14 @@ void FffGcodeWriter::writeGCode(SliceDataStorage& storage, TimeKeeper& time_keep gcode.preSetup(start_extruder_nr); gcode.setSliceUUID(slice_uuid); - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; if (scene.current_mesh_group == scene.mesh_groups.begin()) // First mesh group. { gcode.resetTotalPrintTimeAndFilament(); gcode.setInitialAndBuildVolumeTemps(start_extruder_nr); } - Application::getInstance().communication->beginGCode(); + Application::getInstance().communication_->beginGCode(); setConfigFanSpeedLayerTime(); @@ -131,7 +131,7 @@ void FffGcodeWriter::writeGCode(SliceDataStorage& storage, TimeKeeper& time_keep gcode.writeLayerCountComment(total_layers); { // calculate the mesh order for each extruder - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); mesh_order_per_extruder.clear(); // Might be not empty in case of sequential printing. mesh_order_per_extruder.reserve(extruder_count); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) @@ -298,7 +298,7 @@ void FffGcodeWriter::findLayerSeamsForSpiralize(SliceDataStorage& storage, size_ void FffGcodeWriter::setConfigFanSpeedLayerTime() { - for (const ExtruderTrain& train : Application::getInstance().current_slice->scene.extruders) + for (const ExtruderTrain& train : Application::getInstance().current_slice_->scene.extruders) { fan_speed_layer_time_settings_per_extruder.emplace_back(); FanSpeedLayerTimeSettings& fan_speed_layer_time_settings = fan_speed_layer_time_settings_per_extruder.back(); @@ -370,7 +370,7 @@ static void retractionAndWipeConfigFromSettings(const Settings& settings, Retrac void FffGcodeWriter::setConfigRetractionAndWipe(SliceDataStorage& storage) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; for (size_t extruder_index = 0; extruder_index < scene.extruders.size(); extruder_index++) { ExtruderTrain& train = scene.extruders[extruder_index]; @@ -384,7 +384,7 @@ void FffGcodeWriter::setConfigRetractionAndWipe(SliceDataStorage& storage) size_t FffGcodeWriter::getStartExtruder(const SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const EPlatformAdhesion adhesion_type = mesh_group_settings.get("adhesion_type"); const int skirt_brim_extruder_nr = mesh_group_settings.get("skirt_brim_extruder_nr"); const ExtruderTrain* skirt_brim_extruder = (skirt_brim_extruder_nr < 0) ? nullptr : &mesh_group_settings.get("skirt_brim_extruder_nr"); @@ -425,7 +425,7 @@ size_t FffGcodeWriter::getStartExtruder(const SliceDataStorage& storage) } } } - assert(start_extruder_nr < Application::getInstance().current_slice->scene.extruders.size() && "start_extruder_nr must be a valid extruder"); + assert(start_extruder_nr < Application::getInstance().current_slice_->scene.extruders.size() && "start_extruder_nr must be a valid extruder"); return start_extruder_nr; } @@ -479,7 +479,7 @@ void FffGcodeWriter::setInfillAndSkinAngles(SliceMeshStorage& mesh) void FffGcodeWriter::setSupportAngles(SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& support_infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); storage.support.support_infill_angles = support_infill_extruder.settings_.get>("support_infill_angles"); if (storage.support.support_infill_angles.empty()) @@ -513,7 +513,7 @@ void FffGcodeWriter::setSupportAngles(SliceDataStorage& storage) for (const auto& mesh : storage.meshes) { if (mesh->settings.get(interface_height_setting) - >= 2 * Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height")) + >= 2 * Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height")) { // Some roofs are quite thick. // Alternate between the two kinds of diagonal: / and \ . @@ -544,17 +544,17 @@ void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) gcode.writeFanCommand(0); gcode.setZ(max_object_height + MM2INT(5)); - Application::getInstance().communication->sendCurrentPosition(gcode.getPositionXY()); - gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); + Application::getInstance().communication_->sendCurrentPosition(gcode.getPositionXY()); + gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice_->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); Point start_pos(storage.model_min.x_, storage.model_min.y_); - gcode.writeTravel(start_pos, Application::getInstance().current_slice->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); + gcode.writeTravel(start_pos, Application::getInstance().current_slice_->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); gcode.processInitialLayerTemperature(storage, gcode.getExtruderNr()); } void FffGcodeWriter::processRaft(const SliceDataStorage& storage) { - Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; @@ -600,7 +600,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) = *new LayerPlan(storage, layer_nr, z, layer_height, base_extruder_nr, fan_speed_layer_time_settings_per_extruder_raft_base, comb_offset, line_width, avoid_distance); gcode_layer.setIsInside(true); - Application::getInstance().communication->sendLayerComplete(layer_nr, z, layer_height); + Application::getInstance().communication_->sendLayerComplete(layer_nr, z, layer_height); Polygons raftLines; AngleDegrees fill_angle = (num_surface_layers + num_interface_layers) % 2 ? 45 : 135; // 90 degrees rotated from the interface layer. @@ -756,7 +756,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) current_extruder_nr = interface_extruder_nr; } - Application::getInstance().communication->sendLayerComplete(layer_nr, z, interface_layer_height); + Application::getInstance().communication_->sendLayerComplete(layer_nr, z, interface_layer_height); Polygons raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage.raft_interface_config.getLineWidth() @@ -875,7 +875,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) setExtruder_addPrime(storage, gcode_layer, surface_extruder_nr); current_extruder_nr = surface_extruder_nr; } - Application::getInstance().communication->sendLayerComplete(layer_nr, z, surface_layer_height); + Application::getInstance().communication_->sendLayerComplete(layer_nr, z, surface_layer_height); Polygons raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage.raft_interface_config.getLineWidth() @@ -952,7 +952,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS TimeKeeper time_keeper; spdlog::stopwatch timer_total; - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; coord_t layer_thickness = mesh_group_settings.get("layer_height"); coord_t z; bool include_helper_parts = true; @@ -988,7 +988,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS } } - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; coord_t avoid_distance = 0; // minimal avoid distance is zero const std::vector extruder_is_used = storage.getExtrudersUsed(); @@ -1138,7 +1138,7 @@ bool FffGcodeWriter::getExtruderNeedPrimeBlobDuringFirstLayer(const SliceDataSto void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan& gcode_layer, unsigned int extruder_nr, LayerIndex layer_nr) const { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const int skirt_height = train.settings_.get("skirt_height"); const bool is_skirt = train.settings_.get("adhesion_type") == EPlatformAdhesion::SKIRT; // only create a multilayer SkirtBrim for a skirt for the height of skirt_height @@ -1300,7 +1300,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan // Add the support brim after the skirt_brim to gcode_layer // Support brim is only added in layer 0 // For support brim we don't care about the order, because support doesn't need to be accurate. - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if ((layer_nr == 0) && (extruder_nr == mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_)) { total_line_count += storage.support_brim.size(); @@ -1323,7 +1323,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan void FffGcodeWriter::processOozeShield(const SliceDataStorage& storage, LayerPlan& gcode_layer) const { LayerIndex layer_nr = std::max(LayerIndex{ 0 }, gcode_layer.getLayerNr()); - if (layer_nr == 0 && Application::getInstance().current_slice->scene.current_mesh_group->settings.get("adhesion_type") == EPlatformAdhesion::BRIM) + if (layer_nr == 0 && Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type") == EPlatformAdhesion::BRIM) { return; // ooze shield already generated by brim } @@ -1335,7 +1335,7 @@ void FffGcodeWriter::processOozeShield(const SliceDataStorage& storage, LayerPla void FffGcodeWriter::processDraftShield(const SliceDataStorage& storage, LayerPlan& gcode_layer) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const LayerIndex layer_nr = std::max(LayerIndex{ 0 }, gcode_layer.getLayerNr()); if (storage.draft_protection_shield.size() == 0) { @@ -1345,7 +1345,7 @@ void FffGcodeWriter::processDraftShield(const SliceDataStorage& storage, LayerPl { return; } - if (layer_nr == 0 && Application::getInstance().current_slice->scene.current_mesh_group->settings.get("adhesion_type") == EPlatformAdhesion::BRIM) + if (layer_nr == 0 && Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type") == EPlatformAdhesion::BRIM) { return; // draft shield already generated by brim } @@ -1369,7 +1369,7 @@ void FffGcodeWriter::calculateExtruderOrderPerLayer(const SliceDataStorage& stor { size_t last_extruder; // set the initial extruder of this meshgroup - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; if (scene.current_mesh_group == scene.mesh_groups.begin()) { // first meshgroup last_extruder = getStartExtruder(storage); @@ -1403,8 +1403,8 @@ void FffGcodeWriter::calculatePrimeLayerPerExtruder(const SliceDataStorage& stor std::vector FffGcodeWriter::getUsedExtrudersOnLayerExcludingStartingExtruder(const SliceDataStorage& storage, const size_t start_extruder, const LayerIndex& layer_nr) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; + size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); assert(static_cast(extruder_count) > 0); std::vector ret; ret.push_back(start_extruder); @@ -1450,7 +1450,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s { OrderOptimizer mesh_idx_order_optimizer; - std::vector::iterator mesh_group = Application::getInstance().current_slice->scene.current_mesh_group; + std::vector::iterator mesh_group = Application::getInstance().current_slice_->scene.current_mesh_group; for (unsigned int mesh_idx = 0; mesh_idx < storage.meshes.size(); mesh_idx++) { const SliceMeshStorage& mesh = *storage.meshes[mesh_idx]; @@ -1461,7 +1461,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s mesh_idx_order_optimizer.addItem(Point(middle.x_, middle.y_), mesh_idx); } } - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const Point layer_start_position(train.settings_.get("layer_start_x"), train.settings_.get("layer_start_y")); std::list mesh_indices_order = mesh_idx_order_optimizer.optimize(layer_start_position); @@ -1505,7 +1505,7 @@ void FffGcodeWriter::addMeshLayerToGCode_meshSurfaceMode(const SliceDataStorage& mesh.getZSeamHint(), mesh.settings.get("z_seam_corner"), mesh.settings.get("wall_line_width_0") * 2); - const bool spiralize = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("magic_spiralize"); + const bool spiralize = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("magic_spiralize"); gcode_layer.addPolygonsByOptimizer(polygons, mesh_config.inset0_config, z_seam_config, mesh.settings.get("wall_0_wipe_dist"), spiralize); addMeshOpenPolyLinesToGCode(mesh, mesh_config, gcode_layer); @@ -1585,7 +1585,7 @@ void FffGcodeWriter::addMeshPartToGCode( const SliceLayerPart& part, LayerPlan& gcode_layer) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; bool added_something = false; @@ -2293,7 +2293,7 @@ bool FffGcodeWriter::processInsets( } bool spiralize = false; - if (Application::getInstance().current_slice->scene.current_mesh_group->settings.get("magic_spiralize")) + if (Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("magic_spiralize")) { const size_t initial_bottom_layers = mesh.settings.get("initial_bottom_layers"); const int layer_nr = gcode_layer.getLayerNr(); @@ -2350,7 +2350,7 @@ bool FffGcodeWriter::processInsets( // if support is enabled, add the support outlines also so we don't generate bridges over support - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (mesh_group_settings.get("support_enable")) { const coord_t z_distance_top = mesh.settings.get("support_top_distance"); @@ -2728,7 +2728,7 @@ void FffGcodeWriter::processTopBottom( { return; } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t layer_nr = gcode_layer.getLayerNr(); @@ -3110,7 +3110,7 @@ bool FffGcodeWriter::addSupportToGCode(const SliceDataStorage& storage, LayerPla return support_added; } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t support_roof_extruder_nr = mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_; const size_t support_bottom_extruder_nr = mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_; size_t support_infill_extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ @@ -3157,10 +3157,10 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer return added_something; } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t extruder_nr = (gcode_layer.getLayerNr() <= 0) ? mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_ : mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; - const ExtruderTrain& infill_extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& infill_extruder = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; coord_t default_support_line_distance = infill_extruder.settings_.get("support_line_distance"); @@ -3463,8 +3463,8 @@ bool FffGcodeWriter::addSupportRoofsToGCode( return false; // No need to generate support roof if there's no support. } - const size_t roof_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_; - const ExtruderTrain& roof_extruder = Application::getInstance().current_slice->scene.extruders[roof_extruder_nr]; + const size_t roof_extruder_nr = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_; + const ExtruderTrain& roof_extruder = Application::getInstance().current_slice_->scene.extruders[roof_extruder_nr]; const EFillMethod pattern = roof_extruder.settings_.get("support_roof_pattern"); AngleDegrees fill_angle = 0; @@ -3592,8 +3592,8 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L return false; // No need to generate support bottoms if there's no support. } - const size_t bottom_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_; - const ExtruderTrain& bottom_extruder = Application::getInstance().current_slice->scene.extruders[bottom_extruder_nr]; + const size_t bottom_extruder_nr = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_; + const ExtruderTrain& bottom_extruder = Application::getInstance().current_slice_->scene.extruders[bottom_extruder_nr]; const EFillMethod pattern = bottom_extruder.settings_.get("support_bottom_pattern"); AngleDegrees fill_angle = 0; @@ -3706,7 +3706,7 @@ void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, Layer { if (extruder_prime_layer_nr[extruder_nr] == gcode_layer.getLayerNr()) { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; // We always prime an extruder, but whether it will be a prime blob/poop depends on if prime blob is enabled. // This is decided in GCodeExport::writePrimeTrain(). @@ -3735,7 +3735,7 @@ void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, Layer void FffGcodeWriter::addPrimeTower(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t prev_extruder) const { - if (! Application::getInstance().current_slice->scene.current_mesh_group->settings.get("prime_tower_enable")) + if (! Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("prime_tower_enable")) { return; } @@ -3745,7 +3745,7 @@ void FffGcodeWriter::addPrimeTower(const SliceDataStorage& storage, LayerPlan& g void FffGcodeWriter::finalize() { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (mesh_group_settings.get("machine_heated_bed")) { gcode.writeBedTemperatureCommand(0); // Cool down the bed (M140). @@ -3760,7 +3760,7 @@ void FffGcodeWriter::finalize() std::vector filament_used; std::vector material_ids; std::vector extruder_is_used; - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; for (size_t extruder_nr = 0; extruder_nr < scene.extruders.size(); extruder_nr++) { filament_used.emplace_back(gcode.getTotalFilamentUsed(extruder_nr)); @@ -3768,10 +3768,10 @@ void FffGcodeWriter::finalize() extruder_is_used.push_back(gcode.getExtruderIsUsed(extruder_nr)); } std::string prefix = gcode.getFileHeader(extruder_is_used, &print_time, filament_used, material_ids); - if (! Application::getInstance().communication->isSequential()) + if (! Application::getInstance().communication_->isSequential()) { - Application::getInstance().communication->sendGCodePrefix(prefix); - Application::getInstance().communication->sendSliceUUID(slice_uuid); + Application::getInstance().communication_->sendGCodePrefix(prefix); + Application::getInstance().communication_->sendSliceUUID(slice_uuid); } else { @@ -3798,7 +3798,7 @@ void FffGcodeWriter::finalize() // set extrusion mode back to "normal" gcode.resetExtrusionMode(); - for (size_t e = 0; e < Application::getInstance().current_slice->scene.extruders.size(); e++) + for (size_t e = 0; e < Application::getInstance().current_slice_->scene.extruders.size(); e++) { gcode.writeTemperatureCommand(e, 0, false); } diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index c4a7259538..dd9aedc002 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -70,7 +70,7 @@ bool FffPolygonGenerator::generateAreas(SliceDataStorage& storage, MeshGroup* me size_t FffPolygonGenerator::getDraftShieldLayerCount(const size_t total_layers) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (! mesh_group_settings.get("draft_shield_enabled")) { return 0; @@ -99,7 +99,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe spdlog::info("Slicing model..."); - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; // regular layers int slice_layer_count = 0; // Use signed int because we need to subtract the initial layer in a calculation temporarily. @@ -228,7 +228,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe Mold::process(slicerList); - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; for (unsigned int mesh_idx = 0; mesh_idx < slicerList.size(); mesh_idx++) { Mesh& mesh = scene.current_mesh_group->meshes[mesh_idx]; @@ -250,7 +250,7 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe generateMultipleVolumesOverlap(slicerList); - if (Application::getInstance().current_slice->scene.current_mesh_group->settings.get("interlocking_enable")) + if (Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("interlocking_enable")) { InterlockingGenerator::generateInterlockingStructure(slicerList); } @@ -383,7 +383,7 @@ void FffPolygonGenerator::slices2polygons(SliceDataStorage& storage, TimeKeeper& Progress::messageProgress(Progress::Stage::INSET_SKIN, mesh_order_idx + 1, storage.meshes.size()); } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; // we need to remove empty layers after we have processed the insets // processInsets might throw away parts if they have no wall at all (cause it doesn't fit) @@ -510,7 +510,7 @@ void FffPolygonGenerator::processBasicWallsSkinInfill( bool process_infill = mesh.settings.get("infill_line_distance") > 0; if (! process_infill) { // do process infill anyway if it's modified by modifier meshes - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; for (size_t other_mesh_order_idx = mesh_order_idx + 1; other_mesh_order_idx < mesh_order.size(); ++other_mesh_order_idx) { const size_t other_mesh_idx = mesh_order[other_mesh_order_idx]; @@ -528,7 +528,7 @@ void FffPolygonGenerator::processBasicWallsSkinInfill( } // skin & infill - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; bool magic_spiralize = mesh_group_settings.get("magic_spiralize"); size_t mesh_max_initial_bottom_layer_count = 0; if (magic_spiralize) @@ -783,7 +783,7 @@ void FffPolygonGenerator::removeEmptyFirstLayers(SliceDataStorage& storage, size if (n_empty_first_layers > 0) { spdlog::info("Removing {} layers because they are empty", n_empty_first_layers); - const coord_t layer_height = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height"); + const coord_t layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); for (auto& mesh_ptr : storage.meshes) { auto& mesh = *mesh_ptr; @@ -847,7 +847,7 @@ void FffPolygonGenerator::processSkinsAndInfill(SliceMeshStorage& mesh, const La void FffPolygonGenerator::computePrintHeightStatistics(SliceDataStorage& storage) { - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); std::vector& max_print_height_per_extruder = storage.max_print_height_per_extruder; assert(max_print_height_per_extruder.size() == 0 && "storage.max_print_height_per_extruder shouldn't have been initialized yet!"); @@ -876,7 +876,7 @@ void FffPolygonGenerator::computePrintHeightStatistics(SliceDataStorage& storage } // Height of where the support reaches. - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; const Settings& mesh_group_settings = scene.current_mesh_group->settings; const size_t support_infill_extruder_nr = mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_; // TODO: Support extruder should be configurable per object. @@ -935,7 +935,7 @@ void FffPolygonGenerator::computePrintHeightStatistics(SliceDataStorage& storage void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (! mesh_group_settings.get("ooze_shield_enabled")) { return; @@ -975,7 +975,7 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) coord_t max_line_width = 0; { // compute max_line_width const std::vector extruder_is_used = storage.getExtrudersUsed(); - const auto& extruders = Application::getInstance().current_slice->scene.extruders; + const auto& extruders = Application::getInstance().current_slice_->scene.extruders; for (int extruder_nr = 0; extruder_nr < int(extruders.size()); extruder_nr++) { if (! extruder_is_used[extruder_nr]) @@ -997,7 +997,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) { return; } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); const LayerIndex layer_skip{ 500 / layer_height + 1 }; @@ -1016,7 +1016,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) // Extra offset has rounded joints, so simplify again. coord_t maximum_resolution = 0; // Draft shield is printed with every extruder, so resolve with the max() or min() of them to meet the requirements of all extruders. coord_t maximum_deviation = std::numeric_limits::max(); - for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) + for (const ExtruderTrain& extruder : Application::getInstance().current_slice_->scene.extruders) { maximum_resolution = std::max(maximum_resolution, extruder.settings_.get("meshfix_maximum_resolution")); maximum_deviation = std::min(maximum_deviation, extruder.settings_.get("meshfix_maximum_deviation")); @@ -1027,7 +1027,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) coord_t max_line_width = 0; { // compute max_line_width const std::vector extruder_is_used = storage.getExtrudersUsed(); - const auto& extruders = Application::getInstance().current_slice->scene.extruders; + const auto& extruders = Application::getInstance().current_slice_->scene.extruders; for (int extruder_nr = 0; extruder_nr < int(extruders.size()); extruder_nr++) { if (! extruder_is_used[extruder_nr]) @@ -1041,7 +1041,7 @@ void FffPolygonGenerator::processDraftShield(SliceDataStorage& storage) void FffPolygonGenerator::processPlatformAdhesion(SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; EPlatformAdhesion adhesion_type = mesh_group_settings.get("adhesion_type"); if (adhesion_type == EPlatformAdhesion::RAFT) @@ -1061,7 +1061,7 @@ void FffPolygonGenerator::processPlatformAdhesion(SliceDataStorage& storage) skirt_brim.generateSupportBrim(); } - for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) + for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) { Simplify simplifier(extruder.settings_); for (auto skirt_brim_line : storage.skirt_brim[extruder.extruder_nr_]) diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index fc0c2bc54a..13bd3141ae 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -24,7 +24,7 @@ namespace cura void InterlockingGenerator::generateInterlockingStructure(std::vector& volumes) { - Settings& global_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const PointMatrix rotation(global_settings.get("interlocking_orientation")); const coord_t beam_layer_count = global_settings.get("interlocking_beam_layer_count"); const int interface_depth = global_settings.get("interlocking_depth"); @@ -91,7 +91,7 @@ std::pair InterlockingGenerator::growBorderAreasPerpendicula void InterlockingGenerator::handleThinAreas(const std::unordered_set& has_all_meshes) const { - Settings& global_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t boundary_avoidance = global_settings.get("interlocking_boundary_avoidance"); const coord_t number_of_beams_detect = boundary_avoidance; diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index a9ff85c5e6..ae37348fc4 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -97,10 +97,10 @@ LayerPlan::LayerPlan( , is_initial_layer(layer_nr == 0 - static_cast(Raft::getTotalExtraLayers())) , is_raft_layer(layer_nr < 0 - static_cast(Raft::getFillerLayerCount())) , layer_thickness(layer_thickness) - , has_prime_tower_planned_per_extruder(Application::getInstance().current_slice->scene.extruders.size(), false) + , has_prime_tower_planned_per_extruder(Application::getInstance().current_slice_->scene.extruders.size(), false) , current_mesh(nullptr) , last_extruder_previous_layer(start_extruder) - , last_planned_extruder(&Application::getInstance().current_slice->scene.extruders[start_extruder]) + , last_planned_extruder(&Application::getInstance().current_slice_->scene.extruders[start_extruder]) , first_travel_destination_is_inside(false) , // set properly when addTravel is called for the first time (otherwise not set properly) comb_boundary_minimum(computeCombBoundary(CombBoundary::MINIMUM)) @@ -111,7 +111,7 @@ LayerPlan::LayerPlan( size_t current_extruder = start_extruder; was_inside = true; // not used, because the first travel move is bogus is_inside = false; // assumes the next move will not be to inside a layer part (overwritten just before going into a layer part) - if (Application::getInstance().current_slice->scene.current_mesh_group->settings.get("retraction_combing") != CombingMode::OFF) + if (Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing") != CombingMode::OFF) { comb = new Comb(storage, layer_nr, comb_boundary_minimum, comb_boundary_preferred, comb_boundary_offset, travel_avoid_distance, comb_move_inside_distance); } @@ -119,11 +119,11 @@ LayerPlan::LayerPlan( { comb = nullptr; } - for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) + for (const ExtruderTrain& extruder : Application::getInstance().current_slice_->scene.extruders) { layer_start_pos_per_extruder.emplace_back(extruder.settings_.get("layer_start_x"), extruder.settings_.get("layer_start_y")); } - extruder_plans.reserve(Application::getInstance().current_slice->scene.extruders.size()); + extruder_plans.reserve(Application::getInstance().current_slice_->scene.extruders.size()); extruder_plans.emplace_back( current_extruder, layer_nr, @@ -133,7 +133,7 @@ LayerPlan::LayerPlan( fan_speed_layer_time_settings_per_extruder[current_extruder], storage.retraction_wipe_config_per_extruder[current_extruder].retraction_config); - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { // Skirt and brim. skirt_brim_is_processed[extruder_nr] = false; } @@ -153,7 +153,7 @@ ExtruderTrain* LayerPlan::getLastPlannedExtruderTrain() Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) { Polygons comb_boundary; - const CombingMode mesh_combing_mode = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("retraction_combing"); + const CombingMode mesh_combing_mode = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing"); if (mesh_combing_mode != CombingMode::OFF && (layer_nr >= 0 || mesh_combing_mode != CombingMode::NO_SKIN)) { if (layer_nr < 0) @@ -263,8 +263,8 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) layer_thickness, fan_speed_layer_time_settings_per_extruder[extruder_nr], storage.retraction_wipe_config_per_extruder[extruder_nr].retraction_config); - assert(extruder_plans.size() <= Application::getInstance().current_slice->scene.extruders.size() && "Never use the same extruder twice on one layer!"); - last_planned_extruder = &Application::getInstance().current_slice->scene.extruders[extruder_nr]; + assert(extruder_plans.size() <= Application::getInstance().current_slice_->scene.extruders.size() && "Never use the same extruder twice on one layer!"); + last_planned_extruder = &Application::getInstance().current_slice_->scene.extruders[extruder_nr]; { // handle starting pos of the new extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); @@ -1392,7 +1392,7 @@ void LayerPlan::spiralizeWallSlice( const bool is_top_layer, const bool is_bottom_layer) { - const bool smooth_contours = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("smooth_spiralized_contours"); + const bool smooth_contours = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("smooth_spiralized_contours"); constexpr bool spiralize = true; // In addExtrusionMove calls, enable spiralize and use nominal line width. constexpr Ratio width_factor = 1.0_r; @@ -1821,7 +1821,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) void LayerPlan::writeGCode(GCodeExport& gcode) { - Communication* communication = Application::getInstance().communication; + Communication* communication = Application::getInstance().communication_; communication->setLayerForSend(layer_nr); communication->sendCurrentPosition(gcode.getPositionXY()); gcode.setLayerNr(layer_nr); @@ -1829,7 +1829,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.writeLayerComment(layer_nr); // flow-rate compensation - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; gcode.setFlowRateExtrusionSettings( mesh_group_settings.get("flow_rate_max_extrusion_offset"), mesh_group_settings.get("flow_rate_extrusion_offset_factor")); // Offset is in mm. @@ -1911,7 +1911,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.insertWipeScript(wipe_config); gcode.ResetLastEValueAfterWipe(extruder_nr); } - else if (layer_nr != 0 && Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_.get("retract_at_layer_change")) + else if (layer_nr != 0 && Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_.get("retract_at_layer_change")) { // only do the retract if the paths are not spiralized if (! mesh_group_settings.get("magic_spiralize")) @@ -1925,7 +1925,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) extruder_plan.inserts_.sort(); - const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; bool update_extrusion_offset = true; @@ -2249,7 +2249,7 @@ bool LayerPlan::writePathWithCoasting( const std::function insertTempOnTime) { ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; - const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[extruder_plan.extruder_nr_]; const double coasting_volume = extruder.settings_.get("coasting_volume"); if (coasting_volume <= 0) { @@ -2341,7 +2341,7 @@ bool LayerPlan::writePathWithCoasting( Point prev_pt = gcode.getPositionXY(); { // write normal extrude path: - Communication* communication = Application::getInstance().communication; + Communication* communication = Application::getInstance().communication_; for (size_t point_idx = 0; point_idx <= point_idx_before_start; point_idx++) { auto [_, time] = extruder_plan.getPointToPointTime(prev_pt, path.points[point_idx], path); @@ -2420,7 +2420,7 @@ void LayerPlan::applyBackPressureCompensation() for (auto& extruder_plan : extruder_plans) { const Ratio back_pressure_compensation - = Application::getInstance().current_slice->scene.extruders[extruder_plan.extruder_nr_].settings_.get("speed_equalize_flow_width_factor"); + = Application::getInstance().current_slice_->scene.extruders[extruder_plan.extruder_nr_].settings_.get("speed_equalize_flow_width_factor"); if (back_pressure_compensation != 0.0) { extruder_plan.applyBackPressureCompensation(back_pressure_compensation); diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index aa339d5836..699f6ee54d 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -54,7 +54,7 @@ LayerPlan* LayerPlanBuffer::processBuffer() if (buffer_.size() > buffer_size_) { LayerPlan* ret = buffer_.front(); - Application::getInstance().communication->flushGCode(); + Application::getInstance().communication_->flushGCode(); buffer_.pop_front(); return ret; } @@ -63,7 +63,7 @@ LayerPlan* LayerPlanBuffer::processBuffer() void LayerPlanBuffer::flush() { - Application::getInstance().communication->flushGCode(); // If there was still g-code in a layer, flush that as a separate layer. Don't want to group them together accidentally. + Application::getInstance().communication_->flushGCode(); // If there was still g-code in a layer, flush that as a separate layer. Don't want to group them together accidentally. if (buffer_.size() > 0) { insertTempCommands(); // insert preheat commands of the very last layer @@ -71,7 +71,7 @@ void LayerPlanBuffer::flush() while (! buffer_.empty()) { buffer_.front()->writeGCode(gcode_); - Application::getInstance().communication->flushGCode(); + Application::getInstance().communication_->flushGCode(); delete buffer_.front(); buffer_.pop_front(); } @@ -95,8 +95,8 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer // if the last planned position in the previous layer isn't the same as the first location of the new layer, travel to the new location if (! prev_layer->last_planned_position || *prev_layer->last_planned_position != first_location_new_layer) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings_; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings_; prev_layer->setIsInside(new_layer_destination_state->second); const bool force_retract = extruder_settings.get("retract_at_layer_change") || (mesh_group_settings.get("travel_retract_before_outer_wall") @@ -167,7 +167,7 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vectorscene.extruders[extruder].settings_; + Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; double initial_print_temp = extruder_plan.required_start_temperature_; Duration in_between_time = 0.0_s; // the duration during which the extruder isn't used @@ -212,7 +212,7 @@ Preheat::WarmUpResult LayerPlanBuffer::computeStandbyTempPlan(std::vectorscene.extruders[extruder_nr].settings_.get("machine_nozzle_temp_enabled")) + if (! Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_.get("machine_nozzle_temp_enabled")) { return; } @@ -248,7 +248,7 @@ void LayerPlanBuffer::insertPreheatCommand_multiExtrusion(std::vectorscene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -301,7 +301,7 @@ void LayerPlanBuffer::insertTempCommands(std::vector& extruder_pl if (prev_extruder != extruder) { // set previous extruder to standby temperature - const Settings& previous_extruder_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_; + const Settings& previous_extruder_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_; extruder_plan.prev_extruder_standby_temp_ = previous_extruder_settings.get("material_standby_temperature"); } @@ -310,7 +310,7 @@ void LayerPlanBuffer::insertTempCommands(std::vector& extruder_pl insertPreheatCommand_singleExtrusion(*prev_extruder_plan, extruder, extruder_plan.required_start_temperature_); prev_extruder_plan->extrusion_temperature_command_ = --prev_extruder_plan->inserts_.end(); } - else if (Application::getInstance().current_slice->scene.extruders[extruder].settings_.get("machine_extruders_share_heater")) + else if (Application::getInstance().current_slice_->scene.extruders[extruder].settings_.get("machine_extruders_share_heater")) { // extruders share a heater so command the previous extruder to change to the temperature required for this extruder insertPreheatCommand_singleExtrusion(*prev_extruder_plan, prev_extruder, extruder_plan.required_start_temperature_); @@ -333,7 +333,7 @@ void LayerPlanBuffer::insertPrintTempCommand(ExtruderPlan& extruder_plan) const double print_temp = *extruder_plan.extrusion_temperature_; const unsigned int extruder = extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -362,7 +362,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex { ExtruderPlan& last_extruder_plan = *extruder_plans[last_extruder_plan_idx]; const size_t extruder = last_extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; if (! extruder_settings.get("machine_nozzle_temp_enabled")) { return; @@ -509,14 +509,14 @@ void LayerPlanBuffer::insertTempCommands() } // insert commands for all extruder plans on this layer - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; LayerPlan& layer_plan = *buffer_.back(); for (size_t extruder_plan_idx = 0; extruder_plan_idx < layer_plan.extruder_plans.size(); extruder_plan_idx++) { const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans.size() + extruder_plan_idx; ExtruderPlan& extruder_plan = layer_plan.extruder_plans[extruder_plan_idx]; size_t extruder = extruder_plan.extruder_nr_; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Duration time = extruder_plan.estimates_.getTotalUnretractedTime(); Ratio avg_flow; if (time > 0.0) @@ -560,7 +560,7 @@ void LayerPlanBuffer::insertTempCommands() size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_idx = 0; extruder_idx < scene.extruders.size(); extruder_idx++) { // set temperature of the first nozzle, turn other nozzles down - const Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_idx].settings_; + const Settings& other_extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_idx].settings_; if (scene.current_mesh_group == scene.mesh_groups.begin()) // First mesh group. { // override values from GCodeExport::setInitialTemps diff --git a/src/Mold.cpp b/src/Mold.cpp index 2ef6ce7561..d46a9ef402 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -17,7 +17,7 @@ namespace cura void Mold::process(std::vector& slicer_list) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; { // check whether we even need to process molds bool has_any_mold = false; for (unsigned int mesh_idx = 0; mesh_idx < slicer_list.size(); mesh_idx++) diff --git a/src/Preheat.cpp b/src/Preheat.cpp index 6b3b8c3ee9..914da06595 100644 --- a/src/Preheat.cpp +++ b/src/Preheat.cpp @@ -15,7 +15,7 @@ namespace cura Duration Preheat::getTimeToGoFromTempToTemp(const size_t extruder, const Temperature& temp_before, const Temperature& temp_after, const bool during_printing) { - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Duration time; if (temp_after > temp_before) { @@ -40,7 +40,7 @@ Duration Preheat::getTimeToGoFromTempToTemp(const size_t extruder, const Tempera Temperature Preheat::getTemp(const size_t extruder, const Ratio& flow, const bool is_initial_layer) { - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; if (is_initial_layer && extruder_settings.get("material_print_temperature_layer_0") != 0) { return extruder_settings.get("material_print_temperature_layer_0"); @@ -51,7 +51,7 @@ Temperature Preheat::getTemp(const size_t extruder, const Ratio& flow, const boo Preheat::WarmUpResult Preheat::getWarmUpPointAfterCoolDown(double time_window, unsigned int extruder, double temp_start, double temp_mid, double temp_end, bool during_printing) { WarmUpResult result; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Temperature cool_down_speed = extruder_settings.get("machine_nozzle_cool_down_speed"); if (during_printing) { @@ -121,7 +121,7 @@ Preheat::WarmUpResult Preheat::getWarmUpPointAfterCoolDown(double time_window, u Preheat::CoolDownResult Preheat::getCoolDownPointAfterWarmUp(double time_window, unsigned int extruder, double temp_start, double temp_mid, double temp_end, bool during_printing) { CoolDownResult result; - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Temperature cool_down_speed = extruder_settings.get("machine_nozzle_cool_down_speed"); if (during_printing) { diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 5ffbd200c7..41bf694f43 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -26,7 +26,7 @@ namespace cura PrimeTower::PrimeTower() : wipe_from_middle(false) { - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; { EPlatformAdhesion adhesion_type = scene.current_mesh_group->settings.get("adhesion_type"); @@ -87,7 +87,7 @@ void PrimeTower::generateGroundpoly() return; } - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; const Settings& mesh_group_settings = scene.current_mesh_group->settings; const coord_t tower_size = mesh_group_settings.get("prime_tower_size"); @@ -114,7 +114,7 @@ void PrimeTower::generatePaths(const SliceDataStorage& storage) void PrimeTower::generatePaths_denseInfill() { - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; const Settings& mesh_group_settings = scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); const bool base_enabled = mesh_group_settings.get("prime_tower_brim_enable"); @@ -210,7 +210,7 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la return; } - bool post_wipe = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_.get("prime_tower_wipe_enabled"); + bool post_wipe = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_.get("prime_tower_wipe_enabled"); // Do not wipe on the first layer, we will generate non-hollow prime tower there for better bed adhesion. if (prev_extruder == new_extruder || layer_nr == 0) @@ -230,9 +230,9 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la if (post_wipe) { // Make sure we wipe the old extruder on the prime tower. - const Settings& previous_settings = Application::getInstance().current_slice->scene.extruders[prev_extruder].settings_; + const Settings& previous_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_; const Point previous_nozzle_offset = Point(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); - const Settings& new_settings = Application::getInstance().current_slice->scene.extruders[new_extruder].settings_; + const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder].settings_; const Point new_nozzle_offset = Point(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); gcode_layer.addTravel(post_wipe_point - previous_nozzle_offset + new_nozzle_offset); } @@ -301,7 +301,7 @@ void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr const ClosestPolygonPoint wipe_location = prime_tower_start_locations[current_start_location_idx]; - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; const coord_t start_dist = train.settings_.get("machine_nozzle_size") * 2; const Point prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); diff --git a/src/Scene.cpp b/src/Scene.cpp index f7c81777f6..ead01544e8 100644 --- a/src/Scene.cpp +++ b/src/Scene.cpp @@ -95,8 +95,8 @@ void Scene::processMeshGroup(MeshGroup& mesh_group) fff_processor->gcode_writer.writeGCode(storage, fff_processor->time_keeper); Progress::messageProgress(Progress::Stage::FINISH, 1, 1); // 100% on this meshgroup - Application::getInstance().communication->flushGCode(); - Application::getInstance().communication->sendOptimizedLayerData(); + Application::getInstance().communication_->flushGCode(); + Application::getInstance().communication_->sendOptimizedLayerData(); spdlog::info("Total time elapsed {:03.3f}s\n", time_keeper_total.restart()); } diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index 3769760253..1e59c669d8 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -20,10 +20,10 @@ namespace cura SkirtBrim::SkirtBrim(SliceDataStorage& storage) : storage(storage) - , adhesion_type(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("adhesion_type")) + , adhesion_type(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type")) , has_ooze_shield(storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) , has_draft_shield(storage.draft_protection_shield.size() > 0) - , extruders(Application::getInstance().current_slice->scene.extruders) + , extruders(Application::getInstance().current_slice_->scene.extruders) , extruder_count(extruders.size()) , extruder_is_used(storage.getExtrudersUsed()) { @@ -36,7 +36,7 @@ SkirtBrim::SkirtBrim(SliceDataStorage& storage) break; } } - skirt_brim_extruder_nr = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("skirt_brim_extruder_nr"); + skirt_brim_extruder_nr = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("skirt_brim_extruder_nr"); if (skirt_brim_extruder_nr == -1 && adhesion_type == EPlatformAdhesion::SKIRT) { // Skirt is always printed with all extruders in order to satisfy minimum legnth constraint // NOTE: the line count will only be satisfied for the first extruder used. @@ -168,7 +168,7 @@ void SkirtBrim::generate() generateSecondarySkirtBrim(covered_area, allowed_areas_per_extruder, total_length); // simplify paths to prevent buffer unnerruns in firmware - const Settings& global_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t maximum_resolution = global_settings.get("meshfix_maximum_resolution"); const coord_t maximum_deviation = global_settings.get("meshfix_maximum_deviation"); for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) @@ -226,7 +226,7 @@ std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_bri Polygons SkirtBrim::getInternalHoleExclusionArea(const Polygons& outline, const int extruder_nr) { assert(extruder_nr >= 0); - const Settings& settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; + const Settings& settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; // If brim is external_only, the distance between the external brim of a part inside a hole and the inside hole of the outer part. const coord_t hole_brim_distance = settings.get("brim_inside_margin"); @@ -300,7 +300,7 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, } { // limit brim lines to allowed areas, stitch them and store them in the result - brim = Simplify(Application::getInstance().current_slice->scene.extruders[offset.extruder_nr].settings_).polygon(brim); + brim = Simplify(Application::getInstance().current_slice_->scene.extruders[offset.extruder_nr].settings_).polygon(brim); brim.toPolylines(); Polygons brim_lines = allowed_areas_per_extruder[offset.extruder_nr].intersectionPolyLines(brim, false); length_added = brim_lines.polyLineLength(); @@ -340,7 +340,7 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) { Polygons first_layer_outline; - Settings& global_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; int reference_extruder_nr = skirt_brim_extruder_nr; assert(! (reference_extruder_nr == -1 && extruder_nr == -1) && "We should only request the outlines of all layers when the brim is being generated for only one material"); if (reference_extruder_nr == -1) @@ -359,7 +359,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) first_layer_outline = Polygons(); int skirt_height = 0; - for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) + for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) { if (extruder_nr == -1 || extruder_nr == extruder.extruder_nr_) { @@ -370,7 +370,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) for (int i_layer = layer_nr; i_layer < skirt_height; ++i_layer) { - for (const auto& extruder : Application::getInstance().current_slice->scene.extruders) + for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) { first_layer_outline = first_layer_outline.unionPolygons(storage.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr_)); @@ -578,7 +578,7 @@ void SkirtBrim::generateSupportBrim() { constexpr coord_t brim_area_minimum_hole_size_multiplier = 100; - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; const ExtruderTrain& support_infill_extruder = scene.current_mesh_group->settings.get("support_infill_extruder_nr"); const coord_t brim_line_width = support_infill_extruder.settings_.get("skirt_brim_line_width") * support_infill_extruder.settings_.get("initial_layer_line_width_factor"); diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 54ace60375..231f7e001d 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -468,7 +468,7 @@ void ArcusCommunication::sendPrintTimeMaterialEstimates() const message->set_time_travel(time_estimates[static_cast(PrintFeatureType::MoveCombing)]); message->set_time_prime_tower(time_estimates[static_cast(PrintFeatureType::PrimeTower)]); - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { proto::MaterialEstimates* material_message = message->add_materialestimates(); material_message->set_id(extruder_nr); @@ -527,7 +527,7 @@ void ArcusCommunication::sliceNext() #endif // ENABLE_PLUGINS Slice slice(slice_message->object_lists().size()); - Application::getInstance().current_slice = &slice; + Application::getInstance().current_slice_ = &slice; private_data->readGlobalSettingsMessage(slice_message->global_settings()); private_data->readExtruderSettingsMessage(slice_message->extruders()); diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index afff5800fa..1e18cc81b0 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -47,7 +47,7 @@ std::shared_ptr ArcusCommunication::Private::getOptimized void ArcusCommunication::Private::readGlobalSettingsMessage(const proto::SettingList& global_settings_message) { - Slice* slice = Application::getInstance().current_slice; + Slice* slice = Application::getInstance().current_slice_; for (const cura::proto::Setting& setting_message : global_settings_message.settings()) { slice->scene.settings.add(setting_message.name(), setting_message.value()); @@ -57,7 +57,7 @@ void ArcusCommunication::Private::readGlobalSettingsMessage(const proto::Setting void ArcusCommunication::Private::readExtruderSettingsMessage(const google::protobuf::RepeatedPtrField& extruder_messages) { // Make sure we have enough extruders added currently. - Slice* slice = Application::getInstance().current_slice; + Slice* slice = Application::getInstance().current_slice_; const size_t extruder_count = slice->scene.settings.get("machine_extruder_count"); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { @@ -90,7 +90,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& return; // Don't slice empty mesh groups. } - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; MeshGroup& mesh_group = scene.mesh_groups.at(object_count); // Load the settings in the mesh group. diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index ae9fd28ee6..08b8600eae 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -92,7 +92,7 @@ void CommandLine::sendPrintTimeMaterialEstimates() const spdlog::info("Total print time: {:3}", sum); sum = 0.0; - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { sum += FffProcessor::getInstance()->getTotalFilamentUsed(extruder_nr); } @@ -123,7 +123,7 @@ void CommandLine::sliceNext() } Slice slice(num_mesh_groups); - Application::getInstance().current_slice = &slice; + Application::getInstance().current_slice_ = &slice; size_t mesh_group_index = 0; Settings* last_settings = &slice.scene.settings; @@ -437,7 +437,7 @@ int CommandLine::loadJSON( // Extruders defined from here, if any. // Note that this always puts the extruder settings in the slice of the current extruder. It doesn't keep the nested structure of the JSON files, if extruders would have their // own sub-extruders. - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; if (document.HasMember("metadata") && document["metadata"].IsObject()) { const rapidjson::Value& metadata = document["metadata"]; diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 68c060dc61..01d57a6357 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -79,11 +79,11 @@ void GCodeExport::preSetup(const size_t start_extruder) { current_extruder = start_extruder; - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; std::vector::iterator mesh_group = scene.current_mesh_group; setFlavor(mesh_group->settings.get("machine_gcode_flavor")); use_extruder_offset_to_offset_coords = mesh_group->settings.get("machine_use_extruder_offset_to_offset_coords"); - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { @@ -95,7 +95,7 @@ void GCodeExport::preSetup(const size_t start_extruder) extruder_attr[extruder_nr].fan_number = train.settings_.get("machine_extruder_cooling_fan_number"); // Cache some settings that we use frequently. - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; if (use_extruder_offset_to_offset_coords) { extruder_attr[extruder_nr].nozzle_offset = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); @@ -144,8 +144,8 @@ void GCodeExport::preSetup(const size_t start_extruder) void GCodeExport::setInitialAndBuildVolumeTemps(const unsigned int start_extruder_nr) { - const Scene& scene = Application::getInstance().current_slice->scene; - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const Scene& scene = Application::getInstance().current_slice_->scene; + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { const ExtruderTrain& train = scene.extruders[extruder_nr]; @@ -204,7 +204,7 @@ std::string GCodeExport::getFileHeader( { std::ostringstream prefix; - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); switch (flavor) { case EGCodeFlavor::GRIFFIN: @@ -231,7 +231,7 @@ std::string GCodeExport::getFileHeader( { prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.GUID:" << mat_ids[extr_nr] << new_line; } - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extr_nr].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extr_nr].settings_; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.DIAMETER:" << extruder_settings.get("machine_nozzle_size") << new_line; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.NAME:" << extruder_settings.get("machine_nozzle_id") << new_line; } @@ -247,7 +247,7 @@ std::string GCodeExport::getFileHeader( prefix << ";PRINT.TIME:" << static_cast(*print_time) << new_line; } - prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice->scene.mesh_groups.size() << new_line; + prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice_->scene.mesh_groups.size() << new_line; if (total_bounding_box.min.x_ > total_bounding_box.max.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. { @@ -272,7 +272,7 @@ std::string GCodeExport::getFileHeader( prefix << ";MATERIAL:" << ((filament_used.size() >= 1) ? static_cast(filament_used[0]) : 6666) << new_line; prefix << ";MATERIAL2:" << ((filament_used.size() >= 2) ? static_cast(filament_used[1]) : 0) << new_line; - prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice->scene.extruders[0].settings_.get("machine_nozzle_size") << new_line; + prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("machine_nozzle_size") << new_line; } else if (flavor == EGCodeFlavor::REPRAP || flavor == EGCodeFlavor::MARLIN || flavor == EGCodeFlavor::MARLIN_VOLUMATRIC) { @@ -300,7 +300,7 @@ std::string GCodeExport::getFileHeader( prefix << "0m"; } prefix << new_line; - prefix << ";Layer height: " << Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height") << new_line; + prefix << ";Layer height: " << Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height") << new_line; } prefix << ";MINX:" << INT2MM(total_bounding_box.min.x_) << new_line; prefix << ";MINY:" << INT2MM(total_bounding_box.min.y_) << new_line; @@ -646,9 +646,9 @@ void GCodeExport::resetExtrusionValue() bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, const size_t start_extruder_nr) { bool should_prime_extruder = true; - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - if (Application::getInstance().communication->isSequential()) // If we must output the g-code sequentially, we must already place the g-code header here even if we don't know + if (Application::getInstance().communication_->isSequential()) // If we must output the g-code sequentially, we must already place the g-code header here even if we don't know // the exact time/material usages yet. { std::string prefix = getFileHeader(storage.getExtrudersUsed()); @@ -672,9 +672,9 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons writeCode(mesh_group_settings.get("machine_start_gcode").c_str()); // in case of shared nozzle assume that the machine-start gcode reset the extruders as per machine description - if (Application::getInstance().current_slice->scene.settings.get("machine_extruders_share_nozzle")) + if (Application::getInstance().current_slice_->scene.settings.get("machine_extruders_share_nozzle")) { - for (const ExtruderTrain& train : Application::getInstance().current_slice->scene.extruders) + for (const ExtruderTrain& train : Application::getInstance().current_slice_->scene.extruders) { resetExtruderToPrimed(train.extruder_nr_, train.settings_.get("machine_extruders_shared_nozzle_initial_retraction")); } @@ -685,7 +685,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons writeBuildVolumeTemperatureCommand(mesh_group_settings.get("build_volume_temperature")); } - Application::getInstance().communication->sendCurrentPosition(getPositionXY()); + Application::getInstance().communication_->sendCurrentPosition(getPositionXY()); startExtruder(start_extruder_nr); if (getFlavor() == EGCodeFlavor::BFB) @@ -697,7 +697,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons } else if (getFlavor() == EGCodeFlavor::GRIFFIN) { // initialize extruder trains - ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[start_extruder_nr]; + ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[start_extruder_nr]; processInitialLayerTemperature(storage, start_extruder_nr); writePrimeTrain(train.settings_.get("speed_travel")); should_prime_extruder = false; @@ -728,7 +728,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons void GCodeExport::processInitialLayerBedTemperature() { - const Scene& scene = Application::getInstance().current_slice->scene; + const Scene& scene = Application::getInstance().current_slice_->scene; const bool heated = scene.current_mesh_group->settings.get("machine_heated_bed"); const Temperature bed_temp = scene.current_mesh_group->settings.get("material_bed_temperature_layer_0"); if (heated && bed_temp != 0) @@ -739,7 +739,7 @@ void GCodeExport::processInitialLayerBedTemperature() void GCodeExport::processInitialLayerTemperature(const SliceDataStorage& storage, const size_t start_extruder_nr) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; const size_t num_extruders = scene.extruders.size(); if (getFlavor() == EGCodeFlavor::GRIFFIN) @@ -939,8 +939,8 @@ void GCodeExport::writeTravel(const coord_t x, const coord_t y, const coord_t z, const PrintFeatureType travel_move_type = extruder_attr[current_extruder].retraction_e_amount_current ? PrintFeatureType::MoveRetraction : PrintFeatureType::MoveCombing; const int display_width = extruder_attr[current_extruder].retraction_e_amount_current ? MM2INT(0.2) : MM2INT(0.1); - const double layer_height = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height"); - Application::getInstance().communication->sendLineTo(travel_move_type, Point(x, y), display_width, layer_height, speed); + const double layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); + Application::getInstance().communication_->sendLineTo(travel_move_type, Point(x, y), display_width, layer_height, speed); *output_stream << "G0"; writeFXYZE(speed, x, y, z, current_e_value, travel_move_type); @@ -1206,7 +1206,7 @@ void GCodeExport::writeZhopStart(const coord_t hop_height, Velocity speed /*= 0* { if (speed == 0) { - const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[current_extruder]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder]; speed = extruder.settings_.get("speed_z_hop"); } is_z_hopped = hop_height; @@ -1223,7 +1223,7 @@ void GCodeExport::writeZhopEnd(Velocity speed /*= 0*/) { if (speed == 0) { - const ExtruderTrain& extruder = Application::getInstance().current_slice->scene.extruders[current_extruder]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder]; speed = extruder.settings_.get("speed_z_hop"); } is_z_hopped = 0; @@ -1254,7 +1254,7 @@ void GCodeExport::startExtruder(const size_t new_extruder) assert(getCurrentExtrudedVolume() == 0.0 && "Just after an extruder switch we haven't extruded anything yet!"); resetExtrusionValue(); // zero the E value on the new extruder, just to be sure - const std::string start_code = Application::getInstance().current_slice->scene.extruders[new_extruder].settings_.get("machine_extruder_start_code"); + const std::string start_code = Application::getInstance().current_slice_->scene.extruders[new_extruder].settings_.get("machine_extruder_start_code"); if (! start_code.empty()) { @@ -1271,8 +1271,8 @@ void GCodeExport::startExtruder(const size_t new_extruder) } } - Application::getInstance().communication->setExtruderForSend(Application::getInstance().current_slice->scene.extruders[new_extruder]); - Application::getInstance().communication->sendCurrentPosition(getPositionXY()); + Application::getInstance().communication_->setExtruderForSend(Application::getInstance().current_slice_->scene.extruders[new_extruder]); + Application::getInstance().communication_->sendCurrentPosition(getPositionXY()); // Change the Z position so it gets re-written again. We do not know if the switch code modified the Z position. currentPosition.z_ += 1; @@ -1287,7 +1287,7 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re return; } - const Settings& old_extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings_; + const Settings& old_extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder].settings_; if (old_extruder_settings.get("retraction_enable")) { constexpr bool force = true; @@ -1340,7 +1340,7 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) { // extruder is already primed once! return; } - const Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[current_extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder].settings_; if (extruder_settings.get("prime_blob_enable")) { // only move to prime position if we do a blob/poop // ideally the prime position would be respected whether we do a blob or not, @@ -1417,7 +1417,7 @@ void GCodeExport::writeFanCommand(double speed) } else if (speed > 0) { - const bool should_scale_zero_to_one = Application::getInstance().current_slice->scene.settings.get("machine_scale_fan_speed_zero_to_one"); + const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); *output_stream << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? 2u : 1u), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; if (fan_number) { @@ -1440,7 +1440,7 @@ void GCodeExport::writeFanCommand(double speed) void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait) { - const ExtruderTrain& extruder_train = Application::getInstance().current_slice->scene.extruders[extruder]; + const ExtruderTrain& extruder_train = Application::getInstance().current_slice_->scene.extruders[extruder]; if (! extruder_train.settings_.get("machine_nozzle_temp_enabled")) { @@ -1457,7 +1457,7 @@ void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperatu } // sync all extruders with the change to the current extruder - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { diff --git a/src/multiVolumes.cpp b/src/multiVolumes.cpp index c1cc6afdec..e4e5398725 100644 --- a/src/multiVolumes.cpp +++ b/src/multiVolumes.cpp @@ -18,7 +18,7 @@ namespace cura void carveMultipleVolumes(std::vector& volumes) { // Go trough all the volumes, and remove the previous volume outlines from our own outline, so we never have overlapped areas. - const bool alternate_carve_order = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("alternate_carve_order"); + const bool alternate_carve_order = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("alternate_carve_order"); std::vector ranked_volumes = volumes; std::sort( ranked_volumes.begin(), diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index e0cafbec02..a32b50ea94 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -40,7 +40,7 @@ void Progress::init() void Progress::messageProgress(Progress::Stage stage, int progress_in_stage, int progress_in_stage_max) { double percentage = calcOverallProgress(stage, static_cast(progress_in_stage / static_cast(progress_in_stage_max))); - Application::getInstance().communication->sendProgress(static_cast(percentage)); + Application::getInstance().communication_->sendProgress(static_cast(percentage)); } void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keeper) diff --git a/src/raft.cpp b/src/raft.cpp index aed16063f8..74325690d0 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -18,7 +18,7 @@ namespace cura void Raft::generate(SliceDataStorage& storage) { assert(storage.raftOutline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); - const Settings& settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; + const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; const coord_t distance = settings.get("raft_margin"); constexpr bool include_support = true; constexpr bool dont_include_prime_tower = false; // Prime tower raft will be handled separately in 'storage.primeRaftOutline'; see below. @@ -55,7 +55,7 @@ void Raft::generate(SliceDataStorage& storage) { // Find out if the prime-tower part of the raft still needs to be printed, even if there is no actual tower. // This will only happen if the different raft layers are printed by different extruders. - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; @@ -68,7 +68,7 @@ void Raft::generate(SliceDataStorage& storage) coord_t Raft::getTotalThickness() { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); @@ -79,7 +79,7 @@ coord_t Raft::getTotalThickness() coord_t Raft::getZdiffBetweenRaftAndLayer0() { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& train = mesh_group_settings.get("raft_surface_extruder_nr"); if (mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) { @@ -91,13 +91,13 @@ coord_t Raft::getZdiffBetweenRaftAndLayer0() size_t Raft::getFillerLayerCount() { - const coord_t normal_layer_height = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height"); + const coord_t normal_layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); return round_divide(getZdiffBetweenRaftAndLayer0(), normal_layer_height); } coord_t Raft::getFillerLayerHeight() { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (mesh_group_settings.get("adhesion_type") != EPlatformAdhesion::RAFT) { const coord_t normal_layer_height = mesh_group_settings.get("layer_height"); @@ -110,7 +110,7 @@ coord_t Raft::getFillerLayerHeight() size_t Raft::getTotalExtraLayers() { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 25f1cca535..09d2bf5682 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -61,7 +61,7 @@ void AdaptiveLayerHeights::calculateAllowedLayerHeights() void AdaptiveLayerHeights::calculateLayers() { const coord_t minimum_layer_height = *std::min_element(allowed_layer_heights.begin(), allowed_layer_heights.end()); - Settings const& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + Settings const& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; auto slicing_tolerance = mesh_group_settings.get("slicing_tolerance"); std::vector triangles_of_interest; const coord_t model_max_z = meshgroup->max().z_; @@ -187,7 +187,7 @@ void AdaptiveLayerHeights::calculateLayers() void AdaptiveLayerHeights::calculateMeshTriangleSlopes() { // loop over all mesh faces (triangles) and find their slopes - for (const Mesh& mesh : Application::getInstance().current_slice->scene.current_mesh_group->meshes) + for (const Mesh& mesh : Application::getInstance().current_slice_->scene.current_mesh_group->meshes) { // Skip meshes that are not printable if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") || mesh.settings_.get("anti_overhang_mesh")) diff --git a/src/settings/PathConfigStorage.cpp b/src/settings/PathConfigStorage.cpp index 5ac58e7950..48ca20d6d2 100644 --- a/src/settings/PathConfigStorage.cpp +++ b/src/settings/PathConfigStorage.cpp @@ -17,7 +17,7 @@ namespace cura std::vector PathConfigStorage::getLineWidthFactorPerExtruder(const LayerIndex& layer_nr) { std::vector ret; - for (const ExtruderTrain& train : Application::getInstance().current_slice->scene.extruders) + for (const ExtruderTrain& train : Application::getInstance().current_slice_->scene.extruders) { if (layer_nr <= 0) { @@ -33,15 +33,15 @@ std::vector PathConfigStorage::getLineWidthFactorPerExtruder(const LayerI } PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const LayerIndex& layer_nr, const coord_t layer_thickness) - : support_infill_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").extruder_nr_) - , support_roof_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_) - , support_bottom_extruder_nr(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_) - , raft_base_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_base_extruder_nr")) - , raft_interface_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_interface_extruder_nr")) - , raft_surface_train(Application::getInstance().current_slice->scene.current_mesh_group->settings.get("raft_surface_extruder_nr")) - , support_infill_train(Application::getInstance().current_slice->scene.extruders[support_infill_extruder_nr]) - , support_roof_train(Application::getInstance().current_slice->scene.extruders[support_roof_extruder_nr]) - , support_bottom_train(Application::getInstance().current_slice->scene.extruders[support_bottom_extruder_nr]) + : support_infill_extruder_nr(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_infill_extruder_nr").extruder_nr_) + , support_roof_extruder_nr(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_roof_extruder_nr").extruder_nr_) + , support_bottom_extruder_nr(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_bottom_extruder_nr").extruder_nr_) + , raft_base_train(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr")) + , raft_interface_train(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_interface_extruder_nr")) + , raft_surface_train(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_surface_extruder_nr")) + , support_infill_train(Application::getInstance().current_slice_->scene.extruders[support_infill_extruder_nr]) + , support_roof_train(Application::getInstance().current_slice_->scene.extruders[support_roof_extruder_nr]) + , support_bottom_train(Application::getInstance().current_slice_->scene.extruders[support_bottom_extruder_nr]) , line_width_factor_per_extruder(PathConfigStorage::getLineWidthFactorPerExtruder(layer_nr)) , raft_base_config(GCodePathConfig{ .type = PrintFeatureType::SupportInterface, .line_width = raft_base_train.settings_.get("raft_base_line_width"), @@ -83,14 +83,14 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye .acceleration = support_bottom_train.settings_.get("acceleration_support_bottom"), .jerk = support_bottom_train.settings_.get("jerk_support_bottom") } }) { - const size_t extruder_count = Application::getInstance().current_slice->scene.extruders.size(); + const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); travel_config_per_extruder.reserve(extruder_count); skirt_brim_config_per_extruder.reserve(extruder_count); prime_tower_config_per_extruder.reserve(extruder_count); - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; travel_config_per_extruder.emplace_back(GCodePathConfig{ .type = PrintFeatureType::MoveCombing, .line_width = 0, .layer_thickness = 0, @@ -151,8 +151,8 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye handleInitialLayerSpeedup(storage, layer_nr, initial_speedup_layer_count); } - const auto layer_height = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height"); - const auto support_top_distance = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_top_distance"); + const auto layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); + const auto support_top_distance = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_top_distance"); const coord_t leftover_support_distance = support_top_distance % layer_height; support_fractional_infill_config = support_infill_config; // copy @@ -183,8 +183,8 @@ void MeshPathConfigs::smoothAllSpeeds(const SpeedDerivatives& first_layer_config void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storage, const LayerIndex& layer_nr, const size_t initial_speedup_layer_count) { std::vector global_first_layer_config_per_extruder; - global_first_layer_config_per_extruder.reserve(Application::getInstance().current_slice->scene.extruders.size()); - for (const ExtruderTrain& extruder : Application::getInstance().current_slice->scene.extruders) + global_first_layer_config_per_extruder.reserve(Application::getInstance().current_slice_->scene.extruders.size()); + for (const ExtruderTrain& extruder : Application::getInstance().current_slice_->scene.extruders) { global_first_layer_config_per_extruder.emplace_back(SpeedDerivatives{ .speed = extruder.settings_.get("speed_print_layer_0"), .acceleration = extruder.settings_.get("acceleration_print_layer_0"), @@ -194,7 +194,7 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag { // support if (layer_nr < static_cast(initial_speedup_layer_count)) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t extruder_nr_support_infill = mesh_group_settings.get((layer_nr <= 0) ? "support_extruder_nr_layer_0" : "support_infill_extruder_nr").extruder_nr_; for (unsigned int idx = 0; idx < MAX_INFILL_COMBINE; idx++) @@ -218,9 +218,9 @@ void PathConfigStorage::handleInitialLayerSpeedup(const SliceDataStorage& storag } { // extruder configs: travel, skirt/brim (= shield) - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const SpeedDerivatives initial_layer_travel_speed_config{ .speed = train.settings_.get("speed_travel_layer_0"), .acceleration = train.settings_.get("acceleration_travel_layer_0"), .jerk = train.settings_.get("jerk_travel_layer_0") }; diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index 9b8e609df4..ffc89a274b 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -60,7 +60,7 @@ std::string Settings::get(const std::string& key) const return settings.at(key); } - const std::unordered_map& limit_to_extruder = Application::getInstance().current_slice->scene.limit_to_extruder; + const std::unordered_map& limit_to_extruder = Application::getInstance().current_slice_->scene.limit_to_extruder; if (limit_to_extruder.find(key) != limit_to_extruder.end()) { return limit_to_extruder.at(key)->settings_.getWithoutLimiting(key); @@ -113,7 +113,7 @@ ExtruderTrain& Settings::get(const std::string& key) const { extruder_nr = get("extruder_nr"); } - return Application::getInstance().current_slice->scene.extruders[extruder_nr]; + return Application::getInstance().current_slice_->scene.extruders[extruder_nr]; } template<> @@ -123,14 +123,14 @@ std::vector Settings::get>(const std std::vector ret; if (extruder_nr < 0) { - for (ExtruderTrain& train : Application::getInstance().current_slice->scene.extruders) + for (ExtruderTrain& train : Application::getInstance().current_slice_->scene.extruders) { ret.emplace_back(&train); } } else { - ret.emplace_back(&Application::getInstance().current_slice->scene.extruders[extruder_nr]); + ret.emplace_back(&Application::getInstance().current_slice_->scene.extruders[extruder_nr]); } return ret; } diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index bbffb53e7d..37453a303c 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -245,7 +245,7 @@ Point SliceMeshStorage::getZSeamHint() const std::vector SliceDataStorage::initializeRetractionAndWipeConfigs() { std::vector ret; - ret.resize(Application::getInstance().current_slice->scene.extruders.size()); // initializes with constructor RetractionConfig() + ret.resize(Application::getInstance().current_slice_->scene.extruders.size()); // initializes with constructor RetractionConfig() return ret; } @@ -254,7 +254,7 @@ SliceDataStorage::SliceDataStorage() , retraction_wipe_config_per_extruder(initializeRetractionAndWipeConfigs()) , max_print_height_second_to_last_extruder(-1) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; Point3 machine_max(mesh_group_settings.get("machine_width"), mesh_group_settings.get("machine_depth"), mesh_group_settings.get("machine_height")); Point3 machine_min(0, 0, 0); if (mesh_group_settings.get("machine_center_is_zero")) @@ -270,7 +270,7 @@ Polygons SliceDataStorage::getLayerOutlines(const LayerIndex layer_nr, const bool include_support, const bool include_prime_tower, const bool external_polys_only, const int extruder_nr) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (layer_nr < 0 && layer_nr < -static_cast(Raft::getFillerLayerCount())) { // when processing raft if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("adhesion_extruder_nr").extruder_nr_))) @@ -343,13 +343,13 @@ Polygons std::vector SliceDataStorage::getExtrudersUsed() const { std::vector ret; - ret.resize(Application::getInstance().current_slice->scene.extruders.size(), false); + ret.resize(Application::getInstance().current_slice_->scene.extruders.size(), false); - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const EPlatformAdhesion adhesion_type = mesh_group_settings.get("adhesion_type"); if (adhesion_type == EPlatformAdhesion::SKIRT || adhesion_type == EPlatformAdhesion::BRIM) { - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { if (! skirt_brim[extruder_nr].empty()) { @@ -411,10 +411,10 @@ std::vector SliceDataStorage::getExtrudersUsed() const std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) const { - const std::vector& extruders = Application::getInstance().current_slice->scene.extruders; + const std::vector& extruders = Application::getInstance().current_slice_->scene.extruders; std::vector ret; ret.resize(extruders.size(), false); - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const EPlatformAdhesion adhesion_type = mesh_group_settings.get("adhesion_type"); bool include_adhesion = true; @@ -521,18 +521,18 @@ std::vector SliceDataStorage::getExtrudersUsed(const LayerIndex layer_nr) bool SliceDataStorage::getExtruderPrimeBlobEnabled(const size_t extruder_nr) const { - if (extruder_nr >= Application::getInstance().current_slice->scene.extruders.size()) + if (extruder_nr >= Application::getInstance().current_slice_->scene.extruders.size()) { return false; } - const ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; return train.settings_.get("prime_blob_enable"); } Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; Polygons border; border.emplace_back(); @@ -583,7 +583,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; + Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; if (! (extruder_settings.get("prime_blob_enable") && mesh_group_settings.get("extruder_prime_pos_abs"))) { continue; @@ -608,7 +608,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; + Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); Polygons extruder_border = disallowed_areas; extruder_border.translate(translation); @@ -633,7 +633,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& extruder_settings = Application::getInstance().current_slice->scene.extruders[extruder_nr].settings_; + Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); for (size_t other_extruder_nr = 0; other_extruder_nr < extruder_is_used.size(); other_extruder_nr++) { @@ -642,7 +642,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Settings& other_extruder_settings = Application::getInstance().current_slice->scene.extruders[other_extruder_nr].settings_; + Settings& other_extruder_settings = Application::getInstance().current_slice_->scene.extruders[other_extruder_nr].settings_; Point other_translation(other_extruder_settings.get("machine_nozzle_offset_x"), other_extruder_settings.get("machine_nozzle_offset_y")); Polygons translated_border = border; translated_border.translate(translation - other_translation); diff --git a/src/slicer.cpp b/src/slicer.cpp index 832589deb1..c2d62866ff 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -808,7 +808,7 @@ Slicer::Slicer(Mesh* i_mesh, const coord_t thickness, const size_t slice_layer_c : mesh(i_mesh) { const SlicingTolerance slicing_tolerance = mesh->settings_.get("slicing_tolerance"); - const coord_t initial_layer_thickness = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height_0"); + const coord_t initial_layer_thickness = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height_0"); assert(slice_layer_count > 0); diff --git a/src/support.cpp b/src/support.cpp index fb896445ce..bfbd4ab8f9 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -90,7 +90,7 @@ void AreaSupport::splitGlobalSupportAreasIntoSupportInfillParts( size_t min_layer = 0; size_t max_layer = total_layer_count - 1; - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); const EFillMethod support_pattern = infill_extruder.settings_.get("support_pattern"); const coord_t support_line_width = infill_extruder.settings_.get("support_line_width"); @@ -180,7 +180,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) // -> Note that this function only does the above, which is identifying and storing support infill areas with densities. // The actual printing part is done in FffGcodeWriter. // - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const size_t total_layer_count = storage.print_layer_count; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); const coord_t gradual_support_step_height = infill_extruder.settings_.get("gradual_support_infill_step_height"); @@ -314,7 +314,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const unsigned int total_layer_count = storage.print_layer_count; const coord_t layer_height = mesh_group_settings.get("layer_height"); // How many support infill layers to combine to obtain the requested sparse thickness. @@ -417,7 +417,7 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) void AreaSupport::cleanup(SliceDataStorage& storage) { - const coord_t support_line_width = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_line_width"); + const coord_t support_line_width = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_line_width"); for (LayerIndex layer_nr = 0; layer_nr < storage.support.supportLayers.size(); layer_nr++) { SupportLayer& layer = storage.support.supportLayers[layer_nr]; @@ -462,7 +462,7 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp { Polygons joined; - const Settings& infill_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("support_infill_extruder_nr").settings_; + const Settings& infill_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("support_infill_extruder_nr").settings_; const AngleRadians conical_support_angle = infill_settings.get("support_conical_angle"); const coord_t layer_thickness = infill_settings.get("layer_height"); coord_t conical_support_offset; @@ -477,7 +477,7 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp const bool conical_support = infill_settings.get("support_conical_enabled") && conical_support_angle != 0; if (conical_support) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; // Don't go outside the build volume. Polygons machine_volume_border; switch (mesh_group_settings.get("machine_shape")) @@ -508,13 +508,13 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp coord_t adhesion_size = 0; // Make sure there is enough room for the platform adhesion around support. coord_t extra_skirt_line_width = 0; const std::vector is_extruder_used = storage.getExtrudersUsed(); - for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice->scene.extruders.size(); extruder_nr++) + for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { if (! is_extruder_used[extruder_nr]) // Unused extruders and the primary adhesion extruder don't generate an extra skirt line. { continue; } - const ExtruderTrain& other_extruder = Application::getInstance().current_slice->scene.extruders[extruder_nr]; + const ExtruderTrain& other_extruder = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; extra_skirt_line_width += other_extruder.settings_.get("skirt_brim_line_width") * other_extruder.settings_.get("initial_layer_line_width_factor"); } const std::vector skirt_brim_extruders = mesh_group_settings.get>("skirt_brim_extruder_nr"); @@ -636,7 +636,7 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) // generate support areas bool support_meshes_drop_down_handled = false; bool support_meshes_handled = false; - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; for (unsigned int mesh_idx = 0; mesh_idx < storage.meshes.size(); mesh_idx++) { SliceMeshStorage& mesh = *storage.meshes[mesh_idx]; @@ -709,7 +709,7 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ExtruderTrain& infill_extruder = mesh_group_settings.get("support_infill_extruder_nr"); const EFillMethod& support_pattern = infill_extruder.settings_.get("support_pattern"); if ((support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D) && infill_extruder.settings_.get("support_line_distance") > 0) @@ -783,7 +783,7 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM } // Don't generate overhang areas if the Z distance is higher than the objects we're generating support for. - const coord_t layer_height = Application::getInstance().current_slice->scene.current_mesh_group->settings.get("layer_height"); + const coord_t layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); const coord_t z_distance_top = mesh.settings.get("support_top_distance"); const size_t z_distance_top_layers = (z_distance_top / layer_height) + 1; if (z_distance_top_layers + 1 > storage.print_layer_count) @@ -815,7 +815,7 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const Settings& infill_settings, const LayerIndex layer_idx) { - const auto& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const auto& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const Simplify simplify{ mesh_group_settings }; const auto layer_thickness = mesh_group_settings.get("layer_height"); const auto support_distance_top = static_cast(mesh_group_settings.get("support_top_distance")); @@ -1040,7 +1040,7 @@ void AreaSupport::generateSupportAreasForMesh( { return; } - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const ESupportType support_type = mesh_group_settings.get("support_type"); if (support_type == ESupportType::NONE && ! is_support_mesh_place_holder) { @@ -1739,7 +1739,7 @@ void AreaSupport::handleWallStruts(const Settings& settings, Polygons& supportLa void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); const size_t bottom_layer_count = round_divide(mesh.settings.get("support_bottom_height"), layer_height); // Number of layers in support bottom. if (bottom_layer_count <= 0) @@ -1776,7 +1776,7 @@ void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMe void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMeshStorage& mesh, std::vector& global_support_areas_per_layer) { - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t layer_height = mesh_group_settings.get("layer_height"); const size_t roof_layer_count = round_divide(mesh.settings.get("support_roof_height"), layer_height); // Number of layers in support roof. if (roof_layer_count <= 0) diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index 696bbaffcf..e85b6fb2da 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -70,16 +70,16 @@ class GCodeExportTest : public testing::Test gcode.machine_name = "Your favourite 3D printer"; // Set up a scene so that we may request settings. - Application::getInstance().current_slice = new Slice(1); + Application::getInstance().current_slice_ = new Slice(1); mock_communication = new MockCommunication(); - Application::getInstance().communication = mock_communication; + Application::getInstance().communication_ = mock_communication; } void TearDown() override { - delete Application::getInstance().current_slice; - delete Application::getInstance().communication; - Application::getInstance().communication = nullptr; + delete Application::getInstance().current_slice_; + delete Application::getInstance().communication_; + Application::getInstance().communication_ = nullptr; } }; // NOLINTEND(misc-non-private-member-variables-in-classes) @@ -228,12 +228,12 @@ class GriffinHeaderTest : public testing::TestWithParam gcode.machine_name = "Your favourite 3D printer"; // Set up a scene so that we may request settings. - Application::getInstance().current_slice = new Slice(0); + Application::getInstance().current_slice_ = new Slice(0); } void TearDown() override { - delete Application::getInstance().current_slice; + delete Application::getInstance().current_slice_; } }; // NOLINTEND(misc-non-private-member-variables-in-classes) @@ -244,8 +244,8 @@ TEST_P(GriffinHeaderTest, HeaderGriffinFormat) gcode.flavor = EGCodeFlavor::GRIFFIN; for (size_t extruder_index = 0; extruder_index < num_extruders; extruder_index++) { - Application::getInstance().current_slice->scene.extruders.emplace_back(extruder_index, nullptr); - ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders.back(); + Application::getInstance().current_slice_->scene.extruders.emplace_back(extruder_index, nullptr); + ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders.back(); train.settings_.add("machine_nozzle_size", "0.4"); train.settings_.add("machine_nozzle_id", "TestNozzle"); } @@ -324,8 +324,8 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) const std::vector filament_used = { 100, 200 }; for (size_t extruder_index = 0; extruder_index < num_extruders; extruder_index++) { - Application::getInstance().current_slice->scene.extruders.emplace_back(extruder_index, nullptr); - ExtruderTrain& train = Application::getInstance().current_slice->scene.extruders.back(); + Application::getInstance().current_slice_->scene.extruders.emplace_back(extruder_index, nullptr); + ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders.back(); train.settings_.add("machine_nozzle_size", "0.4"); } gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); @@ -340,7 +340,7 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) TEST_F(GCodeExportTest, HeaderRepRap) { - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.123"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); gcode.flavor = EGCodeFlavor::REPRAP; gcode.extruder_attr[0].filament_area = 5.0; gcode.extruder_attr[1].filament_area = 4.0; @@ -360,7 +360,7 @@ TEST_F(GCodeExportTest, HeaderRepRap) TEST_F(GCodeExportTest, HeaderMarlin) { - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.123"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); gcode.flavor = EGCodeFlavor::MARLIN; gcode.extruder_attr[0].filament_area = 5.0; gcode.extruder_attr[1].filament_area = 4.0; @@ -380,7 +380,7 @@ TEST_F(GCodeExportTest, HeaderMarlin) TEST_F(GCodeExportTest, HeaderMarlinVolumetric) { - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.123"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); gcode.flavor = EGCodeFlavor::MARLIN_VOLUMATRIC; constexpr size_t num_extruders = 2; const std::vector extruder_is_used(num_extruders, true); @@ -455,7 +455,7 @@ TEST_F(GCodeExportTest, EVsMmLinear) */ TEST_F(GCodeExportTest, SwitchExtruderSimple) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; scene.extruders.emplace_back(0, nullptr); ExtruderTrain& train1 = scene.extruders.back(); @@ -488,8 +488,8 @@ TEST_F(GCodeExportTest, WriteZHopStartZero) TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) { - Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; constexpr coord_t hop_height = 3000; gcode.writeZhopStart(hop_height); @@ -498,8 +498,8 @@ TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopStartCustomSpeed) { - Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; constexpr coord_t hop_height = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. @@ -516,8 +516,8 @@ TEST_F(GCodeExportTest, WriteZHopEndZero) TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) { - Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. gcode.current_layer_z = 2000; gcode.is_z_hopped = 3000; gcode.writeZhopEnd(); @@ -526,8 +526,8 @@ TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopEndCustomSpeed) { - Application::getInstance().current_slice->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); gcode.current_layer_z = 2000; gcode.is_z_hopped = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. @@ -540,7 +540,7 @@ TEST_F(GCodeExportTest, insertWipeScriptSingleMove) gcode.currentPosition = Point3(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; config.retraction_enable = false; @@ -572,7 +572,7 @@ TEST_F(GCodeExportTest, insertWipeScriptMultipleMoves) gcode.currentPosition = Point3(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; config.retraction_enable = false; @@ -610,7 +610,7 @@ TEST_F(GCodeExportTest, insertWipeScriptOptionalDelay) gcode.currentPosition = Point3(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; config.retraction_enable = false; @@ -647,9 +647,9 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) gcode.extruder_attr[0].filament_area = 10.0; gcode.relative_extrusion = false; gcode.currentSpeed = 1.0; - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); - Application::getInstance().current_slice->scene.extruders.emplace_back(0, &Application::getInstance().current_slice->scene.current_mesh_group->settings); - Application::getInstance().current_slice->scene.extruders.back().settings_.add("machine_firmware_retract", "false"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, &Application::getInstance().current_slice_->scene.current_mesh_group->settings); + Application::getInstance().current_slice_->scene.extruders.back().settings_.add("machine_firmware_retract", "false"); WipeScriptConfig config; config.retraction_enable = true; @@ -690,7 +690,7 @@ TEST_F(GCodeExportTest, insertWipeScriptHopEnable) gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; gcode.currentSpeed = 1.0; - Application::getInstance().current_slice->scene.current_mesh_group->settings.add("layer_height", "0.2"); + Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; config.retraction_enable = false; diff --git a/tests/LayerPlanTest.cpp b/tests/LayerPlanTest.cpp index e7428f421c..0cfecdec15 100644 --- a/tests/LayerPlanTest.cpp +++ b/tests/LayerPlanTest.cpp @@ -76,10 +76,10 @@ class LayerPlanTest : public testing::Test SliceDataStorage* setUpStorage() { constexpr size_t num_mesh_groups = 1; - Application::getInstance().current_slice = new Slice(num_mesh_groups); + Application::getInstance().current_slice_ = new Slice(num_mesh_groups); // Define all settings in the mesh group. The extruder train and model settings will fall back on that then. - settings = &Application::getInstance().current_slice->scene.current_mesh_group->settings; + settings = &Application::getInstance().current_slice_->scene.current_mesh_group->settings; // Default settings. These are not (always) the FDM printer defaults, but sometimes just setting values that can be recognised // uniquely as much as possible. settings->add("acceleration_prime_tower", "5008"); @@ -176,7 +176,7 @@ class LayerPlanTest : public testing::Test settings->add("travel_avoid_other_parts", "true"); settings->add("travel_avoid_supports", "true"); - Application::getInstance().current_slice->scene.extruders.emplace_back(0, settings); // Add an extruder train. + Application::getInstance().current_slice_->scene.extruders.emplace_back(0, settings); // Add an extruder train. // Set the fan speed layer time settings (since the LayerPlan constructor copies these). FanSpeedLayerTimeSettings fan_settings; @@ -216,7 +216,7 @@ class LayerPlanTest : public testing::Test void TearDown() override { delete storage; - delete Application::getInstance().current_slice; + delete Application::getInstance().current_slice_; } }; diff --git a/tests/arcus/ArcusCommunicationPrivateTest.cpp b/tests/arcus/ArcusCommunicationPrivateTest.cpp index b35f7fdf25..29d33d94c0 100644 --- a/tests/arcus/ArcusCommunicationPrivateTest.cpp +++ b/tests/arcus/ArcusCommunicationPrivateTest.cpp @@ -31,7 +31,7 @@ class ArcusCommunicationPrivateTest : public testing::Test { instance = new ArcusCommunication::Private(); instance->socket = new MockSocket(); - Application::getInstance().current_slice = new Slice(GK_TEST_NUM_MESH_GROUPS); + Application::getInstance().current_slice_ = new Slice(GK_TEST_NUM_MESH_GROUPS); } void TearDown() override @@ -39,7 +39,7 @@ class ArcusCommunicationPrivateTest : public testing::Test delete instance->socket; delete instance; - delete Application::getInstance().current_slice; + delete Application::getInstance().current_slice_; } /* @@ -92,7 +92,7 @@ TEST_F(ArcusCommunicationPrivateTest, ReadGlobalSettingsMessage) instance->readGlobalSettingsMessage(global_settings); // Check if they are equal in general: - const auto& settings = Application::getInstance().current_slice->scene.settings; + const auto& settings = Application::getInstance().current_slice_->scene.settings; for (const auto& entry : raw_settings) { EXPECT_EQ(settings.get(entry.first), entry.second); @@ -114,12 +114,12 @@ TEST_F(ArcusCommunicationPrivateTest, ReadSingleExtruderSettingsMessage) const std::string setting_value = "You put the 'sexy' in 'dyslexic'."; setting->set_value(setting_value); - Application::getInstance().current_slice->scene.settings.add("machine_extruder_count", "1"); + Application::getInstance().current_slice_->scene.settings.add("machine_extruder_count", "1"); // Run the call that we're testing. instance->readExtruderSettingsMessage(messages); - ASSERT_EQ(size_t(1), Application::getInstance().current_slice->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; - EXPECT_EQ(setting_value, Application::getInstance().current_slice->scene.extruders[0].settings_.get("test_setting")); + ASSERT_EQ(size_t(1), Application::getInstance().current_slice_->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; + EXPECT_EQ(setting_value, Application::getInstance().current_slice_->scene.extruders[0].settings_.get("test_setting")); } TEST_F(ArcusCommunicationPrivateTest, ReadMultiExtruderSettingsMessage) @@ -142,13 +142,13 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMultiExtruderSettingsMessage) second_setting->set_name("What extruder are you?"); second_setting->set_value("Second"); - Application::getInstance().current_slice->scene.settings.add("machine_extruder_count", "2"); + Application::getInstance().current_slice_->scene.settings.add("machine_extruder_count", "2"); // Run the call that we're testing. instance->readExtruderSettingsMessage(messages); - ASSERT_EQ(size_t(2), Application::getInstance().current_slice->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; - EXPECT_EQ(std::string("First"), Application::getInstance().current_slice->scene.extruders[0].settings_.get("What extruder are you?")); - EXPECT_EQ(std::string("Second"), Application::getInstance().current_slice->scene.extruders[1].settings_.get("What extruder are you?")); + ASSERT_EQ(size_t(2), Application::getInstance().current_slice_->scene.extruders.size()) << "Reading the extruders must construct the correct amount of extruders in the scene."; + EXPECT_EQ(std::string("First"), Application::getInstance().current_slice_->scene.extruders[0].settings_.get("What extruder are you?")); + EXPECT_EQ(std::string("Second"), Application::getInstance().current_slice_->scene.extruders[1].settings_.get("What extruder are you?")); } TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) @@ -206,7 +206,7 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) instance->readMeshGroupMessage(mesh_message); // Checks: - auto& scene = Application::getInstance().current_slice->scene; + auto& scene = Application::getInstance().current_slice_->scene; ASSERT_FALSE(scene.mesh_groups.empty()); auto& meshes = scene.mesh_groups[0].meshes; diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 406554fd08..42508af961 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -30,10 +30,10 @@ class SlicePhaseTest : public testing::Test Application::getInstance().startThreadPool(); // Set up a scene so that we may request settings. - Application::getInstance().current_slice = new Slice(1); + Application::getInstance().current_slice_ = new Slice(1); // And a few settings that we want to default. - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; scene.settings.add("slicing_tolerance", "middle"); scene.settings.add("layer_height_0", "0.2"); scene.settings.add("layer_height", "0.1"); @@ -66,7 +66,7 @@ class SlicePhaseTest : public testing::Test TEST_F(SlicePhaseTest, Cube) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; MeshGroup& mesh_group = scene.mesh_groups.back(); const FMatrix4x3 transformation; @@ -126,7 +126,7 @@ TEST_F(SlicePhaseTest, Cube) TEST_F(SlicePhaseTest, Cylinder1000) { - Scene& scene = Application::getInstance().current_slice->scene; + Scene& scene = Application::getInstance().current_slice_->scene; MeshGroup& mesh_group = scene.mesh_groups.back(); const FMatrix4x3 transformation; diff --git a/tests/settings/SettingsTest.cpp b/tests/settings/SettingsTest.cpp index 648cca2e51..ecc9884a00 100644 --- a/tests/settings/SettingsTest.cpp +++ b/tests/settings/SettingsTest.cpp @@ -86,7 +86,7 @@ TEST_F(SettingsTest, AddSettingExtruderTrain) { // Add a slice with some extruder trains. std::shared_ptr current_slice = std::make_shared(0); - Application::getInstance().current_slice = current_slice.get(); + Application::getInstance().current_slice_ = current_slice.get(); current_slice->scene.extruders.emplace_back(0, nullptr); current_slice->scene.extruders.emplace_back(1, nullptr); current_slice->scene.extruders.emplace_back(2, nullptr); @@ -220,7 +220,7 @@ TEST_F(SettingsTest, OverwriteSetting) TEST_F(SettingsTest, Inheritance) { std::shared_ptr current_slice = std::make_shared(0); - Application::getInstance().current_slice = current_slice.get(); + Application::getInstance().current_slice_ = current_slice.get(); const std::string value = "To be frank, I'd have to change my name."; Settings parent; @@ -237,7 +237,7 @@ TEST_F(SettingsTest, Inheritance) TEST_F(SettingsTest, LimitToExtruder) { std::shared_ptr current_slice = std::make_shared(0); - Application::getInstance().current_slice = current_slice.get(); + Application::getInstance().current_slice_ = current_slice.get(); current_slice->scene.extruders.emplace_back(0, nullptr); current_slice->scene.extruders.emplace_back(1, nullptr); current_slice->scene.extruders.emplace_back(2, nullptr); From 38f4559612e05cbd03a1ad661eebb64ce392de47 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 11:24:50 +0100 Subject: [PATCH 061/218] Fixed variable shadowing warnings --- include/SkirtBrim.h | 58 ++--- include/TreeSupportElement.h | 352 +++++++++++++------------- include/TreeSupportSettings.h | 10 +- src/SkirtBrim.cpp | 272 ++++++++++---------- src/TreeSupport.cpp | 429 ++++++++++++++++---------------- src/TreeSupportTipGenerator.cpp | 16 +- 6 files changed, 569 insertions(+), 568 deletions(-) diff --git a/include/SkirtBrim.h b/include/SkirtBrim.h index 896e4aac45..af8cbe9f6e 100644 --- a/include/SkirtBrim.h +++ b/include/SkirtBrim.h @@ -35,23 +35,23 @@ class SkirtBrim const size_t inset_idx, const int extruder_nr, const bool is_last) - : reference_outline_or_index(reference_outline_or_index) - , external_only(external_only) - , offset_value(offset_value) - , total_offset(total_offset) - , inset_idx(inset_idx) - , extruder_nr(extruder_nr) - , is_last(is_last) + : reference_outline_or_index_(reference_outline_or_index) + , external_only_(external_only) + , offset_value_(offset_value) + , total_offset_(total_offset) + , inset_idx_(inset_idx) + , extruder_nr_(extruder_nr) + , is_last_(is_last) { } - std::variant reference_outline_or_index; - bool external_only; //!< Wether to only offset outward from the reference polygons - coord_t offset_value; //!< Distance by which to offset from the reference - coord_t total_offset; //!< Total distance from the model - int inset_idx; //!< The outset index of this brimline - int extruder_nr; //!< The extruder by which to print this brim line - bool is_last; //!< Whether this is the last planned offset for this extruder. + std::variant reference_outline_or_index_; + bool external_only_; //!< Wether to only offset outward from the reference polygons + coord_t offset_value_; //!< Distance by which to offset from the reference + coord_t total_offset_; //!< Total distance from the model + int inset_idx_; //!< The outset index of this brimline + int extruder_nr_; //!< The extruder by which to print this brim line + bool is_last_; //!< Whether this is the last planned offset for this extruder. }; /*! @@ -60,23 +60,23 @@ class SkirtBrim static inline const auto OffsetSorter{ [](const Offset& a, const Offset& b) { // Use extruder_nr in case both extruders have the same offset settings. - return a.total_offset != b.total_offset ? a.total_offset < b.total_offset : a.extruder_nr < b.extruder_nr; + return a.total_offset_ != b.total_offset_ ? a.total_offset_ < b.total_offset_ : a.extruder_nr_ < b.extruder_nr_; } }; - SliceDataStorage& storage; //!< Where to retrieve settings and store brim lines. - const EPlatformAdhesion adhesion_type; //!< Whether we are generating brim, skirt, or raft - const bool has_ooze_shield; //!< Whether the meshgroup has an ooze shield - const bool has_draft_shield; //!< Whether the meshgroup has a draft shield - const std::vector& extruders; //!< The extruders of the current slice - const int extruder_count; //!< The total number of extruders - const std::vector extruder_is_used; //!< For each extruder whether it is actually used in this print - int first_used_extruder_nr; //!< The first extruder which is used - int skirt_brim_extruder_nr; //!< The extruder with which the skirt/brim is printed or -1 if printed with both - std::vector external_polys_only; //!< For each extruder whether to only generate brim on the outside - std::vector line_widths; //!< For each extruder the skirt/brim line width - std::vector skirt_brim_minimal_length; //!< For each extruder the minimal brim length - std::vector line_count; //!< For each extruder the (minimal) number of brim lines to generate - std::vector gap; //!< For each extruder the gap between the part and the first brim/skirt line + SliceDataStorage& storage_; //!< Where to retrieve settings and store brim lines. + const EPlatformAdhesion adhesion_type_; //!< Whether we are generating brim, skirt, or raft + const bool has_ooze_shield_; //!< Whether the meshgroup has an ooze shield + const bool has_draft_shield_; //!< Whether the meshgroup has a draft shield + const std::vector& extruders_; //!< The extruders of the current slice + const int extruder_count_; //!< The total number of extruders + const std::vector extruder_is_used_; //!< For each extruder whether it is actually used in this print + int first_used_extruder_nr_; //!< The first extruder which is used + int skirt_brim_extruder_nr_; //!< The extruder with which the skirt/brim is printed or -1 if printed with both + std::vector external_polys_only_; //!< For each extruder whether to only generate brim on the outside + std::vector line_widths_; //!< For each extruder the skirt/brim line width + std::vector skirt_brim_minimal_length_; //!< For each extruder the minimal brim length + std::vector line_count_; //!< For each extruder the (minimal) number of brim lines to generate + std::vector gap_; //!< For each extruder the gap between the part and the first brim/skirt line public: /*! diff --git a/include/TreeSupportElement.h b/include/TreeSupportElement.h index 237e22baa2..a463ce30fe 100644 --- a/include/TreeSupportElement.h +++ b/include/TreeSupportElement.h @@ -19,12 +19,12 @@ namespace cura struct AreaIncreaseSettings { AreaIncreaseSettings() : - type(AvoidanceType::FAST), - increase_speed(0), - increase_radius(false), - no_error(false), - use_min_distance(false), - move(false) + type_(AvoidanceType::FAST), + increase_speed_(0), + increase_radius_(false), + no_error_(false), + use_min_distance_(false), + move_(false) { } @@ -37,31 +37,31 @@ struct AreaIncreaseSettings bool use_min_distance, bool move ) : - type(type), - increase_speed(increase_speed), - increase_radius(increase_radius), - no_error(simplify), - use_min_distance(use_min_distance), - move(move) + type_(type), + increase_speed_(increase_speed), + increase_radius_(increase_radius), + no_error_(simplify), + use_min_distance_(use_min_distance), + move_(move) { } - AvoidanceType type; - coord_t increase_speed; - bool increase_radius; - bool no_error; - bool use_min_distance; - bool move; + AvoidanceType type_; + coord_t increase_speed_; + bool increase_radius_; + bool no_error_; + bool use_min_distance_; + bool move_; bool operator==(const AreaIncreaseSettings& other) const { return - increase_radius == other.increase_radius && - increase_speed == other.increase_speed && - type == other.type && - no_error == other.no_error && - use_min_distance == other.use_min_distance && - move == other.move; + increase_radius_ == other.increase_radius_ && + increase_speed_ == other.increase_speed_ && + type_ == other.type_ && + no_error_ == other.no_error_ && + use_min_distance_ == other.use_min_distance_ && + move_ == other.move_; } }; @@ -83,90 +83,90 @@ struct TreeSupportElement bool influence_area_limit_active, coord_t influence_area_limit_range ) : - target_height(target_height), - target_position(target_position), - next_position(target_position), - next_height(target_height), - effective_radius_height(distance_to_top), - to_buildplate(to_buildplate), - distance_to_top(distance_to_top), - area(nullptr), - result_on_layer(target_position), - increased_to_model_radius(0), - to_model_gracious(to_model_gracious), - buildplate_radius_increases(0), - use_min_xy_dist(use_min_xy_dist), - supports_roof(supports_roof), - dont_move_until(dont_move_until), - can_use_safe_radius(can_use_safe_radius), - last_area_increase(AreaIncreaseSettings(AvoidanceType::FAST, 0, false, false, false, false)), - missing_roof_layers(force_tips_to_roof ? dont_move_until : 0), - skip_ovalisation(skip_ovalisation), - all_tips({ target_position }), - influence_area_limit_active(influence_area_limit_active), - influence_area_limit_range(influence_area_limit_range + target_height_(target_height), + target_position_(target_position), + next_position_(target_position), + next_height_(target_height), + effective_radius_height_(distance_to_top), + to_buildplate_(to_buildplate), + distance_to_top_(distance_to_top), + area_(nullptr), + result_on_layer_(target_position), + increased_to_model_radius_(0), + to_model_gracious_(to_model_gracious), + buildplate_radius_increases_(0), + use_min_xy_dist_(use_min_xy_dist), + supports_roof_(supports_roof), + dont_move_until_(dont_move_until), + can_use_safe_radius_(can_use_safe_radius), + last_area_increase_(AreaIncreaseSettings(AvoidanceType::FAST, 0, false, false, false, false)), + missing_roof_layers_(force_tips_to_roof ? dont_move_until : 0), + skip_ovalisation_(skip_ovalisation), + all_tips_({ target_position }), + influence_area_limit_active_(influence_area_limit_active), + influence_area_limit_range_(influence_area_limit_range ) { RecreateInfluenceLimitArea(); } TreeSupportElement(const TreeSupportElement& elem, Polygons* newArea = nullptr) : // copy constructor with possibility to set a new area - target_height(elem.target_height), - target_position(elem.target_position), - next_position(elem.next_position), - next_height(elem.next_height), - effective_radius_height(elem.effective_radius_height), - to_buildplate(elem.to_buildplate), - distance_to_top(elem.distance_to_top), - area(newArea != nullptr ? newArea : elem.area), - result_on_layer(elem.result_on_layer), - increased_to_model_radius(elem.increased_to_model_radius), - to_model_gracious(elem.to_model_gracious), - buildplate_radius_increases(elem.buildplate_radius_increases), - use_min_xy_dist(elem.use_min_xy_dist), - supports_roof(elem.supports_roof), - dont_move_until(elem.dont_move_until), - can_use_safe_radius(elem.can_use_safe_radius), - last_area_increase(elem.last_area_increase), - missing_roof_layers(elem.missing_roof_layers), - skip_ovalisation(elem.skip_ovalisation), - all_tips(elem.all_tips), - influence_area_limit_area(elem.influence_area_limit_area), - influence_area_limit_range(elem.influence_area_limit_range), - influence_area_limit_active(elem.influence_area_limit_active) + target_height_(elem.target_height_), + target_position_(elem.target_position_), + next_position_(elem.next_position_), + next_height_(elem.next_height_), + effective_radius_height_(elem.effective_radius_height_), + to_buildplate_(elem.to_buildplate_), + distance_to_top_(elem.distance_to_top_), + area_(newArea != nullptr ? newArea : elem.area_), + result_on_layer_(elem.result_on_layer_), + increased_to_model_radius_(elem.increased_to_model_radius_), + to_model_gracious_(elem.to_model_gracious_), + buildplate_radius_increases_(elem.buildplate_radius_increases_), + use_min_xy_dist_(elem.use_min_xy_dist_), + supports_roof_(elem.supports_roof_), + dont_move_until_(elem.dont_move_until_), + can_use_safe_radius_(elem.can_use_safe_radius_), + last_area_increase_(elem.last_area_increase_), + missing_roof_layers_(elem.missing_roof_layers_), + skip_ovalisation_(elem.skip_ovalisation_), + all_tips_(elem.all_tips_), + influence_area_limit_area_(elem.influence_area_limit_area_), + influence_area_limit_range_(elem.influence_area_limit_range_), + influence_area_limit_active_(elem.influence_area_limit_active_) { - parents.insert(parents.begin(), elem.parents.begin(), elem.parents.end()); + parents_.insert(parents_.begin(), elem.parents_.begin(), elem.parents_.end()); } /*! * \brief Create a new Element for one layer below the element of the pointer supplied. */ TreeSupportElement(TreeSupportElement* element_above) : - target_height(element_above->target_height), - target_position(element_above->target_position), - next_position(element_above->next_position), - next_height(element_above->next_height), - effective_radius_height(element_above->effective_radius_height), - to_buildplate(element_above->to_buildplate), - distance_to_top(element_above->distance_to_top + 1), - area(element_above->area), - result_on_layer(Point(-1, -1)), // set to invalid as we are a new node on a new layer - increased_to_model_radius(element_above->increased_to_model_radius), - to_model_gracious(element_above->to_model_gracious), - buildplate_radius_increases(element_above->buildplate_radius_increases), - use_min_xy_dist(element_above->use_min_xy_dist), - supports_roof(element_above->supports_roof), - dont_move_until(element_above->dont_move_until), - can_use_safe_radius(element_above->can_use_safe_radius), - last_area_increase(element_above->last_area_increase), - missing_roof_layers(element_above->missing_roof_layers), - skip_ovalisation(false), - all_tips(element_above->all_tips), - influence_area_limit_area(element_above->influence_area_limit_area), - influence_area_limit_range(element_above->influence_area_limit_range), - influence_area_limit_active(element_above->influence_area_limit_active) + target_height_(element_above->target_height_), + target_position_(element_above->target_position_), + next_position_(element_above->next_position_), + next_height_(element_above->next_height_), + effective_radius_height_(element_above->effective_radius_height_), + to_buildplate_(element_above->to_buildplate_), + distance_to_top_(element_above->distance_to_top_ + 1), + area_(element_above->area_), + result_on_layer_(Point(-1, -1)), // set to invalid as we are a new node on a new layer + increased_to_model_radius_(element_above->increased_to_model_radius_), + to_model_gracious_(element_above->to_model_gracious_), + buildplate_radius_increases_(element_above->buildplate_radius_increases_), + use_min_xy_dist_(element_above->use_min_xy_dist_), + supports_roof_(element_above->supports_roof_), + dont_move_until_(element_above->dont_move_until_), + can_use_safe_radius_(element_above->can_use_safe_radius_), + last_area_increase_(element_above->last_area_increase_), + missing_roof_layers_(element_above->missing_roof_layers_), + skip_ovalisation_(false), + all_tips_(element_above->all_tips_), + influence_area_limit_area_(element_above->influence_area_limit_area_), + influence_area_limit_range_(element_above->influence_area_limit_range_), + influence_area_limit_active_(element_above->influence_area_limit_active_) { - parents = { element_above }; + parents_ = { element_above }; } // ONLY to be called in merge as it assumes a few assurances made by it. @@ -182,37 +182,37 @@ struct TreeSupportElement coord_t branch_radius, double diameter_angle_scale_factor ) : - next_position(next_position), - next_height(next_height), - area(nullptr), - increased_to_model_radius(increased_to_model_radius), - use_min_xy_dist(first.use_min_xy_dist || second.use_min_xy_dist), - supports_roof(first.supports_roof || second.supports_roof), - dont_move_until(std::max(first.dont_move_until, second.dont_move_until)), - can_use_safe_radius(first.can_use_safe_radius || second.can_use_safe_radius), - missing_roof_layers(std::min(first.missing_roof_layers, second.missing_roof_layers)), - skip_ovalisation(false) + next_position_(next_position), + next_height_(next_height), + area_(nullptr), + increased_to_model_radius_(increased_to_model_radius), + use_min_xy_dist_(first.use_min_xy_dist_ || second.use_min_xy_dist_), + supports_roof_(first.supports_roof_ || second.supports_roof_), + dont_move_until_(std::max(first.dont_move_until_, second.dont_move_until_)), + can_use_safe_radius_(first.can_use_safe_radius_ || second.can_use_safe_radius_), + missing_roof_layers_(std::min(first.missing_roof_layers_, second.missing_roof_layers_)), + skip_ovalisation_(false) { - if (first.target_height > second.target_height) + if (first.target_height_ > second.target_height_) { - target_height = first.target_height; - target_position = first.target_position; + target_height_ = first.target_height_; + target_position_ = first.target_position_; } else { - target_height = second.target_height; - target_position = second.target_position; + target_height_ = second.target_height_; + target_position_ = second.target_position_; } - effective_radius_height = std::max(first.effective_radius_height, second.effective_radius_height); - distance_to_top = std::max(first.distance_to_top, second.distance_to_top); + effective_radius_height_ = std::max(first.effective_radius_height_, second.effective_radius_height_); + distance_to_top_ = std::max(first.distance_to_top_, second.distance_to_top_); - to_buildplate = first.to_buildplate && second.to_buildplate; - to_model_gracious = first.to_model_gracious && second.to_model_gracious; // valid as we do not merge non-gracious with gracious + to_buildplate_ = first.to_buildplate_ && second.to_buildplate_; + to_model_gracious_ = first.to_model_gracious_ && second.to_model_gracious_; // valid as we do not merge non-gracious with gracious - AddParents(first.parents); - AddParents(second.parents); + AddParents(first.parents_); + AddParents(second.parents_); - buildplate_radius_increases = 0; + buildplate_radius_increases_ = 0; if (diameter_scale_bp_radius > 0) { const coord_t foot_increase_radius = @@ -220,170 +220,170 @@ struct TreeSupportElement ( std::max ( - getRadius(second.effective_radius_height, second.buildplate_radius_increases), - getRadius(first.effective_radius_height, first.buildplate_radius_increases)) - getRadius(effective_radius_height, buildplate_radius_increases + getRadius(second.effective_radius_height_, second.buildplate_radius_increases_), + getRadius(first.effective_radius_height_, first.buildplate_radius_increases_)) - getRadius(effective_radius_height_, buildplate_radius_increases_ ) ); // 'buildplate_radius_increases' has to be recalculated, as when a smaller tree with a larger buildplate_radius_increases merge with a larger branch, // the buildplate_radius_increases may have to be lower as otherwise the radius suddenly increases. This results often in a non integer value. - buildplate_radius_increases = foot_increase_radius / (branch_radius * (diameter_scale_bp_radius - diameter_angle_scale_factor)); + buildplate_radius_increases_ = foot_increase_radius / (branch_radius * (diameter_scale_bp_radius - diameter_angle_scale_factor)); } // set last settings to the best out of both parents. If this is wrong, it will only cause a small performance penalty instead of weird behavior. - last_area_increase = + last_area_increase_ = AreaIncreaseSettings ( - std::min(first.last_area_increase.type, second.last_area_increase.type), - std::min(first.last_area_increase.increase_speed, second.last_area_increase.increase_speed), - first.last_area_increase.increase_radius || second.last_area_increase.increase_radius, - first.last_area_increase.no_error || second.last_area_increase.no_error, - first.last_area_increase.use_min_distance && second.last_area_increase.use_min_distance, - first.last_area_increase.move || second.last_area_increase.move + std::min(first.last_area_increase_.type_, second.last_area_increase_.type_), + std::min(first.last_area_increase_.increase_speed_, second.last_area_increase_.increase_speed_), + first.last_area_increase_.increase_radius_ || second.last_area_increase_.increase_radius_, + first.last_area_increase_.no_error_ || second.last_area_increase_.no_error_, + first.last_area_increase_.use_min_distance_ && second.last_area_increase_.use_min_distance_, + first.last_area_increase_.move_ || second.last_area_increase_.move_ ); - all_tips = first.all_tips; - all_tips.insert(all_tips.end(), second.all_tips.begin(), second.all_tips.end()); - influence_area_limit_range = std::max(first.influence_area_limit_range, second.influence_area_limit_range); - influence_area_limit_active = first.influence_area_limit_active || second.influence_area_limit_active; + all_tips_ = first.all_tips_; + all_tips_.insert(all_tips_.end(), second.all_tips_.begin(), second.all_tips_.end()); + influence_area_limit_range_ = std::max(first.influence_area_limit_range_, second.influence_area_limit_range_); + influence_area_limit_active_ = first.influence_area_limit_active_ || second.influence_area_limit_active_; RecreateInfluenceLimitArea(); - if(first.to_buildplate != second.to_buildplate) + if(first.to_buildplate_ != second.to_buildplate_) { - setToBuildplateForAllParents(to_buildplate); + setToBuildplateForAllParents(to_buildplate_); } } /*! * \brief The layer this support elements wants reach */ - LayerIndex target_height; + LayerIndex target_height_; /*! * \brief The position this support elements wants to support on layer=target_height */ - Point target_position; + Point target_position_; /*! * \brief The next position this support elements wants to reach. NOTE: This is mainly a suggestion regarding direction inside the influence area. */ - Point next_position; + Point next_position_; /*! * \brief The next height this support elements wants to reach */ - LayerIndex next_height; + LayerIndex next_height_; /*! * \brief The Effective distance to top of this element regarding radius increases and collision calculations. */ - size_t effective_radius_height; + size_t effective_radius_height_; /*! * \brief The element trys to reach the buildplate */ - bool to_buildplate; + bool to_buildplate_; /*! * \brief All elements in the layer above the current one that are supported by this element */ - std::vector parents; + std::vector parents_; /*! * \brief The amount of layers this element is below the topmost layer of this branch. */ - size_t distance_to_top; + size_t distance_to_top_; /*! * \brief The resulting influence area. * Will only be set in the results of createLayerPathing, and will be nullptr inside! */ - Polygons* area; + Polygons* area_; /*! * \brief The resulting center point around which a circle will be drawn later. * Will be set by setPointsOnAreas */ - Point result_on_layer = Point(-1, -1); + Point result_on_layer_ = Point(-1, -1); /*! * \brief The amount of extra radius we got from merging branches that could have reached the buildplate, but merged with ones that can not. */ - coord_t increased_to_model_radius; // how much to model we increased only relevant for merging + coord_t increased_to_model_radius_; // how much to model we increased only relevant for merging /*! * \brief Will the branch be able to rest completely on a flat surface, be it buildplate or model ? */ - bool to_model_gracious; + bool to_model_gracious_; /*! * \brief Counter about the times the radius was increased to reach the bp_radius. Can be fractions for merge reasons. */ - double buildplate_radius_increases; + double buildplate_radius_increases_; /*! * \brief Whether the min_xy_distance can be used to get avoidance or similar. Will only be true if support_xy_overrides_z=Z overrides X/Y. */ - bool use_min_xy_dist; + bool use_min_xy_dist_; /*! * \brief True if this Element or any parent provides support to a support roof. */ - bool supports_roof; + bool supports_roof_; /*! * \brief The element trys not to move until this dtt is reached, is set to 0 if the element had to move. */ - size_t dont_move_until; + size_t dont_move_until_; /*! * \brief An influence area is considered safe when it can use the holefree avoidance <=> It will not have to encounter holes on its way downward. */ - bool can_use_safe_radius; + bool can_use_safe_radius_; /*! * \brief Settings used to increase the influence area to its current state. */ - AreaIncreaseSettings last_area_increase; + AreaIncreaseSettings last_area_increase_; /*! * \brief Amount of roof layers that were not yet added, because the branch needed to move. */ - size_t missing_roof_layers; + size_t missing_roof_layers_; /*! * \brief Skip the ovalisation to parent and children when generating the final circles. */ - bool skip_ovalisation; + bool skip_ovalisation_; /*! * \brief The coordinates of all tips supported by this branch. */ - std::vector all_tips; + std::vector all_tips_; /*! * \brief Whether the range of an influence area is limited */ - bool influence_area_limit_active; + bool influence_area_limit_active_; /*! * \brief Maximum distance (x/y) the influence area should be from each tip. */ - coord_t influence_area_limit_range; + coord_t influence_area_limit_range_; /*! * \brief Area that influence area has to be inside to conform to influence_area_limit_range. */ - Polygons influence_area_limit_area; + Polygons influence_area_limit_area_; /*! * \brief Additional locations that the tip should reach */ - std::vector additional_ovalization_targets; + std::vector additional_ovalization_targets_; bool operator==(const TreeSupportElement& other) const { - return target_position == other.target_position && target_height == other.target_height; + return target_position_ == other.target_position_ && target_height_ == other.target_height_; } bool operator<(const TreeSupportElement& other) const // true if me < other @@ -398,54 +398,54 @@ struct TreeSupportElement { return false; } - if (other.target_height != target_height) + if (other.target_height_ != target_height_) { - return other.target_height < target_height; + return other.target_height_ < target_height_; } - return other.target_position.X == target_position.X ? other.target_position.Y < target_position.Y : other.target_position.X < target_position.X; + return other.target_position_.X == target_position_.X ? other.target_position_.Y < target_position_.Y : other.target_position_.X < target_position_.X; } void AddParents(const std::vector& adding) { for (TreeSupportElement* ptr : adding) { - parents.emplace_back(ptr); + parents_.emplace_back(ptr); } } void RecreateInfluenceLimitArea() { - if (influence_area_limit_active) + if (influence_area_limit_active_) { - influence_area_limit_area.clear(); + influence_area_limit_area_.clear(); - for (Point p : all_tips) + for (Point p : all_tips_) { Polygon circle; for (Point corner : TreeSupportBaseCircle::getBaseCircle()) { - circle.add(p + corner * influence_area_limit_range / double(TreeSupportBaseCircle::base_radius)); + circle.add(p + corner * influence_area_limit_range_ / double(TreeSupportBaseCircle::base_radius)); } - if (influence_area_limit_area.empty()) + if (influence_area_limit_area_.empty()) { - influence_area_limit_area = circle.offset(0); + influence_area_limit_area_ = circle.offset(0); } else { - influence_area_limit_area = influence_area_limit_area.intersection(circle.offset(0)); + influence_area_limit_area_ = influence_area_limit_area_.intersection(circle.offset(0)); } } } } void setToBuildplateForAllParents(bool new_value) { - to_buildplate = new_value; - std::vector grandparents {parents}; + to_buildplate_ = new_value; + std::vector grandparents {parents_}; while (!grandparents.empty()){ std::vector next_parents; for (TreeSupportElement* grandparent:grandparents){ - next_parents.insert(next_parents.end(),grandparent->parents.begin(),grandparent->parents.end()); - grandparent->to_buildplate = new_value; + next_parents.insert(next_parents.end(),grandparent->parents_.begin(),grandparent->parents_.end()); + grandparent->to_buildplate_ = new_value; } grandparents = next_parents; } @@ -453,7 +453,7 @@ struct TreeSupportElement inline bool isResultOnLayerSet() const { - return result_on_layer != Point(-1, -1); + return result_on_layer_ != Point(-1, -1); } }; @@ -467,8 +467,8 @@ struct hash { size_t operator()(const cura::TreeSupportElement& node) const { - size_t hash_node = hash()(node.target_position); - boost::hash_combine(hash_node, size_t(node.target_height)); + size_t hash_node = hash()(node.target_position_); + boost::hash_combine(hash_node, size_t(node.target_height_)); return hash_node; } }; diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 06a6292230..4f973cc430 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -449,9 +449,9 @@ struct TreeSupportSettings [[nodiscard]] inline size_t getEffectiveDTT(const TreeSupportElement& elem) const { return - elem.effective_radius_height < increase_radius_until_dtt ? - (elem.distance_to_top < increase_radius_until_dtt ? elem.distance_to_top : increase_radius_until_dtt) : - elem.effective_radius_height; + elem.effective_radius_height_ < increase_radius_until_dtt ? + (elem.distance_to_top_ < increase_radius_until_dtt ? elem.distance_to_top_ : increase_radius_until_dtt) : + elem.effective_radius_height_; } /*! @@ -480,7 +480,7 @@ struct TreeSupportSettings */ [[nodiscard]] inline coord_t getRadius(const TreeSupportElement& elem) const { - return getRadius(getEffectiveDTT(elem), (elem.isResultOnLayerSet() || !support_rests_on_model) && elem.to_buildplate ? elem.buildplate_radius_increases : 0); + return getRadius(getEffectiveDTT(elem), (elem.isResultOnLayerSet() || !support_rests_on_model) && elem.to_buildplate_ ? elem.buildplate_radius_increases_ : 0); } /*! @@ -490,7 +490,7 @@ struct TreeSupportSettings */ [[nodiscard]] inline coord_t getCollisionRadius(const TreeSupportElement& elem) const { - return getRadius(elem.effective_radius_height, elem.buildplate_radius_increases); + return getRadius(elem.effective_radius_height_, elem.buildplate_radius_increases_); } /*! diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index 1e59c669d8..cd2ed3e907 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -19,48 +19,48 @@ namespace cura { SkirtBrim::SkirtBrim(SliceDataStorage& storage) - : storage(storage) - , adhesion_type(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type")) - , has_ooze_shield(storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) - , has_draft_shield(storage.draft_protection_shield.size() > 0) - , extruders(Application::getInstance().current_slice_->scene.extruders) - , extruder_count(extruders.size()) - , extruder_is_used(storage.getExtrudersUsed()) + : storage_(storage) + , adhesion_type_(Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("adhesion_type")) + , has_ooze_shield_(storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) + , has_draft_shield_(storage.draft_protection_shield.size() > 0) + , extruders_(Application::getInstance().current_slice_->scene.extruders) + , extruder_count_(extruders_.size()) + , extruder_is_used_(storage.getExtrudersUsed()) { - first_used_extruder_nr = 0; - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + first_used_extruder_nr_ = 0; + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (extruder_is_used[extruder_nr]) + if (extruder_is_used_[extruder_nr]) { - first_used_extruder_nr = extruder_nr; + first_used_extruder_nr_ = extruder_nr; break; } } - skirt_brim_extruder_nr = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("skirt_brim_extruder_nr"); - if (skirt_brim_extruder_nr == -1 && adhesion_type == EPlatformAdhesion::SKIRT) + skirt_brim_extruder_nr_ = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("skirt_brim_extruder_nr"); + if (skirt_brim_extruder_nr_ == -1 && adhesion_type_ == EPlatformAdhesion::SKIRT) { // Skirt is always printed with all extruders in order to satisfy minimum legnth constraint // NOTE: the line count will only be satisfied for the first extruder used. - skirt_brim_extruder_nr = first_used_extruder_nr; + skirt_brim_extruder_nr_ = first_used_extruder_nr_; } - line_widths.resize(extruder_count); - skirt_brim_minimal_length.resize(extruder_count); - external_polys_only.resize(extruder_count); - line_count.resize(extruder_count); - gap.resize(extruder_count); - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + line_widths_.resize(extruder_count_); + skirt_brim_minimal_length_.resize(extruder_count_); + external_polys_only_.resize(extruder_count_); + line_count_.resize(extruder_count_); + gap_.resize(extruder_count_); + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (! extruder_is_used[extruder_nr]) + if (! extruder_is_used_[extruder_nr]) { continue; } - const ExtruderTrain& extruder = extruders[extruder_nr]; + const ExtruderTrain& extruder = extruders_[extruder_nr]; - line_widths[extruder_nr] = extruder.settings_.get("skirt_brim_line_width") * extruder.settings_.get("initial_layer_line_width_factor"); - skirt_brim_minimal_length[extruder_nr] = extruder.settings_.get("skirt_brim_minimal_length"); - external_polys_only[extruder_nr] = adhesion_type == EPlatformAdhesion::SKIRT || extruder.settings_.get("brim_outside_only"); - line_count[extruder_nr] = extruder.settings_.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); - gap[extruder_nr] = extruder.settings_.get(adhesion_type == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); + line_widths_[extruder_nr] = extruder.settings_.get("skirt_brim_line_width") * extruder.settings_.get("initial_layer_line_width_factor"); + skirt_brim_minimal_length_[extruder_nr] = extruder.settings_.get("skirt_brim_minimal_length"); + external_polys_only_[extruder_nr] = adhesion_type_ == EPlatformAdhesion::SKIRT || extruder.settings_.get("brim_outside_only"); + line_count_[extruder_nr] = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_line_count" : "skirt_line_count"); + gap_[extruder_nr] = extruder.settings_.get(adhesion_type_ == EPlatformAdhesion::BRIM ? "brim_gap" : "skirt_gap"); } } @@ -68,15 +68,15 @@ std::vector SkirtBrim::generateBrimOffsetPlan(std::vector all_brim_offsets; - if (skirt_brim_extruder_nr >= 0) + if (skirt_brim_extruder_nr_ >= 0) { - starting_outlines[skirt_brim_extruder_nr] = getFirstLayerOutline(); + starting_outlines[skirt_brim_extruder_nr_] = getFirstLayerOutline(); } else { - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (! extruder_is_used[extruder_nr]) + if (! extruder_is_used_[extruder_nr]) { continue; } @@ -84,24 +84,24 @@ std::vector SkirtBrim::generateBrimOffsetPlan(std::vector= 0 && extruder_nr != skirt_brim_extruder_nr) || starting_outlines[extruder_nr].empty()) + if (! extruder_is_used_[extruder_nr] || (skirt_brim_extruder_nr_ >= 0 && extruder_nr != skirt_brim_extruder_nr_) || starting_outlines[extruder_nr].empty()) { continue; // only include offsets for brim extruder } - for (int line_idx = 0; line_idx < line_count[extruder_nr]; line_idx++) + for (int line_idx = 0; line_idx < line_count_[extruder_nr]; line_idx++) { - const bool is_last = line_idx == line_count[extruder_nr] - 1; - coord_t offset = gap[extruder_nr] + line_widths[extruder_nr] / 2 + line_widths[extruder_nr] * line_idx; + const bool is_last = line_idx == line_count_[extruder_nr] - 1; + coord_t offset = gap_[extruder_nr] + line_widths_[extruder_nr] / 2 + line_widths_[extruder_nr] * line_idx; if (line_idx == 0) { - all_brim_offsets.emplace_back(&starting_outlines[extruder_nr], external_polys_only[extruder_nr], offset, offset, line_idx, extruder_nr, is_last); + all_brim_offsets.emplace_back(&starting_outlines[extruder_nr], external_polys_only_[extruder_nr], offset, offset, line_idx, extruder_nr, is_last); } else { - all_brim_offsets.emplace_back(line_idx - 1, external_polys_only[extruder_nr], line_widths[extruder_nr], offset, line_idx, extruder_nr, is_last); + all_brim_offsets.emplace_back(line_idx - 1, external_polys_only_[extruder_nr], line_widths_[extruder_nr], offset, line_idx, extruder_nr, is_last); } } } @@ -112,25 +112,25 @@ std::vector SkirtBrim::generateBrimOffsetPlan(std::vector starting_outlines(extruder_count); + std::vector starting_outlines(extruder_count_); std::vector all_brim_offsets = generateBrimOffsetPlan(starting_outlines); constexpr LayerIndex layer_nr = 0; constexpr bool include_support = true; - const bool include_prime_tower = adhesion_type == EPlatformAdhesion::SKIRT; - const bool has_prime_tower = storage.primeTower.enabled; - Polygons covered_area = storage.getLayerOutlines(layer_nr, include_support, include_prime_tower, /*external_polys_only*/ false); + const bool include_prime_tower = adhesion_type_ == EPlatformAdhesion::SKIRT; + const bool has_prime_tower = storage_.primeTower.enabled; + Polygons covered_area = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, /*external_polys_only*/ false); - std::vector allowed_areas_per_extruder(extruder_count); - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + std::vector allowed_areas_per_extruder(extruder_count_); + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (! extruder_is_used[extruder_nr]) + if (! extruder_is_used_[extruder_nr]) { continue; } - Polygons machine_area = storage.getMachineBorder(extruder_nr); + Polygons machine_area = storage_.getMachineBorder(extruder_nr); allowed_areas_per_extruder[extruder_nr] = machine_area.difference(covered_area); - if (external_polys_only[extruder_nr]) + if (external_polys_only_[extruder_nr]) { // Expand covered area on inside of holes when external_only is enabled for any extruder, // so that the brim lines don't overlap with the holes by half the line width @@ -139,14 +139,14 @@ void SkirtBrim::generate() if (has_prime_tower) { - allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(storage.primeTower.getGroundPoly()); + allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(storage_.primeTower.getGroundPoly()); } } // Apply 'approximate convex hull' if the adhesion is skirt _after_ any skirt but also prime-tower-brim adhesion. // Otherwise, the now expanded convex hull covered areas will mess with that brim. Fortunately this does not mess // with the other area calculation above, since they are either itself a simple/convex shape or relevant for brim. - if (adhesion_type == EPlatformAdhesion::SKIRT) + if (adhesion_type_ == EPlatformAdhesion::SKIRT) { covered_area = covered_area.approxConvexHull(); } @@ -158,7 +158,7 @@ void SkirtBrim::generate() { // only allow secondary skirt/brim to appear on the very outside covered_area = covered_area.getOutsidePolygons(); - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(covered_area); } @@ -171,9 +171,9 @@ void SkirtBrim::generate() const Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const coord_t maximum_resolution = global_settings.get("meshfix_maximum_resolution"); const coord_t maximum_deviation = global_settings.get("meshfix_maximum_deviation"); - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - for (SkirtBrimLine& line : storage.skirt_brim[extruder_nr]) + for (SkirtBrimLine& line : storage_.skirt_brim[extruder_nr]) { constexpr coord_t max_area_dev = 0u; // No area deviation applied line.open_polylines = Simplify(maximum_resolution, maximum_deviation, max_area_dev).polyline(line.open_polylines); @@ -184,38 +184,38 @@ void SkirtBrim::generate() std::vector SkirtBrim::generatePrimaryBrim(std::vector& all_brim_offsets, Polygons& covered_area, std::vector& allowed_areas_per_extruder) { - std::vector total_length(extruder_count, 0U); + std::vector total_length(extruder_count_, 0U); for (size_t offset_idx = 0; offset_idx < all_brim_offsets.size(); offset_idx++) { Offset& offset = all_brim_offsets[offset_idx]; - if (storage.skirt_brim[offset.extruder_nr].size() <= offset.inset_idx) + if (storage_.skirt_brim[offset.extruder_nr_].size() <= offset.inset_idx_) { - storage.skirt_brim[offset.extruder_nr].resize(offset.inset_idx + 1); + storage_.skirt_brim[offset.extruder_nr_].resize(offset.inset_idx_ + 1); } - SkirtBrimLine& output_location = storage.skirt_brim[offset.extruder_nr][offset.inset_idx]; + SkirtBrimLine& output_location = storage_.skirt_brim[offset.extruder_nr_][offset.inset_idx_]; const coord_t added_length = generateOffset(offset, covered_area, allowed_areas_per_extruder, output_location); if (added_length == 0) { // no more place for more brim. Trying to satisfy minimum length constraint with generateSecondarySkirtBrim continue; } - total_length[offset.extruder_nr] += added_length; + total_length[offset.extruder_nr_] += added_length; - if (offset.is_last && total_length[offset.extruder_nr] < skirt_brim_minimal_length[offset.extruder_nr] + if (offset.is_last_ && total_length[offset.extruder_nr_] < skirt_brim_minimal_length_[offset.extruder_nr_] && // This was the last offset of this extruder, but the brim lines don't meet minimal length yet - total_length[offset.extruder_nr] > 0u // No lines got added; we have no extrusion lines to build on + total_length[offset.extruder_nr_] > 0u // No lines got added; we have no extrusion lines to build on ) { - offset.is_last = false; + offset.is_last_ = false; constexpr bool is_last = true; all_brim_offsets.emplace_back( - offset.inset_idx, - external_polys_only[offset.extruder_nr], - line_widths[offset.extruder_nr], - offset.total_offset + line_widths[offset.extruder_nr], - offset.inset_idx + 1, - offset.extruder_nr, + offset.inset_idx_, + external_polys_only_[offset.extruder_nr_], + line_widths_[offset.extruder_nr_], + offset.total_offset_ + line_widths_[offset.extruder_nr_], + offset.inset_idx_ + 1, + offset.extruder_nr_, is_last); std::sort(all_brim_offsets.begin() + offset_idx + 1, all_brim_offsets.end(), OffsetSorter); // reorder remaining offsets } @@ -238,7 +238,7 @@ Polygons SkirtBrim::getInternalHoleExclusionArea(const Polygons& outline, const { Polygon hole_poly = part[hole_idx]; hole_poly.reverse(); - Polygons disallowed_region = hole_poly.offset(10u).difference(hole_poly.offset(-line_widths[extruder_nr] / 2 - hole_brim_distance)); + Polygons disallowed_region = hole_poly.offset(10u).difference(hole_poly.offset(-line_widths_[extruder_nr] / 2 - hole_brim_distance)); ret = ret.unionPolygons(disallowed_region); } } @@ -251,10 +251,10 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, Polygons brim; Polygons newly_covered; { - if (std::holds_alternative(offset.reference_outline_or_index)) + if (std::holds_alternative(offset.reference_outline_or_index_)) { - Polygons* reference_outline = std::get(offset.reference_outline_or_index); - if (offset.external_only) + Polygons* reference_outline = std::get(offset.reference_outline_or_index_); + if (offset.external_only_) { // prevent unioning of external polys enclosed by other parts, e.g. a small part inside a hollow cylinder. for (Polygons& polys : reference_outline->sortByNesting()) { // offset external polygons of islands contained within another part in each batch @@ -265,8 +265,8 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, poly.reverse(); } } - brim.add(polys.offset(offset.offset_value, ClipperLib::jtRound)); - newly_covered.add(polys.offset(offset.offset_value + line_widths[offset.extruder_nr] / 2, ClipperLib::jtRound)); + brim.add(polys.offset(offset.offset_value_, ClipperLib::jtRound)); + newly_covered.add(polys.offset(offset.offset_value_ + line_widths_[offset.extruder_nr_] / 2, ClipperLib::jtRound)); for (PolygonRef poly : polys) { poly.reverse(); @@ -276,20 +276,20 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, } else { - brim = reference_outline->offset(offset.offset_value, ClipperLib::jtRound); - newly_covered = reference_outline->offset(offset.offset_value + line_widths[offset.extruder_nr] / 2, ClipperLib::jtRound); + brim = reference_outline->offset(offset.offset_value_, ClipperLib::jtRound); + newly_covered = reference_outline->offset(offset.offset_value_ + line_widths_[offset.extruder_nr_] / 2, ClipperLib::jtRound); } } else { - const int reference_idx = std::get(offset.reference_outline_or_index); - auto offset_dist = line_widths[offset.extruder_nr]; + const int reference_idx = std::get(offset.reference_outline_or_index_); + auto offset_dist = line_widths_[offset.extruder_nr_]; Polygons local_brim; - auto closed_polygons_brim = storage.skirt_brim[offset.extruder_nr][reference_idx].closed_polygons.offsetPolyLine(offset_dist, ClipperLib::jtRound, true); + auto closed_polygons_brim = storage_.skirt_brim[offset.extruder_nr_][reference_idx].closed_polygons.offsetPolyLine(offset_dist, ClipperLib::jtRound, true); local_brim.add(closed_polygons_brim); - auto open_polylines_brim = storage.skirt_brim[offset.extruder_nr][reference_idx].open_polylines.offsetPolyLine(offset_dist, ClipperLib::jtRound); + auto open_polylines_brim = storage_.skirt_brim[offset.extruder_nr_][reference_idx].open_polylines.offsetPolyLine(offset_dist, ClipperLib::jtRound); local_brim.add(open_polylines_brim); local_brim.unionPolygons(); @@ -300,12 +300,12 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, } { // limit brim lines to allowed areas, stitch them and store them in the result - brim = Simplify(Application::getInstance().current_slice_->scene.extruders[offset.extruder_nr].settings_).polygon(brim); + brim = Simplify(Application::getInstance().current_slice_->scene.extruders[offset.extruder_nr_].settings_).polygon(brim); brim.toPolylines(); - Polygons brim_lines = allowed_areas_per_extruder[offset.extruder_nr].intersectionPolyLines(brim, false); + Polygons brim_lines = allowed_areas_per_extruder[offset.extruder_nr_].intersectionPolyLines(brim, false); length_added = brim_lines.polyLineLength(); - const coord_t max_stitch_distance = line_widths[offset.extruder_nr]; + const coord_t max_stitch_distance = line_widths_[offset.extruder_nr_]; PolylineStitcher::stitch(brim_lines, result.open_polylines, result.closed_polygons, max_stitch_distance); // clean up too small lines @@ -324,9 +324,9 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, } { // update allowed_areas_per_extruder - for (int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + for (int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - if (! extruder_is_used[extruder_nr]) + if (! extruder_is_used_[extruder_nr]) { continue; } @@ -341,18 +341,18 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) { Polygons first_layer_outline; Settings& global_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - int reference_extruder_nr = skirt_brim_extruder_nr; + int reference_extruder_nr = skirt_brim_extruder_nr_; assert(! (reference_extruder_nr == -1 && extruder_nr == -1) && "We should only request the outlines of all layers when the brim is being generated for only one material"); if (reference_extruder_nr == -1) { reference_extruder_nr = extruder_nr; } - const int primary_line_count = line_count[reference_extruder_nr]; + const int primary_line_count = line_count_[reference_extruder_nr]; const bool external_only - = adhesion_type == EPlatformAdhesion::SKIRT || external_polys_only[reference_extruder_nr]; // Whether to include holes or not. Skirt doesn't have any holes. - const bool has_prime_tower = storage.primeTower.enabled; + = adhesion_type_ == EPlatformAdhesion::SKIRT || external_polys_only_[reference_extruder_nr]; // Whether to include holes or not. Skirt doesn't have any holes. + const bool has_prime_tower = storage_.primeTower.enabled; const LayerIndex layer_nr = 0; - if (adhesion_type == EPlatformAdhesion::SKIRT) + if (adhesion_type_ == EPlatformAdhesion::SKIRT) { constexpr bool include_support = true; const bool include_prime_tower = ! has_prime_tower; // include manually otherwise @@ -366,34 +366,34 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) skirt_height = std::max(skirt_height, extruder.settings_.get("skirt_height")); } } - skirt_height = std::min(skirt_height, static_cast(storage.print_layer_count)); + skirt_height = std::min(skirt_height, static_cast(storage_.print_layer_count)); for (int i_layer = layer_nr; i_layer < skirt_height; ++i_layer) { for (const auto& extruder : Application::getInstance().current_slice_->scene.extruders) { first_layer_outline - = first_layer_outline.unionPolygons(storage.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr_)); + = first_layer_outline.unionPolygons(storage_.getLayerOutlines(i_layer, include_support, include_prime_tower, external_only, extruder.extruder_nr_)); } } if (has_prime_tower) { - first_layer_outline = first_layer_outline.unionPolygons(storage.primeTower.getGroundPoly()); + first_layer_outline = first_layer_outline.unionPolygons(storage_.primeTower.getGroundPoly()); } Polygons shields; - if (has_ooze_shield) + if (has_ooze_shield_) { - shields = storage.oozeShield[0]; + shields = storage_.oozeShield[0]; } - if (has_draft_shield) + if (has_draft_shield_) { - shields = shields.unionPolygons(storage.draft_protection_shield); + shields = shields.unionPolygons(storage_.draft_protection_shield); } first_layer_outline = first_layer_outline.unionPolygons(shields.offset( - line_widths[reference_extruder_nr] / 2 // because the shield is printed *on* the stored polygons; not inside hteir area - - gap[reference_extruder_nr])); // so that when we apply the gap we will end up right next to the shield + line_widths_[reference_extruder_nr] / 2 // because the shield is printed *on* the stored polygons; not inside hteir area + - gap_[reference_extruder_nr])); // so that when we apply the gap we will end up right next to the shield // NOTE: offsetting by -gap here and by +gap in the main brim algorithm effectively performs a morphological close, // so in some cases with a large skirt gap and small models and small shield distance // the skirt lines can cross the shield lines. @@ -405,7 +405,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) constexpr bool include_support = false; // Include manually below. constexpr bool include_prime_tower = false; // Not included. constexpr bool external_outlines_only = false; // Remove manually below. - first_layer_outline = storage.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_outlines_only, extruder_nr); + first_layer_outline = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, external_outlines_only, extruder_nr); first_layer_outline = first_layer_outline.unionPolygons(); // To guard against overlapping outlines, which would produce holes according to the even-odd rule. Polygons first_layer_empty_holes; if (external_only) @@ -413,10 +413,10 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) first_layer_empty_holes = first_layer_outline.getEmptyHoles(); first_layer_outline = first_layer_outline.removeEmptyHoles(); } - if (storage.support.generated && primary_line_count > 0 && ! storage.support.supportLayers.empty() + if (storage_.support.generated && primary_line_count > 0 && ! storage_.support.supportLayers.empty() && (extruder_nr == -1 || extruder_nr == global_settings.get("support_infill_extruder_nr"))) { // remove model-brim from support - SupportLayer& support_layer = storage.support.supportLayers[0]; + SupportLayer& support_layer = storage_.support.supportLayers[0]; const ExtruderTrain& support_infill_extruder = global_settings.get("support_infill_extruder_nr"); if (support_infill_extruder.settings_.get("brim_replaces_support")) { @@ -427,7 +427,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) // || || ||[]|| > expand to fit an extra brim line // |+-+| |+--+| // +---+ +----+ - const coord_t primary_extruder_skirt_brim_line_width = line_widths[reference_extruder_nr]; + const coord_t primary_extruder_skirt_brim_line_width = line_widths_[reference_extruder_nr]; Polygons model_brim_covered_area = first_layer_outline.offset( primary_extruder_skirt_brim_line_width * (primary_line_count + primary_line_count % 2), ClipperLib::jtRound); // always leave a gap of an even number of brim lines, so that it fits if it's generating brim from both sides @@ -463,17 +463,17 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) void SkirtBrim::generateShieldBrim(Polygons& brim_covered_area, std::vector& allowed_areas_per_extruder) { - int extruder_nr = skirt_brim_extruder_nr; + int extruder_nr = skirt_brim_extruder_nr_; if (extruder_nr < 0) { // the shields are always printed with all extruders, so it doesn't really matter with which extruder we print the brim on the first layer - extruder_nr = first_used_extruder_nr; + extruder_nr = first_used_extruder_nr_; } // generate brim for ooze shield and draft shield - if (adhesion_type == EPlatformAdhesion::BRIM && (has_ooze_shield || has_draft_shield)) + if (adhesion_type_ == EPlatformAdhesion::BRIM && (has_ooze_shield_ || has_draft_shield_)) { - const coord_t primary_extruder_skirt_brim_line_width = line_widths[extruder_nr]; - int primary_line_count = line_count[extruder_nr]; + const coord_t primary_extruder_skirt_brim_line_width = line_widths_[extruder_nr]; + int primary_line_count = line_count_[extruder_nr]; // generate areas where to make extra brim for the shields // avoid gap in the middle @@ -487,17 +487,17 @@ void SkirtBrim::generateShieldBrim(Polygons& brim_covered_area, std::vector 0) { shield_brim = shield_brim.offset(-primary_extruder_skirt_brim_line_width); - storage.skirt_brim[extruder_nr].back().closed_polygons.add( + storage_.skirt_brim[extruder_nr].back().closed_polygons.add( shield_brim); // throw all polygons for the shileds onto one heap; because the brim lines are generated from both sides the order will not be important } } - if (adhesion_type == EPlatformAdhesion::SKIRT) + if (adhesion_type_ == EPlatformAdhesion::SKIRT) { - if (has_ooze_shield) + if (has_ooze_shield_) { - const Polygons covered_area = storage.oozeShield[0].offset(line_widths[extruder_nr] / 2); + const Polygons covered_area = storage_.oozeShield[0].offset(line_widths_[extruder_nr] / 2); brim_covered_area = brim_covered_area.unionPolygons(covered_area); allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(covered_area); } - if (has_draft_shield) + if (has_draft_shield_) { - const Polygons covered_area = storage.draft_protection_shield.offset(line_widths[extruder_nr] / 2); + const Polygons covered_area = storage_.draft_protection_shield.offset(line_widths_[extruder_nr] / 2); brim_covered_area = brim_covered_area.unionPolygons(covered_area); allowed_areas_per_extruder[extruder_nr] = allowed_areas_per_extruder[extruder_nr].difference(covered_area); } @@ -536,29 +536,29 @@ void SkirtBrim::generateSecondarySkirtBrim(Polygons& covered_area, std::vector

(storage.skirt_brim[extruder_nr].size() - 1); - offset_from_reference = line_widths[extruder_nr]; + ref_polys_or_idx = static_cast(storage_.skirt_brim[extruder_nr].size() - 1); + offset_from_reference = line_widths_[extruder_nr]; } constexpr bool external_only = false; // The reference outline may contain both outlines and hole polygons. - Offset extra_offset(ref_polys_or_idx, external_only, offset_from_reference, bogus_total_offset, storage.skirt_brim[extruder_nr].size(), extruder_nr, is_last); + Offset extra_offset(ref_polys_or_idx, external_only, offset_from_reference, bogus_total_offset, storage_.skirt_brim[extruder_nr].size(), extruder_nr, is_last); - storage.skirt_brim[extruder_nr].emplace_back(); - SkirtBrimLine& output_location = storage.skirt_brim[extruder_nr].back(); + storage_.skirt_brim[extruder_nr].emplace_back(); + SkirtBrimLine& output_location = storage_.skirt_brim[extruder_nr].back(); coord_t added_length = generateOffset(extra_offset, covered_area, allowed_areas_per_extruder, output_location); if (! added_length) @@ -567,7 +567,7 @@ void SkirtBrim::generateSecondarySkirtBrim(Polygons& covered_area, std::vector

("skirt_brim_line_width") * support_infill_extruder.settings_.get("initial_layer_line_width_factor"); size_t line_count = support_infill_extruder.settings_.get("support_brim_line_count"); const coord_t minimal_length = support_infill_extruder.settings_.get("skirt_brim_minimal_length"); - if (! storage.support.generated || line_count <= 0 || storage.support.supportLayers.empty()) + if (! storage_.support.generated || line_count <= 0 || storage_.support.supportLayers.empty()) { return; } @@ -592,18 +592,18 @@ void SkirtBrim::generateSupportBrim() const coord_t brim_width = brim_line_width * line_count; coord_t skirt_brim_length = 0; - if (storage.skirt_brim[support_infill_extruder.extruder_nr_].empty()) + if (storage_.skirt_brim[support_infill_extruder.extruder_nr_].empty()) { - storage.skirt_brim[support_infill_extruder.extruder_nr_].emplace_back(); + storage_.skirt_brim[support_infill_extruder.extruder_nr_].emplace_back(); } - for (const SkirtBrimLine& brim_line : storage.skirt_brim[support_infill_extruder.extruder_nr_]) + for (const SkirtBrimLine& brim_line : storage_.skirt_brim[support_infill_extruder.extruder_nr_]) { skirt_brim_length += brim_line.closed_polygons.polygonLength(); skirt_brim_length += brim_line.open_polylines.polyLineLength(); } - SupportLayer& support_layer = storage.support.supportLayers[0]; + SupportLayer& support_layer = storage_.support.supportLayers[0]; Polygons support_outline; for (SupportInfillPart& part : support_layer.support_infill_parts) @@ -630,9 +630,9 @@ void SkirtBrim::generateSupportBrim() } } - storage.support_brim.add(brim_line); + storage_.support_brim.add(brim_line); // In case of adhesion::NONE length of support brim is only the length of the brims formed for the support - const coord_t length = (adhesion_type == EPlatformAdhesion::NONE) ? skirt_brim_length : skirt_brim_length + storage.support_brim.polygonLength(); + const coord_t length = (adhesion_type_ == EPlatformAdhesion::NONE) ? skirt_brim_length : skirt_brim_length + storage_.support_brim.polygonLength(); if (skirt_brim_number + 1 >= line_count && length > 0 && length < minimal_length) // Make brim or skirt have more lines when total length is too small. { line_count++; diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index bf876ec582..958a08f9fb 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -203,7 +203,7 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) { for (auto elem : layer) { - delete elem->area; + delete elem->area_; delete elem; } } @@ -287,15 +287,15 @@ void TreeSupport::mergeHelper( break; // Do not try to merge elements that already should have been merged. Done for potential performance improvement. } - const bool merging_gracious_and_non_gracious = reduced_check.first.to_model_gracious != influence.first.to_model_gracious; + const bool merging_gracious_and_non_gracious = reduced_check.first.to_model_gracious_ != influence.first.to_model_gracious_; // ^^^ We do not want to merge a gracious with a non gracious area as bad placement could negatively impact the dependability of the whole subtree. - const bool merging_to_bp = reduced_check.first.to_buildplate && influence.first.to_buildplate; - const bool merging_min_and_regular_xy = reduced_check.first.use_min_xy_dist != influence.first.use_min_xy_dist; + const bool merging_to_bp = reduced_check.first.to_buildplate_ && influence.first.to_buildplate_; + const bool merging_min_and_regular_xy = reduced_check.first.use_min_xy_dist_ != influence.first.use_min_xy_dist_; // ^^^ Could cause some issues with the increase of one area, as it is assumed that if the smaller is increased by the delta to the larger it is engulfed by it // already. // But because a different collision may be removed from the in drawArea generated circles, this assumption could be wrong. - const bool merging_different_range_limits = reduced_check.first.influence_area_limit_active && influence.first.influence_area_limit_active - && influence.first.influence_area_limit_range != reduced_check.first.influence_area_limit_range; + const bool merging_different_range_limits = reduced_check.first.influence_area_limit_active_ && influence.first.influence_area_limit_active_ + && influence.first.influence_area_limit_range_ != reduced_check.first.influence_area_limit_range_; coord_t increased_to_model_radius = 0; size_t larger_to_model_dtt = 0; @@ -303,30 +303,30 @@ void TreeSupport::mergeHelper( { const coord_t infl_radius = config.getRadius(influence.first); // Get the real radius increase as the user does not care for the collision model. const coord_t redu_radius = config.getRadius(reduced_check.first); - if (reduced_check.first.to_buildplate != influence.first.to_buildplate) + if (reduced_check.first.to_buildplate_ != influence.first.to_buildplate_) { - if (reduced_check.first.to_buildplate) + if (reduced_check.first.to_buildplate_) { if (infl_radius < redu_radius) { - increased_to_model_radius = influence.first.increased_to_model_radius + redu_radius - infl_radius; + increased_to_model_radius = influence.first.increased_to_model_radius_ + redu_radius - infl_radius; } } else { if (infl_radius > redu_radius) { - increased_to_model_radius = reduced_check.first.increased_to_model_radius + infl_radius - redu_radius; + increased_to_model_radius = reduced_check.first.increased_to_model_radius_ + infl_radius - redu_radius; } } } - larger_to_model_dtt = std::max(influence.first.distance_to_top, reduced_check.first.distance_to_top); + larger_to_model_dtt = std::max(influence.first.distance_to_top_, reduced_check.first.distance_to_top_); } // If a merge could place a stable branch on unstable ground, would be increasing the radius further than allowed to when merging to model and to_bp trees or // would merge to model before it is known they will even been drawn the merge is skipped if (merging_min_and_regular_xy || merging_gracious_and_non_gracious || increased_to_model_radius > config.max_to_model_radius_increase - || (! merging_to_bp && larger_to_model_dtt < config.min_dtt_to_model && ! reduced_check.first.supports_roof && ! influence.first.supports_roof) + || (! merging_to_bp && larger_to_model_dtt < config.min_dtt_to_model && ! reduced_check.first.supports_roof_ && ! influence.first.supports_roof_) || merging_different_range_limits) { continue; @@ -358,7 +358,7 @@ void TreeSupport::mergeHelper( const coord_t smaller_collision_radius = config.getCollisionRadius(smaller_rad.first); // the area of the bigger radius is used to ensure correct placement regarding the relevant avoidance, so if that would change an invalid area may be created - if (! bigger_rad.first.can_use_safe_radius && smaller_rad.first.can_use_safe_radius) + if (! bigger_rad.first.can_use_safe_radius_ && smaller_rad.first.can_use_safe_radius_) { continue; } @@ -366,7 +366,7 @@ void TreeSupport::mergeHelper( // The bigger radius is used to verify that the area is still valid after the increase with the delta. // If there were a point where the big influence area could be valid with can_use_safe_radius the element would already be can_use_safe_radius. // The smaller radius, which gets increased by delta may reach into the area where use_min_xy_dist is no longer required. - bool use_min_radius = bigger_rad.first.use_min_xy_dist && smaller_rad.first.use_min_xy_dist; + bool use_min_radius = bigger_rad.first.use_min_xy_dist_ && smaller_rad.first.use_min_xy_dist_; // The idea is that the influence area with the smaller collision radius is increased by the radius difference. // If this area has any intersections with the influence area of the larger collision radius, @@ -399,7 +399,7 @@ void TreeSupport::mergeHelper( // Calculate which point is closest to the point of the last merge (or tip center if no merge above it has happened) // Used at the end to estimate where to best place the branch on the bottom most layer // Could be replaced with a random point inside the new area - Point new_pos = reduced_check.first.next_position; + Point new_pos = reduced_check.first.next_position_; if (! intersect.inside(new_pos, true)) { PolygonUtils::moveInside(intersect, new_pos); @@ -407,7 +407,7 @@ void TreeSupport::mergeHelper( if (increased_to_model_radius == 0) { - increased_to_model_radius = std::max(reduced_check.first.increased_to_model_radius, influence.first.increased_to_model_radius); + increased_to_model_radius = std::max(reduced_check.first.increased_to_model_radius_, influence.first.increased_to_model_radius_); } const TreeSupportElement key( @@ -644,124 +644,125 @@ std::optional TreeSupport::increaseSingleArea( { TreeSupportElement current_elem(parent); // Also increases DTT by one. Polygons check_layer_data; - if (settings.increase_radius) + if (settings.increase_radius_) { - current_elem.effective_radius_height += 1; + current_elem.effective_radius_height_ += 1; } coord_t radius = config.getCollisionRadius(current_elem); - if (settings.move) + if (settings.move_) { increased = relevant_offset; if (overspeed > 0) { - const coord_t safe_movement_distance = (current_elem.use_min_xy_dist ? config.xy_min_distance : config.xy_distance) + const coord_t safe_movement_distance = (current_elem.use_min_xy_dist_ ? config.xy_min_distance : config.xy_distance) + (std::min(config.z_distance_top_layers, config.z_distance_bottom_layers) > 0 ? config.min_feature_size : 0); // The difference to ensure that the result not only conforms to wall_restriction, but collision/avoidance is done later. // The higher last_safe_step_movement_distance comes exactly from the fact that the collision will be subtracted later. increased = TreeSupportUtils::safeOffsetInc( increased, overspeed, - volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist), + volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist_), safe_movement_distance, safe_movement_distance + radius, 1, config.support_line_distance / 2, nullptr); } - if (settings.no_error && settings.move) + if (settings.no_error_ && settings.move_) { increased = config.simplifier.polygon(increased); // as ClipperLib::jtRound has to be used for offsets this simplify is VERY important for performance. } } else // if no movement is done the areas keep parent area as no move == offset(0) { - increased = *parent->area; + increased = *parent->area_; } - if ((mergelayer || current_elem.to_buildplate) && config.support_rest_preference == RestPreference::BUILDPLATE) + if ((mergelayer || current_elem.to_buildplate_) && config.support_rest_preference == RestPreference::BUILDPLATE) { - to_bp_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type, false, settings.use_min_distance))); - if (! current_elem.to_buildplate && to_bp_data.area() > 1) // mostly happening in the tip, but with merges one should check every time, just to be sure. + to_bp_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type_, false, settings.use_min_distance_))); + if (! current_elem.to_buildplate_ && to_bp_data.area() > 1) // mostly happening in the tip, but with merges one should check every time, just to be sure. { - current_elem.to_buildplate = true; // sometimes nodes that can reach the buildplate are marked as cant reach, tainting subtrees. This corrects it. - spdlog::debug("Corrected taint leading to a wrong to model value on layer {} targeting {} with radius {}", layer_idx - 1, current_elem.target_height, radius); + current_elem.to_buildplate_ = true; // sometimes nodes that can reach the buildplate are marked as cant reach, tainting subtrees. This corrects it. + spdlog::debug("Corrected taint leading to a wrong to model value on layer {} targeting {} with radius {}", layer_idx - 1, current_elem.target_height_, radius); } } if (config.support_rests_on_model) { - if (mergelayer || current_elem.to_model_gracious) + if (mergelayer || current_elem.to_model_gracious_) { - to_model_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type, true, settings.use_min_distance))); + to_model_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type_, true, settings.use_min_distance_))); } - if (! current_elem.to_model_gracious) + if (! current_elem.to_model_gracious_) { if (mergelayer && to_model_data.area() >= 1) { - current_elem.to_model_gracious = true; - spdlog::debug("Corrected taint leading to a wrong non gracious value on layer {} targeting {} with radius {}", layer_idx - 1, current_elem.target_height, radius); + current_elem.to_model_gracious_ = true; + spdlog::debug("Corrected taint leading to a wrong non gracious value on layer {} targeting {} with radius {}", layer_idx - 1, current_elem.target_height_, radius); } else { to_model_data - = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, AvoidanceType::COLLISION, true, settings.use_min_distance))); + = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, AvoidanceType::COLLISION, true, settings.use_min_distance_))); } } } - check_layer_data = current_elem.to_buildplate ? to_bp_data : to_model_data; + check_layer_data = current_elem.to_buildplate_ ? to_bp_data : to_model_data; - if (settings.increase_radius && check_layer_data.area() > 1) + if (settings.increase_radius_ && check_layer_data.area() > 1) { std::function validWithRadius = [&](coord_t next_radius) { - if (volumes_.ceilRadius(next_radius, settings.use_min_distance) <= volumes_.ceilRadius(radius, settings.use_min_distance)) + if (volumes_.ceilRadius(next_radius, settings.use_min_distance_) <= volumes_.ceilRadius(radius, settings.use_min_distance_)) { return true; } Polygons to_bp_data_2; - if (current_elem.to_buildplate) + if (current_elem.to_buildplate_) { // Regular union as output will not be used later => this area should always be a subset of the safeUnion one. - to_bp_data_2 = increased.difference(volumes_.getAvoidance(next_radius, layer_idx - 1, settings.type, false, settings.use_min_distance)).unionPolygons(); + to_bp_data_2 = increased.difference(volumes_.getAvoidance(next_radius, layer_idx - 1, settings.type_, false, settings.use_min_distance_)).unionPolygons(); } Polygons to_model_data_2; - if (config.support_rests_on_model && ! current_elem.to_buildplate) + if (config.support_rests_on_model && ! current_elem.to_buildplate_) { to_model_data_2 = increased .difference(volumes_.getAvoidance( next_radius, layer_idx - 1, - current_elem.to_model_gracious ? settings.type : AvoidanceType::COLLISION, + current_elem.to_model_gracious_ ? settings.type_ : AvoidanceType::COLLISION, true, - settings.use_min_distance)) + settings.use_min_distance_)) .unionPolygons(); } - Polygons check_layer_data_2 = current_elem.to_buildplate ? to_bp_data_2 : to_model_data_2; + Polygons check_layer_data_2 = current_elem.to_buildplate_ ? to_bp_data_2 : to_model_data_2; return check_layer_data_2.area() > 1; }; - coord_t ceil_radius_before = volumes_.ceilRadius(radius, settings.use_min_distance); + coord_t ceil_radius_before = volumes_.ceilRadius(radius, settings.use_min_distance_); // If the Collision Radius is smaller than the actual radius, check if it can catch up without violating the avoidance. if (config.getCollisionRadius(current_elem) < config.increase_radius_until_radius && config.getCollisionRadius(current_elem) < config.getRadius(current_elem)) { coord_t target_radius = std::min(config.getRadius(current_elem), config.increase_radius_until_radius); - coord_t current_ceil_radius = volumes_.getRadiusNextCeil(radius, settings.use_min_distance); + coord_t current_ceil_radius = volumes_.getRadiusNextCeil(radius, settings.use_min_distance_); - while (current_ceil_radius < target_radius && validWithRadius(volumes_.getRadiusNextCeil(current_ceil_radius + 1, settings.use_min_distance))) + while (current_ceil_radius < target_radius && validWithRadius(volumes_.getRadiusNextCeil(current_ceil_radius + 1, settings.use_min_distance_))) { - current_ceil_radius = volumes_.getRadiusNextCeil(current_ceil_radius + 1, settings.use_min_distance); + current_ceil_radius = volumes_.getRadiusNextCeil(current_ceil_radius + 1, settings.use_min_distance_); } - size_t resulting_eff_dtt = current_elem.effective_radius_height; - while (resulting_eff_dtt + 1 < current_elem.distance_to_top && config.getRadius(resulting_eff_dtt + 1, current_elem.buildplate_radius_increases) <= current_ceil_radius - && config.getRadius(resulting_eff_dtt + 1, current_elem.buildplate_radius_increases) <= config.getRadius(current_elem)) + size_t resulting_eff_dtt = current_elem.effective_radius_height_; + while (resulting_eff_dtt + 1 < current_elem.distance_to_top_ + && config.getRadius(resulting_eff_dtt + 1, current_elem.buildplate_radius_increases_) <= current_ceil_radius + && config.getRadius(resulting_eff_dtt + 1, current_elem.buildplate_radius_increases_) <= config.getRadius(current_elem)) { resulting_eff_dtt++; } - current_elem.effective_radius_height = resulting_eff_dtt; + current_elem.effective_radius_height_ = resulting_eff_dtt; // If catchup is not possible, it is likely that there is a hole below. Assuming the branches are in some kind of bowl, the branches should still stay away from the // wall of the bowl if possible. @@ -770,17 +771,17 @@ std::optional TreeSupport::increaseSingleArea( Polygons new_to_bp_data; Polygons new_to_model_data; - if (current_elem.to_buildplate) + if (current_elem.to_buildplate_) { - new_to_bp_data = to_bp_data.difference(volumes_.getCollision(config.getRadius(current_elem), layer_idx - 1, current_elem.use_min_xy_dist)); + new_to_bp_data = to_bp_data.difference(volumes_.getCollision(config.getRadius(current_elem), layer_idx - 1, current_elem.use_min_xy_dist_)); if (new_to_bp_data.area() > EPSILON) { to_bp_data = new_to_bp_data; } } - if (config.support_rests_on_model && (! current_elem.to_buildplate || mergelayer)) + if (config.support_rests_on_model && (! current_elem.to_buildplate_ || mergelayer)) { - new_to_model_data = to_model_data.difference(volumes_.getCollision(config.getRadius(current_elem), layer_idx - 1, current_elem.use_min_xy_dist)); + new_to_model_data = to_model_data.difference(volumes_.getCollision(config.getRadius(current_elem), layer_idx - 1, current_elem.use_min_xy_dist_)); if (new_to_model_data.area() > EPSILON) { to_model_data = new_to_model_data; @@ -804,42 +805,42 @@ std::optional TreeSupport::increaseSingleArea( // would only be relevant when support_rest_preference is GRACEFUL) Also unioning areas when an avoidance is requested may also have a relevant performance impact, so there // can be an argument made that the current workaround is preferable. const bool increase_bp_foot - = planned_foot_increase > 0 && (current_elem.to_buildplate || (current_elem.to_model_gracious && config.support_rest_preference == RestPreference::GRACEFUL)); + = planned_foot_increase > 0 && (current_elem.to_buildplate_ || (current_elem.to_model_gracious_ && config.support_rest_preference == RestPreference::GRACEFUL)); if (increase_bp_foot && config.getRadius(current_elem) >= config.branch_radius && config.getRadius(current_elem) >= config.increase_radius_until_radius) { - if (validWithRadius(config.getRadius(current_elem.effective_radius_height, current_elem.buildplate_radius_increases + planned_foot_increase))) + if (validWithRadius(config.getRadius(current_elem.effective_radius_height_, current_elem.buildplate_radius_increases_ + planned_foot_increase))) { - current_elem.buildplate_radius_increases += planned_foot_increase; + current_elem.buildplate_radius_increases_ += planned_foot_increase; radius = config.getCollisionRadius(current_elem); } } - if (ceil_radius_before != volumes_.ceilRadius(radius, settings.use_min_distance)) + if (ceil_radius_before != volumes_.ceilRadius(radius, settings.use_min_distance_)) { - if (current_elem.to_buildplate) + if (current_elem.to_buildplate_) { - to_bp_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type, false, settings.use_min_distance))); + to_bp_data = TreeSupportUtils::safeUnion(increased.difference(volumes_.getAvoidance(radius, layer_idx - 1, settings.type_, false, settings.use_min_distance_))); } - if (config.support_rests_on_model && (! current_elem.to_buildplate || mergelayer)) + if (config.support_rests_on_model && (! current_elem.to_buildplate_ || mergelayer)) { to_model_data = TreeSupportUtils::safeUnion(increased.difference( - volumes_.getAvoidance(radius, layer_idx - 1, current_elem.to_model_gracious ? settings.type : AvoidanceType::COLLISION, true, settings.use_min_distance))); + volumes_.getAvoidance(radius, layer_idx - 1, current_elem.to_model_gracious_ ? settings.type_ : AvoidanceType::COLLISION, true, settings.use_min_distance_))); } - check_layer_data = current_elem.to_buildplate ? to_bp_data : to_model_data; + check_layer_data = current_elem.to_buildplate_ ? to_bp_data : to_model_data; if (check_layer_data.area() < 1) { spdlog::error( "Lost area by doing catch up from {} to radius {}", ceil_radius_before, - volumes_.ceilRadius(config.getCollisionRadius(current_elem), settings.use_min_distance)); + volumes_.ceilRadius(config.getCollisionRadius(current_elem), settings.use_min_distance_)); } } } - if (current_elem.influence_area_limit_active && ! current_elem.use_min_xy_dist && check_layer_data.area() > 1 - && (current_elem.to_model_gracious || current_elem.distance_to_top <= config.min_dtt_to_model)) + if (current_elem.influence_area_limit_active_ && ! current_elem.use_min_xy_dist_ && check_layer_data.area() > 1 + && (current_elem.to_model_gracious_ || current_elem.distance_to_top_ <= config.min_dtt_to_model)) { const coord_t max_radius_increase = std::max( static_cast((config.branch_radius - config.min_radius) / config.tip_layers), @@ -852,30 +853,30 @@ std::optional TreeSupport::increaseSingleArea( to_model_data = TreeSupportUtils::safeUnion(to_model_data); while (! limit_range_validated) { - if (current_elem.to_buildplate) + if (current_elem.to_buildplate_) { - Polygons limited_to_bp = to_bp_data.intersection((current_elem.influence_area_limit_area)); + Polygons limited_to_bp = to_bp_data.intersection((current_elem.influence_area_limit_area_)); if (limited_to_bp.area() > 1) { to_bp_data = limited_to_bp; - to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area)); + to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area_)); limit_range_validated = true; } } else { - Polygons limited_to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area)); + Polygons limited_to_model_data = to_model_data.intersection((current_elem.influence_area_limit_area_)); if (limited_to_model_data.area() > 1) { - to_bp_data = to_bp_data.intersection((current_elem.influence_area_limit_area)); + to_bp_data = to_bp_data.intersection((current_elem.influence_area_limit_area_)); to_model_data = limited_to_model_data; limit_range_validated = true; } } if (! limit_range_validated) { - const coord_t reach_increase = std::max(current_elem.influence_area_limit_range / 4, (config.maximum_move_distance + max_radius_increase)); - current_elem.influence_area_limit_range += reach_increase; + const coord_t reach_increase = std::max(current_elem.influence_area_limit_range_ / 4, (config.maximum_move_distance + max_radius_increase)); + current_elem.influence_area_limit_range_ += reach_increase; current_elem.RecreateInfluenceLimitArea(); } } @@ -902,7 +903,7 @@ void TreeSupport::increaseAreas( TreeSupportElement* parent = last_layer[idx]; TreeSupportElement elem(parent); // Also increases dtt. // Abstract representation of the model outline. If an influence area would move through it, it could teleport through a wall. - const Polygons wall_restriction = volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist); + const Polygons wall_restriction = volumes_.getWallRestriction(config.getCollisionRadius(*parent), layer_idx, parent->use_min_xy_dist_); Polygons to_bp_data; Polygons to_model_data; @@ -917,8 +918,8 @@ void TreeSupport::increaseAreas( coord_t extra_speed = EPSILON; // The extra speed is added to both movement distances. Also move 5 microns faster than allowed to avoid rounding errors, this may cause // issues at VERY VERY small layer heights. coord_t extra_slow_speed = 0; // Only added to the slow movement distance. - const coord_t ceiled_parent_radius = volumes_.ceilRadius(config.getCollisionRadius(*parent), parent->use_min_xy_dist); - const coord_t projected_radius_increased = config.getRadius(parent->effective_radius_height + 1, parent->buildplate_radius_increases); + const coord_t ceiled_parent_radius = volumes_.ceilRadius(config.getCollisionRadius(*parent), parent->use_min_xy_dist_); + const coord_t projected_radius_increased = config.getRadius(parent->effective_radius_height_ + 1, parent->buildplate_radius_increases_); const coord_t projected_radius_delta = projected_radius_increased - config.getCollisionRadius(*parent); // When z distance is more than one layer up and down the Collision used to calculate the wall restriction will always include the wall (and not just the @@ -929,9 +930,9 @@ void TreeSupport::increaseAreas( * layer z-1:dddddxxxxxxxxxx * For more detailed visualisation see calculateWallRestrictions */ - const coord_t safe_movement_distance = (elem.use_min_xy_dist ? config.xy_min_distance : config.xy_distance) + const coord_t safe_movement_distance = (elem.use_min_xy_dist_ ? config.xy_min_distance : config.xy_distance) + (std::min(config.z_distance_top_layers, config.z_distance_bottom_layers) > 0 ? config.min_feature_size : 0); - if (ceiled_parent_radius == volumes_.ceilRadius(projected_radius_increased, parent->use_min_xy_dist) + if (ceiled_parent_radius == volumes_.ceilRadius(projected_radius_increased, parent->use_min_xy_dist_) || projected_radius_increased < config.increase_radius_until_radius) { // If it is guaranteed possible to increase the radius, the maximum movement speed can be increased, as it is assumed that the maximum movement speed is the one of @@ -946,11 +947,11 @@ void TreeSupport::increaseAreas( } if (config.layer_start_bp_radius > layer_idx - && config.recommendedMinRadius(layer_idx - 1) < config.getRadius(elem.effective_radius_height + 1, elem.buildplate_radius_increases)) + && config.recommendedMinRadius(layer_idx - 1) < config.getRadius(elem.effective_radius_height_ + 1, elem.buildplate_radius_increases_)) { // Can guarantee elephant foot radius increase. if (ceiled_parent_radius - == volumes_.ceilRadius(config.getRadius(parent->effective_radius_height + 1, parent->buildplate_radius_increases + 1), parent->use_min_xy_dist)) + == volumes_.ceilRadius(config.getRadius(parent->effective_radius_height_ + 1, parent->buildplate_radius_increases_ + 1), parent->use_min_xy_dist_)) { extra_speed += config.branch_radius * config.diameter_scale_bp_radius; } @@ -994,41 +995,41 @@ void TreeSupport::increaseAreas( } }; - const bool parent_moved_slow = elem.last_area_increase.increase_speed < config.maximum_move_distance; - const bool avoidance_speed_mismatch = parent_moved_slow && elem.last_area_increase.type != AvoidanceType::SLOW; - if (elem.last_area_increase.move && elem.last_area_increase.no_error && elem.can_use_safe_radius && ! mergelayer && ! avoidance_speed_mismatch - && (elem.distance_to_top >= config.tip_layers || parent_moved_slow)) + const bool parent_moved_slow = elem.last_area_increase_.increase_speed_ < config.maximum_move_distance; + const bool avoidance_speed_mismatch = parent_moved_slow && elem.last_area_increase_.type_ != AvoidanceType::SLOW; + if (elem.last_area_increase_.move_ && elem.last_area_increase_.no_error_ && elem.can_use_safe_radius_ && ! mergelayer && ! avoidance_speed_mismatch + && (elem.distance_to_top_ >= config.tip_layers || parent_moved_slow)) { // Assume that the avoidance type that was best for the parent is best for me. Makes this function about 7% faster. - const auto slow_or_fast = elem.last_area_increase.increase_speed < config.maximum_move_distance ? slow_speed : fast_speed; + const auto slow_or_fast = elem.last_area_increase_.increase_speed_ < config.maximum_move_distance ? slow_speed : fast_speed; insertSetting( AreaIncreaseSettings( - elem.last_area_increase.type, + elem.last_area_increase_.type_, slow_or_fast, increase_radius, - elem.last_area_increase.no_error, + elem.last_area_increase_.no_error_, ! use_min_radius, - elem.last_area_increase.move), + elem.last_area_increase_.move_), true); insertSetting( AreaIncreaseSettings( - elem.last_area_increase.type, + elem.last_area_increase_.type_, slow_or_fast, ! increase_radius, - elem.last_area_increase.no_error, + elem.last_area_increase_.no_error_, ! use_min_radius, - elem.last_area_increase.move), + elem.last_area_increase_.move_), true); } // Branch may still go though a hole, so a check has to be done whether the hole was already passed, and the regular avoidance can be used. - if (! elem.can_use_safe_radius) + if (! elem.can_use_safe_radius_) { // If the radius until which it is always increased can not be guaranteed, move fast. This is to avoid holes smaller than the real branch radius. // This does not guarantee the avoidance of such holes, but ensures they are avoided if possible. insertSetting(AreaIncreaseSettings(AvoidanceType::SLOW, slow_speed, increase_radius, no_error, ! use_min_radius, ! move), true); // Did we go through the hole. // In many cases the definition of hole is overly restrictive, so to avoid unnecessary fast movement in the tip, it is ignored there for a bit. // This CAN cause a branch to go though a hole it otherwise may have avoided. - if (elem.distance_to_top < round_up_divide(config.tip_layers, 2)) + if (elem.distance_to_top_ < round_up_divide(config.tip_layers, 2)) { insertSetting(AreaIncreaseSettings(AvoidanceType::FAST, slow_speed, increase_radius, no_error, ! use_min_radius, ! move), true); } @@ -1044,7 +1045,7 @@ void TreeSupport::increaseAreas( // While moving fast to be able to increase the radius (b) may seems preferable (over a) this can cause the a sudden skip in movement, which looks similar to a // layer shift and can reduce stability. As such idx have chosen to only use the user setting for radius increases as a friendly recommendation. insertSetting(AreaIncreaseSettings(AvoidanceType::SLOW, slow_speed, ! increase_radius, no_error, ! use_min_radius, move), true); // a (See above.) - if (elem.distance_to_top < config.tip_layers) + if (elem.distance_to_top_ < config.tip_layers) { insertSetting(AreaIncreaseSettings(AvoidanceType::FAST_SAFE, slow_speed, increase_radius, no_error, ! use_min_radius, move), true); } @@ -1052,7 +1053,7 @@ void TreeSupport::increaseAreas( insertSetting(AreaIncreaseSettings(AvoidanceType::FAST_SAFE, fast_speed, ! increase_radius, no_error, ! use_min_radius, move), true); } - if (elem.use_min_xy_dist) + if (elem.use_min_xy_dist_) { std::deque new_order; // If the branch currently has to use min_xy_dist check if the configuration would also be valid with the regular xy_distance before checking with use_min_radius. @@ -1060,26 +1061,26 @@ void TreeSupport::increaseAreas( for (AreaIncreaseSettings settings : order) { new_order.emplace_back(settings); - new_order.emplace_back(settings.type, settings.increase_speed, settings.increase_radius, settings.no_error, use_min_radius, settings.move); + new_order.emplace_back(settings.type_, settings.increase_speed_, settings.increase_radius_, settings.no_error_, use_min_radius, settings.move_); } order = new_order; } insertSetting( - AreaIncreaseSettings(AvoidanceType::FAST, fast_speed, ! increase_radius, ! no_error, elem.use_min_xy_dist, move), + AreaIncreaseSettings(AvoidanceType::FAST, fast_speed, ! increase_radius, ! no_error, elem.use_min_xy_dist_, move), true); // simplifying is very important for performance, but before an error is compensated by moving faster it makes sense to check to see if the simplifying has // caused issues // The getAccumulatedPlaceable0 intersection is just a quick and dirty check to see that at least a part of the branch would correctly rest on the model. // Proper way would be to offset getAccumulatedPlaceable0 by -radius first, but the small benefit to maybe detect an error, that should not be happening anyway is not // worth the performance impact in the expected case when a branch rests on the model. - if (elem.to_buildplate || (elem.to_model_gracious && (parent->area->intersection(volumes_.getPlaceableAreas(radius, layer_idx)).empty())) - || (! elem.to_model_gracious && (parent->area->intersection(volumes_.getAccumulatedPlaceable0(layer_idx)).empty()))) // Error case. + if (elem.to_buildplate_ || (elem.to_model_gracious_ && (parent->area_->intersection(volumes_.getPlaceableAreas(radius, layer_idx)).empty())) + || (! elem.to_model_gracious_ && (parent->area_->intersection(volumes_.getAccumulatedPlaceable0(layer_idx)).empty()))) // Error case. { // It is normal that we won't be able to find a new area at some point in time if we won't be able to reach layer 0 aka have to connect with the model. - insertSetting(AreaIncreaseSettings(AvoidanceType::FAST, fast_speed * 1.5, ! increase_radius, ! no_error, elem.use_min_xy_dist, move), true); + insertSetting(AreaIncreaseSettings(AvoidanceType::FAST, fast_speed * 1.5, ! increase_radius, ! no_error, elem.use_min_xy_dist_, move), true); } - if (elem.distance_to_top < elem.dont_move_until && elem.can_use_safe_radius) // Only do not move when holes would be avoided in every case. + if (elem.distance_to_top_ < elem.dont_move_until_ && elem.can_use_safe_radius_) // Only do not move when holes would be avoided in every case. { insertSetting( AreaIncreaseSettings(AvoidanceType::SLOW, 0, increase_radius, no_error, ! use_min_radius, ! move), @@ -1093,12 +1094,12 @@ void TreeSupport::increaseAreas( > (round_up_divide((extra_speed + extra_slow_speed + config.maximum_move_distance_slow), safe_movement_distance)); for (AreaIncreaseSettings settings : order) { - if (settings.move) + if (settings.move_) { - if (offset_slow.empty() && (settings.increase_speed == slow_speed || ! offset_independent_faster)) + if (offset_slow.empty() && (settings.increase_speed_ == slow_speed || ! offset_independent_faster)) { offset_slow = TreeSupportUtils::safeOffsetInc( - *parent->area, + *parent->area_, extra_speed + extra_slow_speed + config.maximum_move_distance_slow, wall_restriction, safe_movement_distance, @@ -1110,12 +1111,12 @@ void TreeSupport::increaseAreas( // At this point one can see that the Polygons class was never made for precision in the single digit micron range. } - if ((settings.increase_speed != slow_speed) && offset_fast.empty()) + if ((settings.increase_speed_ != slow_speed) && offset_fast.empty()) { if (offset_independent_faster) { offset_fast = TreeSupportUtils::safeOffsetInc( - *parent->area, + *parent->area_, extra_speed + config.maximum_move_distance, wall_restriction, safe_movement_distance, @@ -1144,15 +1145,15 @@ void TreeSupport::increaseAreas( std::optional result; // Check for errors! - if (! settings.no_error) + if (! settings.no_error_) { // If the area becomes for whatever reason something that clipper sees as a line, offset would stop working, so ensure that even if if wrongly would be a line, // it still actually has an area that can be increased - Polygons lines_offset = TreeSupportUtils::toPolylines(*parent->area).offsetPolyLine(EPSILON); - Polygons base_error_area = parent->area->unionPolygons(lines_offset); - result = increaseSingleArea(settings, layer_idx, parent, base_error_area, to_bp_data, to_model_data, inc_wo_collision, settings.increase_speed, mergelayer); + Polygons lines_offset = TreeSupportUtils::toPolylines(*parent->area_).offsetPolyLine(EPSILON); + Polygons base_error_area = parent->area_->unionPolygons(lines_offset); + result = increaseSingleArea(settings, layer_idx, parent, base_error_area, to_bp_data, to_model_data, inc_wo_collision, settings.increase_speed_, mergelayer); - if (fast_speed < settings.increase_speed) + if (fast_speed < settings.increase_speed_) { spdlog::warn( "Influence area could not be increased! Data about the Influence area: " @@ -1162,25 +1163,25 @@ void TreeSupport::increaseAreas( "safe {} until move {}", radius, layer_idx - 1, - elem.next_height, - elem.distance_to_top, - elem.buildplate_radius_increases, - elem.use_min_xy_dist, - elem.to_buildplate, - elem.to_model_gracious, - elem.can_use_safe_radius, - elem.dont_move_until, + elem.next_height_, + elem.distance_to_top_, + elem.buildplate_radius_increases_, + elem.use_min_xy_dist_, + elem.to_buildplate_, + elem.to_model_gracious_, + elem.can_use_safe_radius_, + elem.dont_move_until_, fmt::ptr(parent), config.getCollisionRadius(*parent), layer_idx, - parent->next_height, - parent->distance_to_top, - parent->buildplate_radius_increases, - parent->use_min_xy_dist, - parent->to_buildplate, - parent->to_model_gracious, - parent->can_use_safe_radius, - parent->dont_move_until); + parent->next_height_, + parent->distance_to_top_, + parent->buildplate_radius_increases_, + parent->use_min_xy_dist_, + parent->to_buildplate_, + parent->to_model_gracious_, + parent->can_use_safe_radius_, + parent->dont_move_until_); } } else @@ -1189,11 +1190,11 @@ void TreeSupport::increaseAreas( settings, layer_idx, parent, - settings.increase_speed == slow_speed ? offset_slow : offset_fast, + settings.increase_speed_ == slow_speed ? offset_slow : offset_fast, to_bp_data, to_model_data, inc_wo_collision, - std::max(settings.increase_speed - fast_speed, coord_t(0)), + std::max(settings.increase_speed_ - fast_speed, coord_t(0)), mergelayer); } @@ -1201,34 +1202,34 @@ void TreeSupport::increaseAreas( { elem = result.value(); radius = config.getCollisionRadius(elem); - elem.last_area_increase = settings; + elem.last_area_increase_ = settings; add = true; - bypass_merge - = ! settings.move - || (settings.use_min_distance - && elem.distance_to_top < config.tip_layers); // Do not merge if the branch should not move or the priority has to be to get farther away from the model. - if (settings.move) + bypass_merge = ! settings.move_ + || (settings.use_min_distance_ + && elem.distance_to_top_ + < config.tip_layers); // Do not merge if the branch should not move or the priority has to be to get farther away from the model. + if (settings.move_) { - elem.dont_move_until = 0; + elem.dont_move_until_ = 0; } else { - elem.result_on_layer = parent->result_on_layer; + elem.result_on_layer_ = parent->result_on_layer_; } - elem.can_use_safe_radius = settings.type != AvoidanceType::FAST; + elem.can_use_safe_radius_ = settings.type_ != AvoidanceType::FAST; - if (! settings.use_min_distance) + if (! settings.use_min_distance_) { - elem.use_min_xy_dist = false; + elem.use_min_xy_dist_ = false; } - if (! settings.no_error && fast_speed < settings.increase_speed) + if (! settings.no_error_ && fast_speed < settings.increase_speed_) { spdlog::warn("Trying to keep area by moving faster than intended: Success."); } break; } - else if (! settings.no_error && fast_speed < settings.increase_speed) + else if (! settings.no_error_ && fast_speed < settings.increase_speed_) { spdlog::error("Trying to keep area by moving faster than intended: FAILURE! Wrong branch likely!"); } @@ -1237,7 +1238,7 @@ void TreeSupport::increaseAreas( if (add) { Polygons max_influence_area = TreeSupportUtils::safeUnion( - inc_wo_collision.difference(volumes_.getCollision(radius, layer_idx - 1, elem.use_min_xy_dist)), + inc_wo_collision.difference(volumes_.getCollision(radius, layer_idx - 1, elem.use_min_xy_dist_)), TreeSupportUtils::safeUnion(to_bp_data, to_model_data)); // ^^^ Note: union seems useless, but some rounding errors somewhere can cause to_bp_data to be slightly bigger than it should be @@ -1252,7 +1253,7 @@ void TreeSupport::increaseAreas( else { influence_areas.emplace(elem, max_influence_area); - if (elem.to_buildplate) + if (elem.to_buildplate_) { to_bp_areas.emplace(elem, to_bp_data); } @@ -1268,7 +1269,7 @@ void TreeSupport::increaseAreas( // If the bottom most point of a branch is set, later functions will assume that the position is valid, and ignore it. // But as branches connecting with the model that are to small have to be culled, the bottom most point has to be not set. // A point can be set on the top most tip layer (maybe more if it should not move for a few layers). - parent->result_on_layer = Point(-1, -1); + parent->result_on_layer_ = Point(-1, -1); } }); } @@ -1351,14 +1352,14 @@ void TreeSupport::createLayerPathing(std::vector>& if (new_area->area() < 1) { - spdlog::error("Insert Error of Influence area on layer {}. Origin of {} areas. Was to bp {}", layer_idx - 1, elem.parents.size(), elem.to_buildplate); + spdlog::error("Insert Error of Influence area on layer {}. Origin of {} areas. Was to bp {}", layer_idx - 1, elem.parents_.size(), elem.to_buildplate_); } } // Place already fully constructed elements in the output. for (TreeSupportElement* elem : bypass_merge_areas) { - if (elem->area->area() < 1) + if (elem->area_->area() < 1) { spdlog::error("Insert Error of Influence area bypass on layer {}.", layer_idx - 1); } @@ -1376,38 +1377,38 @@ void TreeSupport::setPointsOnAreas(const TreeSupportElement* elem) { // Based on the branch center point of the current layer, the point on the next (further up) layer is calculated. - if (elem->result_on_layer == Point(-1, -1)) + if (elem->result_on_layer_ == Point(-1, -1)) { spdlog::error("Uninitialized support element"); return; } - for (TreeSupportElement* next_elem : elem->parents) + for (TreeSupportElement* next_elem : elem->parents_) { - if (next_elem->result_on_layer + if (next_elem->result_on_layer_ != Point(-1, -1)) // If the value was set somewhere else it it kept. This happens when a branch tries not to move after being unable to create a roof. { continue; } - Point from = elem->result_on_layer; - if (! (next_elem->area->inside(from, true))) + Point from = elem->result_on_layer_; + if (! (next_elem->area_->inside(from, true))) { PolygonUtils::moveInside( - *next_elem->area, + *next_elem->area_, from, 0); // Move inside has edgecases (see tests) so DONT use Polygons.inside to confirm correct move, Error with distance 0 is <= 1 // It is not required to check if how far this move moved a point as is can be larger than maximum_movement_distance. While this seems like a problem it may for example // occur after merges. } - next_elem->result_on_layer = from; + next_elem->result_on_layer_ = from; // Do not call recursive because then amount of layers would be restricted by the stack size. } } bool TreeSupport::setToModelContact(std::vector>& move_bounds, TreeSupportElement* first_elem, const LayerIndex layer_idx) { - if (first_elem->to_model_gracious) + if (first_elem->to_model_gracious_) { TreeSupportElement* check = first_elem; @@ -1424,9 +1425,9 @@ bool TreeSupport::setToModelContact(std::vector>& // Check for every layer upwards, up to the point where this influence area was created (either by initial insert or merge) if the branch could be placed on it, and highest // up layer index. - for (LayerIndex layer_check = layer_idx; check->next_height >= layer_check; layer_check++) + for (LayerIndex layer_check = layer_idx; check->next_height_ >= layer_check; layer_check++) { - Polygons check_valid_place_area = check->area->intersection(volumes_.getPlaceableAreas(config.getCollisionRadius(*check), layer_check)); + Polygons check_valid_place_area = check->area_->intersection(volumes_.getPlaceableAreas(config.getCollisionRadius(*check), layer_check)); if (! check_valid_place_area.empty()) { @@ -1435,9 +1436,9 @@ bool TreeSupport::setToModelContact(std::vector>& valid_place_area = check_valid_place_area; } checked.emplace_back(check); - if (check->parents.size() == 1) + if (check->parents_.size() == 1) { - check = check->parents[0]; + check = check->parents_[0]; } else { @@ -1451,10 +1452,10 @@ bool TreeSupport::setToModelContact(std::vector>& if (SUPPORT_TREE_ONLY_GRACIOUS_TO_MODEL) { spdlog::warn("No valid placement found for to model gracious element on layer {}: REMOVING BRANCH", layer_idx); - for (LayerIndex layer = layer_idx; layer <= first_elem->next_height; layer++) + for (LayerIndex layer = layer_idx; layer <= first_elem->next_height_; layer++) { move_bounds[layer].erase(checked[layer - layer_idx]); - delete checked[layer - layer_idx]->area; + delete checked[layer - layer_idx]->area_; delete checked[layer - layer_idx]; } return true; @@ -1462,7 +1463,7 @@ bool TreeSupport::setToModelContact(std::vector>& else { spdlog::warn("No valid placement found for to model gracious element on layer {}", layer_idx); - first_elem->to_model_gracious = false; + first_elem->to_model_gracious_ = false; return setToModelContact(move_bounds, first_elem, layer_idx); } } @@ -1471,7 +1472,7 @@ bool TreeSupport::setToModelContact(std::vector>& ++layer) // NOTE: Use of 'itoa' will make this crash in the loop, even though the operation should be equivalent. { move_bounds[layer].erase(checked[layer - layer_idx]); - delete checked[layer - layer_idx]->area; + delete checked[layer - layer_idx]->area_; delete checked[layer - layer_idx]; } @@ -1482,23 +1483,23 @@ bool TreeSupport::setToModelContact(std::vector>& } // Guess a point inside the influence area, in which the branch will be placed in. - Point best = checked[last_successfull_layer - layer_idx]->next_position; + Point best = checked[last_successfull_layer - layer_idx]->next_position_; if (! valid_place_area.inside(best, true)) { PolygonUtils::moveInside(valid_place_area, best); } - checked[last_successfull_layer - layer_idx]->result_on_layer = best; + checked[last_successfull_layer - layer_idx]->result_on_layer_ = best; spdlog::debug("Added gracious Support On Model Point ({},{}). The current layer is {}", best.X, best.Y, last_successfull_layer); return last_successfull_layer != layer_idx; } else // can not add graceful => just place it here and hope for the best { - Point best = first_elem->next_position; + Point best = first_elem->next_position_; Polygons valid_place_area - = first_elem->area->difference(volumes_.getAvoidance(config.getCollisionRadius(first_elem), layer_idx, AvoidanceType::COLLISION, first_elem->use_min_xy_dist)); + = first_elem->area_->difference(volumes_.getAvoidance(config.getCollisionRadius(first_elem), layer_idx, AvoidanceType::COLLISION, first_elem->use_min_xy_dist_)); if (! valid_place_area.inside(best, true)) { @@ -1513,7 +1514,7 @@ bool TreeSupport::setToModelContact(std::vector>& -config.getCollisionRadius(first_elem) / 2, coord_t(0) }) // Interestingly the first radius is working most of the time, even though it seems like it shouldn't. { - valid_place_area = first_elem->area->intersection(volumes_.getAccumulatedPlaceable0(layer_idx).offset(radius_offset)); + valid_place_area = first_elem->area_->intersection(volumes_.getAccumulatedPlaceable0(layer_idx).offset(radius_offset)); if (! valid_place_area.empty()) { PolygonUtils::moveInside(valid_place_area, best); @@ -1528,13 +1529,13 @@ bool TreeSupport::setToModelContact(std::vector>& } if (! found_partial_placement) { - PolygonUtils::moveInside(*first_elem->area, best); + PolygonUtils::moveInside(*first_elem->area_, best); spdlog::warn("Not able to place branch on non support blocker at layer {}", layer_idx); } } } - first_elem->result_on_layer = best; - first_elem->to_model_gracious = false; + first_elem->result_on_layer_ = best; + first_elem->to_model_gracious_ = false; spdlog::debug("Added NON gracious Support On Model Point ({},{}). The current layer is {}", best.X, best.Y, layer_idx); return false; } @@ -1547,12 +1548,12 @@ void TreeSupport::createNodesFromArea(std::vector> std::unordered_set remove; for (TreeSupportElement* init : move_bounds[0]) { - Point p = init->next_position; - if (! (init->area->inside(p, true))) + Point p = init->next_position_; + if (! (init->area_->inside(p, true))) { - PolygonUtils::moveInside(*init->area, p, 0); + PolygonUtils::moveInside(*init->area_, p, 0); } - init->result_on_layer = p; + init->result_on_layer_ = p; setPointsOnAreas(init); // Also set the parent nodes, as these will be required for the first iteration of the loop below. @@ -1574,7 +1575,7 @@ void TreeSupport::createNodesFromArea(std::vector> for (TreeSupportElement* del : remove) { move_bounds[0].erase(del); - delete del->area; + delete del->area_; delete del; } remove.clear(); @@ -1584,26 +1585,26 @@ void TreeSupport::createNodesFromArea(std::vector> for (TreeSupportElement* elem : move_bounds[layer_idx]) { bool removed = false; - if (elem->result_on_layer == Point(-1, -1)) // Check if the resulting center point is not yet set. + if (elem->result_on_layer_ == Point(-1, -1)) // Check if the resulting center point is not yet set. { - if (elem->to_buildplate || (! elem->to_buildplate && elem->distance_to_top < config.min_dtt_to_model && ! elem->supports_roof)) + if (elem->to_buildplate_ || (! elem->to_buildplate_ && elem->distance_to_top_ < config.min_dtt_to_model && ! elem->supports_roof_)) { - if (elem->to_buildplate) + if (elem->to_buildplate_) { spdlog::error( "Uninitialized Influence area targeting ({},{}) at target_height: {} layer: {}", - elem->target_position.X, - elem->target_position.Y, - elem->target_height, + elem->target_position_.X, + elem->target_position_.Y, + elem->target_height_, layer_idx); } remove.emplace(elem); // We dont need to remove yet the parents as they will have a lower dtt and also no result_on_layer set. removed = true; - for (TreeSupportElement* parent : elem->parents) + for (TreeSupportElement* parent : elem->parents_) { // When the roof was not able to generate downwards enough, the top elements may have not moved, and have result_on_layer already set. As this branch needs // to be removed => all parents result_on_layer have to be invalidated. - parent->result_on_layer = Point(-1, -1); + parent->result_on_layer_ = Point(-1, -1); } continue; } @@ -1628,7 +1629,7 @@ void TreeSupport::createNodesFromArea(std::vector> for (TreeSupportElement* del : remove) { move_bounds[layer_idx].erase(del); - delete del->area; + delete del->area_; delete del; } remove.clear(); @@ -1669,23 +1670,23 @@ void TreeSupport::generateBranchAreas( // Calculate multiple ovalized circles, to connect with every parent and child. Also generate regular circle for the current layer. Merge all these into one area. std::vector> movement_directions{ std::pair(Point(0, 0), radius) }; - if (! elem->skip_ovalisation) + if (! elem->skip_ovalisation_) { if (child_elem != nullptr) { - Point movement = (child_elem->result_on_layer - elem->result_on_layer); + Point movement = (child_elem->result_on_layer_ - elem->result_on_layer_); movement_directions.emplace_back(movement, radius); } - for (TreeSupportElement* parent : elem->parents) + for (TreeSupportElement* parent : elem->parents_) { - Point movement = (parent->result_on_layer - elem->result_on_layer); + Point movement = (parent->result_on_layer_ - elem->result_on_layer_); movement_directions.emplace_back(movement, std::max(config.getRadius(parent), config.support_line_width)); - parent_uses_min |= parent->use_min_xy_dist; + parent_uses_min |= parent->use_min_xy_dist_; } - for (Point target : elem->additional_ovalization_targets) + for (Point target : elem->additional_ovalization_targets_) { - Point movement = (target - elem->result_on_layer); + Point movement = (target - elem->result_on_layer_); movement_directions.emplace_back(movement, std::max(radius, config.support_line_width)); } } @@ -1702,7 +1703,7 @@ void TreeSupport::generateBranchAreas( // Visualization: https://jsfiddle.net/0zvcq39L/2/ // Ovalizes the circle to an ellipse, that contains both old center and new target position. double used_scale = (movement.second + offset) / (1.0 * config.branch_radius); - Point center_position = elem->result_on_layer + movement.first / 2; + Point center_position = elem->result_on_layer_ + movement.first / 2; const double moveX = movement.first.X / (used_scale * config.branch_radius); const double moveY = movement.first.Y / (used_scale * config.branch_radius); const double vsize_inv = 0.5 / (0.01 + std::sqrt(moveX * moveX + moveY * moveY)); @@ -1724,7 +1725,7 @@ void TreeSupport::generateBranchAreas( poly = poly.unionPolygons() .offset(std::min(static_cast(FUDGE_LENGTH), config.support_line_width / 4)) - .difference(volumes_.getCollision(0, linear_data[idx].first, parent_uses_min || elem->use_min_xy_dist)); + .difference(volumes_.getCollision(0, linear_data[idx].first, parent_uses_min || elem->use_min_xy_dist_)); // ^^^ There seem to be some rounding errors, causing a branch to be a tiny bit further away from the model that it has to be. This can cause the tip to be slightly // further away front the overhang (x/y wise) than optimal. // This fixes it, and for every other part, 0.05mm will not be noticed. @@ -1754,16 +1755,16 @@ void TreeSupport::generateBranchAreas( Polygons polygons_with_correct_center; for (PolygonsPart part : nozzle_path.splitIntoParts(false)) { - if (part.inside(elem->result_on_layer, true)) + if (part.inside(elem->result_on_layer_, true)) { polygons_with_correct_center = polygons_with_correct_center.unionPolygons(part); } else { // Try a fuzzy inside as sometimes the point should be on the border, but is not because of rounding errors... - Point from = elem->result_on_layer; + Point from = elem->result_on_layer_; PolygonUtils::moveInside(part, from, 0); - if (vSize2(elem->result_on_layer - from) < (FUDGE_LENGTH * FUDGE_LENGTH) / 4) + if (vSize2(elem->result_on_layer_ - from) < (FUDGE_LENGTH * FUDGE_LENGTH) / 4) { polygons_with_correct_center = polygons_with_correct_center.unionPolygons(part); } @@ -1772,7 +1773,7 @@ void TreeSupport::generateBranchAreas( // Increase the area again, to ensure the nozzle path when calculated later is very similar to the one assumed above. linear_inserts[idx] = polygons_with_correct_center.offset(config.support_line_width / 2).unionPolygons(); linear_inserts[idx] - = linear_inserts[idx].difference(volumes_.getCollision(0, linear_data[idx].first, parent_uses_min || elem->use_min_xy_dist)).unionPolygons(); + = linear_inserts[idx].difference(volumes_.getCollision(0, linear_data[idx].first, parent_uses_min || elem->use_min_xy_dist_)).unionPolygons(); } } } @@ -1814,14 +1815,14 @@ void TreeSupport::smoothBranchAreas(std::vectorparents) + for (TreeSupportElement* parent : data_pair.first->parents_) { if (config.getRadius(*parent) != config.getCollisionRadius(*parent)) { do_something = true; max_outer_wall_distance = std::max( max_outer_wall_distance, - vSize(data_pair.first->result_on_layer - parent->result_on_layer) - (config.getRadius(*data_pair.first) - config.getRadius(*parent))); + vSize(data_pair.first->result_on_layer_ - parent->result_on_layer_) - (config.getRadius(*data_pair.first) - config.getRadius(*parent))); } } max_outer_wall_distance @@ -1829,7 +1830,7 @@ void TreeSupport::smoothBranchAreas(std::vectorparents) + for (TreeSupportElement* parent : data_pair.first->parents_) { if (config.getRadius(*parent) != config.getCollisionRadius(*parent)) { @@ -1872,12 +1873,12 @@ void TreeSupport::smoothBranchAreas(std::vector data_pair = processing[processing_idx]; bool do_something = false; Polygons max_allowed_area; - for (size_t idx = 0; idx < data_pair.first->parents.size(); idx++) + for (size_t idx = 0; idx < data_pair.first->parents_.size(); idx++) { - TreeSupportElement* parent = data_pair.first->parents[idx]; + TreeSupportElement* parent = data_pair.first->parents_[idx]; const coord_t max_outer_line_increase = max_radius_change_per_layer; Polygons result = layer_tree_polygons[layer_idx + 1][parent].offset(max_outer_line_increase); - const Point direction = data_pair.first->result_on_layer - parent->result_on_layer; + const Point direction = data_pair.first->result_on_layer_ - parent->result_on_layer_; // Move the polygons object. for (auto& outer : result) { @@ -1928,7 +1929,7 @@ void TreeSupport::dropNonGraciousAreas( { TreeSupportElement* elem = linear_data[idx].second; bool non_gracious_model_contact - = ! elem->to_model_gracious + = ! elem->to_model_gracious_ && ! inverse_tree_order.count(elem); // If an element has no child, it connects to whatever is below as no support further down for it will exist. if (non_gracious_model_contact) { @@ -2261,15 +2262,15 @@ void TreeSupport::drawAreas(std::vector>& move_bou { // (Check if) We either come from nowhere at the final layer or we had invalid parents 2. should never happen but just to be sure: if ((layer_idx > 0 - && ((! inverse_tree_order.count(elem) && elem->target_height == layer_idx && config.min_dtt_to_model > 0 && ! elem->to_buildplate) - || (inverse_tree_order.count(elem) && inverse_tree_order[elem]->result_on_layer == Point(-1, -1))))) + && ((! inverse_tree_order.count(elem) && elem->target_height_ == layer_idx && config.min_dtt_to_model > 0 && ! elem->to_buildplate_) + || (inverse_tree_order.count(elem) && inverse_tree_order[elem]->result_on_layer_ == Point(-1, -1))))) { continue; } - for (TreeSupportElement* par : elem->parents) + for (TreeSupportElement* par : elem->parents_) { - if (par->result_on_layer == Point(-1, -1)) + if (par->result_on_layer_ == Point(-1, -1)) { continue; } @@ -2315,7 +2316,7 @@ void TreeSupport::drawAreas(std::vector>& move_bou { for (std::pair data_pair : layer_tree_polygons[layer_idx]) { - if (data_pair.first->missing_roof_layers > data_pair.first->distance_to_top + if (data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_ && TreeSupportUtils::generateSupportInfillLines(data_pair.second, config, true, layer_idx, config.support_roof_line_distance, nullptr, true).empty()) { std::vector to_disable_roofs; @@ -2325,8 +2326,8 @@ void TreeSupport::drawAreas(std::vector>& move_bou std::vector to_disable_roofs_next; for (TreeSupportElement* elem : to_disable_roofs) { - elem->missing_roof_layers = 0; - if (data_pair.first->missing_roof_layers > data_pair.first->distance_to_top + 1) + elem->missing_roof_layers_ = 0; + if (data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_ + 1) { to_disable_roofs_next.emplace_back(inverse_tree_order[elem]); } @@ -2343,7 +2344,7 @@ void TreeSupport::drawAreas(std::vector>& move_bou { for (std::pair data_pair : layer_tree_polygons[layer_idx]) { - ((data_pair.first->missing_roof_layers > data_pair.first->distance_to_top) ? support_roof_storage : support_layer_storage)[layer_idx].add(data_pair.second); + ((data_pair.first->missing_roof_layers_ > data_pair.first->distance_to_top_) ? support_roof_storage : support_layer_storage)[layer_idx].add(data_pair.second); } } diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index f1f2aed10c..c6c57d901f 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -662,11 +662,11 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( skip_ovalisation, support_tree_limit_branch_reach, support_tree_branch_reach_limit); - elem->area = new Polygons(area); + elem->area_ = new Polygons(area); for (Point p : additional_ovalization_targets) { - elem->additional_ovalization_targets.emplace_back(p); + elem->additional_ovalization_targets_.emplace_back(p); } move_bounds[insert_layer].emplace(elem); @@ -803,18 +803,18 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( for (TreeSupportElement* elem : move_bounds[layer_idx]) { - if (roof_on_layer.inside(elem->result_on_layer)) // Remove branches that start inside of support interface + if (roof_on_layer.inside(elem->result_on_layer_)) // Remove branches that start inside of support interface { to_be_removed.emplace_back(elem); } - else if (elem->supports_roof) + else if (elem->supports_roof_) { - Point from = elem->result_on_layer; + Point from = elem->result_on_layer_; PolygonUtils::moveInside(roof_on_layer_above, from); // Remove branches should have interface above them, but dont. Should never happen. if (roof_on_layer_above.empty() - || (! roof_on_layer_above.inside(elem->result_on_layer) - && vSize2(from - elem->result_on_layer) > config.getRadius(0) * config.getRadius(0) + FUDGE_LENGTH * FUDGE_LENGTH)) + || (! roof_on_layer_above.inside(elem->result_on_layer_) + && vSize2(from - elem->result_on_layer_) > config.getRadius(0) * config.getRadius(0) + FUDGE_LENGTH * FUDGE_LENGTH)) { to_be_removed.emplace_back(elem); spdlog::warn("Removing already placed tip that should have roof above it?"); @@ -825,7 +825,7 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( for (auto elem : to_be_removed) { move_bounds[layer_idx].erase(elem); - delete elem->area; + delete elem->area_; delete elem; } } From 403061a0bf94ad7ad20c336f84774e7648e3e905 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 11:40:23 +0100 Subject: [PATCH 062/218] Fixed variable shadowing warnings --- include/InsetOrderOptimizer.h | 38 +++---- include/infill/SierpinskiFill.h | 179 +++++++++++++++--------------- src/InsetOrderOptimizer.cpp | 72 ++++++------ src/infill/SierpinskiFill.cpp | 188 ++++++++++++++++---------------- 4 files changed, 241 insertions(+), 236 deletions(-) diff --git a/include/InsetOrderOptimizer.h b/include/InsetOrderOptimizer.h index f5bdba8f57..e5592806a2 100644 --- a/include/InsetOrderOptimizer.h +++ b/include/InsetOrderOptimizer.h @@ -85,26 +85,26 @@ class InsetOrderOptimizer static value_type getInsetOrder(const auto& input, const bool outer_to_inner); private: - const FffGcodeWriter& gcode_writer; - const SliceDataStorage& storage; - LayerPlan& gcode_layer; - const Settings& settings; - const size_t extruder_nr; - const GCodePathConfig& inset_0_non_bridge_config; - const GCodePathConfig& inset_X_non_bridge_config; - const GCodePathConfig& inset_0_bridge_config; - const GCodePathConfig& inset_X_bridge_config; - const bool retract_before_outer_wall; - const coord_t wall_0_wipe_dist; - const coord_t wall_x_wipe_dist; - const size_t wall_0_extruder_nr; - const size_t wall_x_extruder_nr; - const ZSeamConfig& z_seam_config; - const std::vector& paths; - const LayerIndex layer_nr; + const FffGcodeWriter& gcode_writer_; + const SliceDataStorage& storage_; + LayerPlan& gcode_layer_; + const Settings& settings_; + const size_t extruder_nr_; + const GCodePathConfig& inset_0_non_bridge_config_; + const GCodePathConfig& inset_X_non_bridge_config_; + const GCodePathConfig& inset_0_bridge_config_; + const GCodePathConfig& inset_X_bridge_config_; + const bool retract_before_outer_wall_; + const coord_t wall_0_wipe_dist_; + const coord_t wall_x_wipe_dist_; + const size_t wall_0_extruder_nr_; + const size_t wall_x_extruder_nr_; + const ZSeamConfig& z_seam_config_; + const std::vector& paths_; + const LayerIndex layer_nr_; - std::vector> inset_polys; // vector of vectors holding the inset polygons - Polygons retraction_region; // After printing an outer wall, move into this region so that retractions do not leave visible blobs. Calculated lazily if needed (see + std::vector> inset_polys_; // vector of vectors holding the inset polygons + Polygons retraction_region_; // After printing an outer wall, move into this region so that retractions do not leave visible blobs. Calculated lazily if needed (see // retraction_region_calculated). /*! diff --git a/include/infill/SierpinskiFill.h b/include/infill/SierpinskiFill.h index 9383155241..f5603bd509 100644 --- a/include/infill/SierpinskiFill.h +++ b/include/infill/SierpinskiFill.h @@ -1,6 +1,6 @@ -//Copyright (c) 2017 Tim Kuipers -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2017 Tim Kuipers +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_SIERPINSKI_FILL_H #define INFILL_SIERPINSKI_FILL_H @@ -18,17 +18,17 @@ class SVG; /*! * A class for generating the Cross and Cross 3D infill patterns. - * - * + * + * * === BASIC SUBDIVISION === - * + * * The line is generated from a recurvive subdivision of the area of a square into triangles. * _______ _______ _______ _______ * | /| |\ /| |\ | /| |\ /|\ /| . * | / | | \ / | |__\|/__| |/_\|/_\| etc . * | / | | / \ | | /|\ | |\ /|\ /| . * |/______| |/_____\| |/__|__\| |/_\|/_\| . - * + * * Triangles are subdivided into two children like so: * |\ |\ . * |A \ |A \ . @@ -38,9 +38,9 @@ class SVG; * | / | / Note that the polygon direction flips between clockwise and CCW each subdivision * |B / |B / * |/ |/ - * + * * The direction of the space filling curve along each triangle is recorded: - * + * * |\ |\ . * |B \ AC_TO_BC |B \ AC_TO_AB . * | ↑ \ | ↑ \ . @@ -67,18 +67,18 @@ class SVG; * | / |↗ / . * |A / |A / AC_TO_BC . * |/ |/ . - * - * + * + * * Each triangle is associated with the length of the Sierpinski dual curve going through the triangle. * The realized density of a triangle is calculated using the length of the Sierpinski segment, * the line width and the area of the triangle. * The realized density is compared with the requested average density over the triangle according to * the volumetric density specification of the user. - * - * - * + * + * + * * === BALANCING === - * + * * If for any single triangle in the pattern the total realized length of all/both children is less than the average requested length of that parent triangle, * the parent triangle would definitely like to be subdivided. * (When dithering, we may subdivide at a lower threshold and a constraint may cause such a triangle not to be subdivided after all. See CONSTRAINTS.) @@ -86,14 +86,14 @@ class SVG; * namely when the other child has a surplus of requested length. * The error thus induced should be recorded. * Value will be transported from the child with a surplus to the child with a lack of requested length. - * + * * Example: * Parent cell realizes 10mm filament, but child 1 requests 100mm and child 2 requests 2mm. * Subdivision would lead to two cells with 14mm filament realized. * Cell 2 therefore obtains 12mm filament from cell 1, where 12mm is recorded as an error. - * + * * === CONSTRAINTS === - * + * * When subdividing an AC_TO_AB or an AB_TO_BC triangle, the place where the Sierpinski curve intersects AB changes. * In order to maintain a connected Sierpinski curve, we need to subdivide the (respectively) next / previous as well. * A triangle is said to be constrained by a preceding AC_TO_AB triangle or a consecutive AB_TO_BC triangle @@ -103,22 +103,22 @@ class SVG; * \⟶⟶⟶⟶|↘ \ . * \ | ↘/ . * \|/ . - * + * * ^^^ * constrained triangle * ^^^^^^^ * constraining triangle - * - * + * + * * This constraint means that sharp changes in output density are impossible. * Instead the output density changes with steps of 1 recursion depth difference at a time. * When the input requested density has a sharp contrast, we should try to keep the error introduced by the consecutivity constraint * as close to the contrast edge as possible. - * - * - * + * + * + * * === TREE VIEW === - * + * * The problem is easiest conceptualized when looking at the tree of all possible triangles. * The final sequence of triangles which are crossed by the Sierpinski dual curve can be seen as a cut through the tree. *. @@ -136,12 +136,12 @@ class SVG; *. / \ / \ / \ / \ . *. / \ / \ / \ / \ /#\ /#\ / \ / \ . *. /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\/#\/#\/#\/#\ . The chosen nodes # cut through the tree at a variable depth leading to variable density infill. - * - * - * - * + * + * + * + * * === ALGORITHM === - * + * * The algorithm runs as follows: * 1- We create the tree of all possible triangles * 2- We decide on the lower density boundary sequence of nodes (triangles) to cross @@ -154,7 +154,7 @@ class SVG; * - Bubble up the total requested line length from the leaves all teh way to the root * - Calculate the average length of the Cross Fractal crossing of each triangle and record it * - * + * * >> 2. Create lower boundary * ********************* * - Start the sequence of nodes with the starting triangles (We start with two triangles, which form a square) @@ -162,13 +162,13 @@ class SVG; * Each iteration: * 1- Move error length values introduced by constraining triangles from constrained triangle to constraining triangle. * 2- (Use errors to) subdivide each node where the total errored value is now large enough - * + * * 2.1 * From highest density cells currently in the sequence to lowest density: * - Calculate the difference between the actualized length and the requested length. * - Distribute this error over the constraining triangles. * - Cascade this error value further up toward the root when processing the next density of cells. - * + * * 2.2 * From lowest density cells currently in the sequence to highest density cells: * - Try to subdivide the node / two consecutive nodes which share an AB edge @@ -176,7 +176,7 @@ class SVG; * * Redistribute error to where it came from: cascade errors back down the tree toward teh leaves where the error came from. * * Balance children: make sure each newly introduced child has a positive error value. * - * + * * >> 3. Dithering * ********* * From begin to end of the sequence: @@ -184,17 +184,18 @@ class SVG; * If the errored value is high enough: * subdivide this/these triangle(s) * - Carry along the induced error to the next triangle in the sequence. - * - * + * + * * ------------------------------------------------------------------------------------------------------ - * - * + * + * * By following the path along the middle points of each triangle the Siepinski Curve will be generated. * By following the path along the middle of each edge the Cross Fractal curve will be generated, which is the dual of the Sierpinski curve. */ class SierpinskiFill { friend class SierpinskiFillTest; + public: /*! * Basic constructor @@ -206,12 +207,12 @@ class SierpinskiFill /*! * Generate the cross pattern curve */ - Polygon generateCross() const; + Polygon generateCross() const; /*! * Generate the Sierpinski space filling curve */ - Polygon generateCross(coord_t z, coord_t min_dist_to_side, coord_t pocket_size) const; + Polygon generateCross(coord_t z, coord_t min_dist_to_side, coord_t pocket_size) const; /*! * Output the triangles to a canvas @@ -228,13 +229,13 @@ class SierpinskiFill }; /*! * A node in the tree of all triangles. - * + * * Vertex C is the straight 90* corner. - * + * * Depending on the recursion depth the 90* corner is either on the left or on the right of the curve. - * + * * The direction in which this triangle is crossed by the Sierpinski curve is recorded. - * + * * Some statistics about the requested and realized polygon length are recorded on each node in the tree. */ struct SierpinskiTriangle @@ -249,43 +250,47 @@ class SierpinskiFill AC_TO_BC, AB_TO_BC }; - Point straight_corner; //!< C, the 90* corner of the triangle - Point a; //!< The corner closer to the start of the space filling curve - Point b; //!< The corner closer to the end of the space filling curve - SierpinskiDirection dir; //!< The (order in which) edges being crossed by the Sierpinski curve. - bool straight_corner_is_left; //!< Whether the \ref straight_corner is left of the curve, rather than right. I.e. whether triangle ABC is counter-clockwise - int depth; //!< The recursion depth at which this triangle is generated. Root is zero. - - float area; //!< The area of the triangle in mm^2 - float requested_length; //!< The polyline length corresponding to the average density requested by the volumetric density specification. - float realized_length; //!< The polyline length of the Cross Fractal line segment which would cross this triangle. - float total_child_realized_length; //!< The total of the \ref realized_length of all children. - float error_left; //!< Extra value modulating the \ref requested_length obtained from the triangle on the left / obtained by giving value to the triangle to the left. - float error_right; //!< Extra value modulating the \ref requested_length obtained from the triangle on the right / obtained by giving value to the triangle to the right. + const Point straight_corner_; //!< C, the 90* corner of the triangle + const Point a_; //!< The corner closer to the start of the space filling curve + const Point b_; //!< The corner closer to the end of the space filling curve + const SierpinskiDirection dir_; //!< The (order in which) edges being crossed by the Sierpinski curve. + const bool straight_corner_is_left_; //!< Whether the \ref straight_corner is left of the curve, rather than right. I.e. whether triangle ABC is counter-clockwise + const int depth_; //!< The recursion depth at which this triangle is generated. Root is zero. + + float area_; //!< The area of the triangle in mm^2 + float requested_length_; //!< The polyline length corresponding to the average density requested by the volumetric density specification. + float realized_length_; //!< The polyline length of the Cross Fractal line segment which would cross this triangle. + float total_child_realized_length_; //!< The total of the \ref realized_length of all children. + float error_left_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the left / obtained by giving value to the triangle to the left. + float error_right_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the right / obtained by giving value to the triangle to the right. SierpinskiTriangle(Point straight_corner, Point a, Point b, SierpinskiDirection dir, bool straight_corner_is_left, int depth) - : straight_corner(straight_corner) - , a(a) - , b(b) - , dir(dir) - , straight_corner_is_left(straight_corner_is_left) - , depth(depth) - , requested_length(0) - , total_child_realized_length(0) - , error_left(0) - , error_right(0) - {} + : straight_corner_(straight_corner) + , a_(a) + , b_(b) + , dir_(dir) + , straight_corner_is_left_(straight_corner_is_left) + , depth_(depth) + , requested_length_(0) + , total_child_realized_length_(0) + , error_left_(0) + , error_right_(0) + { + } //! Constructor for the root node. SierpinskiTriangle() - : straight_corner(no_point) - , a(no_point) - , b(no_point) - , depth(0) - , requested_length(0) - , total_child_realized_length(0) - , error_left(0) - , error_right(0) - {} + : straight_corner_(no_point) + , a_(no_point) + , b_(no_point) + , dir_(SierpinskiDirection::AB_TO_BC) + , straight_corner_is_left_(false) + , depth_(0) + , requested_length_(0) + , total_child_realized_length_(0) + , error_left_(0) + , error_right_(0) + { + } //! Get the first edge of this triangle crossed by the Sierpinski and/or Cross Fractal curve. Edge getFromEdge(); //! Get the second edge of this triangle crossed by the Sierpinski and/or Cross Fractal curve. @@ -368,9 +373,9 @@ class SierpinskiFill /*! * For each noe: subdivide if possible. - * + * * Start trying cells with lower recursion level before trying cells with deeper recursion depth, i.e. higher density value. - * + * * \return Whether the sequence has changed. */ bool subdivideAll(); @@ -378,15 +383,15 @@ class SierpinskiFill /*! * Bubble up errors from nodes which like to subdivide more, * but which are constrained by neighboring cells of lower recursion level. - * - * \return Whether we have redistributed errors which could cause a new subdivision + * + * \return Whether we have redistributed errors which could cause a new subdivision */ bool bubbleUpConstraintErrors(); /*! * Subdivide a node into its children. * Redistribute leftover errors needed for this subdivision and account for errors needed to keep the children balanced. - * + * * \param it iterator to the node to subdivide * \param redistribute_errors Whether to redistribute the accumulated errors to neighboring nodes and/or among children * \return The last child, so that we can iterate further through the sequence on the input iterator. @@ -398,28 +403,28 @@ class SierpinskiFill * Redistribute positive errors in as much as they aren't needed to subdivide this node. * If this node has received too much positive error then it will subdivide * and pass along the error from whence it came. - * + * * This is called just before performing a subdivision. */ void redistributeLeftoverErrors(std::list::iterator begin, std::list::iterator end, bool distribute_subdivision_errors); /*! * Balance child values such that they account for the minimum value of their recursion level. - * + * * Account for errors caused by unbalanced children. * Plain subdivision can lead to one child having a smaller value than the density_value associated with the recursion depth * if another child has a high enough value such that the parent value will cause subdivision. - * + * * In order to compensate for the error incurred, we more error value from the high child to the low child * such that the low child has an erroredValue of at least the density_value associated with the recusion depth. - * + * * \param node The parent node of the children to balance */ void balanceErrors(std::list::iterator begin, std::list::iterator end); /*! * Settle down unused errors which have been bubbled up, but haven't been used to subdivide any cell. - * + * * Should be called before dithering. */ void settleErrors(); diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 7549ae53da..9b2358aa62 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -51,36 +51,36 @@ InsetOrderOptimizer::InsetOrderOptimizer( const size_t wall_x_extruder_nr, const ZSeamConfig& z_seam_config, const std::vector& paths) - : gcode_writer(gcode_writer) - , storage(storage) - , gcode_layer(gcode_layer) - , settings(settings) - , extruder_nr(extruder_nr) - , inset_0_non_bridge_config(inset_0_non_bridge_config) - , inset_X_non_bridge_config(inset_X_non_bridge_config) - , inset_0_bridge_config(inset_0_bridge_config) - , inset_X_bridge_config(inset_X_bridge_config) - , retract_before_outer_wall(retract_before_outer_wall) - , wall_0_wipe_dist(wall_0_wipe_dist) - , wall_x_wipe_dist(wall_x_wipe_dist) - , wall_0_extruder_nr(wall_0_extruder_nr) - , wall_x_extruder_nr(wall_x_extruder_nr) - , z_seam_config(z_seam_config) - , paths(paths) - , layer_nr(gcode_layer.getLayerNr()) + : gcode_writer_(gcode_writer) + , storage_(storage) + , gcode_layer_(gcode_layer) + , settings_(settings) + , extruder_nr_(extruder_nr) + , inset_0_non_bridge_config_(inset_0_non_bridge_config) + , inset_X_non_bridge_config_(inset_X_non_bridge_config) + , inset_0_bridge_config_(inset_0_bridge_config) + , inset_X_bridge_config_(inset_X_bridge_config) + , retract_before_outer_wall_(retract_before_outer_wall) + , wall_0_wipe_dist_(wall_0_wipe_dist) + , wall_x_wipe_dist_(wall_x_wipe_dist) + , wall_0_extruder_nr_(wall_0_extruder_nr) + , wall_x_extruder_nr_(wall_x_extruder_nr) + , z_seam_config_(z_seam_config) + , paths_(paths) + , layer_nr_(gcode_layer.getLayerNr()) { } bool InsetOrderOptimizer::addToLayer() { // Settings & configs: - const auto pack_by_inset = ! settings.get("optimize_wall_printing_order"); - const auto inset_direction = settings.get("inset_direction"); - const auto alternate_walls = settings.get("material_alternate_walls"); + const auto pack_by_inset = ! settings_.get("optimize_wall_printing_order"); + const auto inset_direction = settings_.get("inset_direction"); + const auto alternate_walls = settings_.get("material_alternate_walls"); const bool outer_to_inner = inset_direction == InsetDirection::OUTSIDE_IN; - const bool use_one_extruder = wall_0_extruder_nr == wall_x_extruder_nr; - const bool current_extruder_is_wall_x = wall_x_extruder_nr == extruder_nr; + const bool use_one_extruder = wall_0_extruder_nr_ == wall_x_extruder_nr_; + const bool current_extruder_is_wall_x = wall_x_extruder_nr_ == extruder_nr_; const bool reverse = shouldReversePath(use_one_extruder, current_extruder_is_wall_x, outer_to_inner); auto walls_to_be_added = getWallsToBeAdded(reverse, use_one_extruder); @@ -93,11 +93,11 @@ bool InsetOrderOptimizer::addToLayer() constexpr bool detect_loops = false; constexpr Polygons* combing_boundary = nullptr; - const auto group_outer_walls = settings.get("group_outer_walls"); + const auto group_outer_walls = settings_.get("group_outer_walls"); // When we alternate walls, also alternate the direction at which the first wall starts in. // On even layers we start with normal direction, on odd layers with inverted direction. PathOrderOptimizer - order_optimizer(gcode_layer.getLastPlannedPositionOrStartingPosition(), z_seam_config, detect_loops, combing_boundary, reverse, order, group_outer_walls); + order_optimizer(gcode_layer_.getLastPlannedPositionOrStartingPosition(), z_seam_config_, detect_loops, combing_boundary, reverse, order, group_outer_walls); for (const auto& line : walls_to_be_added) { @@ -120,19 +120,19 @@ bool InsetOrderOptimizer::addToLayer() const bool is_outer_wall = path.vertices_->inset_idx == 0; // or thin wall 'gap filler' const bool is_gap_filler = path.vertices_->is_odd; - const GCodePathConfig& non_bridge_config = is_outer_wall ? inset_0_non_bridge_config : inset_X_non_bridge_config; - const GCodePathConfig& bridge_config = is_outer_wall ? inset_0_bridge_config : inset_X_bridge_config; - const coord_t wipe_dist = is_outer_wall && ! is_gap_filler ? wall_0_wipe_dist : wall_x_wipe_dist; - const bool retract_before = is_outer_wall ? retract_before_outer_wall : false; + const GCodePathConfig& non_bridge_config = is_outer_wall ? inset_0_non_bridge_config_ : inset_X_non_bridge_config_; + const GCodePathConfig& bridge_config = is_outer_wall ? inset_0_bridge_config_ : inset_X_bridge_config_; + const coord_t wipe_dist = is_outer_wall && ! is_gap_filler ? wall_0_wipe_dist_ : wall_x_wipe_dist_; + const bool retract_before = is_outer_wall ? retract_before_outer_wall_ : false; const bool revert_inset = alternate_walls && (path.vertices_->inset_idx % 2); - const bool revert_layer = alternate_walls && (layer_nr % 2); + const bool revert_layer = alternate_walls && (layer_nr_ % 2); const bool backwards = path.backwards_ != (revert_inset != revert_layer); const size_t start_index = (backwards != path.backwards_) ? path.vertices_->size() - (path.start_vertex_ + 1) : path.start_vertex_; const bool linked_path = ! path.is_closed_; - gcode_layer.setIsInside(true); // Going to print walls, which are always inside. - gcode_layer.addWall(*path.vertices_, start_index, settings, non_bridge_config, bridge_config, wipe_dist, flow, retract_before, path.is_closed_, backwards, linked_path); + gcode_layer_.setIsInside(true); // Going to print walls, which are always inside. + gcode_layer_.addWall(*path.vertices_, start_index, settings_, non_bridge_config, bridge_config, wipe_dist, flow, retract_before, path.is_closed_, backwards, linked_path); added_something = true; } return added_something; @@ -357,7 +357,7 @@ constexpr bool InsetOrderOptimizer::shouldReversePath(const bool use_one_extrude std::vector InsetOrderOptimizer::getWallsToBeAdded(const bool reverse, const bool use_one_extruder) { - if (paths.empty()) + if (paths_.empty()) { return {}; } @@ -366,22 +366,22 @@ std::vector InsetOrderOptimizer::getWallsToBeAdded(const bool rev { if (use_one_extruder) { - view = paths | rv::reverse; + view = paths_ | rv::reverse; } else { - view = paths | rv::reverse | rv::drop_last(1); + view = paths_ | rv::reverse | rv::drop_last(1); } } else { if (use_one_extruder) { - view = paths | rv::all; + view = paths_ | rv::all; } else { - view = paths | rv::take_exactly(1); + view = paths_ | rv::take_exactly(1); } } return view | rv::join | rv::remove_if(rg::empty) | rg::to_vector; diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index d6b45fc86f..623f9ab9af 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -45,10 +45,10 @@ SierpinskiFill::SierpinskiFill(const DensityProvider& density_provider, const AA spdlog::error( "Node is subdivided without the appropriate value! value_error: {} from base {} el: {} er: {}, while the realized_length = {}", node->getValueError(), - node->requested_length, - node->error_left, - node->error_right, - node->realized_length); + node->requested_length_, + node->error_left_, + node->error_right_, + node->realized_length_); assert(false); } } @@ -86,14 +86,14 @@ void SierpinskiFill::createTree() void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) { - if (sub_root.depth < max_depth) // We need to subdivide. + if (sub_root.depth_ < max_depth) // We need to subdivide. { SierpinskiTriangle& t = sub_root; - Point middle = (t.a + t.b) / 2; + Point middle = (t.a_ + t.b_) / 2; // At each subdivision we divide the triangle in two. // Figure out which sort of triangle each child will be: SierpinskiTriangle::SierpinskiDirection first_dir, second_dir; - switch (t.dir) + switch (t.dir_) { default: case SierpinskiTriangle::SierpinskiDirection::AB_TO_BC: @@ -109,8 +109,8 @@ void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) second_dir = SierpinskiTriangle::SierpinskiDirection::AC_TO_AB; break; } - sub_root.children.emplace_back(middle, t.a, t.straight_corner, first_dir, ! t.straight_corner_is_left, t.depth + 1); - sub_root.children.emplace_back(middle, t.straight_corner, t.b, second_dir, ! t.straight_corner_is_left, t.depth + 1); + sub_root.children.emplace_back(middle, t.a_, t.straight_corner_, first_dir, ! t.straight_corner_is_left_, t.depth_ + 1); + sub_root.children.emplace_back(middle, t.straight_corner_, t.b_, second_dir, ! t.straight_corner_is_left_, t.depth_ + 1); for (SierpinskiTriangle& child : t.children) { createTree(child); @@ -119,12 +119,12 @@ void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) } void SierpinskiFill::createTreeStatistics(SierpinskiTriangle& triangle) { - Point ac = triangle.straight_corner - triangle.a; + Point ac = triangle.straight_corner_ - triangle.a_; float area = 0.5 * INT2MM2(vSize2(ac)); float short_length = .5 * vSizeMM(ac); - float long_length = .5 * vSizeMM(triangle.b - triangle.a); - triangle.area = area; - triangle.realized_length = (triangle.dir == SierpinskiTriangle::SierpinskiDirection::AC_TO_BC) ? long_length : short_length; + float long_length = .5 * vSizeMM(triangle.b_ - triangle.a_); + triangle.area_ = area; + triangle.realized_length_ = (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_BC) ? long_length : short_length; for (SierpinskiTriangle& child : triangle.children) { createTreeStatistics(child); @@ -137,12 +137,12 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) if (triangle.children.empty()) { // set requested_length of leaves AABB triangle_aabb; - triangle_aabb.include(triangle.a); - triangle_aabb.include(triangle.b); - triangle_aabb.include(triangle.straight_corner); + triangle_aabb.include(triangle.a_); + triangle_aabb.include(triangle.b_); + triangle_aabb.include(triangle.straight_corner_); AABB3D triangle_aabb3d(Point3(triangle_aabb.min.X, triangle_aabb.min.Y, 0), Point3(triangle_aabb.max.X, triangle_aabb.max.Y, 1)); float density = density_provider(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. - triangle.requested_length = density * triangle.area / INT2MM(line_width); + triangle.requested_length_ = density * triangle.area_ / INT2MM(line_width); } else { // bubble total up requested_length and total_child_realized_length @@ -150,8 +150,8 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) { createTreeRequestedLengths(child); - triangle.requested_length += child.requested_length; - triangle.total_child_realized_length += child.realized_length; + triangle.requested_length_ += child.requested_length_; + triangle.total_child_realized_length_ += child.realized_length_; } } } @@ -191,7 +191,7 @@ std::vector::iterator for (std::list::iterator it = sequence.begin(); it != sequence.end(); ++it) { SierpinskiTriangle* node = *it; - depth_ordered[node->depth].emplace_back(it); + depth_ordered[node->depth_].emplace_back(it); } return depth_ordered; } @@ -212,14 +212,14 @@ bool SierpinskiFill::subdivideAll() // so then the range will be two long rather than one. std::list::iterator begin = it; std::list::iterator end = std::next(it); - if (triangle.dir == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) { continue; // don't subdivide these two triangles just yet, wait till next iteration } - if (triangle.dir == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) { begin = std::prev(it); - assert((*begin)->depth == triangle.depth || isConstrainedBackward(it)); + assert((*begin)->depth_ == triangle.depth_ || isConstrainedBackward(it)); } else { @@ -229,7 +229,7 @@ bool SierpinskiFill::subdivideAll() // Don't check for constraining in between the cells in the range; // the range is defined as the range of triangles which are constraining each other simultaneously. - if (node->depth == max_depth) // Never subdivide beyond maximum depth. + if (node->depth_ == max_depth) // Never subdivide beyond maximum depth. continue; float total_subdiv_error = getSubdivisionError(begin, end); if (! node->children.empty() && total_subdiv_error >= 0 && ! is_constrained) @@ -275,14 +275,14 @@ bool SierpinskiFill::bubbleUpConstraintErrors() if (is_constrained_forward) { SierpinskiTriangle* next = *std::next(it); - node->error_right -= unresolvable_error; - next->error_left += unresolvable_error; + node->error_right_ -= unresolvable_error; + next->error_left_ += unresolvable_error; } if (is_constrained_backward) { SierpinskiTriangle* prev = *std::prev(it); - node->error_left -= unresolvable_error; - prev->error_right += unresolvable_error; + node->error_left_ -= unresolvable_error; + prev->error_right_ += unresolvable_error; } if (std::abs(unresolvable_error) > allowed_length_error) { @@ -309,8 +309,8 @@ std::list::iterator SierpinskiTriangle* first = *begin; SierpinskiTriangle* last = *std::prev(end); - (*begin)->children.front().error_left += first->error_left; - (*std::prev(end))->children.back().error_right += last->error_right; + (*begin)->children.front().error_left_ += first->error_left_; + (*std::prev(end))->children.back().error_right_ += last->error_right_; } if (redistribute_errors && deep_debug_checking) debugCheck(false); @@ -358,18 +358,18 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: { SierpinskiTriangle* node = *it; SierpinskiTriangle* next = *std::next(it); - if (std::abs(node->error_right + next->error_left) > allowed_length_error) + if (std::abs(node->error_right_ + next->error_left_) > allowed_length_error) { - spdlog::warn("Nodes aren't balanced! er: {} next el: {}", node->error_right, next->error_left); + spdlog::warn("Nodes aren't balanced! er: {} next el: {}", node->error_right_, next->error_left_); assert(false); } - float exchange = node->error_right; - if (node->error_right < next->error_left) + float exchange = node->error_right_; + if (node->error_right_ < next->error_left_) { exchange *= -1; } - node->error_right -= exchange; - next->error_left += exchange; + node->error_right_ -= exchange; + next->error_left_ += exchange; } float total_superfluous_error = 0; @@ -387,30 +387,30 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: } return; } - if (begin != sequence.begin() && end != sequence.end() && first->error_left > allowed_length_error && last->error_right > allowed_length_error) + if (begin != sequence.begin() && end != sequence.end() && first->error_left_ > allowed_length_error && last->error_right_ > allowed_length_error) { - float total_error_input = first->error_left + last->error_right; + float total_error_input = first->error_left_ + last->error_right_; total_superfluous_error = std::min(total_superfluous_error, total_error_input); // total superfluous error cannot be more than the influx of error - float left_spillover = total_superfluous_error * first->error_left / total_error_input; - float right_spillover = total_superfluous_error * last->error_right / total_error_input; - (*begin)->error_left -= left_spillover; - prev->error_right += left_spillover; - (*std::prev(end))->error_right -= right_spillover; - next->error_left += right_spillover; + float left_spillover = total_superfluous_error * first->error_left_ / total_error_input; + float right_spillover = total_superfluous_error * last->error_right_ / total_error_input; + (*begin)->error_left_ -= left_spillover; + prev->error_right_ += left_spillover; + (*std::prev(end))->error_right_ -= right_spillover; + next->error_left_ += right_spillover; } - else if (begin != sequence.begin() && first->error_left > allowed_length_error) + else if (begin != sequence.begin() && first->error_left_ > allowed_length_error) { - total_superfluous_error = std::min(total_superfluous_error, first->error_left); // total superfluous error cannot be more than the influx of error - (*begin)->error_left -= total_superfluous_error; - prev->error_right += total_superfluous_error; - assert(first->error_left > -allowed_length_error); + total_superfluous_error = std::min(total_superfluous_error, first->error_left_); // total superfluous error cannot be more than the influx of error + (*begin)->error_left_ -= total_superfluous_error; + prev->error_right_ += total_superfluous_error; + assert(first->error_left_ > -allowed_length_error); } - else if (end != sequence.end() && last->error_right > allowed_length_error) + else if (end != sequence.end() && last->error_right_ > allowed_length_error) { - total_superfluous_error = std::min(total_superfluous_error, last->error_right); // total superfluous error cannot be more than the influx of error - last->error_right -= total_superfluous_error; - next->error_left += total_superfluous_error; - assert(last->error_right > -allowed_length_error); + total_superfluous_error = std::min(total_superfluous_error, last->error_right_); // total superfluous error cannot be more than the influx of error + last->error_right_ -= total_superfluous_error; + next->error_left_ += total_superfluous_error; + assert(last->error_right_ > -allowed_length_error); } } @@ -505,9 +505,9 @@ void SierpinskiFill::balanceErrors(std::listerror_left -= energy; + nodes[node_idx]->error_left_ -= energy; energy += node_error_compensation[node_idx]; - nodes[node_idx]->error_right += energy; + nodes[node_idx]->error_right_ += energy; } assert(energy < allowed_length_error); } @@ -536,23 +536,23 @@ void SierpinskiFill::diffuseError() { SierpinskiTriangle& triangle = *(*it); - float boundary = (triangle.realized_length + triangle.total_child_realized_length) * .5f; + float boundary = (triangle.realized_length_ + triangle.total_child_realized_length_) * .5f; - float nodal_value = ((use_errors_in_dithering) ? triangle.getErroredValue() : triangle.requested_length); + float nodal_value = ((use_errors_in_dithering) ? triangle.getErroredValue() : triangle.requested_length_); float boundary_error = nodal_value - boundary + error; std::list::iterator begin = it; std::list::iterator end = std::next(it); - if (triangle.dir == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) { pair_constrained_nodes++; continue; // don't subdivide these two triangles just yet, wait till next iteration } - if (triangle.dir == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) { begin = std::prev(it); - assert((*begin)->depth == triangle.depth || isConstrainedBackward(it)); + assert((*begin)->depth_ == triangle.depth_ || isConstrainedBackward(it)); } @@ -573,12 +573,12 @@ void SierpinskiFill::diffuseError() subdivided_nodes++; it = subdivide(begin, end, false); if (dithering) - error += nodal_value - triangle.total_child_realized_length; + error += nodal_value - triangle.total_child_realized_length_; } else { if (dithering) - error += nodal_value - triangle.realized_length; + error += nodal_value - triangle.realized_length_; } } spdlog::debug( @@ -593,7 +593,7 @@ bool SierpinskiFill::isConstrainedBackward(std::list::itera { SierpinskiTriangle* node = *it; SierpinskiTriangle* prev = *std::prev(it); - if (it != sequence.begin() && node->dir == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && prev->depth < node->depth) + if (it != sequence.begin() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && prev->depth_ < node->depth_) return true; return false; } @@ -601,7 +601,7 @@ bool SierpinskiFill::isConstrainedForward(std::list::iterat { SierpinskiTriangle* node = *it; SierpinskiTriangle* next = *std::next(it); - if (std::next(it) != sequence.end() && node->dir == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && next->depth < node->depth) + if (std::next(it) != sequence.end() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && next->depth_ < node->depth_) return true; return false; } @@ -626,9 +626,9 @@ void SierpinskiFill::debugOutput(SVG& svg) for (SierpinskiTriangle* node : sequence) { SierpinskiTriangle& triangle = *node; - svg.writeLine(triangle.a, triangle.b, SVG::Color::GRAY); - svg.writeLine(triangle.a, triangle.straight_corner, SVG::Color::GRAY); - svg.writeLine(triangle.b, triangle.straight_corner, SVG::Color::GRAY); + svg.writeLine(triangle.a_, triangle.b_, SVG::Color::GRAY); + svg.writeLine(triangle.a_, triangle.straight_corner_, SVG::Color::GRAY); + svg.writeLine(triangle.b_, triangle.straight_corner_, SVG::Color::GRAY); } } @@ -636,19 +636,19 @@ void SierpinskiFill::debugOutput(SVG& svg) SierpinskiFill::Edge SierpinskiFill::SierpinskiTriangle::getFromEdge() { Edge ret; - switch (dir) + switch (dir_) { case SierpinskiDirection::AB_TO_BC: - ret = Edge{ a, b }; + ret = Edge{ a_, b_ }; break; case SierpinskiDirection::AC_TO_AB: - ret = Edge{ straight_corner, a }; + ret = Edge{ straight_corner_, a_ }; break; case SierpinskiDirection::AC_TO_BC: - ret = Edge{ straight_corner, a }; + ret = Edge{ straight_corner_, a_ }; break; } - if (! straight_corner_is_left) + if (! straight_corner_is_left_) { std::swap(ret.l, ret.r); } @@ -658,19 +658,19 @@ SierpinskiFill::Edge SierpinskiFill::SierpinskiTriangle::getFromEdge() SierpinskiFill::Edge SierpinskiFill::SierpinskiTriangle::getToEdge() { Edge ret; - switch (dir) + switch (dir_) { case SierpinskiDirection::AB_TO_BC: - ret = Edge{ straight_corner, b }; + ret = Edge{ straight_corner_, b_ }; break; case SierpinskiDirection::AC_TO_AB: - ret = Edge{ b, a }; + ret = Edge{ b_, a_ }; break; case SierpinskiDirection::AC_TO_BC: - ret = Edge{ straight_corner, b }; + ret = Edge{ straight_corner_, b_ }; break; } - if (! straight_corner_is_left) + if (! straight_corner_is_left_) { std::swap(ret.l, ret.r); } @@ -679,22 +679,22 @@ SierpinskiFill::Edge SierpinskiFill::SierpinskiTriangle::getToEdge() float SierpinskiFill::SierpinskiTriangle::getTotalError() { - return error_left + error_right; + return error_left_ + error_right_; } float SierpinskiFill::SierpinskiTriangle::getErroredValue() { - return requested_length + getTotalError(); + return requested_length_ + getTotalError(); } float SierpinskiFill::SierpinskiTriangle::getSubdivisionError() { - return getErroredValue() - total_child_realized_length; + return getErroredValue() - total_child_realized_length_; } float SierpinskiFill::SierpinskiTriangle::getValueError() { - return getErroredValue() - realized_length; + return getErroredValue() - realized_length_; } @@ -705,24 +705,24 @@ Polygon SierpinskiFill::generateCross() const for (SierpinskiTriangle* max_level_it : sequence) { SierpinskiTriangle& triangle = *max_level_it; - Point edge_middle = triangle.a + triangle.b + triangle.straight_corner; - switch (triangle.dir) + Point edge_middle = triangle.a_ + triangle.b_ + triangle.straight_corner_; + switch (triangle.dir_) { case SierpinskiTriangle::SierpinskiDirection::AB_TO_BC: - edge_middle -= triangle.a; + edge_middle -= triangle.a_; break; case SierpinskiTriangle::SierpinskiDirection::AC_TO_AB: - edge_middle -= triangle.straight_corner; + edge_middle -= triangle.straight_corner_; break; case SierpinskiTriangle::SierpinskiDirection::AC_TO_BC: - edge_middle -= triangle.a; + edge_middle -= triangle.a_; break; } ret.add(edge_middle / 2); } float realized_length = INT2MM(ret.polygonLength()); - float requested_length = root.requested_length; + float requested_length = root.requested_length_; float error = (realized_length - requested_length) / requested_length; spdlog::debug("realized_length: {}, requested_length: {} :: {}% error", realized_length, requested_length, .01 * static_cast(10000 * error)); return ret; @@ -758,13 +758,13 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord Cross pattern because the other side is sliding along the straight sides. The steeper overhang is then only in the corner, which is deemed acceptable since the corners are never too sharp. */ - const coord_t period = vSize(triangle.straight_corner - triangle.a); + const coord_t period = vSize(triangle.straight_corner_ - triangle.a_); ret.add(get_edge_crossing_location(period, triangle.getFromEdge())); last_triangle = ▵ } assert(last_triangle); - const coord_t period = vSize(last_triangle->straight_corner - last_triangle->a); + const coord_t period = vSize(last_triangle->straight_corner_ - last_triangle->a_); ret.add(get_edge_crossing_location(period, last_triangle->getToEdge())); if (pocket_size > 10) @@ -813,12 +813,12 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord void SierpinskiFill::debugCheck(bool check_subdivision) { - if (std::abs(sequence.front()->error_left) > allowed_length_error) + if (std::abs(sequence.front()->error_left_) > allowed_length_error) { spdlog::warn("First node has error left!"); assert(false); } - if (std::abs(sequence.back()->error_right) > allowed_length_error) + if (std::abs(sequence.back()->error_right_) > allowed_length_error) { spdlog::warn("Last node has error right!"); assert(false); @@ -833,9 +833,9 @@ void SierpinskiFill::debugCheck(bool check_subdivision) SierpinskiTriangle* node = *it; SierpinskiTriangle* next = *std::next(it); - if (std::abs(node->error_right + next->error_left) > allowed_length_error) + if (std::abs(node->error_right_ + next->error_left_) > allowed_length_error) { - spdlog::warn("Consecutive nodes in fractal don't have the same error! er: {} , nel: {}", node->error_right, next->error_left); + spdlog::warn("Consecutive nodes in fractal don't have the same error! er: {} , nel: {}", node->error_right_, next->error_left_); assert(false); } if (check_subdivision && node->getValueError() < -allowed_length_error) From 434d51b8b1b6acd6b6ad2fc95c88f191ca00805d Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 11:46:51 +0100 Subject: [PATCH 063/218] Fixed variable shadowing warnings --- include/SupportInfillPart.h | 20 +++++----- include/infill/UniformDensityProvider.h | 6 +-- include/progress/ProgressEstimatorLinear.h | 8 ++-- include/settings/FlowTempGraph.h | 12 +++--- src/FffGcodeWriter.cpp | 24 ++++++------ src/PathOrderPath.cpp | 2 +- src/SkirtBrim.cpp | 4 +- src/SupportInfillPart.cpp | 14 +++---- src/TreeSupport.cpp | 2 +- src/settings/FlowTempGraph.cpp | 22 +++++------ src/settings/Settings.cpp | 2 +- src/sliceDataStorage.cpp | 10 ++--- src/support.cpp | 44 +++++++++++----------- 13 files changed, 85 insertions(+), 85 deletions(-) diff --git a/include/SupportInfillPart.h b/include/SupportInfillPart.h index 1767847cb7..9131165d3a 100644 --- a/include/SupportInfillPart.h +++ b/include/SupportInfillPart.h @@ -25,16 +25,16 @@ namespace cura class SupportInfillPart { public: - PolygonsPart outline; //!< The outline of the support infill area - AABB outline_boundary_box; //!< The boundary box for the infill area - coord_t support_line_width; //!< The support line width - int inset_count_to_generate; //!< The number of insets need to be generated from the outline. This is not the actual insets that will be generated. - std::vector> infill_area_per_combine_per_density; //!< a list of separated sub-areas which requires different infill densities and combined thicknesses - // for infill_areas[x][n], x means the density level and n means the thickness - std::vector wall_toolpaths; //!< Any walls go here, not in the areas, where they could be combined vertically (don't combine walls). Binned by inset_idx. + PolygonsPart outline_; //!< The outline of the support infill area + AABB outline_boundary_box_; //!< The boundary box for the infill area + coord_t support_line_width_; //!< The support line width + int inset_count_to_generate_; //!< The number of insets need to be generated from the outline. This is not the actual insets that will be generated. + std::vector> infill_area_per_combine_per_density_; //!< a list of separated sub-areas which requires different infill densities and combined thicknesses + // for infill_areas[x][n], x means the density level and n means the thickness + std::vector wall_toolpaths_; //!< Any walls go here, not in the areas, where they could be combined vertically (don't combine walls). Binned by inset_idx. - coord_t custom_line_distance; - bool use_fractional_config; //!< Request to use the configuration used to fill a partial layer height here, instead of the normal full layer height configuration. + coord_t custom_line_distance_; + bool use_fractional_config_; //!< Request to use the configuration used to fill a partial layer height here, instead of the normal full layer height configuration. SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate = 0, coord_t custom_line_distance = 0); @@ -44,7 +44,7 @@ class SupportInfillPart inline const Polygons& SupportInfillPart::getInfillArea() const { // if there is no wall, we use the original outline as the infill area - return outline; + return outline_; } } // namespace cura diff --git a/include/infill/UniformDensityProvider.h b/include/infill/UniformDensityProvider.h index 3dd2cd8f8f..be8c70e277 100644 --- a/include/infill/UniformDensityProvider.h +++ b/include/infill/UniformDensityProvider.h @@ -15,7 +15,7 @@ class UniformDensityProvider : public DensityProvider { public: UniformDensityProvider(float density) - : density(density) + : density_(density) { }; @@ -25,10 +25,10 @@ class UniformDensityProvider : public DensityProvider virtual float operator()(const AABB3D&) const { - return density; + return density_; }; protected: - float density; + float density_; }; } // namespace cura diff --git a/include/progress/ProgressEstimatorLinear.h b/include/progress/ProgressEstimatorLinear.h index 78c2b1c17d..178338a560 100644 --- a/include/progress/ProgressEstimatorLinear.h +++ b/include/progress/ProgressEstimatorLinear.h @@ -14,18 +14,18 @@ namespace cura class ProgressEstimatorLinear : public ProgressEstimator { - unsigned int total_steps; + unsigned int total_steps_; public: ProgressEstimatorLinear(unsigned int total_steps) - : total_steps(total_steps) + : total_steps_(total_steps) { } double progress(int current_step) { - return double(current_step) / double(total_steps); + return double(current_step) / double(total_steps_); } }; } // namespace cura -#endif // PROGRESS_PROGRESS_ESTIMATOR_LINEAR_H \ No newline at end of file +#endif // PROGRESS_PROGRESS_ESTIMATOR_LINEAR_H diff --git a/include/settings/FlowTempGraph.h b/include/settings/FlowTempGraph.h index c232579d41..3cb26e91dd 100644 --- a/include/settings/FlowTempGraph.h +++ b/include/settings/FlowTempGraph.h @@ -21,15 +21,15 @@ class FlowTempGraph public: struct Datum { - const double flow; //!< The flow in mm^3/s - const Temperature temp; //!< The temperature in *C + const double flow_; //!< The flow in mm^3/s + const Temperature temp_; //!< The temperature in *C Datum(const double flow, const Temperature temp) - : flow(flow) - , temp(temp) + : flow_(flow) + , temp_(temp) {} }; - std::vector data; //!< The points of the graph between which the graph is linearly interpolated + std::vector data_; //!< The points of the graph between which the graph is linearly interpolated /*! * Get the temperature corresponding to a specific flow. @@ -46,4 +46,4 @@ class FlowTempGraph } // namespace cura -#endif // FLOW_TEMP_GRAPH \ No newline at end of file +#endif // FLOW_TEMP_GRAPH diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 52aa1cd876..46103204ae 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -3216,7 +3216,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer PathOrderOptimizer island_order_optimizer(gcode_layer.getLastPlannedPositionOrStartingPosition()); for (const SupportInfillPart& part : support_layer.support_infill_parts) { - (part.use_fractional_config ? island_order_optimizer_initial : island_order_optimizer).addPolygon(&part); + (part.use_fractional_config_ ? island_order_optimizer_initial : island_order_optimizer).addPolygon(&part); } island_order_optimizer_initial.optimize(); island_order_optimizer.optimize(); @@ -3234,13 +3234,13 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer for (const PathOrdering& path : ranges::views::concat(island_order_optimizer_initial.paths_, island_order_optimizer.paths_)) { const SupportInfillPart& part = *path.vertices_; - const auto& configs = part.use_fractional_config ? gcode_layer.configs_storage.support_fractional_infill_config : gcode_layer.configs_storage.support_infill_config; + const auto& configs = part.use_fractional_config_ ? gcode_layer.configs_storage.support_fractional_infill_config : gcode_layer.configs_storage.support_infill_config; // always process the wall overlap if walls are generated - const int current_support_infill_overlap = (part.inset_count_to_generate > 0) ? default_support_infill_overlap : 0; + const int current_support_infill_overlap = (part.inset_count_to_generate_ > 0) ? default_support_infill_overlap : 0; // The support infill walls were generated separately, first. Always add them, regardless of how many densities we have. - std::vector wall_toolpaths = part.wall_toolpaths; + std::vector wall_toolpaths = part.wall_toolpaths_; if (! wall_toolpaths.empty()) { @@ -3268,37 +3268,37 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer added_something |= wall_orderer.addToLayer(); } - if ((default_support_line_distance <= 0 && support_structure != ESupportStructure::TREE) || part.infill_area_per_combine_per_density.empty()) + if ((default_support_line_distance <= 0 && support_structure != ESupportStructure::TREE) || part.infill_area_per_combine_per_density_.empty()) { continue; } - for (unsigned int combine_idx = 0; combine_idx < part.infill_area_per_combine_per_density[0].size(); ++combine_idx) + for (unsigned int combine_idx = 0; combine_idx < part.infill_area_per_combine_per_density_[0].size(); ++combine_idx) { const coord_t support_line_width = default_support_line_width * (combine_idx + 1); Polygons support_polygons; std::vector wall_toolpaths_here; Polygons support_lines; - const size_t max_density_idx = part.infill_area_per_combine_per_density.size() - 1; + const size_t max_density_idx = part.infill_area_per_combine_per_density_.size() - 1; for (size_t density_idx = max_density_idx; (density_idx + 1) > 0; --density_idx) { - if (combine_idx >= part.infill_area_per_combine_per_density[density_idx].size()) + if (combine_idx >= part.infill_area_per_combine_per_density_[density_idx].size()) { continue; } const unsigned int density_factor = 2 << density_idx; // == pow(2, density_idx + 1) int support_line_distance_here - = (part.custom_line_distance > 0 - ? part.custom_line_distance + = (part.custom_line_distance_ > 0 + ? part.custom_line_distance_ : default_support_line_distance * density_factor); // the highest density infill combines with the next to create a grid with density_factor 1 const int support_shift = support_line_distance_here / 2; - if (part.custom_line_distance == 0 && (density_idx == max_density_idx || support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D)) + if (part.custom_line_distance_ == 0 && (density_idx == max_density_idx || support_pattern == EFillMethod::CROSS || support_pattern == EFillMethod::CROSS_3D)) { support_line_distance_here /= 2; } - const Polygons& area = Simplify(infill_extruder.settings_).polygon(part.infill_area_per_combine_per_density[density_idx][combine_idx]); + const Polygons& area = Simplify(infill_extruder.settings_).polygon(part.infill_area_per_combine_per_density_[density_idx][combine_idx]); constexpr size_t wall_count = 0; // Walls are generated somewhere else, so their layers aren't vertically combined. const coord_t small_area_width = 0; diff --git a/src/PathOrderPath.cpp b/src/PathOrderPath.cpp index 45039c98d4..7ee8e49d55 100644 --- a/src/PathOrderPath.cpp +++ b/src/PathOrderPath.cpp @@ -35,7 +35,7 @@ namespace cura template<> ConstPolygonRef PathOrdering::getVertexData() { - return vertices_->outline.outerPolygon(); + return vertices_->outline_.outerPolygon(); } template<> ConstPolygonRef PathOrdering::getVertexData() diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index cd2ed3e907..18da72094a 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -443,7 +443,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) } for (const SupportInfillPart& support_infill_part : support_layer.support_infill_parts) { - first_layer_outline.add(support_infill_part.outline); + first_layer_outline.add(support_infill_part.outline_); } first_layer_outline.add(support_layer.support_bottom); first_layer_outline.add(support_layer.support_roof); @@ -608,7 +608,7 @@ void SkirtBrim::generateSupportBrim() Polygons support_outline; for (SupportInfillPart& part : support_layer.support_infill_parts) { - support_outline.add(part.outline); + support_outline.add(part.outline_); } const Polygons brim_area = support_outline.difference(support_outline.offset(-brim_width)); support_layer.excludeAreasFromSupportInfillAreas(brim_area, AABB(brim_area)); diff --git a/src/SupportInfillPart.cpp b/src/SupportInfillPart.cpp index ae0b8cf7c1..fb504f5fb5 100644 --- a/src/SupportInfillPart.cpp +++ b/src/SupportInfillPart.cpp @@ -9,12 +9,12 @@ using namespace cura; SupportInfillPart::SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate, coord_t custom_line_distance) - : outline(outline) - , outline_boundary_box(outline) - , support_line_width(support_line_width) - , inset_count_to_generate(inset_count_to_generate) - , custom_line_distance(custom_line_distance) - , use_fractional_config(use_fractional_config) + : outline_(outline) + , outline_boundary_box_(outline) + , support_line_width_(support_line_width) + , inset_count_to_generate_(inset_count_to_generate) + , custom_line_distance_(custom_line_distance) + , use_fractional_config_(use_fractional_config) { - infill_area_per_combine_per_density.clear(); + infill_area_per_combine_per_density_.clear(); } diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index 958a08f9fb..fe2cc87e77 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -139,7 +139,7 @@ void TreeSupport::generateSupportAreas(SliceDataStorage& storage) exlude_at_layer.add(storage.support.supportLayers[layer_idx].support_roof); for (auto part : storage.support.supportLayers[layer_idx].support_infill_parts) { - exlude_at_layer.add(part.outline); + exlude_at_layer.add(part.outline_); } exclude[layer_idx] = exlude_at_layer.unionPolygons(); scripta::log("tree_support_exclude", exclude[layer_idx], SectionType::SUPPORT, layer_idx); diff --git a/src/settings/FlowTempGraph.cpp b/src/settings/FlowTempGraph.cpp index 700b9cbdf3..88fcb82cb2 100644 --- a/src/settings/FlowTempGraph.cpp +++ b/src/settings/FlowTempGraph.cpp @@ -10,32 +10,32 @@ namespace cura double FlowTempGraph::getTemp(const double flow, const Temperature material_print_temperature, const bool flow_dependent_temperature) const { - if (! flow_dependent_temperature || data.size() == 0) + if (! flow_dependent_temperature || data_.size() == 0) { return material_print_temperature; } - if (data.size() == 1) + if (data_.size() == 1) { - return data.front().temp; + return data_.front().temp_; } - if (flow < data.front().flow) + if (flow < data_.front().flow_) { spdlog::warn("Warning! Flow too low!"); - return data.front().temp; + return data_.front().temp_; } - const Datum* last_datum = &data.front(); - for (unsigned int datum_idx = 1; datum_idx < data.size(); datum_idx++) + const Datum* last_datum = &data_.front(); + for (unsigned int datum_idx = 1; datum_idx < data_.size(); datum_idx++) { - const Datum& datum = data[datum_idx]; - if (datum.flow >= flow) + const Datum& datum = data_[datum_idx]; + if (datum.flow_ >= flow) { - return last_datum->temp + Temperature((datum.temp - last_datum->temp) * (flow - last_datum->flow) / (datum.flow - last_datum->flow)); + return last_datum->temp_ + Temperature((datum.temp_ - last_datum->temp_) * (flow - last_datum->flow_) / (datum.flow_ - last_datum->flow_)); } last_datum = &datum; } spdlog::warn("Warning! Flow too high!"); - return data.back().temp; + return data_.back().temp_; } } // namespace cura diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index ffc89a274b..c5e5bb0286 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -245,7 +245,7 @@ FlowTempGraph Settings::get(const std::string& key) const { double first = std::stod(first_substring); double second = std::stod(second_substring); - result.data.emplace_back(first, second); + result.data_.emplace_back(first, second); } catch (const std::invalid_argument& e) { diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 37453a303c..27f0266c69 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -322,7 +322,7 @@ Polygons { for (const SupportInfillPart& support_infill_part : support_layer.support_infill_parts) { - total.add(support_infill_part.outline); + total.add(support_infill_part.outline_); } total.add(support_layer.support_bottom); total.add(support_layer.support_roof); @@ -667,12 +667,12 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po SupportInfillPart& support_infill_part = support_infill_parts[part_idx]; // if the areas don't overlap, do nothing - if (! exclude_polygons_boundary_box.hit(support_infill_part.outline_boundary_box)) + if (! exclude_polygons_boundary_box.hit(support_infill_part.outline_boundary_box_)) { continue; } - Polygons result_polygons = support_infill_part.outline.difference(exclude_polygons); + Polygons result_polygons = support_infill_part.outline_.difference(exclude_polygons); // if no smaller parts get generated, this mean this part should be removed. if (result_polygons.empty()) @@ -692,12 +692,12 @@ void SupportLayer::excludeAreasFromSupportInfillAreas(const Polygons& exclude_po // there are one or more smaller parts. // we first replace the current part with one of the smaller parts, // the rest we add to the support_infill_parts (but after part_count_to_check) - support_infill_part.outline = smaller_support_islands[0]; + support_infill_part.outline_ = smaller_support_islands[0]; for (size_t support_island_idx = 1; support_island_idx < smaller_support_islands.size(); ++support_island_idx) { const PolygonsPart& smaller_island = smaller_support_islands[support_island_idx]; - support_infill_parts.emplace_back(smaller_island, support_infill_part.support_line_width, support_infill_part.inset_count_to_generate); + support_infill_parts.emplace_back(smaller_island, support_infill_part.support_line_width_, support_infill_part.inset_count_to_generate_); } } diff --git a/src/support.cpp b/src/support.cpp index bfbd4ab8f9..234ff27dbd 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -223,15 +223,15 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) } // NOTE: This both generates the walls _and_ returns the _actual_ infill area (the one _without_ walls) for use in the rest of the method. const Polygons infill_area = Infill::generateWallToolPaths( - support_infill_part.wall_toolpaths, + support_infill_part.wall_toolpaths_, original_area, - support_infill_part.inset_count_to_generate, + support_infill_part.inset_count_to_generate_, wall_width, 0, infill_extruder.settings_, layer_nr, SectionType::SUPPORT); - const AABB& this_part_boundary_box = support_infill_part.outline_boundary_box; + const AABB& this_part_boundary_box = support_infill_part.outline_boundary_box_; // calculate density areas for this island Polygons less_dense_support = infill_area; // one step less dense with each density_step @@ -253,13 +253,13 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) Polygons relevant_upper_polygons; for (unsigned int upper_part_idx = 0; upper_part_idx < upper_infill_parts.size(); ++upper_part_idx) { - if (support_infill_part.outline.empty()) + if (support_infill_part.outline_.empty()) { continue; } // we compute intersection based on support infill areas - const AABB& upper_part_boundary_box = upper_infill_parts[upper_part_idx].outline_boundary_box; + const AABB& upper_part_boundary_box = upper_infill_parts[upper_part_idx].outline_boundary_box_; // // Here we are comparing the **outlines** of the infill areas // @@ -278,7 +278,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) // if (upper_part_boundary_box.hit(this_part_boundary_box)) { - relevant_upper_polygons.add(upper_infill_parts[upper_part_idx].outline); + relevant_upper_polygons.add(upper_infill_parts[upper_part_idx].outline_); } } @@ -290,21 +290,21 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) } // add new infill_area_per_combine_per_density for the current density - support_infill_part.infill_area_per_combine_per_density.emplace_back(); - std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density.back(); + support_infill_part.infill_area_per_combine_per_density_.emplace_back(); + std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); const Polygons more_dense_support = infill_area.difference(less_dense_support); support_area_current_density.push_back(more_dense_support); } - support_infill_part.infill_area_per_combine_per_density.emplace_back(); - std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density.back(); + support_infill_part.infill_area_per_combine_per_density_.emplace_back(); + std::vector& support_area_current_density = support_infill_part.infill_area_per_combine_per_density_.back(); support_area_current_density.push_back(infill_area); - assert(support_infill_part.infill_area_per_combine_per_density.size() != 0 && "support_infill_part.infill_area_per_combine_per_density should now be initialized"); + assert(support_infill_part.infill_area_per_combine_per_density_.size() != 0 && "support_infill_part.infill_area_per_combine_per_density should now be initialized"); #ifdef DEBUG - for (unsigned int part_i = 0; part_i < support_infill_part.infill_area_per_combine_per_density.size(); ++part_i) + for (unsigned int part_i = 0; part_i < support_infill_part.infill_area_per_combine_per_density_.size(); ++part_i) { - assert(support_infill_part.infill_area_per_combine_per_density[part_i].size() != 0); + assert(support_infill_part.infill_area_per_combine_per_density_[part_i].size() != 0); } #endif // DEBUG } @@ -364,13 +364,13 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) { continue; } - for (unsigned int density_idx = 0; density_idx < part.infill_area_per_combine_per_density.size(); ++density_idx) + for (unsigned int density_idx = 0; density_idx < part.infill_area_per_combine_per_density_.size(); ++density_idx) { // go over each density of gradual infill (these density areas overlap!) - std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density[density_idx]; + std::vector& infill_area_per_combine = part.infill_area_per_combine_per_density_[density_idx]; Polygons result; for (SupportInfillPart& lower_layer_part : lower_layer.support_infill_parts) { - if (! part.outline_boundary_box.hit(lower_layer_part.outline_boundary_box)) + if (! part.outline_boundary_box_.hit(lower_layer_part.outline_boundary_box_)) { continue; } @@ -389,20 +389,20 @@ void AreaSupport::combineSupportInfillLayers(SliceDataStorage& storage) // Generally: remove only from *same density* areas on layer below // If there are no same density areas, then it's ok to print them anyway // Don't remove other density areas - if (density_idx == part.infill_area_per_combine_per_density.size() - 1) + if (density_idx == part.infill_area_per_combine_per_density_.size() - 1) { // For the most dense areas on a given layer the density of that area is doubled. // This means that - if the lower layer has more densities - // all those lower density lines are included in the most dense of this layer. // We therefore compare the most dense are on this layer with all densities // of the lower layer with the same or higher density index - max_lower_density_idx = lower_layer_part.infill_area_per_combine_per_density.size() - 1; + max_lower_density_idx = lower_layer_part.infill_area_per_combine_per_density_.size() - 1; } for (unsigned int lower_density_idx = density_idx; - lower_density_idx <= max_lower_density_idx && lower_density_idx < lower_layer_part.infill_area_per_combine_per_density.size(); + lower_density_idx <= max_lower_density_idx && lower_density_idx < lower_layer_part.infill_area_per_combine_per_density_.size(); lower_density_idx++) { - std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density[lower_density_idx]; + std::vector& lower_infill_area_per_combine = lower_layer_part.infill_area_per_combine_per_density_[lower_density_idx]; lower_infill_area_per_combine[0] = lower_infill_area_per_combine[0].difference(intersection); // remove thickened area from lower (single thickness) layer } @@ -425,13 +425,13 @@ void AreaSupport::cleanup(SliceDataStorage& storage) { SupportInfillPart& part = layer.support_infill_parts[part_idx]; bool can_be_removed = true; - if (part.inset_count_to_generate > 0) + if (part.inset_count_to_generate_ > 0) { can_be_removed = false; } else { - for (const std::vector& infill_area_per_combine_this_density : part.infill_area_per_combine_per_density) + for (const std::vector& infill_area_per_combine_this_density : part.infill_area_per_combine_per_density_) { for (const Polygons& infill_area_this_combine_this_density : infill_area_per_combine_this_density) { From 39098a21b23615d8c9e85d3630394be53a9b8200 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 12:06:25 +0100 Subject: [PATCH 064/218] Fixed variable shadowing warnings --- include/SkeletalTrapezoidationEdge.h | 52 ++--- include/SkeletalTrapezoidationJoint.h | 36 ++-- include/utils/PolygonConnector.h | 126 +++++------ src/SkeletalTrapezoidation.cpp | 293 +++++++++++++------------- src/SkeletalTrapezoidationGraph.cpp | 34 +-- src/utils/PolygonConnector.cpp | 12 +- tests/utils/PolygonConnectorTest.cpp | 28 +-- 7 files changed, 291 insertions(+), 290 deletions(-) diff --git a/include/SkeletalTrapezoidationEdge.h b/include/SkeletalTrapezoidationEdge.h index 60f464deb5..75b0c06b73 100644 --- a/include/SkeletalTrapezoidationEdge.h +++ b/include/SkeletalTrapezoidationEdge.h @@ -29,13 +29,13 @@ class SkeletalTrapezoidationEdge */ struct TransitionMiddle { - coord_t pos; // Position along edge as measure from edge.from.p - int lower_bead_count; - coord_t feature_radius; // The feature radius at which this transition is placed + coord_t pos_; // Position along edge as measure from edge.from.p + int lower_bead_count_; + coord_t feature_radius_; // The feature radius at which this transition is placed TransitionMiddle(coord_t pos, int lower_bead_count, coord_t feature_radius) - : pos(pos) - , lower_bead_count(lower_bead_count) - , feature_radius(feature_radius) + : pos_(pos) + , lower_bead_count_(lower_bead_count) + , feature_radius_(feature_radius) { } }; @@ -45,13 +45,13 @@ class SkeletalTrapezoidationEdge */ struct TransitionEnd { - coord_t pos; // Position along edge as measure from edge.from.p, where the edge is always the half edge oriented from lower to higher R - int lower_bead_count; - bool is_lower_end; // Whether this is the ed of the transition with lower bead count + coord_t pos_; // Position along edge as measure from edge.from.p, where the edge is always the half edge oriented from lower to higher R + int lower_bead_count_; + bool is_lower_end_; // Whether this is the ed of the transition with lower bead count TransitionEnd(coord_t pos, int lower_bead_count, bool is_lower_end) - : pos(pos) - , lower_bead_count(lower_bead_count) - , is_lower_end(is_lower_end) + : pos_(pos) + , lower_bead_count_(lower_bead_count) + , is_lower_end_(is_lower_end) { } }; @@ -62,14 +62,14 @@ class SkeletalTrapezoidationEdge EXTRA_VD = 1, // introduced to voronoi diagram in order to make the gMAT TRANSITION_END = 2 // introduced to voronoi diagram in order to make the gMAT }; - EdgeType type; + EdgeType type_; SkeletalTrapezoidationEdge() : SkeletalTrapezoidationEdge(EdgeType::NORMAL) { } SkeletalTrapezoidationEdge(const EdgeType& type) - : type(type) + : type_(type) , is_central(Central::UNKNOWN) { } @@ -90,49 +90,49 @@ class SkeletalTrapezoidationEdge bool hasTransitions(bool ignore_empty = false) const { - return transitions.use_count() > 0 && (ignore_empty || ! transitions.lock()->empty()); + return transitions_.use_count() > 0 && (ignore_empty || ! transitions_.lock()->empty()); } void setTransitions(std::shared_ptr>& storage) { - transitions = storage; + transitions_ = storage; } std::shared_ptr> getTransitions() { - return transitions.lock(); + return transitions_.lock(); } bool hasTransitionEnds(bool ignore_empty = false) const { - return transition_ends.use_count() > 0 && (ignore_empty || ! transition_ends.lock()->empty()); + return transition_ends_.use_count() > 0 && (ignore_empty || ! transition_ends_.lock()->empty()); } void setTransitionEnds(std::shared_ptr>& storage) { - transition_ends = storage; + transition_ends_ = storage; } std::shared_ptr> getTransitionEnds() { - return transition_ends.lock(); + return transition_ends_.lock(); } bool hasExtrusionJunctions(bool ignore_empty = false) const { - return extrusion_junctions.use_count() > 0 && (ignore_empty || ! extrusion_junctions.lock()->empty()); + return extrusion_junctions_.use_count() > 0 && (ignore_empty || ! extrusion_junctions_.lock()->empty()); } void setExtrusionJunctions(std::shared_ptr& storage) { - extrusion_junctions = storage; + extrusion_junctions_ = storage; } std::shared_ptr getExtrusionJunctions() { - return extrusion_junctions.lock(); + return extrusion_junctions_.lock(); } Central is_central; //! whether the edge is significant; whether the source segments have a sharp angle; -1 is unknown private: - std::weak_ptr> transitions; - std::weak_ptr> transition_ends; - std::weak_ptr extrusion_junctions; + std::weak_ptr> transitions_; + std::weak_ptr> transition_ends_; + std::weak_ptr extrusion_junctions_; }; diff --git a/include/SkeletalTrapezoidationJoint.h b/include/SkeletalTrapezoidationJoint.h index e8c5ad42a7..fc27526f1f 100644 --- a/include/SkeletalTrapezoidationJoint.h +++ b/include/SkeletalTrapezoidationJoint.h @@ -19,45 +19,45 @@ class SkeletalTrapezoidationJoint public: struct BeadingPropagation { - Beading beading; - coord_t dist_to_bottom_source; - coord_t dist_from_top_source; - bool is_upward_propagated_only; + Beading beading_; + coord_t dist_to_bottom_source_; + coord_t dist_from_top_source_; + bool is_upward_propagated_only_; BeadingPropagation(const Beading& beading) - : beading(beading) - , dist_to_bottom_source(0) - , dist_from_top_source(0) - , is_upward_propagated_only(false) + : beading_(beading) + , dist_to_bottom_source_(0) + , dist_from_top_source_(0) + , is_upward_propagated_only_(false) { } }; - coord_t distance_to_boundary; - coord_t bead_count; - float transition_ratio; //! The distance near the skeleton to leave free because this joint is in the middle of a transition, as a fraction of the inner bead width of the bead + coord_t distance_to_boundary_; + coord_t bead_count_; + float transition_ratio_; //! The distance near the skeleton to leave free because this joint is in the middle of a transition, as a fraction of the inner bead width of the bead //! at the higher transition. SkeletalTrapezoidationJoint() - : distance_to_boundary(-1) - , bead_count(-1) - , transition_ratio(0) + : distance_to_boundary_(-1) + , bead_count_(-1) + , transition_ratio_(0) { } bool hasBeading() const { - return beading.use_count() > 0; + return beading_.use_count() > 0; } void setBeading(std::shared_ptr& storage) { - beading = storage; + beading_ = storage; } std::shared_ptr getBeading() { - return beading.lock(); + return beading_.lock(); } private: - std::weak_ptr beading; + std::weak_ptr beading_; }; } // namespace cura diff --git a/include/utils/PolygonConnector.h b/include/utils/PolygonConnector.h index d29961ca00..b4d050a78d 100644 --- a/include/utils/PolygonConnector.h +++ b/include/utils/PolygonConnector.h @@ -101,11 +101,11 @@ class PolygonConnector void connect(Polygons& output_polygons, std::vector& output_paths); protected: - coord_t line_width; //!< The distance between the line segments which connect two polygons. - std::vector input_polygons; //!< The polygons assembled by calls to \ref PolygonConnector::add. - std::vector input_paths; //!< The paths assembled by calls to \ref PolygonConnector::add. + coord_t line_width_; //!< The distance between the line segments which connect two polygons. + std::vector input_polygons_; //!< The polygons assembled by calls to \ref PolygonConnector::add. + std::vector input_paths_; //!< The paths assembled by calls to \ref PolygonConnector::add. - constexpr static Ratio max_gap = 0.5; //!< The maximum allowed gap between lines that get connected, in multiples of the local line width. Allows connections inside corners where the endpoints are slightly apart. + constexpr static Ratio max_gap_ = 0.5; //!< The maximum allowed gap between lines that get connected, in multiples of the local line width. Allows connections inside corners where the endpoints are slightly apart. /*! * Line segment to connect two polygons, with all the necessary information @@ -121,36 +121,36 @@ class PolygonConnector /*! * The polygon at the source of the connection. */ - Polygonal* from_poly; + Polygonal* from_poly_; /*! * The index of the line segment at the source of the connection. * * This line segment is the one after the vertex with the same index. */ - size_t from_segment; + size_t from_segment_; /*! * The precise location of the source of the connection. */ - Point from_point; + Point from_point_; /*! * The polygon at the destination of the connection. */ - Polygonal* to_poly; + Polygonal* to_poly_; /*! * The index of the line segment at the destination of the connection. * * This line segment is the one after the vertex with the same index. */ - size_t to_segment; + size_t to_segment_; /*! * The precise location of the destination of the connection. */ - Point to_point; + Point to_point_; /*! * Create a new connection. @@ -166,12 +166,12 @@ class PolygonConnector * connection. */ PolygonConnection(Polygonal* from_poly, const size_t from_segment, const Point from_point, Polygonal* to_poly, const size_t to_segment, const Point to_point) - : from_poly(from_poly) - , from_segment(from_segment) - , from_point(from_point) - , to_poly(to_poly) - , to_segment(to_segment) - , to_point(to_point) + : from_poly_(from_poly) + , from_segment_(from_segment) + , from_point_(from_point) + , to_poly_(to_poly) + , to_segment_(to_segment) + , to_point_(to_point) { } @@ -183,7 +183,7 @@ class PolygonConnector */ coord_t getDistance2() const { - return vSize2(from_point - to_point); + return vSize2(from_point_ - to_point_); } }; @@ -201,10 +201,10 @@ class PolygonConnector template struct PolygonBridge { - PolygonConnection a; //!< first connection - PolygonConnection b; //!< second connection + PolygonConnection a_; //!< first connection + PolygonConnection b_; //!< second connection PolygonBridge(const PolygonConnection& a, const PolygonConnection& b) - : a(a), b(b) + : a_(a), b_(b) {} }; @@ -240,7 +240,7 @@ class PolygonConnector std::optional> bridge = getBridge(current, to_connect); if(bridge) { - connectPolygonsAlongBridge(*bridge, *bridge->a.to_poly); //Connect the polygons, and store the result in the to_poly. + connectPolygonsAlongBridge(*bridge, *bridge->a_.to_poly_); //Connect the polygons, and store the result in the to_poly. //Don't store the current polygon. It has just been merged into the other one. } else //Can't connect this to anything. Leave it as-is. @@ -371,9 +371,9 @@ class PolygonConnector template coord_t getSpace(const PolygonConnection& connection) const { - const coord_t from_width = interpolateWidth(connection.from_point, (*connection.from_poly)[connection.from_segment], (*connection.from_poly)[(connection.from_segment + 1) % connection.from_poly->size()]); - const coord_t to_width = interpolateWidth(connection.to_point, (*connection.to_poly)[connection.to_segment], (*connection.to_poly)[(connection.to_segment + 1) % connection.to_poly->size()]); - return vSize(connection.to_point - connection.from_point) - from_width / 2 - to_width / 2; + const coord_t from_width = interpolateWidth(connection.from_point_, (*connection.from_poly_)[connection.from_segment_], (*connection.from_poly_)[(connection.from_segment_ + 1) % connection.from_poly_->size()]); + const coord_t to_width = interpolateWidth(connection.to_point_, (*connection.to_poly_)[connection.to_segment_], (*connection.to_poly_)[(connection.to_segment_ + 1) % connection.to_poly_->size()]); + return vSize(connection.to_point_ - connection.from_point_) - from_width / 2 - to_width / 2; } /*! @@ -406,7 +406,7 @@ class PolygonConnector std::optional> findConnection(Polygonal& from_poly, std::vector& to_polygons) { //Optimise for finding the best connection. - coord_t best_distance = line_width * max_gap; //Allow up to the max_gap. + coord_t best_distance = line_width_ * max_gap_; //Allow up to the max_gap. std::optional> best_connection; std::optional> best_second_connection; @@ -435,7 +435,7 @@ class PolygonConnector //Try a naive distance first. Faster to compute, but it may estimate the distance too small. coord_t naive_dist = LinearAlg2D::getDistFromLine(from_pos1, to_pos1, to_pos2); - if(naive_dist - from_width1 - smallest_to_width < line_width * max_gap) + if(naive_dist - from_width1 - smallest_to_width < line_width_ * max_gap_) { const Point closest_point = LinearAlg2D::getClosestOnLineSegment(from_pos1, to_pos1, to_pos2); if(closest_point == to_pos2) //The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. @@ -459,7 +459,7 @@ class PolygonConnector //Also try the other way around: From the line segment of the from_poly to a vertex in the to_polygons. naive_dist = LinearAlg2D::getDistFromLine(to_pos1, from_pos1, from_pos2); - if(naive_dist - smallest_from_width - to_width1 < line_width * max_gap) + if(naive_dist - smallest_from_width - to_width1 < line_width_ * max_gap_) { const Point closest_point = LinearAlg2D::getClosestOnLineSegment(to_pos1, from_pos1, from_pos2); if(closest_point == from_pos2) //The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. @@ -518,9 +518,9 @@ class PolygonConnector } //Ensure that B is always the right connection and A the left. - if(LinearAlg2D::pointIsLeftOfLine(connection->b.from_point, connection->a.from_point, connection->a.to_point) > 0) + if(LinearAlg2D::pointIsLeftOfLine(connection->b_.from_point_, connection->a_.from_point_, connection->a_.to_point_) > 0) { - std::swap(connection->a, connection->b); + std::swap(connection->a_, connection->b_); } return connection; } @@ -609,10 +609,10 @@ class PolygonConnector coord_t best_connection_length = std::numeric_limits::max(); //Find the four intersections, on both sides of the initial connection, and on both polygons. - std::optional> from_forward_intersection = walkUntilDistanceFromLine(*first.from_poly, first.from_segment, adjacent_distance, first.from_point, first.to_point, +1); - std::optional> from_backward_intersection = walkUntilDistanceFromLine(*first.from_poly, first.from_segment, adjacent_distance, first.from_point, first.to_point, -1); - std::optional> to_forward_intersection = walkUntilDistanceFromLine(*first.to_poly, first.to_segment, adjacent_distance, first.from_point, first.to_point, +1); - std::optional> to_backward_intersection = walkUntilDistanceFromLine(*first.to_poly, first.to_segment, adjacent_distance, first.from_point, first.to_point, -1); + std::optional> from_forward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); + std::optional> from_backward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); + std::optional> to_forward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); + std::optional> to_backward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); for(const std::optional>& from_intersection : {from_forward_intersection, from_backward_intersection}) { @@ -621,21 +621,21 @@ class PolygonConnector continue; } //Find the shortest of the connections in the to_poly. - const bool original_side = LinearAlg2D::pointIsLeftOfLine(first.to_point, first.from_point, from_intersection->first) > 0; + const bool original_side = LinearAlg2D::pointIsLeftOfLine(first.to_point_, first.from_point_, from_intersection->first) > 0; for(const std::optional>& to_intersection : {to_forward_intersection, to_backward_intersection}) { if(!to_intersection) { continue; } - const bool current_side = LinearAlg2D::pointIsLeftOfLine(to_intersection->first, first.from_point, from_intersection->first) > 0; + const bool current_side = LinearAlg2D::pointIsLeftOfLine(to_intersection->first, first.from_point_, from_intersection->first) > 0; if (original_side != current_side) { continue; } - PolygonConnection connection(first.from_poly, from_intersection->second, from_intersection->first, first.to_poly, to_intersection->second, to_intersection->first); + PolygonConnection connection(first.from_poly_, from_intersection->second, from_intersection->first, first.to_poly_, to_intersection->second, to_intersection->first); const coord_t connection_length = getSpace(connection); - if(connection_length < max_gap * line_width && connection_length < best_connection_length) //Connection is allowed. + if(connection_length < max_gap_ * line_width_ && connection_length < best_connection_length) //Connection is allowed. { result = connection; best_connection_length = connection_length; @@ -661,72 +661,72 @@ class PolygonConnector Polygonal ret = createEmpty(); //Create a temporary result that we'll move into the result. - const size_t from_size = bridge.b.from_poly->size(); + const size_t from_size = bridge.b_.from_poly_->size(); //Add the from-endpoint of B. - const coord_t b_from_width = interpolateWidth(bridge.b.from_point, (*bridge.b.from_poly)[bridge.b.from_segment], (*bridge.b.from_poly)[(bridge.b.from_segment + 1) % from_size]); - addVertex(ret, bridge.b.from_point, b_from_width); + const coord_t b_from_width = interpolateWidth(bridge.b_.from_point_, (*bridge.b_.from_poly_)[bridge.b_.from_segment_], (*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); + addVertex(ret, bridge.b_.from_point_, b_from_width); //Add the from-polygonal from B to A. short forwards; - if(bridge.a.from_segment == bridge.b.from_segment) //If we start and end on the same segment, iterate in the direction from A to B. + if(bridge.a_.from_segment_ == bridge.b_.from_segment_) //If we start and end on the same segment, iterate in the direction from A to B. { - const Point vertex = getPosition((*bridge.b.from_poly)[bridge.b.from_segment]); //Same vertex for A and B. - const Point next_vertex = getPosition((*bridge.b.from_poly)[(bridge.b.from_segment + 1) % from_size]); + const Point vertex = getPosition((*bridge.b_.from_poly_)[bridge.b_.from_segment_]); //Same vertex for A and B. + const Point next_vertex = getPosition((*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); const Point direction = next_vertex - vertex; //Direction we'd go into when forward iterating. - const Point a_to_b = bridge.b.from_point - bridge.a.from_point; + const Point a_to_b = bridge.b_.from_point_ - bridge.a_.from_point_; forwards = vSize2(direction - a_to_b) < vSize2(-direction - a_to_b); } else { //If not the same segment, traverse in whichever direction is the long way around. - forwards = ((bridge.b.from_segment + from_size - bridge.a.from_segment) % from_size) < ((bridge.a.from_segment + from_size - bridge.b.from_segment) % from_size); + forwards = ((bridge.b_.from_segment_ + from_size - bridge.a_.from_segment_) % from_size) < ((bridge.a_.from_segment_ + from_size - bridge.b_.from_segment_) % from_size); } - size_t first_segment = forwards ? (bridge.b.from_segment + 1) % from_size : (bridge.b.from_segment + from_size) % from_size; - size_t last_segment = forwards ? bridge.a.from_segment : bridge.a.from_segment; + size_t first_segment = forwards ? (bridge.b_.from_segment_ + 1) % from_size : (bridge.b_.from_segment_ + from_size) % from_size; + size_t last_segment = forwards ? bridge.a_.from_segment_ : bridge.a_.from_segment_; if(first_segment == last_segment) last_segment = (last_segment + from_size - 2 * forwards + 1) % from_size; size_t i = first_segment; do //Since we might start and end on the same segment, do a do_while loop to iterate at least once. { - addVertex(ret, (*bridge.b.from_poly)[i]); + addVertex(ret, (*bridge.b_.from_poly_)[i]); i = (i + 2 * forwards - 1 + from_size) % from_size; } while(i != (last_segment + from_size + 2 * forwards - 1) % from_size); //Add the from-endpoint of A. - const coord_t a_from_width = interpolateWidth(bridge.a.from_point, (*bridge.b.from_poly)[bridge.a.from_segment], (*bridge.b.from_poly)[(bridge.a.from_segment + 1) % from_size]); - addVertex(ret, bridge.a.from_point, a_from_width); + const coord_t a_from_width = interpolateWidth(bridge.a_.from_point_, (*bridge.b_.from_poly_)[bridge.a_.from_segment_], (*bridge.b_.from_poly_)[(bridge.a_.from_segment_ + 1) % from_size]); + addVertex(ret, bridge.a_.from_point_, a_from_width); - const size_t to_size = bridge.b.to_poly->size(); + const size_t to_size = bridge.b_.to_poly_->size(); //Add the to-endpoint of A. - const coord_t a_to_width = interpolateWidth(bridge.a.to_point, (*bridge.a.to_poly)[bridge.a.to_segment], (*bridge.a.to_poly)[(bridge.a.to_segment + 1) % to_size]); - addVertex(ret, bridge.a.to_point, a_to_width); + const coord_t a_to_width = interpolateWidth(bridge.a_.to_point_, (*bridge.a_.to_poly_)[bridge.a_.to_segment_], (*bridge.a_.to_poly_)[(bridge.a_.to_segment_ + 1) % to_size]); + addVertex(ret, bridge.a_.to_point_, a_to_width); //Add the to_polygonal from A to B. - if(bridge.a.to_segment == bridge.b.to_segment) + if(bridge.a_.to_segment_ == bridge.b_.to_segment_) { - const Point vertex = getPosition((*bridge.b.to_poly)[bridge.b.to_segment]); //Same vertex for A and B. - const Point next_vertex = getPosition((*bridge.b.to_poly)[(bridge.b.to_segment + 1) % to_size]); + const Point vertex = getPosition((*bridge.b_.to_poly_)[bridge.b_.to_segment_]); //Same vertex for A and B. + const Point next_vertex = getPosition((*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); const Point direction = next_vertex - vertex; - const Point a_to_b = bridge.b.to_point - bridge.a.to_point; + const Point a_to_b = bridge.b_.to_point_ - bridge.a_.to_point_; forwards = vSize2(direction - a_to_b) > vSize2(-direction - a_to_b); } else { - forwards = ((bridge.a.to_segment + to_size - bridge.b.to_segment) % to_size) < ((bridge.b.to_segment + to_size - bridge.a.to_segment) % to_size); + forwards = ((bridge.a_.to_segment_ + to_size - bridge.b_.to_segment_) % to_size) < ((bridge.b_.to_segment_ + to_size - bridge.a_.to_segment_) % to_size); } - first_segment = forwards ? (bridge.a.to_segment + 1) % to_size : bridge.a.to_segment; - size_t end_segment = forwards ? (bridge.b.to_segment + 1) % to_size : bridge.b.to_segment; + first_segment = forwards ? (bridge.a_.to_segment_ + 1) % to_size : bridge.a_.to_segment_; + size_t end_segment = forwards ? (bridge.b_.to_segment_ + 1) % to_size : bridge.b_.to_segment_; i = first_segment; do { - addVertex(ret, (*bridge.b.to_poly)[i]); + addVertex(ret, (*bridge.b_.to_poly_)[i]); i = (i + 2 * forwards - 1 + to_size) % to_size; } while(i != end_segment); //Add the to-endpoint of B. - const coord_t b_to_width = interpolateWidth(bridge.b.to_point, (*bridge.b.to_poly)[bridge.b.to_segment], (*bridge.b.to_poly)[(bridge.b.to_segment + 1) % to_size]); - addVertex(ret, bridge.b.to_point, b_to_width); + const coord_t b_to_width = interpolateWidth(bridge.b_.to_point_, (*bridge.b_.to_poly_)[bridge.b_.to_segment_], (*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); + addVertex(ret, bridge.b_.to_point_, b_to_width); if(getPosition(ret.back()) != getPosition(ret.front())) { diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 4f2eb2151d..dd4b69ccbd 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -3,21 +3,21 @@ #include "SkeletalTrapezoidation.h" -#include "BoostInterface.hpp" -#include "settings/types/Ratio.h" -#include "utils/VoronoiUtils.h" -#include "utils/linearAlg2D.h" -#include "utils/macros.h" - -#include -#include - #include #include #include #include #include +#include +#include + +#include "BoostInterface.hpp" +#include "settings/types/Ratio.h" +#include "utils/VoronoiUtils.h" +#include "utils/linearAlg2D.h" +#include "utils/macros.h" + #define SKELETAL_TRAPEZOIDATION_BEAD_SEARCH_MAX \ 1000 // A limit to how long it'll keep searching for adjacent beads. Increasing will re-use beadings more often (saving performance), but search longer for beading (costing // performance). @@ -458,7 +458,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) points, segments); node_t* starting_node = vd_node_to_he_node[starting_vonoroi_edge->vertex0()]; - starting_node->data.distance_to_boundary = 0; + starting_node->data.distance_to_boundary_ = 0; constexpr bool is_next_to_start_or_end = true; graph.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); @@ -473,7 +473,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, points, segments); - prev_edge->to->data.distance_to_boundary = 0; + prev_edge->to->data.distance_to_boundary_ = 0; } separatePointyQuadEndNodes(); @@ -730,11 +730,11 @@ void SkeletalTrapezoidation::updateIsCentral() { edge.data.setIsCentral(edge.twin->data.isCentral()); } - else if (edge.data.type == SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD) + else if (edge.data.type_ == SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD) { edge.data.setIsCentral(false); } - else if (std::max(edge.from->data.distance_to_boundary, edge.to->data.distance_to_boundary) < outer_edge_filter_length) + else if (std::max(edge.from->data.distance_to_boundary_, edge.to->data.distance_to_boundary_) < outer_edge_filter_length) { edge.data.setIsCentral(false); } @@ -743,7 +743,7 @@ void SkeletalTrapezoidation::updateIsCentral() Point a = edge.from->p; Point b = edge.to->p; Point ab = b - a; - coord_t dR = std::abs(edge.to->data.distance_to_boundary - edge.from->data.distance_to_boundary); + coord_t dR = std::abs(edge.to->data.distance_to_boundary_ - edge.from->data.distance_to_boundary_); coord_t dD = vSize(ab); edge.data.setIsCentral(dR < dD * cap); } @@ -805,7 +805,7 @@ void SkeletalTrapezoidation::updateBeadCount() { if (edge.data.isCentral()) { - edge.to->data.bead_count = beading_strategy.getOptimalBeadCount(edge.to->data.distance_to_boundary * 2); + edge.to->data.bead_count_ = beading_strategy.getOptimalBeadCount(edge.to->data.distance_to_boundary_ * 2); } } @@ -814,18 +814,18 @@ void SkeletalTrapezoidation::updateBeadCount() { if (node.isLocalMaximum()) { - if (node.data.distance_to_boundary < 0) + if (node.data.distance_to_boundary_ < 0) { spdlog::warn("Distance to boundary not yet computed for local maximum!"); - node.data.distance_to_boundary = std::numeric_limits::max(); + node.data.distance_to_boundary_ = std::numeric_limits::max(); edge_t* edge = node.incident_edge; do { - node.data.distance_to_boundary = std::min(node.data.distance_to_boundary, edge->to->data.distance_to_boundary + vSize(edge->from->p - edge->to->p)); + node.data.distance_to_boundary_ = std::min(node.data.distance_to_boundary_, edge->to->data.distance_to_boundary_ + vSize(edge->from->p - edge->to->p)); } while (edge = edge->twin->next, edge != node.incident_edge); } - coord_t bead_count = beading_strategy.getOptimalBeadCount(node.data.distance_to_boundary * 2); - node.data.bead_count = bead_count; + coord_t bead_count = beading_strategy.getOptimalBeadCount(node.data.distance_to_boundary_ * 2); + node.data.bead_count_ = bead_count; } } } @@ -838,24 +838,24 @@ void SkeletalTrapezoidation::filterNoncentralRegions() { continue; } - if (edge.to->data.bead_count < 0 && edge.to->data.distance_to_boundary != 0) + if (edge.to->data.bead_count_ < 0 && edge.to->data.distance_to_boundary_ != 0) { spdlog::warn("Encountered an uninitialized bead at the boundary!"); } - assert(edge.to->data.bead_count >= 0 || edge.to->data.distance_to_boundary == 0); + assert(edge.to->data.bead_count_ >= 0 || edge.to->data.distance_to_boundary_ == 0); constexpr coord_t max_dist = 400; - filterNoncentralRegions(&edge, edge.to->data.bead_count, 0, max_dist); + filterNoncentralRegions(&edge, edge.to->data.bead_count_, 0, max_dist); } } bool SkeletalTrapezoidation::filterNoncentralRegions(edge_t* to_edge, coord_t bead_count, coord_t traveled_dist, coord_t max_dist) { - coord_t r = to_edge->to->data.distance_to_boundary; + coord_t r = to_edge->to->data.distance_to_boundary_; edge_t* next_edge = to_edge->next; for (; next_edge && next_edge != to_edge->twin; next_edge = next_edge->twin->next) { - if (next_edge->to->data.distance_to_boundary >= r || shorterThen(next_edge->to->p - next_edge->from->p, 10)) + if (next_edge->to->data.distance_to_boundary_ >= r || shorterThen(next_edge->to->p - next_edge->from->p, 10)) { break; // Only walk upward } @@ -868,26 +868,26 @@ bool SkeletalTrapezoidation::filterNoncentralRegions(edge_t* to_edge, coord_t be const coord_t length = vSize(next_edge->to->p - next_edge->from->p); bool dissolve = false; - if (next_edge->to->data.bead_count == bead_count) + if (next_edge->to->data.bead_count_ == bead_count) { dissolve = true; } - else if (next_edge->to->data.bead_count < 0) + else if (next_edge->to->data.bead_count_ < 0) { dissolve = filterNoncentralRegions(next_edge, bead_count, traveled_dist + length, max_dist); } else // Upward bead count is different { // Dissolve if two central regions with different bead count are closer together than the max_dist (= transition distance) - dissolve = (traveled_dist + length < max_dist) && std::abs(next_edge->to->data.bead_count - bead_count) == 1; + dissolve = (traveled_dist + length < max_dist) && std::abs(next_edge->to->data.bead_count_ - bead_count) == 1; } if (dissolve) { next_edge->data.setIsCentral(true); next_edge->twin->data.setIsCentral(true); - next_edge->to->data.bead_count = beading_strategy.getOptimalBeadCount(next_edge->to->data.distance_to_boundary * 2); - next_edge->to->data.transition_ratio = 0; + next_edge->to->data.bead_count_ = beading_strategy.getOptimalBeadCount(next_edge->to->data.distance_to_boundary_ * 2); + next_edge->to->data.transition_ratio_ = 0; } return dissolve; // Dissolving only depend on the one edge going upward. There cannot be multiple edges going upward. } @@ -901,7 +901,7 @@ void SkeletalTrapezoidation::generateTransitioningRibs() for (edge_t& edge : graph.edges) { // Check if there is a transition in between nodes with different bead counts - if (edge.data.isCentral() && edge.from->data.bead_count != edge.to->data.bead_count) + if (edge.data.isCentral() && edge.from->data.bead_count_ != edge.to->data.bead_count_) { assert(edge.data.hasTransitions() || edge.twin->data.hasTransitions()); } @@ -926,17 +926,17 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tdata.distance_to_boundary; - coord_t end_R = edge.to->data.distance_to_boundary; - int start_bead_count = edge.from->data.bead_count; - int end_bead_count = edge.to->data.bead_count; + coord_t start_R = edge.from->data.distance_to_boundary_; + coord_t end_R = edge.to->data.distance_to_boundary_; + int start_bead_count = edge.from->data.bead_count_; + int end_bead_count = edge.to->data.bead_count_; if (start_R == end_R) { // No transitions occur when both end points have the same distance_to_boundary - assert(edge.from->data.bead_count == edge.to->data.bead_count); - if (edge.from->data.bead_count != edge.to->data.bead_count) + assert(edge.from->data.bead_count_ == edge.to->data.bead_count_); + if (edge.from->data.bead_count_ != edge.to->data.bead_count_) { - spdlog::warn("Bead count {} is different from {} even though distance to boundary is the same.", edge.from->data.bead_count, edge.to->data.bead_count); + spdlog::warn("Bead count {} is different from {} even though distance to boundary is the same.", edge.from->data.bead_count_, edge.to->data.bead_count_); } continue; } @@ -945,7 +945,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tdata.bead_count == edge.to->data.bead_count) + if (edge.from->data.bead_count_ == edge.to->data.bead_count_) { // No transitions should occur according to the enforced bead counts continue; } @@ -982,7 +982,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_t= transitions->back().pos); + assert((! edge.data.hasTransitions(ignore_empty)) || mid_pos >= transitions->back().pos_); if (! edge.data.hasTransitions(ignore_empty)) { edge_transitions.emplace_back(std::make_shared>()); @@ -991,7 +991,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_templace_back(mid_pos, transition_lower_bead_count, mid_R); } - assert((edge.from->data.bead_count == edge.to->data.bead_count) || edge.data.hasTransitions()); + assert((edge.from->data.bead_count_ == edge.to->data.bead_count_) || edge.data.hasTransitions()); } } @@ -1006,8 +1006,8 @@ void SkeletalTrapezoidation::filterTransitionMids() auto& transitions = *edge.data.getTransitions(); // This is how stuff should be stored in transitions - assert(transitions.front().lower_bead_count <= transitions.back().lower_bead_count); - assert(edge.from->data.distance_to_boundary <= edge.to->data.distance_to_boundary); + assert(transitions.front().lower_bead_count_ <= transitions.back().lower_bead_count_); + assert(edge.from->data.distance_to_boundary_ <= edge.to->data.distance_to_boundary_); const Point a = edge.from->p; const Point b = edge.to->p; @@ -1015,18 +1015,19 @@ void SkeletalTrapezoidation::filterTransitionMids() coord_t ab_size = vSize(ab); bool going_up = true; - std::list to_be_dissolved_back = dissolveNearbyTransitions(&edge, transitions.back(), ab_size - transitions.back().pos, transition_filter_dist, going_up); + std::list to_be_dissolved_back + = dissolveNearbyTransitions(&edge, transitions.back(), ab_size - transitions.back().pos_, transition_filter_dist, going_up); bool should_dissolve_back = ! to_be_dissolved_back.empty(); for (TransitionMidRef& ref : to_be_dissolved_back) { - dissolveBeadCountRegion(&edge, transitions.back().lower_bead_count + 1, transitions.back().lower_bead_count); + dissolveBeadCountRegion(&edge, transitions.back().lower_bead_count_ + 1, transitions.back().lower_bead_count_); ref.edge->data.getTransitions()->erase(ref.transition_it); } { - coord_t trans_bead_count = transitions.back().lower_bead_count; + coord_t trans_bead_count = transitions.back().lower_bead_count_; coord_t upper_transition_half_length = (1.0 - beading_strategy.getTransitionAnchorPos(trans_bead_count)) * beading_strategy.getTransitioningLength(trans_bead_count); - should_dissolve_back |= filterEndOfCentralTransition(&edge, ab_size - transitions.back().pos, upper_transition_half_length, trans_bead_count); + should_dissolve_back |= filterEndOfCentralTransition(&edge, ab_size - transitions.back().pos_, upper_transition_half_length, trans_bead_count); } if (should_dissolve_back) @@ -1039,18 +1040,18 @@ void SkeletalTrapezoidation::filterTransitionMids() } going_up = false; - std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin, transitions.front(), transitions.front().pos, transition_filter_dist, going_up); + std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin, transitions.front(), transitions.front().pos_, transition_filter_dist, going_up); bool should_dissolve_front = ! to_be_dissolved_front.empty(); for (TransitionMidRef& ref : to_be_dissolved_front) { - dissolveBeadCountRegion(edge.twin, transitions.front().lower_bead_count, transitions.front().lower_bead_count + 1); + dissolveBeadCountRegion(edge.twin, transitions.front().lower_bead_count_, transitions.front().lower_bead_count_ + 1); ref.edge->data.getTransitions()->erase(ref.transition_it); } { - coord_t trans_bead_count = transitions.front().lower_bead_count; + coord_t trans_bead_count = transitions.front().lower_bead_count_; coord_t lower_transition_half_length = beading_strategy.getTransitionAnchorPos(trans_bead_count) * beading_strategy.getTransitioningLength(trans_bead_count); - should_dissolve_front |= filterEndOfCentralTransition(edge.twin, transitions.front().pos, lower_transition_half_length, trans_bead_count + 1); + should_dissolve_front |= filterEndOfCentralTransition(edge.twin, transitions.front().pos_, lower_transition_half_length, trans_bead_count + 1); } if (should_dissolve_front) @@ -1088,9 +1089,9 @@ std::list edge_t* aligned_edge = is_aligned ? edge : edge->twin; bool seen_transition_on_this_edge = false; - const coord_t origin_radius = origin_transition.feature_radius; - const coord_t radius_here = edge->from->data.distance_to_boundary; - const bool dissolve_result_is_odd = bool(origin_transition.lower_bead_count % 2) == going_up; + const coord_t origin_radius = origin_transition.feature_radius_; + const coord_t radius_here = edge->from->data.distance_to_boundary_; + const bool dissolve_result_is_odd = bool(origin_transition.lower_bead_count_ % 2) == going_up; const coord_t width_deviation = std::abs(origin_radius - radius_here) * 2; // times by two because the deviation happens at both sides of the significant edge const coord_t line_width_deviation = dissolve_result_is_odd ? width_deviation @@ -1106,13 +1107,13 @@ std::list for (auto transition_it = transitions.begin(); transition_it != transitions.end(); ++transition_it) { // Note: this is not necessarily iterating in the traveling direction! // Check whether we should dissolve - coord_t pos = is_aligned ? transition_it->pos : ab_size - transition_it->pos; - if (traveled_dist + pos < max_dist && transition_it->lower_bead_count == origin_transition.lower_bead_count) // Only dissolve local optima + coord_t pos = is_aligned ? transition_it->pos_ : ab_size - transition_it->pos_; + if (traveled_dist + pos < max_dist && transition_it->lower_bead_count_ == origin_transition.lower_bead_count_) // Only dissolve local optima { - if (traveled_dist + pos < beading_strategy.getTransitioningLength(transition_it->lower_bead_count)) + if (traveled_dist + pos < beading_strategy.getTransitioningLength(transition_it->lower_bead_count_)) { // Consecutive transitions both in/decreasing in bead count should never be closer together than the transition distance - assert(going_up != is_aligned || transition_it->lower_bead_count == 0); + assert(going_up != is_aligned || transition_it->lower_bead_count_ == 0); } to_be_dissolved.emplace_back(aligned_edge, transition_it); seen_transition_on_this_edge = true; @@ -1145,12 +1146,12 @@ std::list void SkeletalTrapezoidation::dissolveBeadCountRegion(edge_t* edge_to_start, coord_t from_bead_count, coord_t to_bead_count) { assert(from_bead_count != to_bead_count); - if (edge_to_start->to->data.bead_count != from_bead_count) + if (edge_to_start->to->data.bead_count_ != from_bead_count) { return; } - edge_to_start->to->data.bead_count = to_bead_count; + edge_to_start->to->data.bead_count_ = to_bead_count; for (edge_t* edge = edge_to_start->next; edge && edge != edge_to_start->twin; edge = edge->twin->next) { if (! edge->data.isCentral()) @@ -1186,7 +1187,7 @@ bool SkeletalTrapezoidation::filterEndOfCentralTransition(edge_t* edge_to_start, if (should_dissolve) { - edge_to_start->to->data.bead_count = replacing_bead_count; + edge_to_start->to->data.bead_count_ = replacing_bead_count; } return should_dissolve; } @@ -1201,12 +1202,12 @@ void SkeletalTrapezoidation::generateAllTransitionEnds(ptr_vector_tdata.distance_to_boundary <= edge.to->data.distance_to_boundary); + assert(edge.from->data.distance_to_boundary_ <= edge.to->data.distance_to_boundary_); for (TransitionMiddle& transition_middle : transition_positions) { - assert(transition_positions.front().pos <= transition_middle.pos); - assert(transition_middle.pos <= transition_positions.back().pos); - generateTransitionEnds(edge, transition_middle.pos, transition_middle.lower_bead_count, edge_transition_ends); + assert(transition_positions.front().pos_ <= transition_middle.pos_); + assert(transition_middle.pos_ <= transition_positions.back().pos_); + generateTransitionEnds(edge, transition_middle.pos_, transition_middle.lower_bead_count_, edge_transition_ends); } } } @@ -1317,8 +1318,8 @@ bool SkeletalTrapezoidation::generateTransitionEnd( } if (! going_up || (has_recursed && ! is_only_going_down)) { - edge.to->data.transition_ratio = rest; - edge.to->data.bead_count = lower_bead_count; + edge.to->data.transition_ratio_ = rest; + edge.to->data.bead_count_ = lower_bead_count; } return is_only_going_down; } @@ -1350,7 +1351,7 @@ bool SkeletalTrapezoidation::generateTransitionEnd( // Add a transition to it (on the correct side). assert(ab_size == vSize(edge.twin->from->p - edge.twin->to->p)); assert(pos <= ab_size); - if (transitions->empty() || pos < transitions->front().pos) + if (transitions->empty() || pos < transitions->front().pos_) { // Preorder so that sorting later on is faster transitions->emplace_front(pos, lower_bead_count, is_lower_end); } @@ -1367,13 +1368,13 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist { // NOTE: the logic below is not fully thought through. // TODO: take transition mids into account - if (outgoing->to->data.distance_to_boundary == 0) + if (outgoing->to->data.distance_to_boundary_ == 0) { return true; } - bool is_upward = outgoing->to->data.distance_to_boundary >= outgoing->from->data.distance_to_boundary; + bool is_upward = outgoing->to->data.distance_to_boundary_ >= outgoing->from->data.distance_to_boundary_; edge_t* upward_edge = is_upward ? outgoing : outgoing->twin; - if (outgoing->to->data.bead_count > lower_bead_count + 1) + if (outgoing->to->data.bead_count_ > lower_bead_count + 1) { assert(upward_edge->data.hasTransitions() && "If the bead count is going down there has to be a transition mid!"); if (! upward_edge->data.hasTransitions()) @@ -1387,7 +1388,7 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist { auto& transition_mids = *upward_edge->data.getTransitions(); TransitionMiddle& mid = is_upward ? transition_mids.front() : transition_mids.back(); - if (mid.lower_bead_count == lower_bead_count && ((is_upward && mid.pos + traveled_dist < max_dist) || (! is_upward && length - mid.pos + traveled_dist < max_dist))) + if (mid.lower_bead_count_ == lower_bead_count && ((is_upward && mid.pos_ + traveled_dist < max_dist) || (! is_upward && length - mid.pos_ + traveled_dist < max_dist))) { return true; } @@ -1396,7 +1397,7 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist { return false; } - if (outgoing->to->data.bead_count <= lower_bead_count && ! (outgoing->to->data.bead_count == lower_bead_count && outgoing->to->data.transition_ratio > 0.0)) + if (outgoing->to->data.bead_count_ <= lower_bead_count && ! (outgoing->to->data.bead_count_ == lower_bead_count && outgoing->to->data.transition_ratio_ > 0.0)) { return true; } @@ -1432,7 +1433,7 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_t ab_size - snap_dist) && close_node->data.bead_count == new_node_bead_count) + if ((end_pos < snap_dist || end_pos > ab_size - snap_dist) && close_node->data.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); - close_node->data.transition_ratio = 0; + close_node->data.transition_ratio_ = 0; continue; } Point mid = a + normal(ab, end_pos); assert(last_edge_replacing_input->data.isCentral()); - assert(last_edge_replacing_input->data.type != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); last_edge_replacing_input = graph.insertNode(last_edge_replacing_input, mid, new_node_bead_count); - assert(last_edge_replacing_input->data.type != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); assert(last_edge_replacing_input->data.isCentral()); } } @@ -1512,12 +1513,12 @@ void SkeletalTrapezoidation::generateExtraRibs() for (auto& edge : graph.edges) { if (! edge.data.isCentral() || shorterThen(edge.to->p - edge.from->p, discretization_step_size) - || edge.from->data.distance_to_boundary >= edge.to->data.distance_to_boundary) + || edge.from->data.distance_to_boundary_ >= edge.to->data.distance_to_boundary_) { continue; } - std::vector rib_thicknesses = beading_strategy.getNonlinearThicknesses(edge.from->data.bead_count); + std::vector rib_thicknesses = beading_strategy.getNonlinearThicknesses(edge.from->data.bead_count_); if (rib_thicknesses.empty()) { @@ -1531,8 +1532,8 @@ void SkeletalTrapezoidation::generateExtraRibs() Point b = to->p; Point ab = b - a; coord_t ab_size = vSize(ab); - coord_t a_R = edge.from->data.distance_to_boundary; - coord_t b_R = edge.to->data.distance_to_boundary; + coord_t a_R = edge.from->data.distance_to_boundary_; + coord_t b_R = edge.to->data.distance_to_boundary_; edge_t* last_edge_replacing_input = &edge; for (coord_t rib_thickness : rib_thicknesses) @@ -1546,23 +1547,23 @@ void SkeletalTrapezoidation::generateExtraRibs() break; } - coord_t new_node_bead_count = std::min(edge.from->data.bead_count, edge.to->data.bead_count); + coord_t new_node_bead_count = std::min(edge.from->data.bead_count_, edge.to->data.bead_count_); coord_t end_pos = ab_size * (rib_thickness / 2 - a_R) / (b_R - a_R); assert(end_pos > 0); assert(end_pos < ab_size); node_t* close_node = (end_pos < ab_size / 2) ? from : to; - if ((end_pos < snap_dist || end_pos > ab_size - snap_dist) && close_node->data.bead_count == new_node_bead_count) + if ((end_pos < snap_dist || end_pos > ab_size - snap_dist) && close_node->data.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); - close_node->data.transition_ratio = 0; + close_node->data.transition_ratio_ = 0; continue; } Point mid = a + normal(ab, end_pos); assert(last_edge_replacing_input->data.isCentral()); - assert(last_edge_replacing_input->data.type != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); last_edge_replacing_input = graph.insertNode(last_edge_replacing_input, mid, new_node_bead_count); - assert(last_edge_replacing_input->data.type != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); assert(last_edge_replacing_input->data.isCentral()); } } @@ -1570,7 +1571,7 @@ void SkeletalTrapezoidation::generateExtraRibs() // // ^^^^^^^^^^^^^^^^^^^^^ -// TRANSTISIONING +// TRANSITIONING // ===================== // TOOLPATH GENERATION // vvvvvvvvvvvvvvvvvvvvv @@ -1592,20 +1593,20 @@ void SkeletalTrapezoidation::generateSegments() upward_quad_mids.end(), [this](edge_t* a, edge_t* b) { - if (a->to->data.distance_to_boundary == b->to->data.distance_to_boundary) + if (a->to->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) { // PathOrdering between two 'upward' edges of the same distance is important when one of the edges is flat and connected to the other - if (a->from->data.distance_to_boundary == a->to->data.distance_to_boundary && b->from->data.distance_to_boundary == b->to->data.distance_to_boundary) + if (a->from->data.distance_to_boundary_ == a->to->data.distance_to_boundary_ && b->from->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) { coord_t max = std::numeric_limits::max(); coord_t a_dist_from_up = std::min(a->distToGoUp().value_or(max), a->twin->distToGoUp().value_or(max)) - vSize(a->to->p - a->from->p); coord_t b_dist_from_up = std::min(b->distToGoUp().value_or(max), b->twin->distToGoUp().value_or(max)) - vSize(b->to->p - b->from->p); return a_dist_from_up < b_dist_from_up; } - else if (a->from->data.distance_to_boundary == a->to->data.distance_to_boundary) + else if (a->from->data.distance_to_boundary_ == a->to->data.distance_to_boundary_) { return true; // Edge a might be 'above' edge b } - else if (b->from->data.distance_to_boundary == b->to->data.distance_to_boundary) + else if (b->from->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) { return false; // Edge b might be 'above' edge a } @@ -1614,36 +1615,36 @@ void SkeletalTrapezoidation::generateSegments() // PathOrdering is not important } } - return a->to->data.distance_to_boundary > b->to->data.distance_to_boundary; + return a->to->data.distance_to_boundary_ > b->to->data.distance_to_boundary_; }); ptr_vector_t node_beadings; { // Store beading for (node_t& node : graph.nodes) { - if (node.data.bead_count <= 0) + if (node.data.bead_count_ <= 0) { continue; } - if (node.data.transition_ratio == 0) + if (node.data.transition_ratio_ == 0) { - node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node.data.distance_to_boundary * 2, node.data.bead_count))); + node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_))); node.data.setBeading(node_beadings.back()); - assert(node_beadings.back()->beading.total_thickness == node.data.distance_to_boundary * 2); - if (node_beadings.back()->beading.total_thickness != node.data.distance_to_boundary * 2) + assert(node_beadings.back()->beading_.total_thickness == node.data.distance_to_boundary_ * 2); + if (node_beadings.back()->beading_.total_thickness != node.data.distance_to_boundary_ * 2) { spdlog::warn("If transitioning to an endpoint (ratio 0), the node should be exactly in the middle."); } } else { - Beading low_count_beading = beading_strategy.compute(node.data.distance_to_boundary * 2, node.data.bead_count); - Beading high_count_beading = beading_strategy.compute(node.data.distance_to_boundary * 2, node.data.bead_count + 1); - Beading merged = interpolate(low_count_beading, 1.0 - node.data.transition_ratio, high_count_beading); + Beading low_count_beading = beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_); + Beading high_count_beading = beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_ + 1); + Beading merged = interpolate(low_count_beading, 1.0 - node.data.transition_ratio_, high_count_beading); node_beadings.emplace_back(new BeadingPropagation(merged)); node.data.setBeading(node_beadings.back()); - assert(merged.total_thickness == node.data.distance_to_boundary * 2); - if (merged.total_thickness != node.data.distance_to_boundary * 2) + assert(merged.total_thickness == node.data.distance_to_boundary_ * 2); + if (merged.total_thickness != node.data.distance_to_boundary_ * 2) { spdlog::warn("If merging two beads, the new bead must be exactly in the middle."); } @@ -1666,19 +1667,19 @@ void SkeletalTrapezoidation::generateSegments() SkeletalTrapezoidation::edge_t* SkeletalTrapezoidation::getQuadMaxRedgeTo(edge_t* quad_start_edge) { assert(quad_start_edge->prev == nullptr); - assert(quad_start_edge->from->data.distance_to_boundary == 0); + assert(quad_start_edge->from->data.distance_to_boundary_ == 0); coord_t max_R = -1; edge_t* ret = nullptr; for (edge_t* edge = quad_start_edge; edge; edge = edge->next) { - coord_t r = edge->to->data.distance_to_boundary; + coord_t r = edge->to->data.distance_to_boundary_; if (r > max_R) { max_R = r; ret = edge; } } - if (! ret->next && ret->to->data.distance_to_boundary - 5 < ret->from->data.distance_to_boundary) + if (! ret->next && ret->to->data.distance_to_boundary_ - 5 < ret->from->data.distance_to_boundary_) { ret = ret->prev; } @@ -1692,7 +1693,7 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar for (auto upward_quad_mids_it = upward_quad_mids.rbegin(); upward_quad_mids_it != upward_quad_mids.rend(); ++upward_quad_mids_it) { edge_t* upward_edge = *upward_quad_mids_it; - if (upward_edge->to->data.bead_count >= 0) + if (upward_edge->to->data.bead_count_ >= 0) { // Don't override local beading continue; } @@ -1706,16 +1707,16 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar continue; } assert( - (upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary + (upward_edge->from->data.distance_to_boundary_ != upward_edge->to->data.distance_to_boundary_ || shorterThen(upward_edge->to->p - upward_edge->from->p, central_filter_dist)) && "zero difference R edges should always be central"); coord_t length = vSize(upward_edge->to->p - upward_edge->from->p); BeadingPropagation upper_beading = lower_beading; - upper_beading.dist_to_bottom_source += length; - upper_beading.is_upward_propagated_only = true; + upper_beading.dist_to_bottom_source_ += length; + upper_beading.is_upward_propagated_only_ = true; node_beadings.emplace_back(new BeadingPropagation(upper_beading)); upward_edge->to->data.setBeading(node_beadings.back()); - assert(upper_beading.beading.total_thickness <= upward_edge->to->data.distance_to_boundary * 2); + assert(upper_beading.beading_.total_thickness <= upward_edge->to->data.distance_to_boundary_ * 2); } } @@ -1727,7 +1728,7 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(std::vector& upw if (! upward_quad_mid->data.isCentral()) { // for equidistant edge: propagate from known beading to node with unknown beading - if (upward_quad_mid->from->data.distance_to_boundary == upward_quad_mid->to->data.distance_to_boundary && upward_quad_mid->from->data.hasBeading() + if (upward_quad_mid->from->data.distance_to_boundary_ == upward_quad_mid->to->data.distance_to_boundary_ && upward_quad_mid->from->data.hasBeading() && ! upward_quad_mid->to->data.hasBeading()) { propagateBeadingsDownward(upward_quad_mid->twin, node_beadings); @@ -1744,21 +1745,21 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr { coord_t length = vSize(edge_to_peak->to->p - edge_to_peak->from->p); BeadingPropagation& top_beading = *getOrCreateBeading(edge_to_peak->to, node_beadings); - assert(top_beading.beading.total_thickness >= edge_to_peak->to->data.distance_to_boundary * 2); - if (top_beading.beading.total_thickness < edge_to_peak->to->data.distance_to_boundary * 2) + assert(top_beading.beading_.total_thickness >= edge_to_peak->to->data.distance_to_boundary_ * 2); + if (top_beading.beading_.total_thickness < edge_to_peak->to->data.distance_to_boundary_ * 2) { spdlog::warn("Top bead is beyond the center of the total width."); } - assert(! top_beading.is_upward_propagated_only); + assert(! top_beading.is_upward_propagated_only_); if (! edge_to_peak->from->data.hasBeading()) { // Set new beading if there is no beading associated with the node yet BeadingPropagation propagated_beading = top_beading; - propagated_beading.dist_from_top_source += length; + propagated_beading.dist_from_top_source_ += length; node_beadings.emplace_back(new BeadingPropagation(propagated_beading)); edge_to_peak->from->data.setBeading(node_beadings.back()); - assert(propagated_beading.beading.total_thickness >= edge_to_peak->from->data.distance_to_boundary * 2); - if (propagated_beading.beading.total_thickness < edge_to_peak->from->data.distance_to_boundary * 2) + assert(propagated_beading.beading_.total_thickness >= edge_to_peak->from->data.distance_to_boundary_ * 2); + if (propagated_beading.beading_.total_thickness < edge_to_peak->from->data.distance_to_boundary_ * 2) { spdlog::warn("Propagated bead is beyond the center of the total width."); } @@ -1766,21 +1767,21 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr else { BeadingPropagation& bottom_beading = *edge_to_peak->from->data.getBeading(); - coord_t total_dist = top_beading.dist_from_top_source + length + bottom_beading.dist_to_bottom_source; - Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source) / std::min(total_dist, beading_propagation_transition_dist); + coord_t total_dist = top_beading.dist_from_top_source_ + length + bottom_beading.dist_to_bottom_source_; + Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist); ratio_of_top = std::max(0.0_r, ratio_of_top); if (ratio_of_top >= 1.0) { bottom_beading = top_beading; - bottom_beading.dist_from_top_source += length; + bottom_beading.dist_from_top_source_ += length; } else { - Beading merged_beading = interpolate(top_beading.beading, ratio_of_top, bottom_beading.beading, edge_to_peak->from->data.distance_to_boundary); + Beading merged_beading = interpolate(top_beading.beading_, ratio_of_top, bottom_beading.beading_, edge_to_peak->from->data.distance_to_boundary_); bottom_beading = BeadingPropagation(merged_beading); - bottom_beading.is_upward_propagated_only = false; - assert(merged_beading.total_thickness >= edge_to_peak->from->data.distance_to_boundary * 2); - if (merged_beading.total_thickness < edge_to_peak->from->data.distance_to_boundary * 2) + bottom_beading.is_upward_propagated_only_ = false; + assert(merged_beading.total_thickness >= edge_to_peak->from->data.distance_to_boundary_ * 2); + if (merged_beading.total_thickness < edge_to_peak->from->data.distance_to_boundary_ * 2) { spdlog::warn("Merged bead is beyond the center of the total width."); } @@ -1859,26 +1860,26 @@ void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& for (edge_t& edge_ : graph.edges) { edge_t* edge = &edge_; - if (edge->from->data.distance_to_boundary > edge->to->data.distance_to_boundary) + if (edge->from->data.distance_to_boundary_ > edge->to->data.distance_to_boundary_) { // Only consider the upward half-edges continue; } - coord_t start_R = edge->to->data.distance_to_boundary; // higher R - coord_t end_R = edge->from->data.distance_to_boundary; // lower R + coord_t start_R = edge->to->data.distance_to_boundary_; // higher R + coord_t end_R = edge->from->data.distance_to_boundary_; // lower R - if ((edge->from->data.bead_count == edge->to->data.bead_count && edge->from->data.bead_count >= 0) || end_R >= start_R) + if ((edge->from->data.bead_count_ == edge->to->data.bead_count_ && edge->from->data.bead_count_ >= 0) || end_R >= start_R) { // No beads to generate continue; } - Beading* beading = &getOrCreateBeading(edge->to, node_beadings)->beading; + Beading* beading = &getOrCreateBeading(edge->to, node_beadings)->beading_; edge_junctions.emplace_back(std::make_shared()); edge_.data.setExtrusionJunctions(edge_junctions.back()); // initialization LineJunctions& ret = *edge_junctions.back(); - assert(beading->total_thickness >= edge->to->data.distance_to_boundary * 2); - if (beading->total_thickness < edge->to->data.distance_to_boundary * 2) + assert(beading->total_thickness >= edge->to->data.distance_to_boundary_ * 2); + if (beading->total_thickness < edge->to->data.distance_to_boundary_ * 2) { spdlog::warn("Generated junction is beyond the center of total width."); } @@ -1929,7 +1930,7 @@ std::shared_ptr SkeletalTrapezo { if (! node->data.hasBeading()) { - if (node->data.bead_count == -1) + if (node->data.bead_count_ == -1) { // This bug is due to too small central edges constexpr coord_t nearby_dist = 100; // TODO auto nearest_beading = getNearestBeading(node, nearby_dist); @@ -1948,8 +1949,8 @@ std::shared_ptr SkeletalTrapezo { has_central_edge = true; } - assert(edge->to->data.distance_to_boundary >= 0); - dist = std::min(dist, edge->to->data.distance_to_boundary + vSize(edge->to->p - edge->from->p)); + assert(edge->to->data.distance_to_boundary_ >= 0); + dist = std::min(dist, edge->to->data.distance_to_boundary_ + vSize(edge->to->p - edge->from->p)); first = false; } if (! has_central_edge) @@ -1957,10 +1958,10 @@ std::shared_ptr SkeletalTrapezo spdlog::error("Unknown beading for non-central node!"); } assert(dist != std::numeric_limits::max()); - node->data.bead_count = beading_strategy.getOptimalBeadCount(dist * 2); + node->data.bead_count_ = beading_strategy.getOptimalBeadCount(dist * 2); } - assert(node->data.bead_count != -1); - node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node->data.distance_to_boundary * 2, node->data.bead_count))); + assert(node->data.bead_count_ != -1); + node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node->data.distance_to_boundary_ * 2, node->data.bead_count_))); node->data.setBeading(node_beadings.back()); } assert(node->data.hasBeading()); @@ -2155,12 +2156,12 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ { spdlog::warn("Connecting two perimeters with different indices! Perimeter {} and {}", from.perimeter_index, to.perimeter_index); } - const bool from_is_odd = quad_start->to->data.bead_count > 0 && quad_start->to->data.bead_count % 2 == 1 // quad contains single bead segment - && quad_start->to->data.transition_ratio == 0 // We're not in a transition + const bool from_is_odd = quad_start->to->data.bead_count_ > 0 && quad_start->to->data.bead_count_ % 2 == 1 // quad contains single bead segment + && quad_start->to->data.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment && shorterThen(from.p - quad_start->to->p, 5); - const bool to_is_odd = quad_end->from->data.bead_count > 0 && quad_end->from->data.bead_count % 2 == 1 // quad contains single bead segment - && quad_end->from->data.transition_ratio == 0 // We're not in a transition + const bool to_is_odd = quad_end->from->data.bead_count_ > 0 && quad_end->from->data.bead_count_ % 2 == 1 // quad contains single bead segment + && quad_end->from->data.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment && shorterThen(to.p - quad_end->from->p, 5); const bool is_odd_segment = from_is_odd && to_is_odd; @@ -2192,7 +2193,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() { continue; } - Beading& beading = node.data.getBeading()->beading; + Beading& beading = node.data.getBeading()->beading_; if (beading.bead_widths.size() % 2 == 1 && node.isLocalMaximum(true) && ! node.isCentral()) { const size_t inset_index = beading.bead_widths.size() / 2; diff --git a/src/SkeletalTrapezoidationGraph.cpp b/src/SkeletalTrapezoidationGraph.cpp index 4657b8ee97..0ac596ea2c 100644 --- a/src/SkeletalTrapezoidationGraph.cpp +++ b/src/SkeletalTrapezoidationGraph.cpp @@ -3,12 +3,12 @@ #include "SkeletalTrapezoidationGraph.h" -#include "utils/linearAlg2D.h" -#include "utils/macros.h" +#include #include -#include +#include "utils/linearAlg2D.h" +#include "utils/macros.h" namespace cura { @@ -20,11 +20,11 @@ STHalfEdge::STHalfEdge(SkeletalTrapezoidationEdge data) bool STHalfEdge::canGoUp(bool strict) const { - if (to->data.distance_to_boundary > from->data.distance_to_boundary) + if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) { return true; } - if (to->data.distance_to_boundary < from->data.distance_to_boundary || strict) + if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_ || strict) { return false; } @@ -48,11 +48,11 @@ bool STHalfEdge::canGoUp(bool strict) const bool STHalfEdge::isUpward() const { - if (to->data.distance_to_boundary > from->data.distance_to_boundary) + if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) { return true; } - if (to->data.distance_to_boundary < from->data.distance_to_boundary) + if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_) { return false; } @@ -79,11 +79,11 @@ bool STHalfEdge::isUpward() const std::optional STHalfEdge::distToGoUp() const { - if (to->data.distance_to_boundary > from->data.distance_to_boundary) + if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) { return 0; } - if (to->data.distance_to_boundary < from->data.distance_to_boundary) + if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_) { return std::optional(); } @@ -173,7 +173,7 @@ bool STHalfEdgeNode::isCentral() const bool STHalfEdgeNode::isLocalMaximum(bool strict) const { - if (data.distance_to_boundary == 0) + if (data.distance_to_boundary_ == 0) { return false; } @@ -333,12 +333,12 @@ void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source { Point p = LinearAlg2D::getClosestOnLine(prev_edge->to->p, start_source_point, end_source_point); coord_t dist = vSize(prev_edge->to->p - p); - prev_edge->to->data.distance_to_boundary = dist; + prev_edge->to->data.distance_to_boundary_ = dist; assert(dist >= 0); nodes.emplace_front(SkeletalTrapezoidationJoint(), p); node_t* node = &nodes.front(); - node->data.distance_to_boundary = 0; + node->data.distance_to_boundary_ = 0; edges.emplace_front(SkeletalTrapezoidationEdge(SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD)); edge_t* forth_edge = &edges.front(); @@ -371,12 +371,12 @@ std::pair 0); - mid_node->data.distance_to_boundary = dist; - mid_node->data.transition_ratio = 0; // Both transition end should have rest = 0, because at the ends a whole number of beads fits without rest + mid_node->data.distance_to_boundary_ = dist; + mid_node->data.transition_ratio_ = 0; // Both transition end should have rest = 0, because at the ends a whole number of beads fits without rest nodes.emplace_back(SkeletalTrapezoidationJoint(), px); node_t* source_node = &nodes.back(); - source_node->data.distance_to_boundary = 0; + source_node->data.distance_to_boundary_ = 0; edge_t* first = &edge; edges.emplace_back(SkeletalTrapezoidationEdge()); @@ -433,7 +433,7 @@ std::pairtwin = nullptr; // we don't know these yet! second->twin = nullptr; - assert(second->prev->from->data.distance_to_boundary == 0); + assert(second->prev->from->data.distance_to_boundary_ == 0); return std::make_pair(first, second); } @@ -460,7 +460,7 @@ SkeletalTrapezoidationGraph::edge_t* SkeletalTrapezoidationGraph::insertNode(edg last_edge_replacing_input->twin = first_edge_replacing_twin; first_edge_replacing_twin->twin = last_edge_replacing_input; - mid_node->data.bead_count = mide_node_bead_count; + mid_node->data.bead_count_ = mide_node_bead_count; return last_edge_replacing_input; } diff --git a/src/utils/PolygonConnector.cpp b/src/utils/PolygonConnector.cpp index 85d4284a10..b984010dc9 100644 --- a/src/utils/PolygonConnector.cpp +++ b/src/utils/PolygonConnector.cpp @@ -10,14 +10,14 @@ namespace cura { PolygonConnector::PolygonConnector(const coord_t line_width) -: line_width(line_width) +: line_width_(line_width) {} void PolygonConnector::add(const Polygons& input) { for (ConstPolygonRef poly : input) { - input_polygons.push_back(poly); + input_polygons_.push_back(poly); } } @@ -27,20 +27,20 @@ void PolygonConnector::add(const std::vector& input) { for(const ExtrusionLine& line : lines) { - input_paths.push_back(line); + input_paths_.push_back(line); } } } void PolygonConnector::connect(Polygons& output_polygons, std::vector& output_paths) { - std::vector result_polygons = connectGroup(input_polygons); + std::vector result_polygons = connectGroup(input_polygons_); for(Polygon& polygon : result_polygons) { output_polygons.add(polygon); } - std::vector result_paths = connectGroup(input_paths); + std::vector result_paths = connectGroup(input_paths_); output_paths.push_back(result_paths); } @@ -56,7 +56,7 @@ Point PolygonConnector::getPosition(const ExtrusionJunction& junction) const coord_t PolygonConnector::getWidth(const Point&) const { - return line_width; + return line_width_; } coord_t PolygonConnector::getWidth(const ExtrusionJunction& junction) const diff --git a/tests/utils/PolygonConnectorTest.cpp b/tests/utils/PolygonConnectorTest.cpp index 8286e85fd2..dc7c7b832e 100644 --- a/tests/utils/PolygonConnectorTest.cpp +++ b/tests/utils/PolygonConnectorTest.cpp @@ -68,11 +68,11 @@ TEST_F(PolygonConnectorTest, getBridgeNestedSquares) ASSERT_NE(bridge, std::nullopt) << "The two polygons are nested simply, so they are definitely positioned closely enough to bridge. They are also wide enough."; - EXPECT_EQ(vSize(bridge->a.from_point - bridge->a.to_point), 100) << "The polygons are 100 units spaced out concentrically, so this is the shortest possible bridge."; - EXPECT_EQ(vSize(bridge->b.from_point - bridge->b.to_point), 100) << "The second bridge should also be equally short in this case."; - EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a.from_point, bridge->a.to_point, bridge->b.from_point, bridge->b.to_point), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; - EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b.from_point, bridge->a.from_point, bridge->a.to_point), 0) << "Connection B should be to the right of connection A."; - EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b.to_point, bridge->a.from_point, bridge->a.to_point), 0) << "Connection B should be to the right of connection A."; + EXPECT_EQ(vSize(bridge->a_.from_point_ - bridge->a_.to_point_), 100) << "The polygons are 100 units spaced out concentrically, so this is the shortest possible bridge."; + EXPECT_EQ(vSize(bridge->b_.from_point_ - bridge->b_.to_point_), 100) << "The second bridge should also be equally short in this case."; + EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; + EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.from_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; + EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.to_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; } /*! @@ -88,11 +88,11 @@ TEST_F(PolygonConnectorTest, getBridgeAdjacentSquares) ASSERT_NE(bridge, std::nullopt) << "The two polygons are adjacent, spaced closely enough to bridge and with enough room."; - EXPECT_EQ(vSize(bridge->a.from_point - bridge->a.to_point), 100) << "The polygons are 100 units spaced apart, so this is the shortest possible bridge."; - EXPECT_EQ(vSize(bridge->b.from_point - bridge->b.to_point), 100) << "The second bridge should also be equally short in this case."; - EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a.from_point, bridge->a.to_point, bridge->b.from_point, bridge->b.to_point), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; - EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b.from_point, bridge->a.from_point, bridge->a.to_point), 0) << "Connection B should be to the right of connection A."; - EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b.to_point, bridge->a.from_point, bridge->a.to_point), 0) << "Connection B should be to the right of connection A."; + EXPECT_EQ(vSize(bridge->a_.from_point_ - bridge->a_.to_point_), 100) << "The polygons are 100 units spaced apart, so this is the shortest possible bridge."; + EXPECT_EQ(vSize(bridge->b_.from_point_ - bridge->b_.to_point_), 100) << "The second bridge should also be equally short in this case."; + EXPECT_EQ(LinearAlg2D::getDist2BetweenLineSegments(bridge->a_.from_point_, bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 100 * 100) << "The bridges should be spaced 1 line width (100 units) apart."; + EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.from_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; + EXPECT_LT(LinearAlg2D::pointIsLeftOfLine(bridge->b_.to_point_, bridge->a_.from_point_, bridge->a_.to_point_), 0) << "Connection B should be to the right of connection A."; } /*! @@ -113,10 +113,10 @@ TEST_F(PolygonConnectorTest, getBridgeClosest) ASSERT_NE(bridge, std::nullopt) << "The two polygons are adjacent and spaced closely enough to bridge along their entire side, even with the slant."; - EXPECT_EQ(bridge->b.from_point, Point(1000, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; - EXPECT_EQ(bridge->b.to_point, Point(1100, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; - EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a.from_point, bridge->b.from_point, bridge->b.to_point), 0) << "Connection A should be to the left of connection B."; - EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a.to_point, bridge->b.from_point, bridge->b.to_point), 0) << "Connection A should be to the left of connection B."; + EXPECT_EQ(bridge->b_.from_point_, Point(1000, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_EQ(bridge->b_.to_point_, Point(1100, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.from_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; + EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; } /*! From 6720d7a8ec0ef1f2a35999c020fb4bf364ed07af Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 12:10:21 +0100 Subject: [PATCH 065/218] Fixed variable shadowing warnings --- include/SkeletalTrapezoidation.h | 8 ++++---- src/SkeletalTrapezoidation.cpp | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/SkeletalTrapezoidation.h b/include/SkeletalTrapezoidation.h index 2b920465c4..87b5155099 100644 --- a/include/SkeletalTrapezoidation.h +++ b/include/SkeletalTrapezoidation.h @@ -136,11 +136,11 @@ class SkeletalTrapezoidation */ struct TransitionMidRef { - edge_t* edge; - std::list::iterator transition_it; + edge_t* edge_; + std::list::iterator transition_it_; TransitionMidRef(edge_t* edge, std::list::iterator transition_it) - : edge(edge) - , transition_it(transition_it) + : edge_(edge) + , transition_it_(transition_it) {} }; diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index dd4b69ccbd..7fd2ffdc48 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -1021,7 +1021,7 @@ void SkeletalTrapezoidation::filterTransitionMids() for (TransitionMidRef& ref : to_be_dissolved_back) { dissolveBeadCountRegion(&edge, transitions.back().lower_bead_count_ + 1, transitions.back().lower_bead_count_); - ref.edge->data.getTransitions()->erase(ref.transition_it); + ref.edge_->data.getTransitions()->erase(ref.transition_it_); } { @@ -1045,7 +1045,7 @@ void SkeletalTrapezoidation::filterTransitionMids() for (TransitionMidRef& ref : to_be_dissolved_front) { dissolveBeadCountRegion(edge.twin, transitions.front().lower_bead_count_, transitions.front().lower_bead_count_ + 1); - ref.edge->data.getTransitions()->erase(ref.transition_it); + ref.edge_->data.getTransitions()->erase(ref.transition_it_); } { From bdbdd178d1362f7fdf57a082ca80ef8cc79d75e9 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 12:14:35 +0100 Subject: [PATCH 066/218] Removed last occurences of M_PI --- .../BeadingStrategy/BeadingStrategyFactory.h | 8 ++--- include/PathOrderOptimizer.h | 4 +-- include/settings/types/Angle.h | 4 +-- include/utils/ExtrusionSegment.h | 23 ++++++------ include/utils/IntPoint.h | 6 ++-- include/utils/polygonUtils.h | 2 +- .../BeadingStrategyFactory.cpp | 36 +++++++++++-------- 7 files changed, 43 insertions(+), 40 deletions(-) diff --git a/include/BeadingStrategy/BeadingStrategyFactory.h b/include/BeadingStrategy/BeadingStrategyFactory.h index 55cfe6d2ac..2789fa4657 100644 --- a/include/BeadingStrategy/BeadingStrategyFactory.h +++ b/include/BeadingStrategy/BeadingStrategyFactory.h @@ -13,12 +13,11 @@ namespace cura class BeadingStrategyFactory { public: - static BeadingStrategyPtr makeStrategy - ( + static BeadingStrategyPtr makeStrategy( const coord_t preferred_bead_width_outer = MM2INT(0.5), const coord_t preferred_bead_width_inner = MM2INT(0.5), const coord_t preferred_transition_length = MM2INT(0.4), - const float transitioning_angle = M_PI / 4.0, + const double transitioning_angle = std::numbers::pi / 4.0, const bool print_thin_walls = false, const coord_t min_bead_width = 0, const coord_t min_feature_size = 0, @@ -27,8 +26,7 @@ class BeadingStrategyFactory const coord_t max_bead_count = 0, const coord_t outer_wall_offset = 0, const int inward_distributed_center_wall_count = 2, - const Ratio minimum_variable_line_ratio = 0.5 - ); + const Ratio minimum_variable_line_ratio = 0.5); }; } // namespace cura diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 2206ece605..ee2ab5102e 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -804,9 +804,9 @@ class PathOrderOptimizer const Point next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); const Point previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); - float angle = LinearAlg2D::getAngleLeft(previous, here, next) - M_PI; + float angle = LinearAlg2D::getAngleLeft(previous, here, next) - std::numbers::pi_v; - return angle / M_PI; + return angle / std::numbers::pi_v; } /*! diff --git a/include/settings/types/Angle.h b/include/settings/types/Angle.h index 4b4ed3de5e..f6a7665b00 100644 --- a/include/settings/types/Angle.h +++ b/include/settings/types/Angle.h @@ -6,9 +6,9 @@ #include //For fmod. -#include "../../utils/math.h" //For M_PI. +#include "../../utils/math.h" //For PI. -#define TAU (2.0 * M_PI) +#define TAU (2.0 * std::numbers::pi) namespace cura { diff --git a/include/utils/ExtrusionSegment.h b/include/utils/ExtrusionSegment.h index 11d0d4fb57..8c97b04215 100644 --- a/include/utils/ExtrusionSegment.h +++ b/include/utils/ExtrusionSegment.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_EXTRUSION_SEGMENT_H @@ -7,10 +7,10 @@ #include +#include "ExtrusionJunction.h" #include "IntPoint.h" #include "polygon.h" #include "polygonUtils.h" -#include "ExtrusionJunction.h" namespace cura { @@ -23,7 +23,7 @@ namespace cura */ class ExtrusionSegment { - static constexpr float a_step = 15 / 180.0 * M_PI; //!< In the calculation of the area covered by this line, the angle between line segments of the round endcaps. + static constexpr float a_step = 15 / 180.0 * std::numbers::pi; //!< In the calculation of the area covered by this line, the angle between line segments of the round endcaps. public: ExtrusionJunction from; ExtrusionJunction to; @@ -43,17 +43,18 @@ class ExtrusionSegment bool is_reduced; ExtrusionSegment(ExtrusionJunction from, ExtrusionJunction to, bool is_odd, bool is_reduced) - : from(from) - , to(to) - , is_odd(is_odd) - , is_reduced(is_reduced) - {} + : from(from) + , to(to) + , is_odd(is_odd) + , is_reduced(is_reduced) + { + } /*! * Converts this segment to an outline of the area that the segment covers. * \return The area that would be covered by this extrusion segment. */ - Polygons toPolygons(); + Polygons toPolygons(); /*! * Converts this segment to an outline of the area that the segment covers. @@ -80,7 +81,5 @@ class ExtrusionSegment }; - - } // namespace cura #endif // UTILS_EXTRUSION_SEGMENT_H diff --git a/include/utils/IntPoint.h b/include/utils/IntPoint.h index 7649241e82..1e4f5cabee 100644 --- a/include/utils/IntPoint.h +++ b/include/utils/IntPoint.h @@ -18,7 +18,7 @@ Integer points are used to avoid floating point rounding errors, and because Cli #include #include -#include "../utils/math.h" // for M_PI. Use relative path to avoid pulling +#include "../utils/math.h" // for PI. Use relative path to avoid pulling #include "Point3.h" //For applying Point3Matrices. #ifdef __GNUC__ @@ -185,7 +185,7 @@ INLINE coord_t cross(const Point& p0, const Point& p1) INLINE int angle(const Point& p) { - double angle = std::atan2(p.X, p.Y) / M_PI * 180.0; + double angle = std::atan2(p.X, p.Y) / std::numbers::pi * 180.0; if (angle < 0.0) angle += 360.0; return static_cast(std::lrint(angle)); @@ -233,7 +233,7 @@ class PointMatrix PointMatrix(double rotation) { - rotation = rotation / 180 * M_PI; + rotation = rotation / 180 * std::numbers::pi; matrix[0] = cos(rotation); matrix[1] = -sin(rotation); matrix[2] = -matrix[1]; diff --git a/include/utils/polygonUtils.h b/include/utils/polygonUtils.h index 24d8936561..9e2017d1b2 100644 --- a/include/utils/polygonUtils.h +++ b/include/utils/polygonUtils.h @@ -671,7 +671,7 @@ class PolygonUtils * \param a_step The angle between segments of the circle. * \return A new Polygon containing the circle. */ - static Polygon makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step = M_PI / 8); + static Polygon makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step = std::numbers::pi / 8); /*! * Connect all polygons to their holes using zero widths hole channels, so that the polygons and their outlines are connected together diff --git a/src/BeadingStrategy/BeadingStrategyFactory.cpp b/src/BeadingStrategy/BeadingStrategyFactory.cpp index f9682eb2ef..c929bd5d9f 100644 --- a/src/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/BeadingStrategy/BeadingStrategyFactory.cpp @@ -16,24 +16,30 @@ namespace cura { -BeadingStrategyPtr BeadingStrategyFactory::makeStrategy(const coord_t preferred_bead_width_outer, - const coord_t preferred_bead_width_inner, - const coord_t preferred_transition_length, - const float transitioning_angle, - const bool print_thin_walls, - const coord_t min_bead_width, - const coord_t min_feature_size, - const Ratio wall_split_middle_threshold, - const Ratio wall_add_middle_threshold, - const coord_t max_bead_count, - const coord_t outer_wall_offset, - const int inward_distributed_center_wall_count, - const Ratio minimum_variable_line_ratio) +BeadingStrategyPtr BeadingStrategyFactory::makeStrategy( + const coord_t preferred_bead_width_outer, + const coord_t preferred_bead_width_inner, + const coord_t preferred_transition_length, + const double transitioning_angle, + const bool print_thin_walls, + const coord_t min_bead_width, + const coord_t min_feature_size, + const Ratio wall_split_middle_threshold, + const Ratio wall_add_middle_threshold, + const coord_t max_bead_count, + const coord_t outer_wall_offset, + const int inward_distributed_center_wall_count, + const Ratio minimum_variable_line_ratio) { using std::make_unique; using std::move; - BeadingStrategyPtr ret = - make_unique(preferred_bead_width_inner, preferred_transition_length, transitioning_angle, wall_split_middle_threshold, wall_add_middle_threshold, inward_distributed_center_wall_count); + BeadingStrategyPtr ret = make_unique( + preferred_bead_width_inner, + preferred_transition_length, + transitioning_angle, + wall_split_middle_threshold, + wall_add_middle_threshold, + inward_distributed_center_wall_count); spdlog::debug("Applying the Redistribute meta-strategy with outer-wall width = {}, inner-wall width = {}", preferred_bead_width_outer, preferred_bead_width_inner); ret = make_unique(preferred_bead_width_outer, minimum_variable_line_ratio, move(ret)); From c6047b7c1379121478344b8eb7245abcb87769a5 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 21 Nov 2023 12:17:59 +0100 Subject: [PATCH 067/218] Add optional Sentry integration The update adds an option to enable or disable Sentry integration in the code. Sentry is configured to capture and report crashes only if the appropriate option is enabled and a valid DSN (data source name) is provided. The suitable changes have been made in the Conan, CMake configurations and source code files. To compile locally with Sentry support run the conan install command with: ``` -c user.curaengine:sentry_url= -o curaengine:enable_sentry=True ``` For the runners the conf `user.curaengine:sentry_url` has been added to the relevant runner profiles. Once the new workflows have been merged that url will move out of the profiles and passed along as a repository variable in the GH runner. Contributes to CURA-11364 --- CMakeLists.txt | 9 +++++++-- conanfile.py | 10 +++++++++- src/main.cpp | 10 ++++++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb1b3cc708..8dbd0534a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ option(ENABLE_TESTING "Build with unit tests" OFF) option(EXTENSIVE_WARNINGS "Build with all warnings" ON) option(ENABLE_PLUGINS "Build with plugins" ON) option(ENABLE_REMOTE_PLUGINS "Build with all warnings" OFF) +option(ENABLE_SENTRY "Send crash data via Sentry" OFF) option(ENABLE_MORE_COMPILER_OPTIMIZATION_FLAGS "Enable more optimization flags" ON) option(USE_SYSTEM_LIBS "Use the system libraries if available" OFF) option(OLDER_APPLE_CLANG "Apple Clang <= 13 used" OFF) @@ -173,6 +174,7 @@ target_compile_definitions(_CuraEngine CURA_ENGINE_VERSION=\"${CURA_ENGINE_VERSION}\" $<$:BUILD_TESTS> PRIVATE + $<$:SENTRY_URL=\"${SENTRY_URL}\"> $<$:NOMINMAX> $<$:ASSERT_INSANE_OUTPUT> $<$:USE_CPU_TIME> @@ -201,7 +203,10 @@ find_package(fmt REQUIRED) find_package(range-v3 REQUIRED) find_package(scripta REQUIRED) find_package(neargye-semver REQUIRED) -find_package(sentry REQUIRED) + +if (ENABLE_SENTRY) + find_package(sentry REQUIRED) +endif () if (ENABLE_TESTING) find_package(GTest REQUIRED) @@ -222,7 +227,7 @@ target_link_libraries(_CuraEngine asio-grpc::asio-grpc grpc::grpc protobuf::libprotobuf - sentry::sentry + $<$:sentry::sentry> $<$:GTest::gtest>) if (NOT WIN32) diff --git a/conanfile.py b/conanfile.py index 1d51628fa3..9019773558 100644 --- a/conanfile.py +++ b/conanfile.py @@ -28,6 +28,7 @@ class CuraEngineConan(ConanFile): "enable_benchmarks": [True, False], "enable_extensive_warnings": [True, False], "enable_plugins": [True, False], + "enable_sentry": [True, False], "enable_remote_plugins": [True, False], } default_options = { @@ -35,6 +36,7 @@ class CuraEngineConan(ConanFile): "enable_benchmarks": False, "enable_extensive_warnings": False, "enable_plugins": True, + "enable_sentry": False, "enable_remote_plugins": False, } @@ -56,6 +58,8 @@ def export_sources(self): def config_options(self): if not self.options.enable_plugins: del self.options.enable_remote_plugins + if self.conf.get("user.curaengine:sentry_url", "", check_type=str) == "": + del self.options.enable_sentry def configure(self): self.options["boost"].header_only = True @@ -83,6 +87,8 @@ def build_requirements(self): def requirements(self): if self.options.enable_arcus: self.requires("arcus/5.3.0") + if self.options.get_safe("enable_sentry", False): + self.requires("sentry-native/0.6.5") self.requires("asio-grpc/2.6.0") self.requires("grpc/1.50.1") self.requires("curaengine_grpc_definitions/(latest)@ultimaker/testing") @@ -98,7 +104,6 @@ def requirements(self): self.requires("protobuf/3.21.9") self.requires("zlib/1.2.12") self.requires("openssl/1.1.1l") - self.requires("sentry-native/0.6.5") def generate(self): deps = CMakeDeps(self) @@ -111,6 +116,9 @@ def generate(self): tc.variables["ENABLE_BENCHMARKS"] = self.options.enable_benchmarks tc.variables["EXTENSIVE_WARNINGS"] = self.options.enable_extensive_warnings tc.variables["OLDER_APPLE_CLANG"] = self.settings.compiler == "apple-clang" and Version(self.settings.compiler.version) < "14" + if self.options.get_safe("enable_sentry", False): + tc.variables["ENABLE_SENTRY"] = True + tc.variables["SENTRY_URL"] = self.conf.get("user.curaengine:sentry_url", "", check_type=str) if self.options.enable_plugins: tc.variables["ENABLE_PLUGINS"] = True tc.variables["ENABLE_REMOTE_PLUGINS"] = self.options.enable_remote_plugins diff --git a/src/main.cpp b/src/main.cpp index 8614af364c..09d59403a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,7 +7,10 @@ #include //For setpriority. #endif +#ifdef SENTRY_URL #include +#endif + #include #include @@ -40,10 +43,10 @@ int main(int argc, char** argv) #endif std::cerr << std::boolalpha; +#ifdef SENTRY_URL // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); - // TODO: Right now we just hardcode the key. We should probably get that from some kind of secret for release builds - sentry_options_set_dsn(options, "https://734f9ec9024f73e53701d59c3ffddfe3@o323038.ingest.sentry.io/4506257745510401"); + sentry_options_set_dsn(options, std::string(SENTRY_URL)); // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path std::string config_path = ""; @@ -63,10 +66,13 @@ int main(int argc, char** argv) version += std::string(CURA_ENGINE_VERSION); sentry_options_set_release(options, version.c_str()); sentry_init(options); +#endif cura::Application::getInstance().run(argc, argv); +#ifdef SENTRY_URL sentry_close(); +#endif return 0; } From 17466d01528c197957879a1d9a92632f70006b22 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Nov 2023 12:46:28 +0100 Subject: [PATCH 068/218] Use format to create the versionstring --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 09d59403a6..e8c8245084 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,7 @@ #endif #ifdef SENTRY_URL +#include #include #endif @@ -62,8 +63,7 @@ int main(int argc, char** argv) #endif config_path += ".sentry-native"; sentry_options_set_database_path(options, config_path.c_str()); - std::string version = "curaengine@"; - version += std::string(CURA_ENGINE_VERSION); + std::string version = fmt::format("curaengine@{}", CURA_ENGINE_VERSION); sentry_options_set_release(options, version.c_str()); sentry_init(options); #endif From adfa140c710b080f53e075f9f95ed794c165fdd5 Mon Sep 17 00:00:00 2001 From: nallath Date: Tue, 21 Nov 2023 11:47:12 +0000 Subject: [PATCH 069/218] Applied clang-format. --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index e8c8245084..f60f6139f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,8 +8,9 @@ #endif #ifdef SENTRY_URL -#include #include + +#include #endif #include From 7af9a1a46f0147c9dd8f58d160fd3a4c79bd9028 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 21 Nov 2023 13:16:13 +0100 Subject: [PATCH 070/218] Refactor sentry options and improve code readability The revision consists of refactoring of the sentry options in the main.cpp file, including setting the database path and release version. The filesystem library and fmt library have been used to improve the code readability and simplicity. Also, some changes have been made in the CMakeLists.txt file, specifically for enabling sentry and its related configurations. Contributes to CURA-11364 --- CMakeLists.txt | 12 ++++++++---- src/main.cpp | 22 ++++++++-------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8dbd0534a1..b2d88be329 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,7 +174,6 @@ target_compile_definitions(_CuraEngine CURA_ENGINE_VERSION=\"${CURA_ENGINE_VERSION}\" $<$:BUILD_TESTS> PRIVATE - $<$:SENTRY_URL=\"${SENTRY_URL}\"> $<$:NOMINMAX> $<$:ASSERT_INSANE_OUTPUT> $<$:USE_CPU_TIME> @@ -227,7 +226,6 @@ target_link_libraries(_CuraEngine asio-grpc::asio-grpc grpc::grpc protobuf::libprotobuf - $<$:sentry::sentry> $<$:GTest::gtest>) if (NOT WIN32) @@ -246,8 +244,14 @@ else () endif (NOT WIN32) use_threads(CuraEngine) -target_link_libraries(CuraEngine PRIVATE _CuraEngine) -target_compile_definitions(CuraEngine PRIVATE VERSION=\"${CURA_ENGINE_VERSION}\") +target_link_libraries(CuraEngine PRIVATE + _CuraEngine + $<$:sentry::sentry> +) +target_compile_definitions(CuraEngine PRIVATE + $<$:SENTRY_URL=\"${SENTRY_URL}\"> + VERSION=\"${CURA_ENGINE_VERSION}\" +) # Compiling the test environment. if (ENABLE_TESTING OR ENABLE_BENCHMARKS) diff --git a/src/main.cpp b/src/main.cpp index f60f6139f8..f44dac6a6b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include //To change the formatting of std::cerr. @@ -8,9 +8,9 @@ #endif #ifdef SENTRY_URL -#include - +#include #include +#include #endif #include @@ -48,24 +48,18 @@ int main(int argc, char** argv) #ifdef SENTRY_URL // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); - sentry_options_set_dsn(options, std::string(SENTRY_URL)); + sentry_options_set_dsn(options, std::string(SENTRY_URL).c_str()); // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path - std::string config_path = ""; - #if defined(__linux__) - config_path += getenv("HOME"); - config_path += "/.local/share/cura/"; + const auto config_path = std::filesystem::path(std::getenv("HOME")).append( "/.local/share/cura/.sentry-native" ); #elif defined(__APPLE__) && defined(__MACH__) - config_path += getenv("HOME"); - config_path += "/Library/Application Support/cura/"; + const auto config_path = std::filesystem::path(std::getenv("HOME")).append( "/Library/Application Support/cura/.sentry-native" ); #elif defined(_WIN64) - config_path = "%APPDATA%\\cura\\"; + const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append( "/cura/.sentry-native" ); #endif - config_path += ".sentry-native"; sentry_options_set_database_path(options, config_path.c_str()); - std::string version = fmt::format("curaengine@{}", CURA_ENGINE_VERSION); - sentry_options_set_release(options, version.c_str()); + sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); sentry_init(options); #endif From 2ad753641940ec95b10193c22ba60c7d379f5857 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Tue, 21 Nov 2023 12:16:55 +0000 Subject: [PATCH 071/218] Applied clang-format. --- src/main.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f44dac6a6b..be05974400 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,8 +9,9 @@ #ifdef SENTRY_URL #include -#include #include + +#include #endif #include @@ -52,11 +53,11 @@ int main(int argc, char** argv) // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path #if defined(__linux__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append( "/.local/share/cura/.sentry-native" ); + const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/.local/share/cura/.sentry-native"); #elif defined(__APPLE__) && defined(__MACH__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append( "/Library/Application Support/cura/.sentry-native" ); + const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/Library/Application Support/cura/.sentry-native"); #elif defined(_WIN64) - const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append( "/cura/.sentry-native" ); + const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append("/cura/.sentry-native"); #endif sentry_options_set_database_path(options, config_path.c_str()); sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); From 7a6098c614bf71784f870819650b8c7bc030ede7 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Nov 2023 13:31:44 +0100 Subject: [PATCH 072/218] Add instruction how to set sentry_url in the code CURA-11364 --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index be05974400..ec3891b83f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,7 +45,7 @@ int main(int argc, char** argv) signal(SIGFPE, cura::signal_FPE); #endif std::cerr << std::boolalpha; - +// Want to set the sentry URL? Use '-c user.curaengine:sentry_url= -o curaengine:enable_sentry=True' with conan install #ifdef SENTRY_URL // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); From 14e8ec0d70e82a1b64b0624d929c63d95a340d52 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Nov 2023 14:01:29 +0100 Subject: [PATCH 073/218] Only send sentry data if use_sentry env is set CURA-11364 --- src/main.cpp | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ec3891b83f..fab26295ae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,11 +10,10 @@ #ifdef SENTRY_URL #include #include - +#include #include #endif - -#include +#include #include @@ -45,29 +44,46 @@ int main(int argc, char** argv) signal(SIGFPE, cura::signal_FPE); #endif std::cerr << std::boolalpha; + + + // Want to set the sentry URL? Use '-c user.curaengine:sentry_url= -o curaengine:enable_sentry=True' with conan install #ifdef SENTRY_URL - // Setup sentry error handling. - sentry_options_t* options = sentry_options_new(); - sentry_options_set_dsn(options, std::string(SENTRY_URL).c_str()); - // This is also the default-path. For further information and recommendations: - // https://docs.sentry.io/platforms/native/configuration/options/#database-path + bool use_sentry = true; + if (const char* use_sentry_env = std::getenv("use_sentry")) + { + if(std::strcmp(use_sentry_env, "0") == 0) + { + use_sentry = false; + } + } + if(use_sentry) + { + // Setup sentry error handling. + sentry_options_t* options = sentry_options_new(); + sentry_options_set_dsn(options, std::string(SENTRY_URL).c_str()); + // This is also the default-path. For further information and recommendations: + // https://docs.sentry.io/platforms/native/configuration/options/#database-path #if defined(__linux__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/.local/share/cura/.sentry-native"); + const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/.local/share/cura/.sentry-native"); #elif defined(__APPLE__) && defined(__MACH__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/Library/Application Support/cura/.sentry-native"); + const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/Library/Application Support/cura/.sentry-native"); #elif defined(_WIN64) - const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append("/cura/.sentry-native"); + const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append("/cura/.sentry-native"); #endif - sentry_options_set_database_path(options, config_path.c_str()); - sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); - sentry_init(options); + sentry_options_set_database_path(options, config_path.c_str()); + sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); + sentry_init(options); + } #endif cura::Application::getInstance().run(argc, argv); #ifdef SENTRY_URL - sentry_close(); + if(use_sentry) + { + sentry_close(); + } #endif return 0; From b9cbe337f86947ca796c670dc3a78c6e23515831 Mon Sep 17 00:00:00 2001 From: nallath Date: Tue, 21 Nov 2023 13:03:10 +0000 Subject: [PATCH 074/218] Applied clang-format. --- src/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index fab26295ae..89a3a766ad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include #include #include + #include #endif #include @@ -46,18 +47,17 @@ int main(int argc, char** argv) std::cerr << std::boolalpha; - // Want to set the sentry URL? Use '-c user.curaengine:sentry_url= -o curaengine:enable_sentry=True' with conan install #ifdef SENTRY_URL bool use_sentry = true; if (const char* use_sentry_env = std::getenv("use_sentry")) { - if(std::strcmp(use_sentry_env, "0") == 0) + if (std::strcmp(use_sentry_env, "0") == 0) { use_sentry = false; } } - if(use_sentry) + if (use_sentry) { // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); @@ -80,7 +80,7 @@ int main(int argc, char** argv) cura::Application::getInstance().run(argc, argv); #ifdef SENTRY_URL - if(use_sentry) + if (use_sentry) { sentry_close(); } From bfe91cb226f8235fd8d0bd2929fcdfcb178e7299 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 14:36:51 +0100 Subject: [PATCH 075/218] Use double instead of float, unless explicitely necessary --- include/BeadingStrategy/BeadingStrategy.h | 4 +- .../DistributedBeadingStrategy.h | 16 +- .../BeadingStrategy/LimitedBeadingStrategy.h | 2 +- .../RedistributeBeadingStrategy.h | 148 +++++++++--------- .../BeadingStrategy/WideningBeadingStrategy.h | 6 +- include/LayerPlan.h | 12 +- include/PathOrderOptimizer.h | 24 +-- include/SkeletalTrapezoidationJoint.h | 8 +- include/communication/ArcusCommunication.h | 6 +- include/communication/CommandLine.h | 8 +- include/communication/Communication.h | 2 +- include/infill.h | 2 +- include/infill/DensityProvider.h | 12 +- include/infill/ImageBasedDensityProvider.h | 9 +- include/infill/SierpinskiFill.h | 22 +-- include/infill/UniformDensityProvider.h | 19 +-- include/mesh.h | 39 +++-- include/utils/ExtrusionSegment.h | 19 +-- include/utils/FMatrix4x3.h | 4 +- include/utils/IntPoint.h | 4 +- include/utils/Point3d.h | 142 +++++++++++++++++ include/utils/Point3f.h | 45 ++++++ include/utils/SVG.h | 38 ++--- include/utils/SparseGrid.h | 133 ++++++++-------- include/utils/SparseLineGrid.h | 43 ++--- include/utils/SparsePointGrid.h | 38 ++--- include/utils/SparsePointGridInclusive.h | 56 ++++--- include/utils/ToolpathVisualizer.h | 17 +- include/utils/VoronoiUtils.h | 35 ++--- include/utils/floatpoint.h | 142 ----------------- include/utils/linearAlg2D.h | 2 +- include/utils/polygon.h | 9 +- src/BeadingStrategy/BeadingStrategy.cpp | 45 +++--- .../DistributedBeadingStrategy.cpp | 25 ++- .../LimitedBeadingStrategy.cpp | 7 +- .../RedistributeBeadingStrategy.cpp | 30 ++-- .../WideningBeadingStrategy.cpp | 14 +- src/FffGcodeWriter.cpp | 6 +- src/FffPolygonGenerator.cpp | 2 +- src/LayerPlan.cpp | 32 ++-- src/MeshGroup.cpp | 18 +-- src/SkeletalTrapezoidation.cpp | 24 +-- src/TopSurface.cpp | 2 +- src/bridge.cpp | 2 +- src/communication/ArcusCommunication.cpp | 20 +-- .../ArcusCommunicationPrivate.cpp | 18 +-- src/communication/CommandLine.cpp | 4 +- src/gcodeExport.cpp | 8 +- src/infill.cpp | 18 +-- src/infill/GyroidInfill.cpp | 48 +++--- src/infill/ImageBasedDensityProvider.cpp | 8 +- src/infill/SierpinskiFill.cpp | 70 ++++----- src/infill/SierpinskiFillProvider.cpp | 4 +- src/mesh.cpp | 14 +- src/pathPlanning/LinePolygonsCrossings.cpp | 93 ++++++----- src/progress/Progress.cpp | 2 +- src/settings/AdaptiveLayerHeights.cpp | 16 +- src/settings/PathConfigStorage.cpp | 2 +- src/skin.cpp | 12 +- src/support.cpp | 18 +-- src/timeEstimate.cpp | 8 +- src/utils/ExtrusionSegment.cpp | 56 ++++--- src/utils/FMatrix4x3.cpp | 4 +- src/utils/LinearAlg2D.cpp | 8 +- src/utils/SVG.cpp | 100 ++++++------ src/utils/ToolpathVisualizer.cpp | 60 +++---- src/utils/VoronoiUtils.cpp | 14 +- src/utils/VoxelUtils.cpp | 4 +- src/utils/polygon.cpp | 10 +- src/utils/polygonUtils.cpp | 2 +- 70 files changed, 968 insertions(+), 926 deletions(-) create mode 100644 include/utils/Point3d.h create mode 100644 include/utils/Point3f.h delete mode 100644 include/utils/floatpoint.h diff --git a/include/BeadingStrategy/BeadingStrategy.h b/include/BeadingStrategy/BeadingStrategy.h index ee2d2635e6..0b6d28a87d 100644 --- a/include/BeadingStrategy/BeadingStrategy.h +++ b/include/BeadingStrategy/BeadingStrategy.h @@ -41,7 +41,7 @@ class BeadingStrategy Ratio wall_split_middle_threshold, Ratio wall_add_middle_threshold, coord_t default_transition_length, - float transitioning_angle = std::numbers::pi_v / 3.0); + double transitioning_angle = std::numbers::pi / 3.0); BeadingStrategy(const BeadingStrategy& other); @@ -85,7 +85,7 @@ class BeadingStrategy * * Transitions are used to smooth out the jumps in integer bead count; the jumps turn into ramps which could be positioned relative to the jump location. */ - virtual float getTransitionAnchorPos(coord_t lower_bead_count) const; + virtual double getTransitionAnchorPos(coord_t lower_bead_count) const; /*! * Get the locations in a bead count region where \ref BeadingStrategy::compute exhibits a bend in the widths. diff --git a/include/BeadingStrategy/DistributedBeadingStrategy.h b/include/BeadingStrategy/DistributedBeadingStrategy.h index dde25da175..35a7bb0bde 100644 --- a/include/BeadingStrategy/DistributedBeadingStrategy.h +++ b/include/BeadingStrategy/DistributedBeadingStrategy.h @@ -18,23 +18,23 @@ namespace cura class DistributedBeadingStrategy : public BeadingStrategy { protected: - float one_over_distribution_radius_squared; // (1 / distribution_radius)^2 + double one_over_distribution_radius_squared; // (1 / distribution_radius)^2 public: /*! - * \param distribution_radius the radius (in number of beads) over which to distribute the discrepancy between the feature size and the optimal thickness - */ - DistributedBeadingStrategy - ( + * \param distribution_radius the radius (in number of beads) over which to distribute the discrepancy between the feature size and the optimal thickness + */ + DistributedBeadingStrategy( const coord_t optimal_width, const coord_t default_transition_length, const AngleRadians transitioning_angle, const Ratio wall_split_middle_threshold, const Ratio wall_add_middle_threshold, - const int distribution_radius - ); + const int distribution_radius); - virtual ~DistributedBeadingStrategy() override {} + virtual ~DistributedBeadingStrategy() override + { + } Beading compute(coord_t thickness, coord_t bead_count) const override; coord_t getOptimalBeadCount(coord_t thickness) const override; diff --git a/include/BeadingStrategy/LimitedBeadingStrategy.h b/include/BeadingStrategy/LimitedBeadingStrategy.h index e727015db6..b4ca975fd6 100644 --- a/include/BeadingStrategy/LimitedBeadingStrategy.h +++ b/include/BeadingStrategy/LimitedBeadingStrategy.h @@ -39,7 +39,7 @@ class LimitedBeadingStrategy : public BeadingStrategy coord_t getTransitioningLength(coord_t lower_bead_count) const override; - float getTransitionAnchorPos(coord_t lower_bead_count) const override; + double getTransitionAnchorPos(coord_t lower_bead_count) const override; protected: const coord_t max_bead_count; diff --git a/include/BeadingStrategy/RedistributeBeadingStrategy.h b/include/BeadingStrategy/RedistributeBeadingStrategy.h index 28e767d05a..6609eee995 100644 --- a/include/BeadingStrategy/RedistributeBeadingStrategy.h +++ b/include/BeadingStrategy/RedistributeBeadingStrategy.h @@ -1,98 +1,92 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef REDISTRIBUTE_DISTRIBUTED_BEADING_STRATEGY_H #define REDISTRIBUTE_DISTRIBUTED_BEADING_STRATEGY_H -#include "BeadingStrategy.h" - #include "../settings/types/Ratio.h" +#include "BeadingStrategy.h" namespace cura { +/*! + * A meta-beading-strategy that takes outer and inner wall widths into account. + * + * The outer wall will try to keep a constant width by only applying the beading strategy on the inner walls. This + * ensures that this outer wall doesn't react to changes happening to inner walls. It will limit print artifacts on + * the surface of the print. Although this strategy technically deviates from the original philosophy of the paper. + * It will generally results in better prints because of a smoother motion and less variation in extrusion width in + * the outer walls. + * + * If the thickness of the model is less then two times the optimal outer wall width and once the minimum inner wall + * width it will keep the minimum inner wall at a minimum constant and vary the outer wall widths symmetrical. Until + * The thickness of the model is that of at least twice the optimal outer wall width it will then use two + * symmetrical outer walls only. Until it transitions into a single outer wall. These last scenario's are always + * symmetrical in nature, disregarding the user specified strategy. + */ +class RedistributeBeadingStrategy : public BeadingStrategy +{ +public: /*! - * A meta-beading-strategy that takes outer and inner wall widths into account. - * - * The outer wall will try to keep a constant width by only applying the beading strategy on the inner walls. This - * ensures that this outer wall doesn't react to changes happening to inner walls. It will limit print artifacts on - * the surface of the print. Although this strategy technically deviates from the original philosophy of the paper. - * It will generally results in better prints because of a smoother motion and less variation in extrusion width in - * the outer walls. - * - * If the thickness of the model is less then two times the optimal outer wall width and once the minimum inner wall - * width it will keep the minimum inner wall at a minimum constant and vary the outer wall widths symmetrical. Until - * The thickness of the model is that of at least twice the optimal outer wall width it will then use two - * symmetrical outer walls only. Until it transitions into a single outer wall. These last scenario's are always - * symmetrical in nature, disregarding the user specified strategy. + * /param optimal_width_outer Outer wall width, guaranteed to be the actual (save rounding errors) at a + * bead count if the parent strategies' optimum bead width is a weighted + * average of the outer and inner walls at that bead count. + * /param minimum_variable_line_ratio Minimum factor that the variable line might deviate from the optimal width. */ - class RedistributeBeadingStrategy : public BeadingStrategy - { - public: - /*! - * /param optimal_width_outer Outer wall width, guaranteed to be the actual (save rounding errors) at a - * bead count if the parent strategies' optimum bead width is a weighted - * average of the outer and inner walls at that bead count. - * /param minimum_variable_line_ratio Minimum factor that the variable line might deviate from the optimal width. - */ - RedistributeBeadingStrategy - ( - const coord_t optimal_width_outer, - const Ratio minimum_variable_line_ratio, - BeadingStrategyPtr parent - ); + RedistributeBeadingStrategy(const coord_t optimal_width_outer, const Ratio minimum_variable_line_ratio, BeadingStrategyPtr parent); - virtual ~RedistributeBeadingStrategy() override = default; + virtual ~RedistributeBeadingStrategy() override = default; - Beading compute(coord_t thickness, coord_t bead_count) const override; + Beading compute(coord_t thickness, coord_t bead_count) const override; - coord_t getOptimalThickness(coord_t bead_count) const override; - coord_t getTransitionThickness(coord_t lower_bead_count) const override; - coord_t getOptimalBeadCount(coord_t thickness) const override; - coord_t getTransitioningLength(coord_t lower_bead_count) const override; - float getTransitionAnchorPos(coord_t lower_bead_count) const override; + coord_t getOptimalThickness(coord_t bead_count) const override; + coord_t getTransitionThickness(coord_t lower_bead_count) const override; + coord_t getOptimalBeadCount(coord_t thickness) const override; + coord_t getTransitioningLength(coord_t lower_bead_count) const override; + double getTransitionAnchorPos(coord_t lower_bead_count) const override; - virtual std::string toString() const; + virtual std::string toString() const; - protected: - /*! - * Determine the outer bead width. - * - * According to the following logic: - * - If the thickness of the model is more then twice the optimal outer bead width and the minimum inner bead - * width it will return the optimal outer bead width. - * - If the thickness is less then twice the optimal outer bead width and the minimum inner bead width, but - * more them twice the optimal outer bead with it will return the optimal bead width minus half the inner bead - * width. - * - If the thickness is less then twice the optimal outer bead width it will return half the thickness as - * outer bead width - * - * \param thickness Thickness of the total beads. - * \param optimal_width_outer User specified optimal outer bead width. - * \param minimum_width_inner Inner bead width times the minimum variable line width. - * \return The outer bead width. - */ - static coord_t getOptimalOuterBeadWidth(coord_t thickness, coord_t optimal_width_outer, coord_t minimum_width_inner); +protected: + /*! + * Determine the outer bead width. + * + * According to the following logic: + * - If the thickness of the model is more then twice the optimal outer bead width and the minimum inner bead + * width it will return the optimal outer bead width. + * - If the thickness is less then twice the optimal outer bead width and the minimum inner bead width, but + * more them twice the optimal outer bead with it will return the optimal bead width minus half the inner bead + * width. + * - If the thickness is less then twice the optimal outer bead width it will return half the thickness as + * outer bead width + * + * \param thickness Thickness of the total beads. + * \param optimal_width_outer User specified optimal outer bead width. + * \param minimum_width_inner Inner bead width times the minimum variable line width. + * \return The outer bead width. + */ + static coord_t getOptimalOuterBeadWidth(coord_t thickness, coord_t optimal_width_outer, coord_t minimum_width_inner); - /*! - * Moves the beads towards the outer edges of thickness and ensures that the outer walls are locked in location - * \param beading The beading instance. - * \param thickness The thickness of the bead. - */ - static void resetToolPathLocations(Beading& beading, coord_t thickness); + /*! + * Moves the beads towards the outer edges of thickness and ensures that the outer walls are locked in location + * \param beading The beading instance. + * \param thickness The thickness of the bead. + */ + static void resetToolPathLocations(Beading& beading, coord_t thickness); - /*! - * Filters and validates the beads, to ensure that all inner beads are at least the minimum bead width. - * - * \param beading The beading instance. - * \param minimum_width_inner Inner bead width times the minimum variable line width. - * \return true if beads are removed. - */ - static bool validateInnerBeadWidths(Beading& beading, coord_t minimum_width_inner); + /*! + * Filters and validates the beads, to ensure that all inner beads are at least the minimum bead width. + * + * \param beading The beading instance. + * \param minimum_width_inner Inner bead width times the minimum variable line width. + * \return true if beads are removed. + */ + static bool validateInnerBeadWidths(Beading& beading, coord_t minimum_width_inner); - BeadingStrategyPtr parent; - coord_t optimal_width_outer; - Ratio minimum_variable_line_ratio; - }; + BeadingStrategyPtr parent; + coord_t optimal_width_outer; + Ratio minimum_variable_line_ratio; +}; } // namespace cura #endif // INWARD_DISTRIBUTED_BEADING_STRATEGY_H diff --git a/include/BeadingStrategy/WideningBeadingStrategy.h b/include/BeadingStrategy/WideningBeadingStrategy.h index 86ea45e616..5ec9bf4cad 100644 --- a/include/BeadingStrategy/WideningBeadingStrategy.h +++ b/include/BeadingStrategy/WideningBeadingStrategy.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef WIDENING_BEADING_STRATEGY_H #define WIDENING_BEADING_STRATEGY_H @@ -32,7 +32,7 @@ class WideningBeadingStrategy : public BeadingStrategy virtual coord_t getTransitionThickness(coord_t lower_bead_count) const override; virtual coord_t getOptimalBeadCount(coord_t thickness) const override; virtual coord_t getTransitioningLength(coord_t lower_bead_count) const override; - virtual float getTransitionAnchorPos(coord_t lower_bead_count) const override; + virtual double getTransitionAnchorPos(coord_t lower_bead_count) const override; virtual std::vector getNonlinearThicknesses(coord_t lower_bead_count) const override; virtual std::string toString() const override; diff --git a/include/LayerPlan.h b/include/LayerPlan.h index 4ad62a6584..a4b639030a 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -298,7 +298,7 @@ class LayerPlan : public NoCopy /*! * Plan a prime blob at the current location. */ - void planPrime(const float& prime_blob_wipe_length = 10.0); + void planPrime(double prime_blob_wipe_length = 10.0); /*! * Add an extrusion move to a certain point, optionally with a different flow than the one in the \p config. @@ -414,9 +414,9 @@ class LayerPlan : public NoCopy const Settings& settings, const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, - float flow, + double flow, const Ratio width_factor, - float& non_bridge_line_volume, + double& non_bridge_line_volume, Ratio speed_factor, double distance_to_bridge_start); @@ -442,7 +442,7 @@ class LayerPlan : public NoCopy const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, - float flow_ratio, + double flow_ratio, bool always_retract); /*! @@ -471,7 +471,7 @@ class LayerPlan : public NoCopy const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, - float flow_ratio, + double flow_ratio, bool always_retract, const bool is_closed, const bool is_reversed, @@ -504,7 +504,7 @@ class LayerPlan : public NoCopy const GCodePathConfig& bridge_config, const ZSeamConfig& z_seam_config = ZSeamConfig(), coord_t wall_0_wipe_dist = 0, - float flow_ratio = 1.0, + double flow_ratio = 1.0, bool always_retract = false); /*! diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index ee2ab5102e..8a46854aed 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -647,21 +647,21 @@ class PathOrderOptimizer } size_t best_i; - float best_score = std::numeric_limits::infinity(); + double best_score = std::numeric_limits::infinity(); for (const auto& [i, here] : **path.converted_ | ranges::views::drop_last(1) | ranges::views::enumerate) { // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. const coord_t distance = (combing_boundary_ == nullptr) ? getDirectDistance(here, target_pos) : getCombingDistance(here, target_pos); - const float score_distance = (seam_config_.type == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) - ? MM2INT(10) - : vSize2(here - target_pos); + const double score_distance = (seam_config_.type == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) + ? MM2INT(10) + : vSize2(here - target_pos); - float corner_angle = cornerAngle(path, i, segments_sizes, total_length); + double corner_angle = cornerAngle(path, i, segments_sizes, total_length); // angles < 0 are concave (left turning) // angles > 0 are convex (right turning) - float corner_shift; + double corner_shift; if (seam_config_.type == EZSeamType::SHORTEST) { // the more a corner satisfies our criteria, the closer it appears to be @@ -677,7 +677,7 @@ class PathOrderOptimizer corner_shift = score_distance / 50; } - float score = score_distance; + double score = score_distance; switch (seam_config_.corner_pref) { default: @@ -696,7 +696,7 @@ class PathOrderOptimizer break; case EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_WEIGHTED: // Give sharper corners some advantage, but sharper concave corners even more. { - float score_corner = std::abs(corner_angle) * corner_shift; + double score_corner = std::abs(corner_angle) * corner_shift; if (corner_angle < 0) // Concave corner. { score_corner *= 2; @@ -706,7 +706,7 @@ class PathOrderOptimizer } } - constexpr float EPSILON = 5.0; + constexpr double EPSILON = 5.0; if (std::abs(best_score - score) <= EPSILON) { // add breaker for two candidate starting location with similar score @@ -797,16 +797,16 @@ class PathOrderOptimizer * \param angle_query_distance query range (default to 1mm) * \return angle between the reference point and the two sibling points, weighed to [-1.0 ; 1.0] */ - static float cornerAngle(const OrderablePath& path, int i, const std::vector& segments_sizes, coord_t total_length, const coord_t angle_query_distance = 1000) + static double cornerAngle(const OrderablePath& path, int i, const std::vector& segments_sizes, coord_t total_length, const coord_t angle_query_distance = 1000) { const coord_t bounded_distance = std::min(angle_query_distance, total_length / 2); const Point& here = (*path.converted_)[i]; const Point next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); const Point previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); - float angle = LinearAlg2D::getAngleLeft(previous, here, next) - std::numbers::pi_v; + double angle = LinearAlg2D::getAngleLeft(previous, here, next) - std::numbers::pi; - return angle / std::numbers::pi_v; + return angle / std::numbers::pi; } /*! diff --git a/include/SkeletalTrapezoidationJoint.h b/include/SkeletalTrapezoidationJoint.h index fc27526f1f..0c596b6599 100644 --- a/include/SkeletalTrapezoidationJoint.h +++ b/include/SkeletalTrapezoidationJoint.h @@ -4,11 +4,11 @@ #ifndef SKELETAL_TRAPEZOIDATION_JOINT_H #define SKELETAL_TRAPEZOIDATION_JOINT_H +#include // smart pointers + #include "BeadingStrategy/BeadingStrategy.h" #include "utils/IntPoint.h" -#include // smart pointers - namespace cura { @@ -34,8 +34,8 @@ class SkeletalTrapezoidationJoint coord_t distance_to_boundary_; coord_t bead_count_; - float transition_ratio_; //! The distance near the skeleton to leave free because this joint is in the middle of a transition, as a fraction of the inner bead width of the bead - //! at the higher transition. + double transition_ratio_; //! The distance near the skeleton to leave free because this joint is in the middle of a transition, as a fraction of the inner bead width of the + //! bead at the higher transition. SkeletalTrapezoidationJoint() : distance_to_boundary_(-1) , bead_count_(-1) diff --git a/include/communication/ArcusCommunication.h b/include/communication/ArcusCommunication.h index 7cc7679535..37855fa368 100644 --- a/include/communication/ArcusCommunication.h +++ b/include/communication/ArcusCommunication.h @@ -8,11 +8,11 @@ #ifdef BUILD_TESTS #include #endif +#include //For unique_ptr and shared_ptr. + #include "Communication.h" //The class we're implementing. #include "Cura.pb.h" //To create Protobuf messages for Cura's front-end. -#include //For unique_ptr and shared_ptr. - // Forward declarations to speed up compilation. namespace Arcus { @@ -177,7 +177,7 @@ class ArcusCommunication : public Communication /* * \brief Communicate to Arcus what our progress is. */ - void sendProgress(const float& progress) const override; + void sendProgress(double progress) const override; /* * \brief Set which extruder is being used for the following calls to diff --git a/include/communication/CommandLine.h b/include/communication/CommandLine.h index 2948241c51..fbae3e3010 100644 --- a/include/communication/CommandLine.h +++ b/include/communication/CommandLine.h @@ -4,13 +4,13 @@ #ifndef COMMANDLINE_H #define COMMANDLINE_H -#include "Communication.h" //The class we're implementing. - #include //Loading JSON documents to get settings from them. #include //To store the command line arguments. #include #include //To store the command line arguments. +#include "Communication.h" //The class we're implementing. + namespace cura { class Settings; @@ -125,7 +125,7 @@ class CommandLine : public Communication /* * \brief Show an update of our slicing progress. */ - void sendProgress(const float& progress) const override; + void sendProgress(double progress) const override; /* * \brief Set which extruder is being used for the following calls to @@ -216,4 +216,4 @@ class CommandLine : public Communication } // namespace cura -#endif // COMMANDLINE_H \ No newline at end of file +#endif // COMMANDLINE_H diff --git a/include/communication/Communication.h b/include/communication/Communication.h index bdd68b9630..48186c133b 100644 --- a/include/communication/Communication.h +++ b/include/communication/Communication.h @@ -49,7 +49,7 @@ class Communication * \brief Indicate to the communication channel what the current progress of * slicing the current slice is. */ - virtual void sendProgress(const float& progress) const = 0; + virtual void sendProgress(double progress) const = 0; /* * \brief Indicate to the communication channel that a layer is complete and diff --git a/include/infill.h b/include/infill.h index d8d2f83768..806d5b89b5 100644 --- a/include/infill.h +++ b/include/infill.h @@ -447,7 +447,7 @@ class Infill * \param angle_shift The angle to add to the infill_angle * \param[out] result (output) The resulting lines */ - void generateHalfTetrahedralInfill(float pattern_z_shift, int angle_shift, Polygons& result); + void generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, Polygons& result); /*! * Generate a triangular grid of infill lines diff --git a/include/infill/DensityProvider.h b/include/infill/DensityProvider.h index 12af6eb333..7174a8d1fb 100644 --- a/include/infill/DensityProvider.h +++ b/include/infill/DensityProvider.h @@ -1,6 +1,6 @@ -//Copyright (c) 2017 Tim Kuipers -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2017 Tim Kuipers +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_DENSITY_PROVIDER_H #define INFILL_DENSITY_PROVIDER_H @@ -12,7 +12,7 @@ struct AABB3D; /*! * Parent class of function objects which return the density required for a given region. - * + * * This density requirement can be based on user input, distance to the 3d model shell, Z distance to top skin, etc. */ class DensityProvider @@ -21,10 +21,10 @@ class DensityProvider /*! * \return the approximate required density of a cube */ - virtual float operator()(const AABB3D& aabb) const = 0; + virtual double operator()(const AABB3D& aabb) const = 0; virtual ~DensityProvider() { - }; + } }; } // namespace cura diff --git a/include/infill/ImageBasedDensityProvider.h b/include/infill/ImageBasedDensityProvider.h index c27b142a45..cd5e8afb37 100644 --- a/include/infill/ImageBasedDensityProvider.h +++ b/include/infill/ImageBasedDensityProvider.h @@ -1,12 +1,11 @@ -//Copyright (c) 2017 Tim Kuipers -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2017 Tim Kuipers +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_IMAGE_BASED_DENSITY_PROVIDER_H #define INFILL_IMAGE_BASED_DENSITY_PROVIDER_H #include "../utils/AABB.h" - #include "DensityProvider.h" namespace cura @@ -21,7 +20,7 @@ class ImageBasedDensityProvider : public DensityProvider virtual ~ImageBasedDensityProvider(); - virtual float operator()(const AABB3D& aabb) const; + virtual double operator()(const AABB3D& aabb) const; protected: Point3 image_size; //!< dimensions of the image. Third dimension is the amount of channels. diff --git a/include/infill/SierpinskiFill.h b/include/infill/SierpinskiFill.h index f5603bd509..1c8569cb0a 100644 --- a/include/infill/SierpinskiFill.h +++ b/include/infill/SierpinskiFill.h @@ -257,12 +257,12 @@ class SierpinskiFill const bool straight_corner_is_left_; //!< Whether the \ref straight_corner is left of the curve, rather than right. I.e. whether triangle ABC is counter-clockwise const int depth_; //!< The recursion depth at which this triangle is generated. Root is zero. - float area_; //!< The area of the triangle in mm^2 - float requested_length_; //!< The polyline length corresponding to the average density requested by the volumetric density specification. - float realized_length_; //!< The polyline length of the Cross Fractal line segment which would cross this triangle. - float total_child_realized_length_; //!< The total of the \ref realized_length of all children. - float error_left_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the left / obtained by giving value to the triangle to the left. - float error_right_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the right / obtained by giving value to the triangle to the right. + double area_; //!< The area of the triangle in mm^2 + double requested_length_; //!< The polyline length corresponding to the average density requested by the volumetric density specification. + double realized_length_; //!< The polyline length of the Cross Fractal line segment which would cross this triangle. + double total_child_realized_length_; //!< The total of the \ref realized_length of all children. + double error_left_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the left / obtained by giving value to the triangle to the left. + double error_right_; //!< Extra value modulating the \ref requested_length obtained from the triangle on the right / obtained by giving value to the triangle to the right. SierpinskiTriangle(Point straight_corner, Point a, Point b, SierpinskiDirection dir, bool straight_corner_is_left, int depth) : straight_corner_(straight_corner) @@ -296,13 +296,13 @@ class SierpinskiFill //! Get the second edge of this triangle crossed by the Sierpinski and/or Cross Fractal curve. Edge getToEdge(); //! Get the total error value modulating the \ref requested_length - float getTotalError(); + double getTotalError(); //! Get the total modulated \ref requested_length - float getErroredValue(); + double getErroredValue(); //! Get the error induced by subdividing this triangle. - float getSubdivisionError(); + double getSubdivisionError(); //! Get the total error currently acting on this traingle. - float getValueError(); + double getValueError(); //! The children into which this triangle would be subdivided. Empty if this is a leaf node. std::vector children; }; @@ -447,7 +447,7 @@ class SierpinskiFill /*! * \return the requested value left over if we would subdivide all nodes in the sequence from \p begin to \p end */ - float getSubdivisionError(std::list::iterator begin, std::list::iterator end); + double getSubdivisionError(std::list::iterator begin, std::list::iterator end); /*! * Check whether all properties which should hold at any time during the algorithm hold for the current sequence. diff --git a/include/infill/UniformDensityProvider.h b/include/infill/UniformDensityProvider.h index be8c70e277..cf7fae5d03 100644 --- a/include/infill/UniformDensityProvider.h +++ b/include/infill/UniformDensityProvider.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_UNIFORM_DENSITY_PROVIDER_H #define INFILL_UNIFORM_DENSITY_PROVIDER_H @@ -14,21 +14,22 @@ struct AABB3D; class UniformDensityProvider : public DensityProvider { public: - UniformDensityProvider(float density) - : density_(density) + UniformDensityProvider(double density) + : density_(density) { - }; + } virtual ~UniformDensityProvider() { - }; + } - virtual float operator()(const AABB3D&) const + virtual double operator()(const AABB3D&) const { return density_; - }; + } + protected: - float density_; + double density_; }; } // namespace cura diff --git a/include/mesh.h b/include/mesh.h index 8a48c41e28..dedb1ed311 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -1,12 +1,11 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef MESH_H #define MESH_H #include "settings/Settings.h" #include "utils/AABB3D.h" -#include "utils/floatpoint.h" #include "utils/FMatrix4x3.h" namespace cura @@ -22,7 +21,11 @@ class MeshVertex Point3 p_; //!< location of the vertex std::vector connected_faces_; //!< list of the indices of connected faces - MeshVertex(Point3 p) : p_(p) {connected_faces_.reserve(8);} //!< doesn't set connected_faces + MeshVertex(Point3 p) + : p_(p) + { + connected_faces_.reserve(8); + } //!< doesn't set connected_faces }; /*! A MeshFace is a 3 dimensional model triangle with 3 points. These points are already converted to integers @@ -49,7 +52,7 @@ In such a case the face_index stored in connected_face_index is the one connecte class MeshFace { public: - int vertex_index_[3] = {-1}; //!< counter-clockwise ordering + int vertex_index_[3] = { -1 }; //!< counter-clockwise ordering int connected_face_index_[3]; //!< same ordering as vertex_index (connected_face 0 is connected via vertex 0 and 1, etc.) }; @@ -62,10 +65,11 @@ See MeshFace for the specifics of how/when faces are connected. class Mesh { //! The vertex_hash_map stores a index reference of each vertex for the hash of that location. Allows for quick retrieval of points with the same location. - std::unordered_map > vertex_hash_map_; + std::unordered_map> vertex_hash_map_; AABB3D aabb_; + public: - std::vector vertices_;//!< list of all vertices in the mesh + std::vector vertices_; //!< list of all vertices in the mesh std::vector faces_; //!< list of all faces in the mesh Settings settings_; std::string mesh_name_; @@ -81,15 +85,18 @@ class Mesh Point3 max() const; //!< max (in x,y and z) vertex of the bounding box AABB3D getAABB() const; //!< Get the axis aligned bounding box void expandXY(int64_t offset); //!< Register applied horizontal expansion in the AABB - + /*! * Offset the whole mesh (all vertices and the bounding box). * \param offset The offset byu which to offset the whole mesh. */ void translate(Point3 offset) { - if (offset == Point3(0,0,0)) { return; } - for(MeshVertex& v : vertices_) + if (offset == Point3(0, 0, 0)) + { + return; + } + for (MeshVertex& v : vertices_) v.p_ += offset; aabb_.translate(offset); } @@ -115,6 +122,7 @@ class Mesh * \return True if an interface of the mesh could be interlocking with another mesh */ bool canInterlock() const; + private: mutable bool has_disconnected_faces; //!< Whether it has been logged that this mesh contains disconnected faces mutable bool has_overlapping_faces; //!< Whether it has been logged that this mesh contains overlapping faces @@ -122,18 +130,17 @@ class Mesh /*! * Get the index of the face connected to the face with index \p notFaceIdx, via vertices \p idx0 and \p idx1. - * + * * In case multiple faces connect with the same edge, return the next counter-clockwise face when viewing from \p idx1 to \p idx0. - * + * * \param idx0 the first vertex index * \param idx1 the second vertex index * \param notFaceIdx the index of a face which shouldn't be returned * \param notFaceVertexIdx should be the third vertex of face \p notFaceIdx. * \return the face index of a face sharing the edge from \p idx0 to \p idx1 - */ + */ int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVertexIdx) const; }; -}//namespace cura -#endif//MESH_H - +} // namespace cura +#endif // MESH_H diff --git a/include/utils/ExtrusionSegment.h b/include/utils/ExtrusionSegment.h index 8c97b04215..318c2e25cf 100644 --- a/include/utils/ExtrusionSegment.h +++ b/include/utils/ExtrusionSegment.h @@ -23,15 +23,16 @@ namespace cura */ class ExtrusionSegment { - static constexpr float a_step = 15 / 180.0 * std::numbers::pi; //!< In the calculation of the area covered by this line, the angle between line segments of the round endcaps. + static constexpr double a_step = 15 / 180.0 * std::numbers::pi; //!< In the calculation of the area covered by this line, the angle between line segments of the round endcaps. + public: - ExtrusionJunction from; - ExtrusionJunction to; + ExtrusionJunction from_; + ExtrusionJunction to_; /*! * Whether this is a polyline segment rather than a polygonal segment. */ - bool is_odd; + bool is_odd_; /*! * In the \ref toPolygons function, should the endcap at the to-location be @@ -40,13 +41,13 @@ class ExtrusionSegment * If the segment is reduced, a circle is removed from the to-location * because it will be included in the next extrusion move's covered area. */ - bool is_reduced; + bool is_reduced_; ExtrusionSegment(ExtrusionJunction from, ExtrusionJunction to, bool is_odd, bool is_reduced) - : from(from) - , to(to) - , is_odd(is_odd) - , is_reduced(is_reduced) + : from_(from) + , to_(to) + , is_odd_(is_odd) + , is_reduced_(is_reduced) { } diff --git a/include/utils/FMatrix4x3.h b/include/utils/FMatrix4x3.h index 64d44138ca..fff6838beb 100644 --- a/include/utils/FMatrix4x3.h +++ b/include/utils/FMatrix4x3.h @@ -9,7 +9,7 @@ namespace cura { -class FPoint3; +class Point3d; class Point3; /*! @@ -51,7 +51,7 @@ class FMatrix4x3 * \param p The coordinate to transform. * \return A transformed coordinate. */ - Point3 apply(const FPoint3& p) const; + Point3 apply(const Point3d& p) const; /*! * Apply this transformation to a coordinate. diff --git a/include/utils/IntPoint.h b/include/utils/IntPoint.h index 1e4f5cabee..6b35405074 100644 --- a/include/utils/IntPoint.h +++ b/include/utils/IntPoint.h @@ -116,9 +116,9 @@ INLINE coord_t vSize2(const Point& p0) { return p0.X * p0.X + p0.Y * p0.Y; } -INLINE float vSize2f(const Point& p0) +INLINE double vSize2f(const Point& p0) { - return static_cast(p0.X) * static_cast(p0.X) + static_cast(p0.Y) * static_cast(p0.Y); + return static_cast(p0.X) * static_cast(p0.X) + static_cast(p0.Y) * static_cast(p0.Y); } INLINE bool shorterThen(const Point& p0, const coord_t len) diff --git a/include/utils/Point3d.h b/include/utils/Point3d.h new file mode 100644 index 0000000000..713926cc40 --- /dev/null +++ b/include/utils/Point3d.h @@ -0,0 +1,142 @@ +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef POINT3D_H +#define POINT3D_H + +#include +#include + +#include "IntPoint.h" + + +namespace cura +{ + +/* +Double-precision 3D points are used for geometry computation. +They represent millimeters in 3D space. +*/ +class Point3d +{ +public: + double x, y, z; + + Point3d() + { + } + + Point3d(double _x, double _y, double _z) + : x(_x) + , y(_y) + , z(_z) + { + } + + Point3d(const Point3& p) + : x(static_cast(p.x_) * .001) + , y(static_cast(p.y_) * .001) + , z(static_cast(p.z_) * .001) + { + } + + Point3d operator+(const Point3d& p) const + { + return Point3d(x + p.x, y + p.y, z + p.z); + } + Point3d operator-(const Point3d& p) const + { + return Point3d(x - p.x, y - p.y, z - p.z); + } + Point3d operator*(const double f) const + { + return Point3d(x * f, y * f, z * f); + } + Point3d operator/(const double f) const + { + return Point3d(x / f, y / f, z / f); + } + + Point3d& operator+=(const Point3d& p) + { + x += p.x; + y += p.y; + z += p.z; + return *this; + } + Point3d& operator-=(const Point3d& p) + { + x -= p.x; + y -= p.y; + z -= p.z; + return *this; + } + Point3d& operator*=(const double f) + { + x *= f; + y *= f; + z *= f; + return *this; + } + + bool operator==(Point3d& p) const + { + return x == p.x && y == p.y && z == p.z; + } + bool operator!=(Point3d& p) const + { + return x != p.x || y != p.y || z != p.z; + } + + double max() const + { + if (x > y && x > z) + return x; + if (y > z) + return y; + return z; + } + + bool testLength(double len) const + { + return vSize2() <= len * len; + } + + double vSize2() const + { + return x * x + y * y + z * z; + } + + double vSize() const + { + return sqrt(vSize2()); + } + + inline Point3d normalized() const + { + return (*this) / vSize(); + } + + Point3d cross(const Point3d& p) const + { + return Point3d(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); + } + + static Point3d cross(const Point3& a, const Point3& b) + { + return Point3d(a).cross(Point3d(b)); + } + + Point3 toPoint3() + { + return Point3(MM2INT(x), MM2INT(y), MM2INT(z)); + } +}; + +inline double operator*(Point3d lhs, const Point3d& rhs) +{ + return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; +} + +} // namespace cura +#endif // POINT3D_H diff --git a/include/utils/Point3f.h b/include/utils/Point3f.h new file mode 100644 index 0000000000..dd93519199 --- /dev/null +++ b/include/utils/Point3f.h @@ -0,0 +1,45 @@ +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#ifndef POINT3F_H +#define POINT3F_H + +#include +#include + +#include "IntPoint.h" +#include "Point3d.h" + + +namespace cura +{ + +/* +Floating point 3D points are used during model loading as 3D vectors. +They represent millimeters in 3D space. +This class should not be used for geometric computation. Use Point3d for this purpose. +*/ +class Point3f +{ +public: + float x, y, z; + + Point3f() + { + } + + Point3f(double _x, double _y, double _z) + : x(_x) + , y(_y) + , z(_z) + { + } + + Point3d toPoint3d() const + { + return Point3d(static_cast(x), static_cast(y), static_cast(z)); + } +}; + +} // namespace cura +#endif // POINT3F_H diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 8257e7e959..400a02010a 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -14,7 +14,7 @@ namespace cura { -class FPoint3; +class Point3d; class SVG : NoCopy { @@ -92,19 +92,19 @@ class SVG : NoCopy /*! * transform a point in real space to canvas space with more precision */ - FPoint3 transformF(const Point& p) const; + Point3d transformF(const Point& p) const; void writeComment(const std::string& comment) const; - void writeAreas(const Polygons& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1.0f) const; + void writeAreas(const Polygons& polygons, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; - void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const float stroke_width = 1.0f) const; + void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; - void writePoint(const Point& p, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; + void writePoint(const Point& p, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; - void writePoints(ConstPolygonRef poly, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; + void writePoints(ConstPolygonRef poly, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; - void writePoints(const Polygons& polygons, const bool write_coords = false, const float size = 5.0f, const ColorObject color = Color::BLACK) const; + void writePoints(const Polygons& polygons, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; /*! * \brief Draws a polyline on the canvas. @@ -119,11 +119,11 @@ class SVG : NoCopy */ void writeLines(const std::vector& polyline, const ColorObject color = Color::BLACK) const; - void writeLine(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; + void writeLine(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writeArrow(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f, const float head_size = 5.0f) const; + void writeArrow(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0, const double head_size = 5.0) const; - void writeLineRGB(const Point& from, const Point& to, const int r = 0, const int g = 0, const int b = 0, const float stroke_width = 1.0f) const; + void writeLineRGB(const Point& from, const Point& to, const int r = 0, const int g = 0, const int b = 0, const double stroke_width = 1.0) const; /*! * \brief Draws a dashed line on the canvas from point A to point B. @@ -139,15 +139,15 @@ class SVG : NoCopy template void printf(const char* txt, Args&&... args) const; - void writeText(const Point& p, const std::string& txt, const ColorObject color = Color::BLACK, const float font_size = 10.0f) const; + void writeText(const Point& p, const std::string& txt, const ColorObject color = Color::BLACK, const double font_size = 10.0) const; - void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; + void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writePolygon(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; + void writePolygon(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writePolylines(const Polygons& polys, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; + void writePolylines(const Polygons& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writePolyline(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const float stroke_width = 1.0f) const; + void writePolyline(ConstPolygonRef poly, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; /*! * Draw variable-width paths into the image. @@ -158,7 +158,7 @@ class SVG : NoCopy * \param color The color to draw the paths with. * \param width_factor A multiplicative factor on the line widths. */ - void writePaths(const std::vector& paths, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; + void writePaths(const std::vector& paths, const ColorObject color = Color::BLACK, const double width_factor = 1.0) const; /*! * Draw variable-width lines into the image. @@ -169,7 +169,7 @@ class SVG : NoCopy * \param color The color to draw the lines with. * \param width_factor A multiplicative factor on the line widths. */ - void writeLines(const VariableWidthLines& lines, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; + void writeLines(const VariableWidthLines& lines, const ColorObject color = Color::BLACK, const double width_factor = 1.0) const; /*! * Draw a variable-width line into the image. @@ -180,7 +180,7 @@ class SVG : NoCopy * \param color The color to draw the line with. * \param width_factor A multiplicative factor on the line width. */ - void writeLine(const ExtrusionLine& line, const ColorObject color = Color::BLACK, const float width_factor = 1.0f) const; + void writeLine(const ExtrusionLine& line, const ColorObject color = Color::BLACK, const double width_factor = 1.0) const; /*! * Draws a grid across the image and writes down coordinates. @@ -191,7 +191,7 @@ class SVG : NoCopy * \param stroke_width The width of the grid lines. * \param font_size The size of the font to write the coordinates with. */ - void writeCoordinateGrid(const coord_t grid_size = MM2INT(1), const Color color = Color::BLACK, const float stroke_width = 0.1f, const float font_size = 10) const; + void writeCoordinateGrid(const coord_t grid_size = MM2INT(1), const Color color = Color::BLACK, const double stroke_width = 0.1, const double font_size = 10.0) const; }; template diff --git a/include/utils/SparseGrid.h b/include/utils/SparseGrid.h index 5b6d10f63f..f31631c206 100644 --- a/include/utils/SparseGrid.h +++ b/include/utils/SparseGrid.h @@ -1,22 +1,23 @@ -//Copyright (c) 2016 Scott Lenser -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2016 Scott Lenser +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SPARSE_GRID_H #define UTILS_SPARSE_GRID_H #include +#include #include #include -#include #include "IntPoint.h" #include "SquareGrid.h" -namespace cura { +namespace cura +{ /*! \brief Sparse grid which can locate spatially nearby elements efficiently. - * + * * \note This is an abstract template class which doesn't have any functions to insert elements. * \see SparsePointGrid * @@ -31,7 +32,7 @@ class SparseGrid : public SquareGrid using GridPoint = SquareGrid::GridPoint; using grid_coord_t = SquareGrid::grid_coord_t; using GridMap = std::unordered_multimap; - + using iterator = typename GridMap::iterator; using const_iterator = typename GridMap::const_iterator; @@ -42,13 +43,13 @@ class SparseGrid : public SquareGrid * \param[in] elem_reserve Number of elements to research space for. * \param[in] max_load_factor Maximum average load factor before rehashing. */ - SparseGrid(coord_t cell_size, size_t elem_reserve=0U, float max_load_factor=1.0f); - + SparseGrid(coord_t cell_size, size_t elem_reserve = 0U, double max_load_factor = 1.0); + iterator begin() { return m_grid.begin(); } - + iterator end() { return m_grid.end(); @@ -58,12 +59,12 @@ class SparseGrid : public SquareGrid { return m_grid.begin(); } - + const_iterator end() const { return m_grid.end(); } - + /*! \brief Returns all data within radius of query_pt. * * Finds all elements with location within radius of \p query_pt. May @@ -79,7 +80,7 @@ class SparseGrid : public SquareGrid * \param[in] radius The search radius. * \return Vector of elements found */ - std::vector getNearby(const Point &query_pt, coord_t radius) const; + std::vector getNearby(const Point& query_pt, coord_t radius) const; static const std::function no_precondition; @@ -93,8 +94,7 @@ class SparseGrid : public SquareGrid * to be considered for output * \return True if and only if an object has been found within the radius. */ - bool getNearest(const Point &query_pt, coord_t radius, Elem &elem_nearest, - const std::function precondition = no_precondition) const; + bool getNearest(const Point& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition = no_precondition) const; /*! \brief Process elements from cells that might contain sought after points. * @@ -109,8 +109,7 @@ class SparseGrid : public SquareGrid * called for each element in the cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function */ - bool processNearby(const Point &query_pt, coord_t radius, - const std::function& process_func) const; + bool processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const; /*! \brief Process elements from cells that might contain sought after points along a line. * @@ -122,8 +121,7 @@ class SparseGrid : public SquareGrid * called for each element in the cells. Processing stops if function returns false. * \return Whether we need to continue processing after this function */ - bool processLine(const std::pair query_line, - const std::function& process_elem_func) const; + bool processLine(const std::pair query_line, const std::function& process_elem_func) const; protected: /*! \brief Process elements from the cell indicated by \p grid_pt. @@ -133,38 +131,35 @@ class SparseGrid : public SquareGrid * called for each element in the cell. Processing stops if function returns false. * \return Whether we need to continue processing a next cell. */ - bool processFromCell(const GridPoint &grid_pt, - const std::function& process_func) const; + bool processFromCell(const GridPoint& grid_pt, const std::function& process_func) const; /*! \brief Map from grid locations (GridPoint) to elements (Elem). */ GridMap m_grid; }; - #define SGI_TEMPLATE template #define SGI_THIS SparseGrid SGI_TEMPLATE -SGI_THIS::SparseGrid(coord_t cell_size, size_t elem_reserve, float max_load_factor) -: SquareGrid(cell_size) +SGI_THIS::SparseGrid(coord_t cell_size, size_t elem_reserve, double max_load_factor) + : SquareGrid(cell_size) { // Must be before the reserve call. m_grid.max_load_factor(max_load_factor); - if (elem_reserve != 0U) { + if (elem_reserve != 0U) + { m_grid.reserve(elem_reserve); } } SGI_TEMPLATE -bool SGI_THIS::processFromCell( - const GridPoint &grid_pt, - const std::function& process_func) const +bool SGI_THIS::processFromCell(const GridPoint& grid_pt, const std::function& process_func) const { auto grid_range = m_grid.equal_range(grid_pt); for (auto iter = grid_range.first; iter != grid_range.second; ++iter) { - if (!process_func(iter->second)) + if (! process_func(iter->second)) { return false; } @@ -173,72 +168,66 @@ bool SGI_THIS::processFromCell( } SGI_TEMPLATE -bool SGI_THIS::processNearby(const Point &query_pt, coord_t radius, - const std::function& process_func) const +bool SGI_THIS::processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const { - return SquareGrid::processNearby(query_pt, radius, - [&process_func, this](const GridPoint& grid_pt) - { - return processFromCell(grid_pt, process_func); - }); + return SquareGrid::processNearby( + query_pt, + radius, + [&process_func, this](const GridPoint& grid_pt) + { + return processFromCell(grid_pt, process_func); + }); } SGI_TEMPLATE -bool SGI_THIS::processLine(const std::pair query_line, - const std::function& process_elem_func) const +bool SGI_THIS::processLine(const std::pair query_line, const std::function& process_elem_func) const { - const std::function process_cell_func = [&process_elem_func, this](GridPoint grid_loc) - { - return processFromCell(grid_loc, process_elem_func); - }; + const std::function process_cell_func = [&process_elem_func, this](GridPoint grid_loc) + { + return processFromCell(grid_loc, process_elem_func); + }; return processLineCells(query_line, process_cell_func); } SGI_TEMPLATE -std::vector -SGI_THIS::getNearby(const Point &query_pt, coord_t radius) const +std::vector SGI_THIS::getNearby(const Point& query_pt, coord_t radius) const { std::vector ret; - const std::function process_func = [&ret](const Elem &elem) - { - ret.push_back(elem); - return true; - }; + const std::function process_func = [&ret](const Elem& elem) + { + ret.push_back(elem); + return true; + }; processNearby(query_pt, radius, process_func); return ret; } SGI_TEMPLATE -const std::function - SGI_THIS::no_precondition = - [](const typename SGI_THIS::Elem &) - { - return true; - }; +const std::function SGI_THIS::no_precondition = [](const typename SGI_THIS::Elem&) +{ + return true; +}; SGI_TEMPLATE -bool SGI_THIS::getNearest( - const Point &query_pt, coord_t radius, Elem &elem_nearest, - const std::function precondition) const +bool SGI_THIS::getNearest(const Point& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition) const { bool found = false; int64_t best_dist2 = static_cast(radius) * radius; - const std::function process_func = - [&query_pt, &elem_nearest, &found, &best_dist2, &precondition](const Elem &elem) + const std::function process_func = [&query_pt, &elem_nearest, &found, &best_dist2, &precondition](const Elem& elem) + { + if (! precondition(elem)) { - if (!precondition(elem)) - { - return true; - } - int64_t dist2 = vSize2(elem.point - query_pt); - if (dist2 < best_dist2) - { - found = true; - elem_nearest = elem; - best_dist2 = dist2; - } return true; - }; + } + int64_t dist2 = vSize2(elem.point - query_pt); + if (dist2 < best_dist2) + { + found = true; + elem_nearest = elem; + best_dist2 = dist2; + } + return true; + }; processNearby(query_pt, radius, process_func); return found; } diff --git a/include/utils/SparseLineGrid.h b/include/utils/SparseLineGrid.h index 385b129df5..d851664aea 100644 --- a/include/utils/SparseLineGrid.h +++ b/include/utils/SparseLineGrid.h @@ -1,20 +1,21 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SPARSE_LINE_GRID_H #define UTILS_SPARSE_LINE_GRID_H #include +#include #include #include -#include #include "IntPoint.h" -#include "SparseGrid.h" #include "SVG.h" // debug +#include "SparseGrid.h" -namespace cura { +namespace cura +{ /*! \brief Sparse grid which can locate spatially nearby elements efficiently. * @@ -36,17 +37,18 @@ class SparseLineGrid : public SparseGrid * \param[in] elem_reserve Number of elements to research space for. * \param[in] max_load_factor Maximum average load factor before rehashing. */ - SparseLineGrid(coord_t cell_size, size_t elem_reserve = 0U, float max_load_factor = 1.0f); + SparseLineGrid(coord_t cell_size, size_t elem_reserve = 0U, double max_load_factor = 1.0); /*! \brief Inserts elem into the sparse grid. * * \param[in] elem The element to be inserted. */ - void insert(const Elem &elem); + void insert(const Elem& elem); void debugHTML(std::string filename); static void debugTest(); + protected: using GridPoint = typename SparseGrid::GridPoint; using grid_coord_t = typename SparseGrid::grid_coord_t; @@ -56,31 +58,30 @@ class SparseLineGrid : public SparseGrid }; - #define SGI_TEMPLATE template #define SGI_THIS SparseLineGrid SGI_TEMPLATE -SGI_THIS::SparseLineGrid(coord_t cell_size, size_t elem_reserve, float max_load_factor) - : SparseGrid(cell_size, elem_reserve, max_load_factor) +SGI_THIS::SparseLineGrid(coord_t cell_size, size_t elem_reserve, double max_load_factor) + : SparseGrid(cell_size, elem_reserve, max_load_factor) { } SGI_TEMPLATE -void SGI_THIS::insert(const Elem &elem) +void SGI_THIS::insert(const Elem& elem) { const std::pair line = m_locator(elem); using GridMap = std::unordered_multimap; // below is a workaround for the fact that lambda functions cannot access private or protected members // first we define a lambda which works on any GridMap and then we bind it to the actual protected GridMap of the parent class - std::function process_cell_func_ = [&elem, this](GridMap* m_grid, const GridPoint grid_loc) - { - m_grid->emplace(grid_loc, elem); - return true; - }; - using namespace std::placeholders; // for _1, _2, _3... + std::function process_cell_func_ = [&elem, this](GridMap* m_grid, const GridPoint grid_loc) + { + m_grid->emplace(grid_loc, elem); + return true; + }; + using namespace std::placeholders; // for _1, _2, _3... GridMap* m_grid = &(this->m_grid); - std::function process_cell_func(std::bind(process_cell_func_, m_grid, _1)); + std::function process_cell_func(std::bind(process_cell_func_, m_grid, _1)); SparseGrid::processLineCells(line, process_cell_func); } @@ -89,13 +90,13 @@ SGI_TEMPLATE void SGI_THIS::debugHTML(std::string filename) { AABB aabb; - for (std::pair cell: SparseGrid::m_grid) + for (std::pair cell : SparseGrid::m_grid) { aabb.include(SparseGrid::toLowerCorner(cell.first)); aabb.include(SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), SparseGrid::nonzero_sign(cell.first.Y)))); } SVG svg(filename.c_str(), aabb); - for (std::pair cell: SparseGrid::m_grid) + for (std::pair cell : SparseGrid::m_grid) { // doesn't draw cells at x = 0 or y = 0 correctly (should be double size) Point lb = SparseGrid::toLowerCorner(cell.first); @@ -112,7 +113,7 @@ void SGI_THIS::debugHTML(std::string filename) lb.Y = -SparseGrid::cell_size_; rb.Y = -SparseGrid::cell_size_; } -// svg.writePoint(lb, true, 1); + // svg.writePoint(lb, true, 1); svg.writeLine(lb, lt, SVG::Color::GRAY); svg.writeLine(lt, rt, SVG::Color::GRAY); svg.writeLine(rt, rb, SVG::Color::GRAY); diff --git a/include/utils/SparsePointGrid.h b/include/utils/SparsePointGrid.h index a61f94051e..214fc1fdc1 100644 --- a/include/utils/SparsePointGrid.h +++ b/include/utils/SparsePointGrid.h @@ -1,6 +1,6 @@ -//Copyright (c) 2016 Scott Lenser -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2016 Scott Lenser +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SPARSE_POINT_GRID_H #define UTILS_SPARSE_POINT_GRID_H @@ -12,7 +12,8 @@ #include "IntPoint.h" #include "SparseGrid.h" -namespace cura { +namespace cura +{ /*! \brief Sparse grid which can locate spatially nearby elements efficiently. * @@ -34,13 +35,13 @@ class SparsePointGrid : public SparseGrid * \param[in] elem_reserve Number of elements to research space for. * \param[in] max_load_factor Maximum average load factor before rehashing. */ - SparsePointGrid(coord_t cell_size, size_t elem_reserve=0U, float max_load_factor=1.0f); + SparsePointGrid(coord_t cell_size, size_t elem_reserve = 0U, double max_load_factor = 1.0); /*! \brief Inserts elem into the sparse grid. * * \param[in] elem The element to be inserted. */ - void insert(const Elem &elem); + void insert(const Elem& elem); /*! * Get just any element that's within a certain radius of a point. @@ -60,38 +61,37 @@ class SparsePointGrid : public SparseGrid }; - #define SGI_TEMPLATE template #define SGI_THIS SparsePointGrid SGI_TEMPLATE -SGI_THIS::SparsePointGrid(coord_t cell_size, size_t elem_reserve, float max_load_factor) - : SparseGrid(cell_size, elem_reserve, max_load_factor) +SGI_THIS::SparsePointGrid(coord_t cell_size, size_t elem_reserve, double max_load_factor) + : SparseGrid(cell_size, elem_reserve, max_load_factor) { } SGI_TEMPLATE -void SGI_THIS::insert(const Elem &elem) +void SGI_THIS::insert(const Elem& elem) { Point loc = m_locator(elem); GridPoint grid_loc = SparseGrid::toGridPoint(loc); - SparseGrid::m_grid.emplace(grid_loc,elem); + SparseGrid::m_grid.emplace(grid_loc, elem); } SGI_TEMPLATE const ElemT* SGI_THIS::getAnyNearby(const Point& query_pt, coord_t radius) { const ElemT* ret = nullptr; - const std::function& process_func = [&ret, query_pt, radius, this](const ElemT& maybe_nearby) + const std::function& process_func = [&ret, query_pt, radius, this](const ElemT& maybe_nearby) + { + if (shorterThen(m_locator(maybe_nearby) - query_pt, radius)) { - if (shorterThen(m_locator(maybe_nearby) - query_pt, radius)) - { - ret = &maybe_nearby; - return false; - } - return true; - }; + ret = &maybe_nearby; + return false; + } + return true; + }; SparseGrid::processNearby(query_pt, radius, process_func); return ret; diff --git a/include/utils/SparsePointGridInclusive.h b/include/utils/SparsePointGridInclusive.h index b7496c65fc..7e4cdce82e 100644 --- a/include/utils/SparsePointGridInclusive.h +++ b/include/utils/SparsePointGridInclusive.h @@ -1,6 +1,6 @@ -//Copyright (c) 2016 Scott Lenser -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2016 Scott Lenser +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SPARSE_POINT_GRID_INCLUSIVE_H #define UTILS_SPARSE_POINT_GRID_INCLUSIVE_H @@ -12,10 +12,12 @@ #include "IntPoint.h" #include "SparsePointGrid.h" -namespace cura { +namespace cura +{ -namespace SparsePointGridInclusiveImpl { +namespace SparsePointGridInclusiveImpl +{ template struct SparsePointGridInclusiveElem @@ -24,9 +26,9 @@ struct SparsePointGridInclusiveElem { } - SparsePointGridInclusiveElem(const Point &point_, const Val &val_) : - point(point_), - val(val_) + SparsePointGridInclusiveElem(const Point& point_, const Val& val_) + : point(point_) + , val(val_) { } @@ -37,25 +39,23 @@ struct SparsePointGridInclusiveElem template struct Locatoror { - Point operator()(const SparsePointGridInclusiveElem &elem) + Point operator()(const SparsePointGridInclusiveElem& elem) { return elem.point; } }; -} // namespace SparseGridImpl +} // namespace SparsePointGridInclusiveImpl /*! \brief Sparse grid which can locate spatially nearby values efficiently. * * \tparam Val The value type to store. */ template -class SparsePointGridInclusive : public SparsePointGrid, - SparsePointGridInclusiveImpl::Locatoror > +class SparsePointGridInclusive : public SparsePointGrid, SparsePointGridInclusiveImpl::Locatoror> { public: - using Base = SparsePointGrid, - SparsePointGridInclusiveImpl::Locatoror >; + using Base = SparsePointGrid, SparsePointGridInclusiveImpl::Locatoror>; /*! \brief Constructs a sparse grid with the specified cell size. * @@ -64,7 +64,7 @@ class SparsePointGridInclusive : public SparsePointGrid getNearbyVals(const Point &query_pt, coord_t radius) const; - + std::vector getNearbyVals(const Point& query_pt, coord_t radius) const; }; #define SG_TEMPLATE template #define SG_THIS SparsePointGridInclusive SG_TEMPLATE -SG_THIS::SparsePointGridInclusive(coord_t cell_size, size_t elem_reserve, float max_load_factor) : - Base(cell_size,elem_reserve,max_load_factor) +SG_THIS::SparsePointGridInclusive(coord_t cell_size, size_t elem_reserve, double max_load_factor) + : Base(cell_size, elem_reserve, max_load_factor) { } SG_TEMPLATE -void SG_THIS::insert(const Point &point, const Val &val) +void SG_THIS::insert(const Point& point, const Val& val) { - typename SG_THIS::Elem elem(point,val); + typename SG_THIS::Elem elem(point, val); Base::insert(elem); } SG_TEMPLATE -std::vector -SG_THIS::getNearbyVals(const Point &query_pt, coord_t radius) const +std::vector SG_THIS::getNearbyVals(const Point& query_pt, coord_t radius) const { std::vector ret; - std::function&)> process_func = [&ret](const typename SG_THIS::Elem &elem) - { - ret.push_back(elem.val); - return true; - }; + std::function&)> process_func = [&ret](const typename SG_THIS::Elem& elem) + { + ret.push_back(elem.val); + return true; + }; this->processNearby(query_pt, radius, process_func); return ret; } diff --git a/include/utils/ToolpathVisualizer.h b/include/utils/ToolpathVisualizer.h index ffd98ecc85..d3ad54ac7a 100644 --- a/include/utils/ToolpathVisualizer.h +++ b/include/utils/ToolpathVisualizer.h @@ -1,14 +1,14 @@ -//Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. #ifndef TOOLPATH_VISUALIZER_H #define TOOLPATH_VISUALIZER_H -#include "polygon.h" -#include "SVG.h" #include "ExtrusionSegment.h" +#include "SVG.h" +#include "polygon.h" namespace cura { - using namespace cura; +using namespace cura; /*! * Get statistics of the resulting toolpaths @@ -17,21 +17,20 @@ class ToolpathVisualizer { public: ToolpathVisualizer(SVG& svg) - : svg(svg) + : svg_(svg) { } + void outline(const Polygons& input); void toolpaths(const std::vector& all_segments, bool rounded_visualization = true); void underfill(const Polygons& underfills); void overfill(const Polygons& overfills, const Polygons& double_overfills = Polygons()); void width_legend(const Polygons& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization); void widths(const std::vector& all_segments, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization, bool exaggerate_widths = false); + private: - SVG& svg; + SVG& svg_; }; - - - } // namespace cura #endif // TOOLPATH_VISUALIZER_H diff --git a/include/utils/VoronoiUtils.h b/include/utils/VoronoiUtils.h index 33145c77ba..4c0c196cc4 100644 --- a/include/utils/VoronoiUtils.h +++ b/include/utils/VoronoiUtils.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_VORONOI_UTILS_H @@ -7,14 +7,13 @@ #include - #include -#include "SVG.h" #include "PolygonsSegmentIndex.h" +#include "SVG.h" -namespace cura +namespace cura { /*! @@ -31,46 +30,43 @@ class VoronoiUtils static PolygonsPointIndex getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); static Point p(const vd_t::vertex_type* node); - + static bool isSourcePoint(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments, coord_t snap_dist = 10); - + static coord_t getDistance(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); - + /*! * Discretize a parabola based on (approximate) step size. * The \p approximate_step_size is measured parallel to the \p source_segment, not along the parabola. */ - static std::vector discretizeParabola(const Point& source_point, const Segment& source_segment, Point start, Point end, coord_t approximate_step_size, float transitioning_angle); + static std::vector + discretizeParabola(const Point& source_point, const Segment& source_segment, Point start, Point end, coord_t approximate_step_size, double transitioning_angle); protected: /*! * Discretize parabola based on max absolute deviation from the parabola. - * + * * adapted from boost::polygon::voronoi_visual_utils.cpp - * + * * Discretize parabolic Voronoi edge. * Parabolic Voronoi edges are always formed by one point and one segment * from the initial input set. - * + * * Args: * point: input point. * segment: input segment. * max_dist: maximum discretization distance. * discretization: point discretization of the given Voronoi edge. - * + * * Template arguments: * InCT: coordinate type of the input geometries (usually integer). * Point: point type, should model point concept. * Segment: segment type, should model segment concept. - * + * * Important: * discretization should contain both edge endpoints initially. */ - static void discretize( - const Point& point, - const Segment& segment, - const coord_t max_dist, - std::vector* discretization); + static void discretize(const Point& point, const Segment& segment, const coord_t max_dist, std::vector* discretization); /*! * adapted from boost::polygon::voronoi_visual_utils.cpp @@ -89,7 +85,6 @@ class VoronoiUtils * the point lies between the start-point and endpoint of the segment. */ static double getPointProjection(const Point& point, const Segment& segment); - }; } // namespace cura diff --git a/include/utils/floatpoint.h b/include/utils/floatpoint.h deleted file mode 100644 index df9a2d2ad0..0000000000 --- a/include/utils/floatpoint.h +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2020 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#ifndef FLOAT_POINT_H -#define FLOAT_POINT_H - -#include -#include - -#include "IntPoint.h" - - -namespace cura -{ - -/* -Floating point 3D points are used during model loading as 3D vectors. -They represent millimeters in 3D space. -*/ -class FPoint3 -{ -public: - float x, y, z; - - FPoint3() - { - } - - FPoint3(float _x, float _y, float _z) - : x(_x) - , y(_y) - , z(_z) - { - } - - FPoint3(const Point3& p) - : x(static_cast(p.x_) * .001f) - , y(static_cast(p.y_) * .001f) - , z(static_cast(p.z_) * .001f) - { - } - - FPoint3 operator+(const FPoint3& p) const - { - return FPoint3(x + p.x, y + p.y, z + p.z); - } - FPoint3 operator-(const FPoint3& p) const - { - return FPoint3(x - p.x, y - p.y, z - p.z); - } - FPoint3 operator*(const float f) const - { - return FPoint3(x * f, y * f, z * f); - } - FPoint3 operator/(const float f) const - { - return FPoint3(x / f, y / f, z / f); - } - - FPoint3& operator+=(const FPoint3& p) - { - x += p.x; - y += p.y; - z += p.z; - return *this; - } - FPoint3& operator-=(const FPoint3& p) - { - x -= p.x; - y -= p.y; - z -= p.z; - return *this; - } - FPoint3& operator*=(const float f) - { - x *= f; - y *= f; - z *= f; - return *this; - } - - bool operator==(FPoint3& p) const - { - return x == p.x && y == p.y && z == p.z; - } - bool operator!=(FPoint3& p) const - { - return x != p.x || y != p.y || z != p.z; - } - - float max() const - { - if (x > y && x > z) - return x; - if (y > z) - return y; - return z; - } - - bool testLength(float len) const - { - return vSize2() <= len * len; - } - - float vSize2() const - { - return x * x + y * y + z * z; - } - - float vSize() const - { - return sqrt(vSize2()); - } - - inline FPoint3 normalized() const - { - return (*this) / vSize(); - } - - FPoint3 cross(const FPoint3& p) const - { - return FPoint3(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); - } - - static FPoint3 cross(const Point3& a, const Point3& b) - { - return FPoint3(a).cross(FPoint3(b)); - } - - Point3 toPoint3() - { - return Point3(MM2INT(x), MM2INT(y), MM2INT(z)); - } -}; - -inline float operator*(FPoint3 lhs, const FPoint3& rhs) -{ - return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; -} - -} // namespace cura -#endif // INT_POINT_H diff --git a/include/utils/linearAlg2D.h b/include/utils/linearAlg2D.h index 13dd873497..dce7acf95c 100644 --- a/include/utils/linearAlg2D.h +++ b/include/utils/linearAlg2D.h @@ -325,7 +325,7 @@ class LinearAlg2D * \param c end of second line segment * \return the angle in radians between 0 and 2 * pi of the corner in \p b */ - static float getAngleLeft(const Point& a, const Point& b, const Point& c); + static double getAngleLeft(const Point& a, const Point& b, const Point& c); /*! * Returns the determinant of the 2D matrix defined by the the vectors ab and ap as rows. diff --git a/include/utils/polygon.h b/include/utils/polygon.h index b32b59e51f..7036e256d5 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -8,7 +8,6 @@ #include // std::reverse, fill_n array #include #include // fabs -#include #include #include // int64_t.min #include @@ -268,10 +267,10 @@ class ConstPolygonRef Point closestPointTo(Point p) const { Point ret = p; - float bestDist = FLT_MAX; - for (unsigned int n = 0; n < path->size(); n++) + double bestDist = std::numeric_limits::max(); + for (size_t n = 0; n < path->size(); n++) { - float dist = vSize2f(p - (*path)[n]); + double dist = vSize2f(p - (*path)[n]); if (dist < bestDist) { ret = (*path)[n]; @@ -400,7 +399,7 @@ class ConstPolygonRef const Point v12, const Point v02, const int64_t shortcut_length, - float cos_angle); + double cos_angle); /*! * Smooth out a complex corner where the shortcut bypasses more than two line segments diff --git a/src/BeadingStrategy/BeadingStrategy.cpp b/src/BeadingStrategy/BeadingStrategy.cpp index 03c6adb3a1..17cc6a5e1f 100644 --- a/src/BeadingStrategy/BeadingStrategy.cpp +++ b/src/BeadingStrategy/BeadingStrategy.cpp @@ -1,38 +1,37 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#include +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "BeadingStrategy/BeadingStrategy.h" +#include + namespace cura { -BeadingStrategy::BeadingStrategy -( +BeadingStrategy::BeadingStrategy( coord_t optimal_width, Ratio wall_split_middle_threshold, Ratio wall_add_middle_threshold, coord_t default_transition_length, - float transitioning_angle -) : - optimal_width(optimal_width), - wall_split_middle_threshold(wall_split_middle_threshold), - wall_add_middle_threshold(wall_add_middle_threshold), - default_transition_length(default_transition_length), - transitioning_angle(transitioning_angle) + double transitioning_angle) + : optimal_width(optimal_width) + , wall_split_middle_threshold(wall_split_middle_threshold) + , wall_add_middle_threshold(wall_add_middle_threshold) + , default_transition_length(default_transition_length) + , transitioning_angle(transitioning_angle) { name = "Unknown"; } -BeadingStrategy::BeadingStrategy(const BeadingStrategy& other) : - optimal_width(other.optimal_width), - wall_split_middle_threshold(other.wall_split_middle_threshold), - wall_add_middle_threshold(other.wall_add_middle_threshold), - default_transition_length(other.default_transition_length), - transitioning_angle(other.transitioning_angle), - name(other.name) -{} +BeadingStrategy::BeadingStrategy(const BeadingStrategy& other) + : optimal_width(other.optimal_width) + , wall_split_middle_threshold(other.wall_split_middle_threshold) + , wall_add_middle_threshold(other.wall_add_middle_threshold) + , default_transition_length(other.default_transition_length) + , transitioning_angle(other.transitioning_angle) + , name(other.name) +{ +} coord_t BeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { @@ -43,12 +42,12 @@ coord_t BeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const return default_transition_length; } -float BeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const +double BeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { coord_t lower_optimum = getOptimalThickness(lower_bead_count); coord_t transition_point = getTransitionThickness(lower_bead_count); coord_t upper_optimum = getOptimalThickness(lower_bead_count + 1); - return 1.0 - float(transition_point - lower_optimum) / float(upper_optimum - lower_optimum); + return 1.0 - static_cast(transition_point - lower_optimum) / static_cast(upper_optimum - lower_optimum); } std::vector BeadingStrategy::getNonlinearThicknesses(coord_t lower_bead_count) const diff --git a/src/BeadingStrategy/DistributedBeadingStrategy.cpp b/src/BeadingStrategy/DistributedBeadingStrategy.cpp index 8874d07b7a..7480d94e6e 100644 --- a/src/BeadingStrategy/DistributedBeadingStrategy.cpp +++ b/src/BeadingStrategy/DistributedBeadingStrategy.cpp @@ -1,23 +1,22 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include #include "BeadingStrategy/DistributedBeadingStrategy.h" +#include + namespace cura { -DistributedBeadingStrategy::DistributedBeadingStrategy -( +DistributedBeadingStrategy::DistributedBeadingStrategy( const coord_t optimal_width, const coord_t default_transition_length, const AngleRadians transitioning_angle, const Ratio wall_split_middle_threshold, const Ratio wall_add_middle_threshold, - const int distribution_radius -) : - BeadingStrategy(optimal_width, wall_split_middle_threshold, wall_add_middle_threshold, default_transition_length, transitioning_angle) + const int distribution_radius) + : BeadingStrategy(optimal_width, wall_split_middle_threshold, wall_add_middle_threshold, default_transition_length, transitioning_angle) { - if(distribution_radius >= 2) + if (distribution_radius >= 2) { one_over_distribution_radius_squared = 1.0f / (distribution_radius - 1) * 1.0f / (distribution_radius - 1); } @@ -36,25 +35,25 @@ DistributedBeadingStrategy::Beading DistributedBeadingStrategy::compute(coord_t if (bead_count > 2) { const coord_t to_be_divided = thickness - bead_count * optimal_width; - const float middle = static_cast(bead_count - 1) / 2; + const double middle = static_cast(bead_count - 1) / 2; const auto getWeight = [middle, this](coord_t bead_idx) { - const float dev_from_middle = bead_idx - middle; - return std::max(0.0f, 1.0f - one_over_distribution_radius_squared * dev_from_middle * dev_from_middle); + const double dev_from_middle = bead_idx - middle; + return std::max(0.0, 1.0 - one_over_distribution_radius_squared * dev_from_middle * dev_from_middle); }; - std::vector weights; + std::vector weights; weights.resize(bead_count); for (coord_t bead_idx = 0; bead_idx < bead_count; bead_idx++) { weights[bead_idx] = getWeight(bead_idx); } - const float total_weight = std::accumulate(weights.cbegin(), weights.cend(), 0.f); + const double total_weight = std::accumulate(weights.cbegin(), weights.cend(), 0.0); for (coord_t bead_idx = 0; bead_idx < bead_count; bead_idx++) { - const float weight_fraction = weights[bead_idx] / total_weight; + const double weight_fraction = weights[bead_idx] / total_weight; const coord_t splitup_left_over_weight = to_be_divided * weight_fraction; const coord_t width = optimal_width + splitup_left_over_weight; if (bead_idx == 0) diff --git a/src/BeadingStrategy/LimitedBeadingStrategy.cpp b/src/BeadingStrategy/LimitedBeadingStrategy.cpp index d5a2a2b72b..8b612ce419 100644 --- a/src/BeadingStrategy/LimitedBeadingStrategy.cpp +++ b/src/BeadingStrategy/LimitedBeadingStrategy.cpp @@ -20,12 +20,15 @@ coord_t LimitedBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) return parent->getTransitioningLength(lower_bead_count); } -float LimitedBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const +double LimitedBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { return parent->getTransitionAnchorPos(lower_bead_count); } -LimitedBeadingStrategy::LimitedBeadingStrategy(const coord_t max_bead_count, BeadingStrategyPtr parent) : BeadingStrategy(*parent), max_bead_count(max_bead_count), parent(std::move(parent)) +LimitedBeadingStrategy::LimitedBeadingStrategy(const coord_t max_bead_count, BeadingStrategyPtr parent) + : BeadingStrategy(*parent) + , max_bead_count(max_bead_count) + , parent(std::move(parent)) { if (max_bead_count % 2 == 1) { diff --git a/src/BeadingStrategy/RedistributeBeadingStrategy.cpp b/src/BeadingStrategy/RedistributeBeadingStrategy.cpp index 54ad5b99d9..c2109bed83 100644 --- a/src/BeadingStrategy/RedistributeBeadingStrategy.cpp +++ b/src/BeadingStrategy/RedistributeBeadingStrategy.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "BeadingStrategy/RedistributeBeadingStrategy.h" @@ -9,16 +9,11 @@ namespace cura { -RedistributeBeadingStrategy::RedistributeBeadingStrategy -( - const coord_t optimal_width_outer, - const Ratio minimum_variable_line_ratio, - BeadingStrategyPtr parent -) : - BeadingStrategy(*parent), - parent(std::move(parent)), - optimal_width_outer(optimal_width_outer), - minimum_variable_line_ratio(minimum_variable_line_ratio) +RedistributeBeadingStrategy::RedistributeBeadingStrategy(const coord_t optimal_width_outer, const Ratio minimum_variable_line_ratio, BeadingStrategyPtr parent) + : BeadingStrategy(*parent) + , parent(std::move(parent)) + , optimal_width_outer(optimal_width_outer) + , minimum_variable_line_ratio(minimum_variable_line_ratio) { name = "RedistributeBeadingStrategy"; } @@ -34,9 +29,12 @@ coord_t RedistributeBeadingStrategy::getTransitionThickness(coord_t lower_bead_c { switch (lower_bead_count) { - case 0: return minimum_variable_line_ratio * optimal_width_outer; - case 1: return (1.0 + parent->getSplitMiddleThreshold()) * optimal_width_outer; - default: return parent->getTransitionThickness(lower_bead_count - 2) + 2 * optimal_width_outer; + case 0: + return minimum_variable_line_ratio * optimal_width_outer; + case 1: + return (1.0 + parent->getSplitMiddleThreshold()) * optimal_width_outer; + default: + return parent->getTransitionThickness(lower_bead_count - 2) + 2 * optimal_width_outer; } } @@ -58,7 +56,7 @@ coord_t RedistributeBeadingStrategy::getTransitioningLength(coord_t lower_bead_c return parent->getTransitioningLength(lower_bead_count); } -float RedistributeBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const +double RedistributeBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { return parent->getTransitionAnchorPos(lower_bead_count); } diff --git a/src/BeadingStrategy/WideningBeadingStrategy.cpp b/src/BeadingStrategy/WideningBeadingStrategy.cpp index 893c88d67a..368eaaed87 100644 --- a/src/BeadingStrategy/WideningBeadingStrategy.cpp +++ b/src/BeadingStrategy/WideningBeadingStrategy.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "BeadingStrategy/WideningBeadingStrategy.h" @@ -61,18 +61,20 @@ coord_t WideningBeadingStrategy::getTransitionThickness(coord_t lower_bead_count coord_t WideningBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - if (thickness < min_input_width) return 0; + if (thickness < min_input_width) + return 0; coord_t ret = parent->getOptimalBeadCount(thickness); - if (thickness >= min_input_width && ret < 1) return 1; + if (thickness >= min_input_width && ret < 1) + return 1; return ret; } -coord_t WideningBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const +coord_t WideningBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { return parent->getTransitioningLength(lower_bead_count); } -float WideningBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const +double WideningBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { return parent->getTransitionAnchorPos(lower_bead_count); } diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 46103204ae..91fb9ffbbe 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -236,7 +236,7 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS Point last_wall_seam_vertex_vector = last_wall_seam_vertex + last_wall_seam_vertex_inward_normal; // now test the vertex following the candidate seam vertex and if it lies to the left of the vector, it's good to use - float a = LinearAlg2D::getAngleLeft(last_wall_seam_vertex_vector, last_wall_seam_vertex, wall[(seam_vertex_idx + 1) % n_points]); + double a = LinearAlg2D::getAngleLeft(last_wall_seam_vertex_vector, last_wall_seam_vertex, wall[(seam_vertex_idx + 1) % n_points]); if (a <= 0 || a >= std::numbers::pi) { @@ -2764,7 +2764,7 @@ void FffGcodeWriter::processTopBottom( // helper function that detects skin regions that have no support and modifies their print settings (config, line angle, density, etc.) - auto handle_bridge_skin = [&](const int bridge_layer, const GCodePathConfig* config, const float density) // bridge_layer = 1, 2 or 3 + auto handle_bridge_skin = [&](const int bridge_layer, const GCodePathConfig* config, const double density) // bridge_layer = 1, 2 or 3 { if (support_layer_nr >= (bridge_layer - 1)) { @@ -3055,7 +3055,7 @@ void FffGcodeWriter::processSkinPrintFeature( } constexpr bool enable_travel_optimization = false; - constexpr float flow = 1.0; + constexpr double flow = 1.0; if (pattern == EFillMethod::GRID || pattern == EFillMethod::LINES || pattern == EFillMethod::TRIANGLES || pattern == EFillMethod::CUBIC || pattern == EFillMethod::TETRAHEDRAL || pattern == EFillMethod::QUARTER_CUBIC || pattern == EFillMethod::CUBICSUBDIV || pattern == EFillMethod::LIGHTNING) { diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index dd9aedc002..4335a1b49d 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -965,7 +965,7 @@ void FffPolygonGenerator::processOozeShield(SliceDataStorage& storage) } } - const float largest_printed_area = 1.0; // TODO: make var a parameter, and perhaps even a setting? + const double largest_printed_area = 1.0; // TODO: make var a parameter, and perhaps even a setting? for (LayerIndex layer_nr = 0; layer_nr <= storage.max_print_height_second_to_last_extruder; layer_nr++) { storage.oozeShield[layer_nr].removeSmallAreas(largest_printed_area); diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index ae37348fc4..6641a321b5 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -498,7 +498,7 @@ GCodePath& LayerPlan::addTravel_simple(const Point& p, GCodePath* path) return *path; } -void LayerPlan::planPrime(const float& prime_blob_wipe_length) +void LayerPlan::planPrime(double prime_blob_wipe_length) { forceNewPathStart(); GCodePath& prime_travel = addTravel_simple(getLastPlannedPositionOrStartingPosition() + Point(0, MM2INT(prime_blob_wipe_length))); @@ -623,7 +623,7 @@ void LayerPlan::addPolygonsByOptimizer( } } -static constexpr float max_non_bridge_line_volume = MM2INT(100); // limit to accumulated "volume" of non-bridge lines which is proportional to distance x extrusion rate +static constexpr double max_non_bridge_line_volume = MM2INT(100); // limit to accumulated "volume" of non-bridge lines which is proportional to distance x extrusion rate void LayerPlan::addWallLine( const Point& p0, @@ -631,9 +631,9 @@ void LayerPlan::addWallLine( const Settings& settings, const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, - float flow, + double flow, const Ratio width_factor, - float& non_bridge_line_volume, + double& non_bridge_line_volume, Ratio speed_factor, double distance_to_bridge_start) { @@ -667,7 +667,7 @@ void LayerPlan::addWallLine( // flow required for the next line segment - when accelerating after a bridge segment, the flow is increased in inverse proportion to the speed_factor // so the slower the feedrate, the greater the flow - the idea is to get the extruder back to normal pressure as quickly as possible - const float segment_flow = (speed_factor > 1) ? flow * (1 / speed_factor) : flow; + const double segment_flow = (speed_factor > 1) ? flow * (1 / speed_factor) : flow; // if a bridge is present in this wall, this particular segment may need to be partially or wholely coasted if (distance_to_bridge_start > 0) @@ -775,10 +775,10 @@ void LayerPlan::addWallLine( { // find the bridge line segment that's nearest to the current point int nearest = 0; - float smallest_dist2 = vSize2f(cur_point - line_polys[0][0]); + double smallest_dist2 = vSize2f(cur_point - line_polys[0][0]); for (unsigned i = 1; i < line_polys.size(); ++i) { - float dist2 = vSize2f(cur_point - line_polys[i][0]); + double dist2 = vSize2f(cur_point - line_polys[i][0]); if (dist2 < smallest_dist2) { nearest = i; @@ -852,7 +852,7 @@ void LayerPlan::addWall( const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, - float flow_ratio, + double flow_ratio, bool always_retract) { // TODO: Deprecated in favor of ExtrusionJunction version below. @@ -888,7 +888,7 @@ void LayerPlan::addWall( const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, coord_t wall_0_wipe_dist, - float flow_ratio, + double flow_ratio, bool always_retract, const bool is_closed, const bool is_reversed, @@ -904,7 +904,7 @@ void LayerPlan::addWall( start_idx = locateFirstSupportedVertex(wall, start_idx); } - float non_bridge_line_volume = max_non_bridge_line_volume; // assume extruder is fully pressurised before first non-bridge line is output + double non_bridge_line_volume = max_non_bridge_line_volume; // assume extruder is fully pressurised before first non-bridge line is output double speed_factor = 1.0; // start first line at normal speed coord_t distance_to_bridge_start = 0; // will be updated before each line is processed @@ -943,10 +943,10 @@ void LayerPlan::addWall( { // find the bridge line segment that's nearest to p0 int nearest = 0; - float smallest_dist2 = vSize2f(p0.p - line_polys[0][0]); + double smallest_dist2 = vSize2f(p0.p - line_polys[0][0]); for (unsigned i = 1; i < line_polys.size(); ++i) { - float dist2 = vSize2f(p0.p - line_polys[i][0]); + double dist2 = vSize2f(p0.p - line_polys[i][0]); if (dist2 < smallest_dist2) { nearest = i; @@ -1054,7 +1054,7 @@ void LayerPlan::addWall( for (size_t piece = 0; piece < pieces; ++piece) { - const float average_progress = (float(piece) + 0.5) / pieces; // How far along this line to sample the line width in the middle of this piece. + const double average_progress = (double(piece) + 0.5) / pieces; // How far along this line to sample the line width in the middle of this piece. const coord_t line_width = p0.w + average_progress * delta_line_width; const Point destination = p0.p + normal(line_vector, piece_length * (piece + 1)); if (is_small_feature) @@ -1154,7 +1154,7 @@ void LayerPlan::addWalls( const GCodePathConfig& bridge_config, const ZSeamConfig& z_seam_config, coord_t wall_0_wipe_dist, - float flow_ratio, + double flow_ratio, bool always_retract) { // TODO: Deprecated in favor of ExtrusionJunction version below. @@ -2123,7 +2123,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) else { // SPIRALIZE // If we need to spiralize then raise the head slowly by 1 layer as this path progresses. - float totalLength = 0.0; + double totalLength = 0.0; Point p0 = gcode.getPositionXY(); for (unsigned int _path_idx = path_idx; _path_idx < paths.size() && ! paths[_path_idx].isTravelPath(); _path_idx++) { @@ -2136,7 +2136,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } } - float length = 0.0; + double length = 0.0; p0 = gcode.getPositionXY(); for (; path_idx < paths.size() && paths[path_idx].spiralize; path_idx++) { // handle all consecutive spiralized paths > CHANGES path_idx! diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index b70e04c45e..75a4dccf33 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -14,7 +14,7 @@ #include "settings/types/Ratio.h" //For the shrinkage percentage and scale factor. #include "utils/FMatrix4x3.h" //To transform the input meshes for shrinkage compensation and to align in command line mode. -#include "utils/floatpoint.h" //To accept incoming meshes with floating point vertices. +#include "utils/Point3f.h" //To accept incoming meshes with floating point vertices. #include "utils/gettime.h" #include "utils/section_type.h" #include "utils/string.h" @@ -140,7 +140,7 @@ bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const FMatrix4x3& matri { FILE* f = fopen(filename, "rt"); char buffer[1024]; - FPoint3 vertex; + Point3f vertex; int n = 0; Point3 v0(0, 0, 0), v1(0, 0, 0), v2(0, 0, 0); while (fgets_(buffer, sizeof(buffer), f)) @@ -151,13 +151,13 @@ bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const FMatrix4x3& matri switch (n) { case 1: - v0 = matrix.apply(vertex); + v0 = matrix.apply(vertex.toPoint3d()); break; case 2: - v1 = matrix.apply(vertex); + v1 = matrix.apply(vertex.toPoint3d()); break; case 3: - v2 = matrix.apply(vertex); + v2 = matrix.apply(vertex.toPoint3d()); mesh->addFace(v0, v1, v2); n = 0; break; @@ -203,7 +203,7 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matr // Every Face is 50 Bytes: Normal(3*float), Vertices(9*float), 2 Bytes Spacer mesh->faces_.reserve(face_count); mesh->vertices_.reserve(face_count); - for (unsigned int i = 0; i < face_count; i++) + for (size_t i = 0; i < face_count; i++) { if (fread(buffer, 50, 1, f) != 1) { @@ -212,9 +212,9 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matr } float* v = ((float*)buffer) + 3; - Point3 v0 = matrix.apply(FPoint3(v[0], v[1], v[2])); - Point3 v1 = matrix.apply(FPoint3(v[3], v[4], v[5])); - Point3 v2 = matrix.apply(FPoint3(v[6], v[7], v[8])); + Point3 v0 = matrix.apply(Point3f(v[0], v[1], v[2]).toPoint3d()); + Point3 v1 = matrix.apply(Point3f(v[3], v[4], v[5]).toPoint3d()); + Point3 v2 = matrix.apply(Point3f(v[6], v[7], v[8]).toPoint3d()); mesh->addFace(v0, v1, v2); } fclose(f); diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 7fd2ffdc48..346e1eb46f 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -207,7 +207,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ coord_t end_x = projected_x(end); // Part of the edge will be bound to the markings on the endpoints of the edge. Calculate how far that is. - float bound = 0.5 / tan((std::numbers::pi - transitioning_angle) * 0.5); + double bound = 0.5 / tan((std::numbers::pi - transitioning_angle) * 0.5); coord_t marking_start_x = -d * bound; coord_t marking_end_x = d * bound; Point marking_start = middle + x_axis_dir * marking_start_x / x_axis_length; @@ -717,7 +717,7 @@ void SkeletalTrapezoidation::updateIsCentral() coord_t outer_edge_filter_length = beading_strategy.getTransitionThickness(0) / 2; - float cap = sin(beading_strategy.getTransitioningAngle() * 0.5); // = cos(bisector_angle / 2) + double cap = sin(beading_strategy.getTransitioningAngle() * 0.5); // = cos(bisector_angle / 2) for (edge_t& edge : graph.edges) { assert(edge.twin); @@ -1220,12 +1220,12 @@ void SkeletalTrapezoidation::generateTransitionEnds(edge_t& edge, coord_t mid_po const coord_t ab_size = vSize(ab); const coord_t transition_length = beading_strategy.getTransitioningLength(lower_bead_count); - const float transition_mid_position = beading_strategy.getTransitionAnchorPos(lower_bead_count); - constexpr float inner_bead_width_ratio_after_transition = 1.0; + const double transition_mid_position = beading_strategy.getTransitionAnchorPos(lower_bead_count); + constexpr double inner_bead_width_ratio_after_transition = 1.0; constexpr Ratio start_rest{ 0.0 }; - const float mid_rest = transition_mid_position * inner_bead_width_ratio_after_transition; - constexpr float end_rest = inner_bead_width_ratio_after_transition; + const double mid_rest = transition_mid_position * inner_bead_width_ratio_after_transition; + constexpr double end_rest = inner_bead_width_ratio_after_transition; { // Lower bead count transition end const coord_t start_pos = ab_size - mid_pos; @@ -1281,7 +1281,7 @@ bool SkeletalTrapezoidation::generateTransitionEnd( if (end_pos > ab_size) { // Recurse on all further edges - float rest = end_rest - (start_rest - end_rest) * (end_pos - ab_size) / (start_pos - end_pos); + double rest = end_rest - (start_rest - end_rest) * (end_pos - ab_size) / (start_pos - end_pos); assert(rest >= 0); assert(rest <= std::max(end_rest, start_rest)); assert(rest >= std::min(end_rest, start_rest)); @@ -1768,7 +1768,7 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr { BeadingPropagation& bottom_beading = *edge_to_peak->from->data.getBeading(); coord_t total_dist = top_beading.dist_from_top_source_ + length + bottom_beading.dist_to_bottom_source_; - Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist); + Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist); ratio_of_top = std::max(0.0_r, ratio_of_top); if (ratio_of_top >= 1.0) { @@ -1825,8 +1825,8 @@ SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beadin // f*(l-r) + r = s // f*(l-r) = s - r // f = (s-r) / (l-r) - float new_ratio = static_cast(switching_radius - right.toolpath_locations[next_inset_idx]) - / static_cast(left.toolpath_locations[next_inset_idx] - right.toolpath_locations[next_inset_idx]); + double new_ratio = static_cast(switching_radius - right.toolpath_locations[next_inset_idx]) + / static_cast(left.toolpath_locations[next_inset_idx] - right.toolpath_locations[next_inset_idx]); new_ratio = std::min(1.0, new_ratio + 0.1); return interpolate(left, new_ratio, right); } @@ -1837,7 +1837,7 @@ SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beadin SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beading& left, Ratio ratio_left_to_whole, const Beading& right) const { assert(ratio_left_to_whole >= 0.0 && ratio_left_to_whole <= 1.0); - float ratio_right_to_whole = 1.0 - ratio_left_to_whole; + double ratio_right_to_whole = 1.0 - ratio_left_to_whole; Beading ret = (left.total_thickness > right.total_thickness) ? left : right; for (size_t inset_idx = 0; inset_idx < std::min(left.bead_widths.size(), right.bead_widths.size()); inset_idx++) @@ -2213,7 +2213,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() constexpr coord_t n_segments = 6; for (coord_t segment = 0; segment < n_segments; segment++) { - float a = 2.0 * std::numbers::pi / n_segments * segment; + double a = 2.0 * std::numbers::pi / n_segments * segment; line.junctions.emplace_back(node.p + Point(r * cos(a), r * sin(a)), width, inset_index); } } diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index 2e5a2a4465..ba3915748d 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -74,7 +74,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage if (pattern == EFillMethod::ZIG_ZAG) { // Compensate for the outline_offset decrease that takes place when using the infill generator to generate ironing with the zigzag pattern - const Ratio width_scale = (float)mesh.settings.get("layer_height") / mesh.settings.get("infill_sparse_thickness"); + const Ratio width_scale = (double)mesh.settings.get("layer_height") / mesh.settings.get("infill_sparse_thickness"); ironing_inset += width_scale * line_width / 2; // Align the edge of the ironing line with the edge of the outer wall ironing_inset -= ironing_flow * line_width / 2; diff --git a/src/bridge.cpp b/src/bridge.cpp index 75e42889e2..a5a1ab40ac 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -39,7 +39,7 @@ int bridgeAngle( { const coord_t infill_line_distance = mesh.settings.get("infill_line_distance"); const coord_t infill_line_width = mesh.settings.get("infill_line_width"); - const bool part_has_sparse_infill = (infill_line_distance == 0) || ((float)infill_line_width / infill_line_distance) <= sparse_infill_max_density; + const bool part_has_sparse_infill = (infill_line_distance == 0) || ((double)infill_line_width / infill_line_distance) <= sparse_infill_max_density; for (const SliceLayerPart& prev_layer_part : mesh.layers[layer_nr - bridge_layer].parts) { diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 231f7e001d..7f589a1312 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -5,6 +5,13 @@ #include "communication/ArcusCommunication.h" +#include //To sleep while waiting for the connection. +#include //To map settings to their extruder numbers for limit_to_extruder. + +#include //The socket to communicate to. +#include +#include + #include "Application.h" //To get and set the current slice command. #include "ExtruderTrain.h" #include "FffProcessor.h" //To start a slice. @@ -19,13 +26,6 @@ #include "utils/channel.h" #include "utils/polygon.h" -#include //The socket to communicate to. -#include -#include - -#include //To sleep while waiting for the connection. -#include //To map settings to their extruder numbers for limit_to_extruder. - namespace cura { @@ -479,7 +479,7 @@ void ArcusCommunication::sendPrintTimeMaterialEstimates() const spdlog::debug("Done sending print time and material estimates."); } -void ArcusCommunication::sendProgress(const float& progress) const +void ArcusCommunication::sendProgress(double progress) const { const int rounded_amount = 1000 * progress; if (private_data->last_sent_progress == rounded_amount) // No need to send another tiny update step. @@ -488,7 +488,7 @@ void ArcusCommunication::sendProgress(const float& progress) const } std::shared_ptr message = std::make_shared(); - float progress_all_objects = progress / private_data->object_count; + double progress_all_objects = progress / private_data->object_count; progress_all_objects += private_data->optimized_layers.sliced_objects * (1.0 / private_data->object_count); message->set_amount(progress_all_objects); private_data->socket->sendMessage(message); @@ -573,4 +573,4 @@ void ArcusCommunication::sliceNext() } // namespace cura -#endif // ARCUS \ No newline at end of file +#endif // ARCUS diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index 1e18cc81b0..6de1c1d9fd 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -5,14 +5,14 @@ #include "communication/ArcusCommunicationPrivate.h" +#include + #include "Application.h" #include "ExtruderTrain.h" #include "Slice.h" #include "settings/types/LayerIndex.h" #include "utils/FMatrix4x3.h" //To convert vertices to integer-points. -#include "utils/floatpoint.h" //To accept vertices (which are provided in floating point). - -#include +#include "utils/Point3f.h" //To accept vertices (which are provided in floating point). namespace cura { @@ -102,7 +102,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& FMatrix4x3 matrix; for (const cura::proto::Object& object : mesh_group_message.objects()) { - const size_t bytes_per_face = sizeof(FPoint3) * 3; // 3 vectors per face. + const size_t bytes_per_face = sizeof(Point3f) * 3; // 3 vectors per face. const size_t face_count = object.vertices().size() / bytes_per_face; if (face_count <= 0) @@ -125,12 +125,12 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& for (size_t face = 0; face < face_count; face++) { const std::string data = object.vertices().substr(face * bytes_per_face, bytes_per_face); - const FPoint3* float_vertices = reinterpret_cast(data.data()); + const Point3f* float_vertices = reinterpret_cast(data.data()); Point3 verts[3]; - verts[0] = matrix.apply(float_vertices[0]); - verts[1] = matrix.apply(float_vertices[1]); - verts[2] = matrix.apply(float_vertices[2]); + verts[0] = matrix.apply(float_vertices[0].toPoint3d()); + verts[1] = matrix.apply(float_vertices[1].toPoint3d()); + verts[2] = matrix.apply(float_vertices[2].toPoint3d()); mesh.addFace(verts[0], verts[1], verts[2]); } @@ -143,4 +143,4 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& } // namespace cura -#endif // ARCUS \ No newline at end of file +#endif // ARCUS diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 08b8600eae..9f2e7419e1 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -98,7 +98,7 @@ void CommandLine::sendPrintTimeMaterialEstimates() const } } -void CommandLine::sendProgress(const float& progress) const +void CommandLine::sendProgress(double progress) const { const unsigned int rounded_amount = 100 * progress; if (last_shown_progress == rounded_amount) // No need to send another tiny update step. @@ -584,4 +584,4 @@ const std::string CommandLine::findDefinitionFile(const std::string& definition_ return std::string(""); } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 01d57a6357..559ff91b4e 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -649,7 +649,7 @@ bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, cons const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; if (Application::getInstance().communication_->isSequential()) // If we must output the g-code sequentially, we must already place the g-code header here even if we don't know - // the exact time/material usages yet. + // the exact time/material usages yet. { std::string prefix = getFileHeader(storage.getExtrudersUsed()); writeCode(prefix.c_str()); @@ -875,9 +875,9 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo Point gcode_pos = getGcodePos(x, y, current_extruder); // For Bits From Bytes machines, we need to handle this completely differently. As they do not use E values but RPM values. - float fspeed = speed * 60; - float rpm = extrusion_per_mm * speed * 60; - const float mm_per_rpm = 4.0; // All BFB machines have 4mm per RPM extrusion. + double fspeed = speed * 60; + double rpm = extrusion_per_mm * speed * 60; + const double mm_per_rpm = 4.0; // All BFB machines have 4mm per RPM extrusion. rpm /= mm_per_rpm; if (rpm > 0) { diff --git a/src/infill.cpp b/src/infill.cpp index 0c7dd8b641..39e3342b50 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -3,6 +3,13 @@ #include "infill.h" +#include //For std::sort. +#include +#include + +#include +#include + #include "WallToolPaths.h" #include "infill/GyroidInfill.h" #include "infill/ImageBasedDensityProvider.h" @@ -21,13 +28,6 @@ #include "utils/linearAlg2D.h" #include "utils/polygonUtils.h" -#include -#include - -#include //For std::sort. -#include -#include - /*! * Function which returns the scanline_idx for a given x coordinate * @@ -460,7 +460,7 @@ void Infill::generateConcentricInfill(std::vector& toolpaths constexpr size_t inset_wall_count = 1; // 1 wall at a time. constexpr coord_t wall_0_inset = 0; // Don't apply any outer wall inset for these. That's just for the outer wall. WallToolPaths wall_toolpaths(current_inset, infill_line_width_, inset_wall_count, wall_0_inset, settings, 0, SectionType::CONCENTRIC_INFILL); // FIXME: @jellespijker pass - // the correct layer + // the correct layer const std::vector inset_paths = wall_toolpaths.getToolPaths(); toolpaths.insert(toolpaths.end(), inset_paths.begin(), inset_paths.end()); @@ -494,7 +494,7 @@ void Infill::generateQuarterCubicInfill(Polygons& result) generateHalfTetrahedralInfill(0.5, 90, result); } -void Infill::generateHalfTetrahedralInfill(float pattern_z_shift, int angle_shift, Polygons& result) +void Infill::generateHalfTetrahedralInfill(double pattern_z_shift, int angle_shift, Polygons& result) { const coord_t period = line_distance_ * 2; coord_t shift = coord_t(one_over_sqrt_2 * (z_ + pattern_z_shift * period * 2)) % period; diff --git a/src/infill/GyroidInfill.cpp b/src/infill/GyroidInfill.cpp index 861d2b95ae..dbabec6f61 100644 --- a/src/infill/GyroidInfill.cpp +++ b/src/infill/GyroidInfill.cpp @@ -1,17 +1,21 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/GyroidInfill.h" + #include "utils/AABB.h" #include "utils/linearAlg2D.h" #include "utils/polygon.h" -namespace cura { +namespace cura +{ -GyroidInfill::GyroidInfill() { +GyroidInfill::GyroidInfill() +{ } -GyroidInfill::~GyroidInfill() { +GyroidInfill::~GyroidInfill() +{ } void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_zaggify, coord_t line_distance, const Polygons& in_outline, coord_t z) @@ -51,14 +55,14 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za const double odd_c = sin_z * std::cos(y_rads + phase_offset); const double even_c = sin_z * std::cos(y_rads + phase_offset + std::numbers::pi); const double h = std::sqrt(a * a + b * b); - const double odd_x_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) - std::numbers::pi/2; - const double even_x_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) - std::numbers::pi/2; + const double odd_x_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) - std::numbers::pi / 2; + const double even_x_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) - std::numbers::pi / 2; odd_line_coords.push_back(odd_x_rads / std::numbers::pi * pitch); even_line_coords.push_back(even_x_rads / std::numbers::pi * pitch); } const unsigned num_coords = odd_line_coords.size(); unsigned num_columns = 0; - for (coord_t x = (std::floor(aabb.min.X / pitch) - 2.25) * pitch; x <= aabb.max.X + pitch/2; x += pitch/2) + for (coord_t x = (std::floor(aabb.min.X / pitch) - 2.25) * pitch; x <= aabb.max.X + pitch / 2; x += pitch / 2) { bool is_first_point = true; Point last; @@ -69,9 +73,9 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za { for (unsigned i = 0; i < num_coords; ++i) { - Point current(x + ((num_columns & 1) ? odd_line_coords[i] : even_line_coords[i])/2 + pitch, y + (coord_t)(i * step)); + Point current(x + ((num_columns & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2 + pitch, y + (coord_t)(i * step)); bool current_inside = in_outline.inside(current, true); - if (!is_first_point) + if (! is_first_point) { if (last_inside && current_inside) { @@ -143,14 +147,14 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za const double odd_c = cos_z * std::sin(x_rads + phase_offset + std::numbers::pi); const double even_c = cos_z * std::sin(x_rads + phase_offset); const double h = std::sqrt(a * a + b * b); - const double odd_y_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) + std::numbers::pi/2; - const double even_y_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) + std::numbers::pi/2; + const double odd_y_rads = ((h != 0) ? std::asin(odd_c / h) + std::asin(b / h) : 0) + std::numbers::pi / 2; + const double even_y_rads = ((h != 0) ? std::asin(even_c / h) + std::asin(b / h) : 0) + std::numbers::pi / 2; odd_line_coords.push_back(odd_y_rads / std::numbers::pi * pitch); even_line_coords.push_back(even_y_rads / std::numbers::pi * pitch); } const unsigned num_coords = odd_line_coords.size(); unsigned num_rows = 0; - for (coord_t y = (std::floor(aabb.min.Y / pitch) - 1) * pitch; y <= aabb.max.Y + pitch/2; y += pitch/2) + for (coord_t y = (std::floor(aabb.min.Y / pitch) - 1) * pitch; y <= aabb.max.Y + pitch / 2; y += pitch / 2) { bool is_first_point = true; Point last; @@ -161,9 +165,9 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za { for (unsigned i = 0; i < num_coords; ++i) { - Point current(x + (coord_t)(i * step), y + ((num_rows & 1) ? odd_line_coords[i] : even_line_coords[i])/2); + Point current(x + (coord_t)(i * step), y + ((num_rows & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2); bool current_inside = in_outline.inside(current, true); - if (!is_first_point) + if (! is_first_point) { if (last_inside && current_inside) { @@ -267,7 +271,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za { // don't include chain ends that are close to the segment but are beyond the segment ends short beyond = 0; - if (LinearAlg2D::getDist2FromLineSegment(op0, chains[point_index][chain_index], op1, &beyond) < 10 && !beyond) + if (LinearAlg2D::getDist2FromLineSegment(op0, chains[point_index][chain_index], op1, &beyond) < 10 && ! beyond) { points_on_outline_point_index.push_back(point_index); points_on_outline_chain_index.push_back(chain_index); @@ -298,10 +302,10 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za { // find the nearest chain end to the current point unsigned nearest_point_index = 0; - float nearest_point_dist2 = std::numeric_limits::infinity(); + double nearest_point_dist2 = std::numeric_limits::infinity(); for (unsigned pi = 0; pi < points_on_outline_chain_index.size(); ++pi) { - float dist2 = vSize2f(chains[points_on_outline_point_index[pi]][points_on_outline_chain_index[pi]] - cur_point); + double dist2 = vSize2f(chains[points_on_outline_point_index[pi]][points_on_outline_chain_index[pi]] - cur_point); if (dist2 < nearest_point_dist2) { nearest_point_dist2 = dist2; @@ -380,10 +384,8 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za // we have now visited all the points in the outline, if a connector was (potentially) being drawn // check whether the first chain is already connected to the last chain and, if not, draw the // connector between - if (drawing && first_chain_chain_index != std::numeric_limits::max() - && first_chain_chain_index != connector_start_chain_index - && connected_to[0][first_chain_chain_index] != connector_start_chain_index - && connected_to[1][first_chain_chain_index] != connector_start_chain_index) + if (drawing && first_chain_chain_index != std::numeric_limits::max() && first_chain_chain_index != connector_start_chain_index + && connected_to[0][first_chain_chain_index] != connector_start_chain_index && connected_to[1][first_chain_chain_index] != connector_start_chain_index) { // output the connector line segments from the last chain to the first point in the outline connector_points.push_back(outline_poly[0]); @@ -402,4 +404,4 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za result_lines = result; } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/infill/ImageBasedDensityProvider.cpp b/src/infill/ImageBasedDensityProvider.cpp index 83e53e018f..4d2344e454 100644 --- a/src/infill/ImageBasedDensityProvider.cpp +++ b/src/infill/ImageBasedDensityProvider.cpp @@ -38,8 +38,8 @@ ImageBasedDensityProvider::ImageBasedDensityProvider(const std::string filename, Point middle = model_aabb.getMiddle(); Point model_aabb_size = model_aabb.max - model_aabb.min; Point image_size2 = Point(image_size.x_, image_size.y_); - float aabb_aspect_ratio = float(model_aabb_size.X) / float(model_aabb_size.Y); - float image_aspect_ratio = float(image_size.x_) / float(image_size.y_); + double aabb_aspect_ratio = double(model_aabb_size.X) / double(model_aabb_size.Y); + double image_aspect_ratio = double(image_size.x_) / double(image_size.y_); Point aabb_size; if (image_aspect_ratio < aabb_aspect_ratio) { @@ -63,7 +63,7 @@ ImageBasedDensityProvider::~ImageBasedDensityProvider() } } -float ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const +double ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const { AABB query_box(Point(query_cube.min.x_, query_cube.min.y_), Point(query_cube.max.x_, query_cube.max.y_)); Point img_min = (query_box.min - print_aabb.min - Point(1, 1)) * image_size.x_ / (print_aabb.max.X - print_aabb.min.X); @@ -93,7 +93,7 @@ float ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const value_count++; } } - return 1.0f - ((float)total_lightness) / value_count / 255.0f; + return 1.0 - ((double)total_lightness) / value_count / 255.0; } } // namespace cura diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index 623f9ab9af..b3a15b3b46 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -22,7 +22,7 @@ namespace cura static constexpr bool diagonal = true; static constexpr bool straight = false; -static constexpr float allowed_length_error = .01; +static constexpr double allowed_length_error = 0.01; static constexpr bool deep_debug_checking = false; @@ -120,9 +120,9 @@ void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) void SierpinskiFill::createTreeStatistics(SierpinskiTriangle& triangle) { Point ac = triangle.straight_corner_ - triangle.a_; - float area = 0.5 * INT2MM2(vSize2(ac)); - float short_length = .5 * vSizeMM(ac); - float long_length = .5 * vSizeMM(triangle.b_ - triangle.a_); + double area = 0.5 * INT2MM2(vSize2(ac)); + double short_length = .5 * vSizeMM(ac); + double long_length = .5 * vSizeMM(triangle.b_ - triangle.a_); triangle.area_ = area; triangle.realized_length_ = (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_BC) ? long_length : short_length; for (SierpinskiTriangle& child : triangle.children) @@ -141,7 +141,7 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) triangle_aabb.include(triangle.b_); triangle_aabb.include(triangle.straight_corner_); AABB3D triangle_aabb3d(Point3(triangle_aabb.min.X, triangle_aabb.min.Y, 0), Point3(triangle_aabb.max.X, triangle_aabb.max.Y, 1)); - float density = density_provider(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. + double density = density_provider(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. triangle.requested_length_ = density * triangle.area_ / INT2MM(line_width); } else @@ -231,7 +231,7 @@ bool SierpinskiFill::subdivideAll() if (node->depth_ == max_depth) // Never subdivide beyond maximum depth. continue; - float total_subdiv_error = getSubdivisionError(begin, end); + double total_subdiv_error = getSubdivisionError(begin, end); if (! node->children.empty() && total_subdiv_error >= 0 && ! is_constrained) { bool redistribute_errors = true; @@ -256,7 +256,7 @@ bool SierpinskiFill::bubbleUpConstraintErrors() SierpinskiTriangle* node = *it; SierpinskiTriangle& triangle = *node; - float unresolvable_error = triangle.getValueError(); + double unresolvable_error = triangle.getValueError(); // If constrained in one direction, resolve the error in the other direction only. // If constrained in both directions, divide the error equally over both directions. @@ -363,7 +363,7 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: spdlog::warn("Nodes aren't balanced! er: {} next el: {}", node->error_right_, next->error_left_); assert(false); } - float exchange = node->error_right_; + double exchange = node->error_right_; if (node->error_right_ < next->error_left_) { exchange *= -1; @@ -372,7 +372,7 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: next->error_left_ += exchange; } - float total_superfluous_error = 0; + double total_superfluous_error = 0; for (auto it = begin; it != end; ++it) { SierpinskiTriangle* node = *it; @@ -389,10 +389,10 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: } if (begin != sequence.begin() && end != sequence.end() && first->error_left_ > allowed_length_error && last->error_right_ > allowed_length_error) { - float total_error_input = first->error_left_ + last->error_right_; + double total_error_input = first->error_left_ + last->error_right_; total_superfluous_error = std::min(total_superfluous_error, total_error_input); // total superfluous error cannot be more than the influx of error - float left_spillover = total_superfluous_error * first->error_left_ / total_error_input; - float right_spillover = total_superfluous_error * last->error_right_ / total_error_input; + double left_spillover = total_superfluous_error * first->error_left_ / total_error_input; + double right_spillover = total_superfluous_error * last->error_right_ / total_error_input; (*begin)->error_left_ -= left_spillover; prev->error_right_ += left_spillover; (*std::prev(end))->error_right_ -= right_spillover; @@ -423,7 +423,7 @@ void SierpinskiFill::balanceErrors(std::list node_error_compensation(nodes.size()); + std::vector node_error_compensation(nodes.size()); // sort children on value_error, i.e. sort on total_value std::vector order; @@ -440,13 +440,13 @@ void SierpinskiFill::balanceErrors(std::listgetValueError(); + double value_error = node->getValueError(); if (value_error < 0) { added -= value_error; @@ -462,14 +462,14 @@ void SierpinskiFill::balanceErrors(std::listgetValueError(); + double val_err = node->getValueError(); assert(val_err > -allowed_length_error); total_remaining_value_error += val_err; } @@ -489,10 +489,10 @@ void SierpinskiFill::balanceErrors(std::listgetValueError(); + double val_error = node->getValueError(); assert(val_error > -allowed_length_error); - float diff = added * val_error / total_remaining_value_error; + double diff = added * val_error / total_remaining_value_error; subtracted += diff; node_error_compensation[node_idx] = -diff; } @@ -502,7 +502,7 @@ void SierpinskiFill::balanceErrors(std::listerror_left_ -= energy; @@ -531,16 +531,16 @@ void SierpinskiFill::diffuseError() int constrained_nodes = 0; int unconstrained_nodes = 0; int subdivided_nodes = 0; - float error = 0; + double error = 0; for (std::list::iterator it = sequence.begin(); it != sequence.end(); ++it) { SierpinskiTriangle& triangle = *(*it); - float boundary = (triangle.realized_length_ + triangle.total_child_realized_length_) * .5f; + double boundary = (triangle.realized_length_ + triangle.total_child_realized_length_) * 0.5; - float nodal_value = ((use_errors_in_dithering) ? triangle.getErroredValue() : triangle.requested_length_); + double nodal_value = ((use_errors_in_dithering) ? triangle.getErroredValue() : triangle.requested_length_); - float boundary_error = nodal_value - boundary + error; + double boundary_error = nodal_value - boundary + error; std::list::iterator begin = it; std::list::iterator end = std::next(it); @@ -606,9 +606,9 @@ bool SierpinskiFill::isConstrainedForward(std::list::iterat return false; } -float SierpinskiFill::getSubdivisionError(std::list::iterator begin, std::list::iterator end) +double SierpinskiFill::getSubdivisionError(std::list::iterator begin, std::list::iterator end) { - float ret = 0; + double ret = 0; for (auto it = begin; it != end; ++it) { SierpinskiTriangle* node = *it; @@ -677,22 +677,22 @@ SierpinskiFill::Edge SierpinskiFill::SierpinskiTriangle::getToEdge() return ret; } -float SierpinskiFill::SierpinskiTriangle::getTotalError() +double SierpinskiFill::SierpinskiTriangle::getTotalError() { return error_left_ + error_right_; } -float SierpinskiFill::SierpinskiTriangle::getErroredValue() +double SierpinskiFill::SierpinskiTriangle::getErroredValue() { return requested_length_ + getTotalError(); } -float SierpinskiFill::SierpinskiTriangle::getSubdivisionError() +double SierpinskiFill::SierpinskiTriangle::getSubdivisionError() { return getErroredValue() - total_child_realized_length_; } -float SierpinskiFill::SierpinskiTriangle::getValueError() +double SierpinskiFill::SierpinskiTriangle::getValueError() { return getErroredValue() - realized_length_; } @@ -721,10 +721,10 @@ Polygon SierpinskiFill::generateCross() const ret.add(edge_middle / 2); } - float realized_length = INT2MM(ret.polygonLength()); - float requested_length = root.requested_length_; - float error = (realized_length - requested_length) / requested_length; - spdlog::debug("realized_length: {}, requested_length: {} :: {}% error", realized_length, requested_length, .01 * static_cast(10000 * error)); + double realized_length = INT2MM(ret.polygonLength()); + double requested_length = root.requested_length_; + double error = (realized_length - requested_length) / requested_length; + spdlog::debug("realized_length: {}, requested_length: {} :: {}% error", realized_length, requested_length, 0.01 * static_cast(10000 * error)); return ret; } diff --git a/src/infill/SierpinskiFillProvider.cpp b/src/infill/SierpinskiFillProvider.cpp index b659b48fe9..2668641842 100644 --- a/src/infill/SierpinskiFillProvider.cpp +++ b/src/infill/SierpinskiFillProvider.cpp @@ -20,7 +20,7 @@ constexpr bool SierpinskiFillProvider::use_dithering; SierpinskiFillProvider::SierpinskiFillProvider(const AABB3D aabb_3d, coord_t min_line_distance, const coord_t line_width) : fractal_config(getFractalConfig(aabb_3d, min_line_distance)) - , density_provider(new UniformDensityProvider((float)line_width / min_line_distance)) + , density_provider(new UniformDensityProvider((double)line_width / min_line_distance)) , fill_pattern_for_all_layers(std::in_place, *density_provider, fractal_config.aabb, fractal_config.depth, line_width, use_dithering) { } @@ -76,7 +76,7 @@ SierpinskiFillProvider::FractalConfig SierpinskiFillProvider::getFractalConfig(c aabb_size *= 2; depth += 2; } - const float half_sqrt2 = .5 * std::numbers::pi; + const double half_sqrt2 = 0.5 * std::numbers::sqrt2; if (depth > 0 && aabb_size * half_sqrt2 >= max_side_length) { aabb_size *= half_sqrt2; diff --git a/src/mesh.cpp b/src/mesh.cpp index 5e2ca66224..6bcc38f550 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -5,7 +5,7 @@ #include -#include "utils/floatpoint.h" +#include "utils/Point3d.h" namespace cura { @@ -203,12 +203,12 @@ int Mesh::getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVe has_disconnected_faces = true; } - FPoint3 vn = vertices_[idx1].p_ - vertices_[idx0].p_; - FPoint3 n = vn / vn.vSize(); // the normal of the plane in which all normals of faces connected to the edge lie => the normalized normal - FPoint3 v0 = vertices_[idx1].p_ - vertices_[idx0].p_; + Point3d vn = vertices_[idx1].p_ - vertices_[idx0].p_; + Point3d n = vn / vn.vSize(); // the normal of the plane in which all normals of faces connected to the edge lie => the normalized normal + Point3d v0 = vertices_[idx1].p_ - vertices_[idx0].p_; // the normals below are abnormally directed! : these normals all point counterclockwise (viewed from idx1 to idx0) from the face, irrespective of the direction of the face. - FPoint3 n0 = FPoint3(vertices_[notFaceVertexIdx].p_ - vertices_[idx0].p_).cross(v0); + Point3d n0 = Point3d(vertices_[notFaceVertexIdx].p_ - vertices_[idx0].p_).cross(v0); if (n0.vSize() <= 0) { @@ -227,8 +227,8 @@ int Mesh::getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVe break; } - FPoint3 v1 = vertices_[faces_[candidateFace].vertex_index_[candidateVertex]].p_ - vertices_[idx0].p_; - FPoint3 n1 = v0.cross(v1); + Point3d v1 = vertices_[faces_[candidateFace].vertex_index_[candidateVertex]].p_ - vertices_[idx0].p_; + Point3d n1 = v0.cross(v1); double dot = n0 * n1; double det = n * n0.cross(n1); diff --git a/src/pathPlanning/LinePolygonsCrossings.cpp b/src/pathPlanning/LinePolygonsCrossings.cpp index 85896739b2..611aaffe4c 100644 --- a/src/pathPlanning/LinePolygonsCrossings.cpp +++ b/src/pathPlanning/LinePolygonsCrossings.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "pathPlanning/LinePolygonsCrossings.h" @@ -8,36 +8,38 @@ #include "sliceDataStorage.h" #include "utils/SVG.h" -namespace cura { +namespace cura +{ LinePolygonsCrossings::Crossing::Crossing(const size_t poly_idx, const coord_t x, const size_t point_idx) -: poly_idx_(poly_idx) -, x_(x) -, point_idx_(point_idx) + : poly_idx_(poly_idx) + , x_(x) + , point_idx_(point_idx) { } bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obstacles) { - for(unsigned int poly_idx = 0; poly_idx < boundary_.size(); poly_idx++) + for (unsigned int poly_idx = 0; poly_idx < boundary_.size(); poly_idx++) { ConstPolygonRef poly = boundary_[poly_idx]; Point p0 = transformation_matrix_.apply(poly[poly.size() - 1]); - for(unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) + for (unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { Point p1 = transformation_matrix_.apply(poly[point_idx]); if ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y)) { // if line segment crosses the line through the transformed start and end point (aka scanline) - if (p1.Y == p0.Y) //Line segment is parallel with the scanline. That means that both endpoints lie on the scanline, so they will have intersected with the adjacent line. + if (p1.Y == p0.Y) // Line segment is parallel with the scanline. That means that both endpoints lie on the scanline, so they will have intersected with the adjacent + // line. { p0 = p1; continue; } const coord_t x = p0.X + (p1.X - p0.X) * (transformed_start_point_.Y - p0.Y) / (p1.Y - p0.Y); // intersection point between line segment and the scanline - + if (x >= transformed_start_point_.X && x <= transformed_end_point_.X) { - if (!((p1.Y == transformed_start_point_.Y && p1.Y < p0.Y) || (p0.Y == transformed_start_point_.Y && p0.Y < p1.Y))) + if (! ((p1.Y == transformed_start_point_.Y && p1.Y < p0.Y) || (p0.Y == transformed_start_point_.Y && p0.Y < p1.Y))) { // perform edge case only for line segments on and below the scanline, not for line segments on and above. // \/ will be no crossings and /\ two, but most importantly | will be one crossing. crossings_.emplace_back(poly_idx, x, point_idx); @@ -53,7 +55,13 @@ bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obsta } } // order crossings by increasing x - std::sort(crossings_.begin(), crossings_.end(), [](const Crossing& a, const Crossing& b) -> bool { return a.x_ < b.x_; }); + std::sort( + crossings_.begin(), + crossings_.end(), + [](const Crossing& a, const Crossing& b) -> bool + { + return a.x_ < b.x_; + }); return true; } @@ -66,10 +74,10 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() transformed_start_point_ = transformation_matrix_.apply(start_point_); transformed_end_point_ = transformation_matrix_.apply(end_point_); - for(ConstPolygonRef poly : boundary_) + for (ConstPolygonRef poly : boundary_) { Point p0 = transformation_matrix_.apply(poly.back()); - for(Point p1_ : poly) + for (Point p1_ : poly) { Point p1 = transformation_matrix_.apply(p1_); // when the boundary just touches the line don't disambiguate between the boundary moving on to actually cross the line @@ -77,7 +85,8 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() // // disregard overlapping line segments; probably the next or previous line segment is not overlapping, but will give a collision // when the boundary line segment fully overlaps with the line segment this edge case is not viewed as a collision - if (p1.Y != p0.Y && ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y))) + if (p1.Y != p0.Y + && ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y))) { int64_t x = p0.X + (p1.X - p0.X) * (transformed_start_point_.Y - p0.Y) / (p1.Y - p0.Y); @@ -89,23 +98,23 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() p0 = p1; } } - + return false; } bool LinePolygonsCrossings::generateCombingPath(CombPath& combPath, int64_t max_comb_distance_ignored, bool fail_on_unavoidable_obstacles) { - if (shorterThen(end_point_ - start_point_, max_comb_distance_ignored) || !lineSegmentCollidesWithBoundary()) + if (shorterThen(end_point_ - start_point_, max_comb_distance_ignored) || ! lineSegmentCollidesWithBoundary()) { - //We're not crossing any boundaries. So skip the comb generation. - combPath.push_back(start_point_); + // We're not crossing any boundaries. So skip the comb generation. + combPath.push_back(start_point_); combPath.push_back(end_point_); return true; } bool success = calcScanlineCrossings(fail_on_unavoidable_obstacles); - if (!success) + if (! success) { return false; } @@ -113,7 +122,7 @@ bool LinePolygonsCrossings::generateCombingPath(CombPath& combPath, int64_t max_ CombPath basicPath; generateBasicCombingPath(basicPath); optimizePath(basicPath, combPath); -// combPath = basicPath; // uncomment to disable comb path optimization + // combPath = basicPath; // uncomment to disable comb path optimization return true; } @@ -150,9 +159,7 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const std::vector fwd_points; Point prev = combPath.back(); coord_t fwd_len = 0; - for (unsigned int point_idx = min.point_idx_ - ; point_idx != max.point_idx_ - ; point_idx = (point_idx < poly.size() - 1) ? (point_idx + 1) : (0)) + for (unsigned int point_idx = min.point_idx_; point_idx != max.point_idx_; point_idx = (point_idx < poly.size() - 1) ? (point_idx + 1) : (0)) { const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); fwd_points.push_back(p); @@ -171,11 +178,9 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const std::vector rev_points; prev = combPath.back(); coord_t rev_len = 0; - unsigned int min_idx = (min.point_idx_ == 0)? poly.size() - 1 : min.point_idx_ - 1; - unsigned int max_idx = (max.point_idx_ == 0)? poly.size() - 1 : max.point_idx_ - 1; - for (unsigned int point_idx = min_idx - ; point_idx != max_idx - ; point_idx = (point_idx > 0) ? (point_idx - 1) : (poly.size() - 1)) + unsigned int min_idx = (min.point_idx_ == 0) ? poly.size() - 1 : min.point_idx_ - 1; + unsigned int max_idx = (max.point_idx_ == 0) ? poly.size() - 1 : max.point_idx_ - 1; + for (unsigned int point_idx = min_idx; point_idx != max_idx; point_idx = (point_idx > 0) ? (point_idx - 1) : (poly.size() - 1)) { const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); rev_points.push_back(p); @@ -201,12 +206,12 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const combPath.push_back(last); } -bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimized_comb_path) +bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimized_comb_path) { optimized_comb_path.push_back(start_point_); - for(unsigned int point_idx = 1; point_idx 0; n >>= 1) { - if (optimized_comb_path.size() > n && !PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - n - 1], comb_path[point_idx - 1], loc_to_line_grid_)) + if (optimized_comb_path.size() > n + && ! PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[optimized_comb_path.size() - n - 1], comb_path[point_idx - 1], loc_to_line_grid_)) { // we can remove n points from the path without it clashing with the combing boundary for (unsigned i = 0; i < n; ++i) @@ -250,11 +256,11 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize // Point p = optimized_comb_path.back(); - for (float frac : { 0.9, 0.9, 0.7, 0.5 }) + for (double frac : { 0.9, 0.9, 0.7, 0.5 }) { // slide p towards the second point in the comb path p = comb_path[1] + (p - comb_path[1]) * frac; - if (!PolygonUtils::polygonCollidesWithLineSegment(start_point_, p, loc_to_line_grid_)) + if (! PolygonUtils::polygonCollidesWithLineSegment(start_point_, p, loc_to_line_grid_)) { // using the new corner doesn't cause a conflict optimized_comb_path.back() = p; @@ -267,10 +273,10 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize } } } - else + else { // : dont add the newest point - + // TODO: add the below extra optimization? (+/- 7% extra computation time, +/- 2% faster print for Dual_extrusion_support_generation.stl) while (optimized_comb_path.size() > 1) { @@ -278,7 +284,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { break; } - else + else { optimized_comb_path.pop_back(); } @@ -290,18 +296,19 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { const unsigned n = optimized_comb_path.size(); // the penultimate corner may be deleted if the resulting path doesn't conflict with the boundary - if (!PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[n - 2], comb_path.back(), loc_to_line_grid_)) + if (! PolygonUtils::polygonCollidesWithLineSegment(optimized_comb_path[n - 2], comb_path.back(), loc_to_line_grid_)) { optimized_comb_path.pop_back(); } - else { + else + { // that wasn't possible so try and move the penultimate corner without conficting with the boundary // in exactly the same way as we did at the start of the path - for (float frac : { 0.9, 0.9, 0.7, 0.5 }) + for (double frac : { 0.9, 0.9, 0.7, 0.5 }) { // make a new point between the penultimate corner and the corner before that Point p = optimized_comb_path[n - 2] + (optimized_comb_path[n - 1] - optimized_comb_path[n - 2]) * frac; - if (!PolygonUtils::polygonCollidesWithLineSegment(p, comb_path.back(), loc_to_line_grid_)) + if (! PolygonUtils::polygonCollidesWithLineSegment(p, comb_path.back(), loc_to_line_grid_)) { // using the new corner doesn't cause a conflict optimized_comb_path[n - 1] = p; @@ -319,4 +326,4 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize return true; } -}//namespace cura +} // namespace cura diff --git a/src/progress/Progress.cpp b/src/progress/Progress.cpp index a32b50ea94..318657643c 100644 --- a/src/progress/Progress.cpp +++ b/src/progress/Progress.cpp @@ -40,7 +40,7 @@ void Progress::init() void Progress::messageProgress(Progress::Stage stage, int progress_in_stage, int progress_in_stage_max) { double percentage = calcOverallProgress(stage, static_cast(progress_in_stage / static_cast(progress_in_stage_max))); - Application::getInstance().communication_->sendProgress(static_cast(percentage)); + Application::getInstance().communication_->sendProgress(percentage); } void Progress::messageProgressStage(Progress::Stage stage, TimeKeeper* time_keeper) diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 09d2bf5682..89b34bc64c 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -11,7 +11,7 @@ #include "Slice.h" #include "settings/EnumSettings.h" #include "settings/types/Angle.h" -#include "utils/floatpoint.h" +#include "utils/Point3d.h" namespace cura { @@ -201,20 +201,20 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() const MeshVertex& v1 = mesh.vertices_[face.vertex_index_[1]]; const MeshVertex& v2 = mesh.vertices_[face.vertex_index_[2]]; - const FPoint3 p0 = v0.p_; - const FPoint3 p1 = v1.p_; - const FPoint3 p2 = v2.p_; + const Point3d p0 = v0.p_; + const Point3d p1 = v1.p_; + const Point3d p2 = v2.p_; - float min_z = p0.z; + double min_z = p0.z; min_z = std::min(min_z, p1.z); min_z = std::min(min_z, p2.z); - float max_z = p0.z; + double max_z = p0.z; max_z = std::max(max_z, p1.z); max_z = std::max(max_z, p2.z); // calculate the angle of this triangle in the z direction - const FPoint3 n = (p1 - p0).cross(p2 - p0); - const FPoint3 normal = n.normalized(); + const Point3d n = (p1 - p0).cross(p2 - p0); + const Point3d normal = n.normalized(); AngleRadians z_angle = std::acos(std::abs(normal.z)); // prevent flat surfaces from influencing the algorithm diff --git a/src/settings/PathConfigStorage.cpp b/src/settings/PathConfigStorage.cpp index 48ca20d6d2..c0edd6d0e8 100644 --- a/src/settings/PathConfigStorage.cpp +++ b/src/settings/PathConfigStorage.cpp @@ -130,7 +130,7 @@ PathConfigStorage::PathConfigStorage(const SliceDataStorage& storage, const Laye } support_infill_config.reserve(MAX_INFILL_COMBINE); - const float support_infill_line_width_factor + const double support_infill_line_width_factor = (mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT) ? 1.0_r : line_width_factor_per_extruder[support_infill_extruder_nr]; for (int combine_idx = 0; combine_idx < MAX_INFILL_COMBINE; combine_idx++) { diff --git a/src/skin.cpp b/src/skin.cpp index 3b01559d4e..19e54f2072 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -3,6 +3,8 @@ #include "skin.h" +#include // std::ceil + #include "Application.h" //To get settings. #include "ExtruderTrain.h" #include "Slice.h" @@ -15,8 +17,6 @@ #include "utils/math.h" #include "utils/polygonUtils.h" -#include // std::ceil - #define MIN_AREA_SIZE (0.4 * 0.4) namespace cura @@ -444,7 +444,7 @@ void SkinInfillAreaComputation::generateInfillSupport(SliceMeshStorage& mesh) void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) { // no early-out for this function; it needs to initialize the [infill_area_per_combine_per_density] - float layer_skip_count = 8; // skip every so many layers as to ignore small gaps in the model making computation more easy + double layer_skip_count = 8; // skip every so many layers as to ignore small gaps in the model making computation more easy if (! mesh.settings.get("skin_no_small_gaps_heuristic")) { layer_skip_count = 1; @@ -454,8 +454,8 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) = round_divide(gradual_infill_step_height, mesh.settings.get("layer_height")); // The difference in layer count between consecutive density infill areas // make gradual_infill_step_height divisible by layer_skip_count - float n_skip_steps_per_gradual_step - = std::max(1.0f, std::ceil(gradual_infill_step_layer_count / layer_skip_count)); // only decrease layer_skip_count to make it a divisor of gradual_infill_step_layer_count + double n_skip_steps_per_gradual_step + = std::max(1.0, std::ceil(gradual_infill_step_layer_count / layer_skip_count)); // only decrease layer_skip_count to make it a divisor of gradual_infill_step_layer_count layer_skip_count = gradual_infill_step_layer_count / n_skip_steps_per_gradual_step; const size_t max_infill_steps = mesh.settings.get("gradual_infill_steps"); @@ -496,7 +496,7 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) LayerIndex min_layer = layer_idx + infill_step * gradual_infill_step_layer_count + static_cast(layer_skip_count); LayerIndex max_layer = layer_idx + (infill_step + 1) * gradual_infill_step_layer_count; - for (float upper_layer_idx = min_layer; upper_layer_idx <= max_layer; upper_layer_idx += layer_skip_count) + for (double upper_layer_idx = min_layer; upper_layer_idx <= max_layer; upper_layer_idx += layer_skip_count) { if (upper_layer_idx >= mesh.layers.size()) { diff --git a/src/support.cpp b/src/support.cpp index 234ff27dbd..4fcc69630e 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -240,7 +240,7 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) LayerIndex min_layer{ layer_nr + density_step * gradual_support_step_layer_count + static_cast(layer_skip_count) }; LayerIndex max_layer{ layer_nr + (density_step + 1) * gradual_support_step_layer_count }; - for (float upper_layer_idx = min_layer; upper_layer_idx <= max_layer; upper_layer_idx += layer_skip_count) + for (double upper_layer_idx = min_layer; upper_layer_idx <= max_layer; upper_layer_idx += layer_skip_count) { if (static_cast(upper_layer_idx) >= total_layer_count) { @@ -1753,9 +1753,9 @@ void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMe const coord_t bottom_outline_offset = mesh_group_settings.get("support_bottom_extruder_nr").settings_.get("support_bottom_offset"); const size_t scan_count = std::max(size_t(1), (bottom_layer_count - 1) / skip_layer_count); // How many measurements to take to generate bottom areas. - const float z_skip = std::max( - 1.0f, - float(bottom_layer_count - 1) / float(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. + const double z_skip = std::max( + 1.0, + double(bottom_layer_count - 1) / double(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. const double minimum_bottom_area = mesh.settings.get("minimum_bottom_area"); std::vector& support_layers = storage.support.supportLayers; @@ -1763,7 +1763,7 @@ void AreaSupport::generateSupportBottom(SliceDataStorage& storage, const SliceMe { const unsigned int bottom_layer_idx_below = std::max(0, int(layer_idx) - int(bottom_layer_count) - int(z_distance_bottom)); Polygons mesh_outlines; - for (float layer_idx_below = bottom_layer_idx_below; std::round(layer_idx_below) < (int)(layer_idx - z_distance_bottom); layer_idx_below += z_skip) + for (double layer_idx_below = bottom_layer_idx_below; std::round(layer_idx_below) < (int)(layer_idx - z_distance_bottom); layer_idx_below += z_skip) { mesh_outlines.add(mesh.layers[std::round(layer_idx_below)].getOutlines()); } @@ -1790,9 +1790,9 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh const coord_t roof_outline_offset = mesh_group_settings.get("support_roof_extruder_nr").settings_.get("support_roof_offset"); const size_t scan_count = std::max(size_t(1), (roof_layer_count - 1) / skip_layer_count); // How many measurements to take to generate roof areas. - const float z_skip = std::max( - 1.0f, - float(roof_layer_count - 1) / float(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. + const double z_skip = std::max( + 1.0, + double(roof_layer_count - 1) / double(scan_count)); // How many layers to skip between measurements. Using float for better spread, but this is later rounded. const double minimum_roof_area = mesh.settings.get("minimum_roof_area"); std::vector& support_layers = storage.support.supportLayers; @@ -1802,7 +1802,7 @@ void AreaSupport::generateSupportRoof(SliceDataStorage& storage, const SliceMesh std::min(LayerIndex{ support_layers.size() - 1 }, LayerIndex{ layer_idx + roof_layer_count + z_distance_top }) }; // Maximum layer of the model that generates support roof. Polygons mesh_outlines; - for (float layer_idx_above = top_layer_idx_above; layer_idx_above > layer_idx + z_distance_top; layer_idx_above -= z_skip) + for (double layer_idx_above = top_layer_idx_above; layer_idx_above > layer_idx + z_distance_top; layer_idx_above -= z_skip) { mesh_outlines.add(mesh.layers[std::round(layer_idx_above)].getOutlines()); } diff --git a/src/timeEstimate.cpp b/src/timeEstimate.cpp index 3e2345a92f..dcab876932 100644 --- a/src/timeEstimate.cpp +++ b/src/timeEstimate.cpp @@ -3,14 +3,14 @@ #include "timeEstimate.h" -#include "settings/Settings.h" -#include "utils/math.h" - #include #include #include #include +#include "settings/Settings.h" +#include "utils/math.h" + namespace cura { @@ -68,7 +68,7 @@ static inline Velocity maxAllowableSpeed(const Acceleration& acceleration, const } // Calculates the distance (not time) it takes to accelerate from initial_rate to target_rate using the given acceleration: -static inline float estimateAccelerationDistance(const Velocity& initial_rate, const Velocity& target_rate, const Acceleration& acceleration) +static inline double estimateAccelerationDistance(const Velocity& initial_rate, const Velocity& target_rate, const Acceleration& acceleration) { if (acceleration == 0) { diff --git a/src/utils/ExtrusionSegment.cpp b/src/utils/ExtrusionSegment.cpp index 872bae3000..6c152c5612 100644 --- a/src/utils/ExtrusionSegment.cpp +++ b/src/utils/ExtrusionSegment.cpp @@ -12,13 +12,13 @@ namespace cura Polygons ExtrusionSegment::toPolygons() { - return toPolygons(is_reduced); + return toPolygons(is_reduced_); } Polygons ExtrusionSegment::toPolygons(bool reduced) { Polygons ret; - const Point vec = to.p - from.p; + const Point vec = to_.p - from_.p; const coord_t vec_length = vSize(vec); if (vec_length <= 0) // Don't even output the endcaps. @@ -27,10 +27,10 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) } PolygonRef poly = ret.newPoly(); - const float delta_r = 0.5f * std::abs(from.w - to.w); - const float vec_length_fixed = std::max(delta_r, static_cast(vec_length)); + const double delta_r = 0.5 * std::abs(from_.w - to_.w); + const double vec_length_fixed = std::max(delta_r, static_cast(vec_length)); float alpha = std::acos(delta_r / vec_length_fixed); // Angle between the slope along the edge of the polygon (due to varying line width) and the centerline. - if (to.w > from.w) + if (to_.w > from_.w) { alpha = std::numbers::pi - alpha; } @@ -41,7 +41,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) RUN_ONCE(spdlog::warn("Line joint slope is out of bounds (should be between -pi and +pi): {}", alpha)); } - float dir = std::atan(vec.Y / static_cast(vec.X)); + double dir = std::atan(vec.Y / static_cast(vec.X)); if (vec.X < 0) { dir += std::numbers::pi; @@ -49,34 +49,38 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap on the "from" vertex's end. { - poly.emplace_back(from.p + Point(from.w / 2 * cos(alpha + dir), from.w / 2 * sin(alpha + dir))); + poly.emplace_back(from_.p + Point(from_.w / 2 * cos(alpha + dir), from_.w / 2 * sin(alpha + dir))); - float start_a = 2 * std::numbers::pi; + double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) { start_a -= a_step; } start_a += a_step; - float end_a = -2 * std::numbers::pi; + double end_a = -2 * std::numbers::pi; while (end_a < 2 * std::numbers::pi - alpha + dir) { end_a += a_step; } // Draw the endcap. - for (float a = start_a; a <= end_a; a += a_step) + for (double a = start_a; a <= end_a; a += a_step) { - poly.emplace_back(from.p + Point(from.w / 2 * cos(a), from.w / 2 * sin(a))); + poly.emplace_back(from_.p + Point(from_.w / 2 * cos(a), from_.w / 2 * sin(a))); } - poly.emplace_back(from.p + Point(from.w / 2 * cos(2 * std::numbers::pi - alpha + dir), from.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); + poly.emplace_back(from_.p + Point(from_.w / 2 * cos(2 * std::numbers::pi - alpha + dir), from_.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); } // Draw the endcap on the "to" vertex's end. { - poly.emplace_back(to.p + Point(to.w / 2 * cos(2 * std::numbers::pi - alpha + dir), to.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! + poly.emplace_back( + to_.p + + Point( + to_.w / 2 * cos(2 * std::numbers::pi - alpha + dir), + to_.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! - float start_a = 2 * std::numbers::pi; + double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) { start_a -= a_step; @@ -88,7 +92,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) start_a += a_step; } - float end_a = -2 * std::numbers::pi; + double end_a = -2 * std::numbers::pi; while (end_a < 2 * std::numbers::pi - alpha + dir) end_a += a_step; if (reduced) @@ -103,20 +107,20 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap. if (reduced) { - for (float a = end_a; a >= start_a; a -= a_step) // Go in the opposite direction. + for (double a = end_a; a >= start_a; a -= a_step) // Go in the opposite direction. { - poly.emplace_back(to.p + Point(to.w / 2 * cos(a), to.w / 2 * sin(a))); + poly.emplace_back(to_.p + Point(to_.w / 2 * cos(a), to_.w / 2 * sin(a))); } } else { - for (float a = end_a; a <= start_a; a += a_step) + for (double a = end_a; a <= start_a; a += a_step) { - poly.emplace_back(to.p + Point(to.w / 2 * cos(a), to.w / 2 * sin(a))); + poly.emplace_back(to_.p + Point(to_.w / 2 * cos(a), to_.w / 2 * sin(a))); } } - poly.emplace_back(to.p + Point(to.w / 2 * cos(alpha + dir), to.w / 2 * sin(alpha + dir))); + poly.emplace_back(to_.p + Point(to_.w / 2 * cos(alpha + dir), to_.w / 2 * sin(alpha + dir))); // The other main diagonal from the "to" vertex to the "from" vertex is implicit in the closing of the polygon. } @@ -134,19 +138,19 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) std::vector ExtrusionSegment::discretize(coord_t step_size) { - Point a = from.p; - Point b = to.p; + Point a = from_.p; + Point b = to_.p; Point ab = b - a; coord_t ab_length = vSize(ab); coord_t step_count = std::max(static_cast(1), (ab_length + step_size / 2) / step_size); std::vector discretized; for (coord_t step = 0; step < step_count; step++) { - ExtrusionJunction mid(a + ab * (step + 1) / step_count, from.w + (to.w - from.w) * (step + 1) / step_count, from.perimeter_index); - discretized.emplace_back(from, mid, is_odd, true); - from = mid; + ExtrusionJunction mid(a + ab * (step + 1) / step_count, from_.w + (to_.w - from_.w) * (step + 1) / step_count, from_.perimeter_index); + discretized.emplace_back(from_, mid, is_odd_, true); + from_ = mid; } - discretized.back().is_reduced = is_reduced; + discretized.back().is_reduced_ = is_reduced_; return discretized; } diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/FMatrix4x3.cpp index a52621b680..0aa49bc434 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/FMatrix4x3.cpp @@ -5,7 +5,7 @@ #include "settings/types/Ratio.h" //Scale factor. #include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. -#include "utils/floatpoint.h" //This matrix gets applied to floating point coordinates. +#include "utils/Point3d.h" //This matrix gets applied to floating point coordinates. namespace cura { @@ -46,7 +46,7 @@ FMatrix4x3::FMatrix4x3() m[3][2] = 0.0; } -Point3 FMatrix4x3::apply(const FPoint3& p) const +Point3 FMatrix4x3::apply(const Point3d& p) const { return Point3( MM2INT(p.x * m[0][0] + p.y * m[1][0] + p.z * m[2][0] + m[3][0]), diff --git a/src/utils/LinearAlg2D.cpp b/src/utils/LinearAlg2D.cpp index a917c073e2..98a9b896fa 100644 --- a/src/utils/LinearAlg2D.cpp +++ b/src/utils/LinearAlg2D.cpp @@ -3,16 +3,16 @@ #include "utils/linearAlg2D.h" -#include "utils/IntPoint.h" // dot - #include // swap #include #include // atan2 +#include "utils/IntPoint.h" // dot + namespace cura { -float LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) +double LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) { const Point ba = a - b; const Point bc = c - b; @@ -29,7 +29,7 @@ float LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) return std::numbers::pi; // straight bit } } - const float angle = -atan2(det, dott); // from -pi to pi + const double angle = -atan2(det, dott); // from -pi to pi if (angle >= 0) { return angle; diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index c0a3170d76..e495a566aa 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -8,7 +8,7 @@ #include #include "utils/ExtrusionLine.h" -#include "utils/floatpoint.h" +#include "utils/Point3d.h" #include "utils/polygon.h" namespace cura @@ -145,9 +145,9 @@ Point SVG::transform(const Point& p) const return Point(std::llrint(static_cast(p.X - aabb_.min.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min.Y) * scale_)); } -FPoint3 SVG::transformF(const Point& p) const +Point3d SVG::transformF(const Point& p) const { - return FPoint3(static_cast(static_cast(p.X - aabb_.min.X) * scale_), static_cast(static_cast(p.Y - aabb_.min.Y) * scale_), 0.0f); + return Point3d(static_cast(p.X - aabb_.min.X) * scale_, static_cast(p.Y - aabb_.min.Y) * scale_, 0.0); } void SVG::writeComment(const std::string& comment) const @@ -155,7 +155,7 @@ void SVG::writeComment(const std::string& comment) const fprintf(out_, "\n", comment.c_str()); } -void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const ColorObject outline_color, const float stroke_width) const +void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const ColorObject outline_color, const double stroke_width) const { std::vector parts = polygons.splitIntoParts(); for (auto part_it = parts.rbegin(); part_it != parts.rend(); ++part_it) @@ -166,7 +166,7 @@ void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const Co fprintf(out_, "(fp.x), static_cast(fp.y)); } if (j == 0) @@ -177,7 +177,7 @@ void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const Co } } -void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const ColorObject outline_color, const float stroke_width) const +void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const ColorObject outline_color, const double stroke_width) const { fprintf( out_, @@ -187,15 +187,15 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col static_cast(stroke_width)); // The beginning of the polygon tag. for (const Point& point : polygon) // Add every point to the list of points. { - FPoint3 transformed = transformF(point); + Point3d transformed = transformF(point); fprintf(out_, "%f,%f ", static_cast(transformed.x), static_cast(transformed.y)); } fprintf(out_, "\" />\n"); // The end of the polygon tag. } -void SVG::writePoint(const Point& p, const bool write_coords, const float size, const ColorObject color) const +void SVG::writePoint(const Point& p, const bool write_coords, const double size, const ColorObject color) const { - FPoint3 pf = transformF(p); + Point3d pf = transformF(p); fprintf( out_, "\n", @@ -210,7 +210,7 @@ void SVG::writePoint(const Point& p, const bool write_coords, const float size, } } -void SVG::writePoints(ConstPolygonRef poly, const bool write_coords, const float size, const ColorObject color) const +void SVG::writePoints(ConstPolygonRef poly, const bool write_coords, const double size, const ColorObject color) const { for (const Point& p : poly) { @@ -218,7 +218,7 @@ void SVG::writePoints(ConstPolygonRef poly, const bool write_coords, const float } } -void SVG::writePoints(const Polygons& polygons, const bool write_coords, const float size, const ColorObject color) const +void SVG::writePoints(const Polygons& polygons, const bool write_coords, const double size, const ColorObject color) const { for (const ConstPolygonRef poly : polygons) { @@ -233,7 +233,7 @@ void SVG::writeLines(const std::vector& polyline, const ColorObject color return; } - FPoint3 transformed = transformF(polyline[0]); // Element 0 must exist due to the check above. + Point3d transformed = transformF(polyline[0]); // Element 0 must exist due to the check above. fprintf( out_, "& polyline, const ColorObject color fprintf(out_, "\" />\n"); // Write the end of the tag. } -void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, const float stroke_width) const +void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, const double stroke_width) const { - FPoint3 fa = transformF(a); - FPoint3 fb = transformF(b); + Point3d fa = transformF(a); + Point3d fb = transformF(b); fprintf( out_, "\n", @@ -263,17 +263,17 @@ void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, con static_cast(stroke_width)); } -void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, const float stroke_width, const float head_size) const +void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, const double stroke_width, const double head_size) const { - FPoint3 fa = transformF(a); - FPoint3 fb = transformF(b); - FPoint3 ab = fb - fa; - FPoint3 normal = FPoint3(ab.y, -ab.x, 0.0).normalized(); - FPoint3 direction = ab.normalized(); - - FPoint3 tip = fb + normal * head_size - direction * head_size; - FPoint3 b_base = fb + normal * stroke_width - direction * stroke_width * 2.41f; - FPoint3 a_base = fa + normal * stroke_width; + Point3d fa = transformF(a); + Point3d fb = transformF(b); + Point3d ab = fb - fa; + Point3d normal = Point3d(ab.y, -ab.x, 0.0).normalized(); + Point3d direction = ab.normalized(); + + Point3d tip = fb + normal * head_size - direction * head_size; + Point3d b_base = fb + normal * stroke_width - direction * stroke_width * 2.41f; + Point3d a_base = fa + normal * stroke_width; fprintf( out_, "", @@ -290,10 +290,10 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co static_cast(a_base.y)); } -void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const float stroke_width) const +void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const double stroke_width) const { - FPoint3 fa = transformF(from); - FPoint3 fb = transformF(to); + Point3d fa = transformF(from); + Point3d fb = transformF(to); fprintf( out_, "\n", @@ -309,8 +309,8 @@ void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const in void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) const { - FPoint3 fa = transformF(a); - FPoint3 fb = transformF(b); + Point3d fa = transformF(a); + Point3d fb = transformF(b); fprintf( out_, "\n", @@ -321,9 +321,9 @@ void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) con toString(color).c_str()); } -void SVG::writeText(const Point& p, const std::string& txt, const ColorObject color, const float font_size) const +void SVG::writeText(const Point& p, const std::string& txt, const ColorObject color, const double font_size) const { - FPoint3 pf = transformF(p); + Point3d pf = transformF(p); fprintf( out_, "%s\n", @@ -334,7 +334,7 @@ void SVG::writeText(const Point& p, const std::string& txt, const ColorObject co txt.c_str()); } -void SVG::writePolygons(const Polygons& polys, const ColorObject color, const float stroke_width) const +void SVG::writePolygons(const Polygons& polys, const ColorObject color, const double stroke_width) const { for (ConstPolygonRef poly : polys) { @@ -342,7 +342,7 @@ void SVG::writePolygons(const Polygons& polys, const ColorObject color, const fl } } -void SVG::writePolygon(ConstPolygonRef poly, const ColorObject color, const float stroke_width) const +void SVG::writePolygon(ConstPolygonRef poly, const ColorObject color, const double stroke_width) const { if (poly.size() == 0) { @@ -377,7 +377,7 @@ void SVG::writePolygon(ConstPolygonRef poly, const ColorObject color, const floa } -void SVG::writePolylines(const Polygons& polys, const ColorObject color, const float stroke_width) const +void SVG::writePolylines(const Polygons& polys, const ColorObject color, const double stroke_width) const { for (ConstPolygonRef poly : polys) { @@ -385,7 +385,7 @@ void SVG::writePolylines(const Polygons& polys, const ColorObject color, const f } } -void SVG::writePolyline(ConstPolygonRef poly, const ColorObject color, const float stroke_width) const +void SVG::writePolyline(ConstPolygonRef poly, const ColorObject color, const double stroke_width) const { if (poly.size() == 0) { @@ -416,7 +416,7 @@ void SVG::writePolyline(ConstPolygonRef poly, const ColorObject color, const flo } } -void SVG::writePaths(const std::vector& paths, const ColorObject color, const float width_factor) const +void SVG::writePaths(const std::vector& paths, const ColorObject color, const double width_factor) const { for (const VariableWidthLines& lines : paths) { @@ -424,7 +424,7 @@ void SVG::writePaths(const std::vector& paths, const ColorOb } } -void SVG::writeLines(const VariableWidthLines& lines, const ColorObject color, const float width_factor) const +void SVG::writeLines(const VariableWidthLines& lines, const ColorObject color, const double width_factor) const { for (const ExtrusionLine& line : lines) { @@ -432,9 +432,9 @@ void SVG::writeLines(const VariableWidthLines& lines, const ColorObject color, c } } -void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const float width_factor) const +void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const double width_factor) const { - constexpr float minimum_line_width = 10; // Always have some width, otherwise some lines become completely invisible. + constexpr double minimum_line_width = 10; // Always have some width, otherwise some lines become completely invisible. if (line.junctions.empty()) // Only draw lines that have at least 2 junctions, otherwise they are degenerate. { return; @@ -448,12 +448,12 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const fl const Point direction_vector = end_vertex.p - start_vertex.p; const Point direction_left = turn90CCW(direction_vector); const Point direction_right = -direction_left; // Opposite of left. - const FPoint3 start_left - = transformF(start_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); - const FPoint3 start_right - = transformF(start_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); - const FPoint3 end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); - const FPoint3 end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + const Point3d start_left + = transformF(start_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); + const Point3d start_right + = transformF(start_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); + const Point3d end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + const Point3d end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); fprintf( out_, @@ -472,9 +472,9 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const fl } } -void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const float stroke_width, const float font_size) const +void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const double stroke_width, const double font_size) const { - constexpr float dist_from_edge = 0.05f; // As fraction of image width or height. + constexpr double dist_from_edge = 0.05; // As fraction of image width or height. const coord_t min_x = aabb_.min.X - (aabb_.min.X % grid_size); const coord_t min_y = aabb_.min.Y - (aabb_.min.Y % grid_size); @@ -483,14 +483,14 @@ void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const writeLine(Point(x, aabb_.min.Y), Point(x, aabb_.max.Y), color, stroke_width); std::stringstream ss; ss << INT2MM(x); - writeText(Point(x, std::llrint(static_cast(aabb_.min.Y) + static_cast(aabb_.max.Y - aabb_.min.Y) * dist_from_edge)), ss.str(), color, font_size); + writeText(Point(x, std::llrint(static_cast(aabb_.min.Y) + static_cast(aabb_.max.Y - aabb_.min.Y) * dist_from_edge)), ss.str(), color, font_size); } for (coord_t y = min_y; y < aabb_.max.Y; y += grid_size) { writeLine(Point(aabb_.min.X, y), Point(aabb_.max.Y, y), color, stroke_width); std::stringstream ss; ss << INT2MM(y); - writeText(Point(std::llrint(static_cast(aabb_.min.X) + static_cast(aabb_.max.X - aabb_.min.X) * dist_from_edge), y), ss.str(), color, font_size); + writeText(Point(std::llrint(static_cast(aabb_.min.X) + static_cast(aabb_.max.X - aabb_.min.X) * dist_from_edge), y), ss.str(), color, font_size); } } diff --git a/src/utils/ToolpathVisualizer.cpp b/src/utils/ToolpathVisualizer.cpp index 4e470e34e5..1b5d294b89 100644 --- a/src/utils/ToolpathVisualizer.cpp +++ b/src/utils/ToolpathVisualizer.cpp @@ -10,20 +10,20 @@ namespace cura void ToolpathVisualizer::outline(const Polygons& input) { - svg.writeAreas(input, SVG::Color::GRAY, SVG::Color::NONE, 2); - svg.nextLayer(); + svg_.writeAreas(input, SVG::Color::GRAY, SVG::Color::NONE, 2); + svg_.nextLayer(); } void ToolpathVisualizer::toolpaths(const std::vector& all_segments, bool rounded_visualization) { - for (float w = .9; w > .25; w = 1.0 - (1.0 - w) * 1.2) + for (double w = .9; w > .25; w = 1.0 - (1.0 - w) * 1.2) { Polygons polys; for (size_t segment_idx = 0; segment_idx < all_segments.size(); segment_idx++) { ExtrusionSegment s = all_segments[segment_idx]; - s.from.w *= w / .9; - s.to.w *= w / .9; + s.from_.w *= w / .9; + s.to_.w *= w / .9; Polygons covered = s.toPolygons(false); polys.add(covered); } @@ -32,33 +32,33 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm polys = polys.execute(ClipperLib::pftNonZero); polys = PolygonUtils::connect(polys); for (PolygonRef connected : polys) - svg.writeAreas(connected, clr, SVG::Color::NONE); + svg_.writeAreas(connected, clr, SVG::Color::NONE); if (! rounded_visualization) break; } - svg.nextLayer(); + svg_.nextLayer(); } void ToolpathVisualizer::underfill(const Polygons& underfills) { - svg.writeAreas(underfills, SVG::ColorObject(0, 128, 255), SVG::Color::NONE); - svg.nextLayer(); + svg_.writeAreas(underfills, SVG::ColorObject(0, 128, 255), SVG::Color::NONE); + svg_.nextLayer(); } void ToolpathVisualizer::overfill(const Polygons& overfills, const Polygons& double_overfills) { - svg.writeAreas(overfills, SVG::ColorObject(255, 128, 0), SVG::Color::NONE); - svg.nextLayer(); - svg.writeAreas(double_overfills, SVG::ColorObject(255, 100, 0), SVG::Color::NONE); + svg_.writeAreas(overfills, SVG::ColorObject(255, 128, 0), SVG::Color::NONE); + svg_.nextLayer(); + svg_.writeAreas(double_overfills, SVG::ColorObject(255, 100, 0), SVG::Color::NONE); if (! double_overfills.empty()) { - svg.nextLayer(); + svg_.nextLayer(); } } void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size, coord_t max_dev, coord_t min_w, bool rounded_visualization) { - auto to_string = [](float v) + auto to_string = [](double v) { std::ostringstream ss; ss << v; @@ -71,17 +71,17 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size legend_btm.p += (legend_mid.p - legend_btm.p) / 4; legend_top.p += (legend_mid.p - legend_top.p) / 4; ExtrusionSegment legend_segment(legend_btm, legend_top, true, false); - svg.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline + svg_.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline std::vector all_segments_plus; all_segments_plus.emplace_back(legend_segment); // colored Point legend_text_offset(nozzle_size, 0); - svg.writeText(legend_top.p + legend_text_offset, to_string(INT2MM(legend_top.w))); - svg.writeText(legend_btm.p + legend_text_offset, to_string(INT2MM(legend_btm.w))); - svg.writeText(legend_mid.p + legend_text_offset, to_string(INT2MM(legend_mid.w))); - svg.writeLine(legend_top.p, legend_top.p + legend_text_offset); - svg.writeLine(legend_btm.p, legend_btm.p + legend_text_offset); - svg.writeLine(legend_mid.p, legend_mid.p + legend_text_offset); + svg_.writeText(legend_top.p + legend_text_offset, to_string(INT2MM(legend_top.w))); + svg_.writeText(legend_btm.p + legend_text_offset, to_string(INT2MM(legend_btm.w))); + svg_.writeText(legend_mid.p + legend_text_offset, to_string(INT2MM(legend_mid.w))); + svg_.writeLine(legend_top.p, legend_top.p + legend_text_offset); + svg_.writeLine(legend_btm.p, legend_btm.p + legend_text_offset); + svg_.writeLine(legend_mid.p, legend_mid.p + legend_text_offset); widths(all_segments_plus, nozzle_size, max_dev, min_w, rounded_visualization); } @@ -103,7 +103,7 @@ void ToolpathVisualizer::widths( // for (PolygonRef connected : connecteds) // svg.writeAreas(connected, SVG::Color::BLACK, SVG::Color::NONE); - for (float w = .9; w > .25; w = 1.0 - (1.0 - w) * 1.2) + for (double w = 0.9; w > 0.25; w = 1.0 - (1.0 - w) * 1.2) { int brightness = rounded_visualization ? 255 - 200 * (w - .25) : 192; for (size_t segment_idx = 0; segment_idx < all_segments.size(); segment_idx++) @@ -113,9 +113,9 @@ void ToolpathVisualizer::widths( // ss.to.w *= w; for (ExtrusionSegment s : ss.discretize(MM2INT(0.1))) { - coord_t avg_w = (s.from.w + s.to.w) / 2; + coord_t avg_w = (s.from_.w + s.to_.w) / 2; Point3 clr; - float color_ratio = std::min(1.0, double(std::abs(avg_w - nozzle_size)) / max_dev); + double color_ratio = std::min(1.0, double(std::abs(avg_w - nozzle_size)) / max_dev); color_ratio = color_ratio * .5 + .5 * sqrt(color_ratio); if (avg_w > nozzle_size) { @@ -133,23 +133,23 @@ void ToolpathVisualizer::widths( // clr.y = clr.y * (255 - 92 * clr.dot(green) / green.vSize() / 255) / 255; if (exaggerate_widths) { - s.from.w = std::max(min_w, min_w + (s.from.w - (nozzle_size - max_dev)) * 5 / 4); - s.to.w = std::max(min_w, min_w + (s.to.w - (nozzle_size - max_dev)) * 5 / 4); + s.from_.w = std::max(min_w, min_w + (s.from_.w - (nozzle_size - max_dev)) * 5 / 4); + s.to_.w = std::max(min_w, min_w + (s.to_.w - (nozzle_size - max_dev)) * 5 / 4); } // else // { // s.from.w *= 0.9; // s.to.w *= 0.9; // } - s.from.w *= w / .9; - s.to.w *= w / .9; + s.from_.w *= w / .9; + s.to_.w *= w / .9; Polygons covered = s.toPolygons(); - svg.writeAreas(covered, SVG::ColorObject(clr.x_, clr.y_, clr.z_), SVG::Color::NONE); + svg_.writeAreas(covered, SVG::ColorObject(clr.x_, clr.y_, clr.z_), SVG::Color::NONE); } } if (! rounded_visualization) break; - svg.nextLayer(); + svg_.nextLayer(); } } diff --git a/src/utils/VoronoiUtils.cpp b/src/utils/VoronoiUtils.cpp index 0a134906da..fa1d5dc6e5 100644 --- a/src/utils/VoronoiUtils.cpp +++ b/src/utils/VoronoiUtils.cpp @@ -3,13 +3,13 @@ #include "utils/VoronoiUtils.h" -#include "utils/linearAlg2D.h" -#include "utils/macros.h" +#include +#include #include -#include -#include +#include "utils/linearAlg2D.h" +#include "utils/macros.h" namespace cura { @@ -117,7 +117,7 @@ const VoronoiUtils::Segment& VoronoiUtils::getSourceSegment(const vd_t::cell_typ } -std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segment& segment, Point s, Point e, coord_t approximate_step_size, float transitioning_angle) +std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segment& segment, Point s, Point e, coord_t approximate_step_size, double transitioning_angle) { std::vector discretized; // x is distance of point projected on the segment ab @@ -147,7 +147,7 @@ std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segmen return discretized; } - const float marking_bound = atan(transitioning_angle * 0.5); + const double marking_bound = atan(transitioning_angle * 0.5); coord_t msx = -marking_bound * d; // projected marking_start coord_t mex = marking_bound * d; // projected marking_end const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; @@ -174,7 +174,7 @@ std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segmen RUN_ONCE(spdlog::warn("Failing to discretize parabola! Must add an apex or one of the endpoints.")); } - const coord_t step_count = static_cast(static_cast(std::abs(ex - sx)) / approximate_step_size + 0.5); + const coord_t step_count = static_cast(static_cast(std::abs(ex - sx)) / approximate_step_size + 0.5); discretized.emplace_back(s); for (coord_t step = 1; step < step_count; step++) diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index 0c006ba910..a00b0d4dfd 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -68,7 +68,7 @@ bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function::max(); + double percentage_along_line = std::numeric_limits::max(); for (int dim = 0; dim < 3; dim++) { if (diff[dim] == 0) @@ -76,7 +76,7 @@ bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function 0) * cell_size_[dim]; - float percentage_along_line_here = (crossing_boundary - start[dim]) / static_cast(diff[dim]); + double percentage_along_line_here = (crossing_boundary - start[dim]) / static_cast(diff[dim]); if (percentage_along_line_here < percentage_along_line) { percentage_along_line = percentage_along_line_here; diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 40974e8d6e..d289a606ad 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -485,7 +485,7 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) const Point& pt = rpath[point_idx]; const Point& next = rpath[(point_idx + 1) % pathlen]; - float angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] + double angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] if (angle >= std::numbers::pi) { angle -= std::numbers::pi; @@ -883,7 +883,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L const Point p0_2 = p0_2_it.p(); const Point v02_2 = p0_2 - p2_2; const int64_t v02_2_size = vSize(v02_2); - float progress + double progress = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); const Point new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; @@ -1046,7 +1046,7 @@ void ConstPolygonRef::smooth_corner_simple( const Point v12, const Point v02, const int64_t shortcut_length, - float cos_angle) + double cos_angle) { // 1----b---->2 // ^ / @@ -1155,7 +1155,7 @@ void ConstPolygonRef::smooth_outward(const AngleDegrees min_angle, int shortcut_ // 0 int shortcut_length2 = shortcut_length * shortcut_length; - float cos_min_angle = cos(min_angle / 180 * std::numbers::pi); + double cos_min_angle = cos(min_angle / 180 * std::numbers::pi); ListPolygon poly; ListPolyIt::convertPolygonToList(*this, poly); @@ -1184,7 +1184,7 @@ void ConstPolygonRef::smooth_outward(const AngleDegrees min_angle, int shortcut_ const Point v10 = p0 - p1; const Point v12 = p2 - p1; - float cos_angle = INT2MM(INT2MM(dot(v10, v12))) / vSizeMM(v10) / vSizeMM(v12); + double cos_angle = INT2MM(INT2MM(dot(v10, v12))) / vSizeMM(v10) / vSizeMM(v12); bool is_left_angle = LinearAlg2D::pointIsLeftOfLine(p1, p0, p2) > 0; if (cos_angle > cos_min_angle && is_left_angle) { diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index 574f9061b2..a3d6b3c315 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -1418,7 +1418,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg Polygon PolygonUtils::makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step) { Polygon circle; - for (float a = 0; a < 2 * std::numbers::pi; a += a_step) + for (double a = 0; a < 2 * std::numbers::pi; a += a_step) { circle.emplace_back(mid + Point(radius * cos(a), radius * sin(a))); } From eb461e4107d615ed9d6b687ff6644a3c9afaf41b Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 14:44:12 +0100 Subject: [PATCH 076/218] Geometry classes naming consistency --- include/MeshGroup.h | 4 +- include/mesh.h | 4 +- include/utils/{FMatrix4x3.h => Matrix4x3D.h} | 18 +++---- include/utils/{Point3d.h => Point3D.h} | 46 ++++++++-------- include/utils/{Point3f.h => Point3F.h} | 12 ++--- include/utils/SVG.h | 4 +- src/MeshGroup.cpp | 22 ++++---- .../ArcusCommunicationPrivate.cpp | 10 ++-- src/communication/CommandLine.cpp | 4 +- src/mesh.cpp | 16 +++--- src/settings/AdaptiveLayerHeights.cpp | 12 ++--- src/settings/Settings.cpp | 6 +-- src/utils/FMatrix4x3.cpp | 18 +++---- src/utils/SVG.cpp | 54 +++++++++---------- tests/integration/SlicePhaseTest.cpp | 6 +-- tests/settings/SettingsTest.cpp | 4 +- 16 files changed, 120 insertions(+), 120 deletions(-) rename include/utils/{FMatrix4x3.h => Matrix4x3D.h} (83%) rename include/utils/{Point3d.h => Point3D.h} (63%) rename include/utils/{Point3f.h => Point3F.h} (76%) diff --git a/include/MeshGroup.h b/include/MeshGroup.h index e9bfd1b782..71ba1f6a6f 100644 --- a/include/MeshGroup.h +++ b/include/MeshGroup.h @@ -10,7 +10,7 @@ namespace cura { -class FMatrix4x3; +class Matrix4x3D; /*! * A MeshGroup is a collection with 1 or more 3D meshes. @@ -50,7 +50,7 @@ class MeshGroup : public NoCopy * \param object_parent_settings (optional) The parent settings object of the new mesh. Defaults to \p meshgroup if none is given. * \return whether the file could be loaded */ -bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const FMatrix4x3& transformation, Settings& object_parent_settings); +bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const Matrix4x3D& transformation, Settings& object_parent_settings); } //namespace cura diff --git a/include/mesh.h b/include/mesh.h index dedb1ed311..e50b1303a7 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -6,7 +6,7 @@ #include "settings/Settings.h" #include "utils/AABB3D.h" -#include "utils/FMatrix4x3.h" +#include "utils/Matrix4x3D.h" namespace cura { @@ -105,7 +105,7 @@ class Mesh * Apply an affine transformation to this mesh's 3D data. * \param transformation The transformation to apply. */ - void transform(const FMatrix4x3& transformation); + void transform(const Matrix4x3D& transformation); /*! * Gets whether this is a printable mesh (not an infill mesh, slicing mesh, diff --git a/include/utils/FMatrix4x3.h b/include/utils/Matrix4x3D.h similarity index 83% rename from include/utils/FMatrix4x3.h rename to include/utils/Matrix4x3D.h index fff6838beb..b4b9aed3cc 100644 --- a/include/utils/FMatrix4x3.h +++ b/include/utils/Matrix4x3D.h @@ -1,15 +1,15 @@ // Copyright (c) 2020 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#ifndef FMATRIX4X3_H -#define FMATRIX4X3_H +#ifndef MATRIX4X3D_H +#define MATRIX4X3D_H #include "settings/types/Ratio.h" namespace cura { -class Point3d; +class Point3D; class Point3; /*! @@ -18,7 +18,7 @@ class Point3; * This matrix behaves as if it's a 4x4 transformation matrix, but the bottom * row is always identity. */ -class FMatrix4x3 +class Matrix4x3D { public: /*! @@ -28,8 +28,8 @@ class FMatrix4x3 * is reduced, all coordinates will go towards this origin. If the scale is * increased, all coordinates will go away from this origin. */ - static FMatrix4x3 scale(const Ratio scale, const Point3 origin); - static FMatrix4x3 scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin); + static Matrix4x3D scale(const Ratio scale, const Point3 origin); + static Matrix4x3D scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin); /*! * The matrix data, row-endian. @@ -41,7 +41,7 @@ class FMatrix4x3 /*! * Construct an identity matrix. */ - FMatrix4x3(); + Matrix4x3D(); /*! * Apply this transformation to a coordinate. @@ -51,7 +51,7 @@ class FMatrix4x3 * \param p The coordinate to transform. * \return A transformed coordinate. */ - Point3 apply(const Point3d& p) const; + Point3 apply(const Point3D& p) const; /*! * Apply this transformation to a coordinate. @@ -62,4 +62,4 @@ class FMatrix4x3 }; } // namespace cura -#endif // FMATRIX4X3_H \ No newline at end of file +#endif // MATRIX4X3D_H diff --git a/include/utils/Point3d.h b/include/utils/Point3D.h similarity index 63% rename from include/utils/Point3d.h rename to include/utils/Point3D.h index 713926cc40..5371b16f4d 100644 --- a/include/utils/Point3d.h +++ b/include/utils/Point3D.h @@ -17,61 +17,61 @@ namespace cura Double-precision 3D points are used for geometry computation. They represent millimeters in 3D space. */ -class Point3d +class Point3D { public: double x, y, z; - Point3d() + Point3D() { } - Point3d(double _x, double _y, double _z) + Point3D(double _x, double _y, double _z) : x(_x) , y(_y) , z(_z) { } - Point3d(const Point3& p) + Point3D(const Point3& p) : x(static_cast(p.x_) * .001) , y(static_cast(p.y_) * .001) , z(static_cast(p.z_) * .001) { } - Point3d operator+(const Point3d& p) const + Point3D operator+(const Point3D& p) const { - return Point3d(x + p.x, y + p.y, z + p.z); + return Point3D(x + p.x, y + p.y, z + p.z); } - Point3d operator-(const Point3d& p) const + Point3D operator-(const Point3D& p) const { - return Point3d(x - p.x, y - p.y, z - p.z); + return Point3D(x - p.x, y - p.y, z - p.z); } - Point3d operator*(const double f) const + Point3D operator*(const double f) const { - return Point3d(x * f, y * f, z * f); + return Point3D(x * f, y * f, z * f); } - Point3d operator/(const double f) const + Point3D operator/(const double f) const { - return Point3d(x / f, y / f, z / f); + return Point3D(x / f, y / f, z / f); } - Point3d& operator+=(const Point3d& p) + Point3D& operator+=(const Point3D& p) { x += p.x; y += p.y; z += p.z; return *this; } - Point3d& operator-=(const Point3d& p) + Point3D& operator-=(const Point3D& p) { x -= p.x; y -= p.y; z -= p.z; return *this; } - Point3d& operator*=(const double f) + Point3D& operator*=(const double f) { x *= f; y *= f; @@ -79,11 +79,11 @@ class Point3d return *this; } - bool operator==(Point3d& p) const + bool operator==(Point3D& p) const { return x == p.x && y == p.y && z == p.z; } - bool operator!=(Point3d& p) const + bool operator!=(Point3D& p) const { return x != p.x || y != p.y || z != p.z; } @@ -112,19 +112,19 @@ class Point3d return sqrt(vSize2()); } - inline Point3d normalized() const + inline Point3D normalized() const { return (*this) / vSize(); } - Point3d cross(const Point3d& p) const + Point3D cross(const Point3D& p) const { - return Point3d(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); + return Point3D(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); } - static Point3d cross(const Point3& a, const Point3& b) + static Point3D cross(const Point3& a, const Point3& b) { - return Point3d(a).cross(Point3d(b)); + return Point3D(a).cross(Point3D(b)); } Point3 toPoint3() @@ -133,7 +133,7 @@ class Point3d } }; -inline double operator*(Point3d lhs, const Point3d& rhs) +inline double operator*(Point3D lhs, const Point3D& rhs) { return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; } diff --git a/include/utils/Point3f.h b/include/utils/Point3F.h similarity index 76% rename from include/utils/Point3f.h rename to include/utils/Point3F.h index dd93519199..3d8a5b83d3 100644 --- a/include/utils/Point3f.h +++ b/include/utils/Point3F.h @@ -8,7 +8,7 @@ #include #include "IntPoint.h" -#include "Point3d.h" +#include "Point3D.h" namespace cura @@ -19,25 +19,25 @@ Floating point 3D points are used during model loading as 3D vectors. They represent millimeters in 3D space. This class should not be used for geometric computation. Use Point3d for this purpose. */ -class Point3f +class Point3F { public: float x, y, z; - Point3f() + Point3F() { } - Point3f(double _x, double _y, double _z) + Point3F(double _x, double _y, double _z) : x(_x) , y(_y) , z(_z) { } - Point3d toPoint3d() const + Point3D toPoint3d() const { - return Point3d(static_cast(x), static_cast(y), static_cast(z)); + return Point3D(static_cast(x), static_cast(y), static_cast(z)); } }; diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 400a02010a..8fda644264 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -14,7 +14,7 @@ namespace cura { -class Point3d; +class Point3D; class SVG : NoCopy { @@ -92,7 +92,7 @@ class SVG : NoCopy /*! * transform a point in real space to canvas space with more precision */ - Point3d transformF(const Point& p) const; + Point3D transformF(const Point& p) const; void writeComment(const std::string& comment) const; diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index 75a4dccf33..ff93cc39c4 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -13,8 +13,8 @@ #include #include "settings/types/Ratio.h" //For the shrinkage percentage and scale factor. -#include "utils/FMatrix4x3.h" //To transform the input meshes for shrinkage compensation and to align in command line mode. -#include "utils/Point3f.h" //To accept incoming meshes with floating point vertices. +#include "utils/Matrix4x3D.h" //To transform the input meshes for shrinkage compensation and to align in command line mode. +#include "utils/Point3F.h" //To accept incoming meshes with floating point vertices. #include "utils/gettime.h" #include "utils/section_type.h" #include "utils/string.h" @@ -129,18 +129,18 @@ void MeshGroup::scaleFromBottom(const Ratio factor_xy, const Ratio factor_z) const Point3 center = (max() + min()) / 2; const Point3 origin(center.x_, center.y_, 0); - const FMatrix4x3 transformation = FMatrix4x3::scale(factor_xy, factor_xy, factor_z, origin); + const Matrix4x3D transformation = Matrix4x3D::scale(factor_xy, factor_xy, factor_z, origin); for (Mesh& mesh : meshes) { mesh.transform(transformation); } } -bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) +bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const Matrix4x3D& matrix) { FILE* f = fopen(filename, "rt"); char buffer[1024]; - Point3f vertex; + Point3F vertex; int n = 0; Point3 v0(0, 0, 0), v1(0, 0, 0), v2(0, 0, 0); while (fgets_(buffer, sizeof(buffer), f)) @@ -169,7 +169,7 @@ bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const FMatrix4x3& matri return true; } -bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) +bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const Matrix4x3D& matrix) { FILE* f = fopen(filename, "rb"); @@ -212,9 +212,9 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matr } float* v = ((float*)buffer) + 3; - Point3 v0 = matrix.apply(Point3f(v[0], v[1], v[2]).toPoint3d()); - Point3 v1 = matrix.apply(Point3f(v[3], v[4], v[5]).toPoint3d()); - Point3 v2 = matrix.apply(Point3f(v[6], v[7], v[8]).toPoint3d()); + Point3 v0 = matrix.apply(Point3F(v[0], v[1], v[2]).toPoint3d()); + Point3 v1 = matrix.apply(Point3F(v[3], v[4], v[5]).toPoint3d()); + Point3 v2 = matrix.apply(Point3F(v[6], v[7], v[8]).toPoint3d()); mesh->addFace(v0, v1, v2); } fclose(f); @@ -222,7 +222,7 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const FMatrix4x3& matr return true; } -bool loadMeshSTL(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) +bool loadMeshSTL(Mesh* mesh, const char* filename, const Matrix4x3D& matrix) { FILE* f = fopen(filename, "rb"); if (f == nullptr) @@ -279,7 +279,7 @@ bool loadMeshSTL(Mesh* mesh, const char* filename, const FMatrix4x3& matrix) return loadMeshSTL_binary(mesh, filename, matrix); } -bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const FMatrix4x3& transformation, Settings& object_parent_settings) +bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const Matrix4x3D& transformation, Settings& object_parent_settings) { TimeKeeper load_timer; diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index 6de1c1d9fd..9d5f3118b2 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -11,8 +11,8 @@ #include "ExtruderTrain.h" #include "Slice.h" #include "settings/types/LayerIndex.h" -#include "utils/FMatrix4x3.h" //To convert vertices to integer-points. -#include "utils/Point3f.h" //To accept vertices (which are provided in floating point). +#include "utils/Matrix4x3D.h" //To convert vertices to integer-points. +#include "utils/Point3F.h" //To accept vertices (which are provided in floating point). namespace cura { @@ -99,10 +99,10 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& mesh_group.settings.add(setting.name(), setting.value()); } - FMatrix4x3 matrix; + Matrix4x3D matrix; for (const cura::proto::Object& object : mesh_group_message.objects()) { - const size_t bytes_per_face = sizeof(Point3f) * 3; // 3 vectors per face. + const size_t bytes_per_face = sizeof(Point3F) * 3; // 3 vectors per face. const size_t face_count = object.vertices().size() / bytes_per_face; if (face_count <= 0) @@ -125,7 +125,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& for (size_t face = 0; face < face_count; face++) { const std::string data = object.vertices().substr(face * bytes_per_face, bytes_per_face); - const Point3f* float_vertices = reinterpret_cast(data.data()); + const Point3F* float_vertices = reinterpret_cast(data.data()); Point3 verts[3]; verts[0] = matrix.apply(float_vertices[0].toPoint3d()); diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 9f2e7419e1..de365e2bf9 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -7,7 +7,7 @@ #include "ExtruderTrain.h" #include "FffProcessor.h" //To start a slice and get time estimates. #include "Slice.h" -#include "utils/FMatrix4x3.h" //For the mesh_rotation_matrix setting. +#include "utils/Matrix4x3D.h" //For the mesh_rotation_matrix setting. #include @@ -257,7 +257,7 @@ void CommandLine::sliceNext() } argument = arguments[argument_index]; - const FMatrix4x3 transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. + const Matrix4x3D transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. if (! loadMeshIntoMeshGroup(&slice.scene.mesh_groups[mesh_group_index], argument.c_str(), transformation, last_extruder->settings_)) { diff --git a/src/mesh.cpp b/src/mesh.cpp index 6bcc38f550..377e72c69a 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -5,7 +5,7 @@ #include -#include "utils/Point3d.h" +#include "utils/Point3D.h" namespace cura { @@ -97,7 +97,7 @@ void Mesh::expandXY(int64_t offset) } } -void Mesh::transform(const FMatrix4x3& transformation) +void Mesh::transform(const Matrix4x3D& transformation) { for (MeshVertex& v : vertices_) { @@ -203,12 +203,12 @@ int Mesh::getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVe has_disconnected_faces = true; } - Point3d vn = vertices_[idx1].p_ - vertices_[idx0].p_; - Point3d n = vn / vn.vSize(); // the normal of the plane in which all normals of faces connected to the edge lie => the normalized normal - Point3d v0 = vertices_[idx1].p_ - vertices_[idx0].p_; + Point3D vn = vertices_[idx1].p_ - vertices_[idx0].p_; + Point3D n = vn / vn.vSize(); // the normal of the plane in which all normals of faces connected to the edge lie => the normalized normal + Point3D v0 = vertices_[idx1].p_ - vertices_[idx0].p_; // the normals below are abnormally directed! : these normals all point counterclockwise (viewed from idx1 to idx0) from the face, irrespective of the direction of the face. - Point3d n0 = Point3d(vertices_[notFaceVertexIdx].p_ - vertices_[idx0].p_).cross(v0); + Point3D n0 = Point3D(vertices_[notFaceVertexIdx].p_ - vertices_[idx0].p_).cross(v0); if (n0.vSize() <= 0) { @@ -227,8 +227,8 @@ int Mesh::getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVe break; } - Point3d v1 = vertices_[faces_[candidateFace].vertex_index_[candidateVertex]].p_ - vertices_[idx0].p_; - Point3d n1 = v0.cross(v1); + Point3D v1 = vertices_[faces_[candidateFace].vertex_index_[candidateVertex]].p_ - vertices_[idx0].p_; + Point3D n1 = v0.cross(v1); double dot = n0 * n1; double det = n * n0.cross(n1); diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 89b34bc64c..82da909588 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -11,7 +11,7 @@ #include "Slice.h" #include "settings/EnumSettings.h" #include "settings/types/Angle.h" -#include "utils/Point3d.h" +#include "utils/Point3D.h" namespace cura { @@ -201,9 +201,9 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() const MeshVertex& v1 = mesh.vertices_[face.vertex_index_[1]]; const MeshVertex& v2 = mesh.vertices_[face.vertex_index_[2]]; - const Point3d p0 = v0.p_; - const Point3d p1 = v1.p_; - const Point3d p2 = v2.p_; + const Point3D p0 = v0.p_; + const Point3D p1 = v1.p_; + const Point3D p2 = v2.p_; double min_z = p0.z; min_z = std::min(min_z, p1.z); @@ -213,8 +213,8 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() max_z = std::max(max_z, p2.z); // calculate the angle of this triangle in the z direction - const Point3d n = (p1 - p0).cross(p2 - p0); - const Point3d normal = n.normalized(); + const Point3D n = (p1 - p0).cross(p2 - p0); + const Point3D normal = n.normalized(); AngleRadians z_angle = std::acos(std::abs(normal.z)); // prevent flat surfaces from influencing the algorithm diff --git a/src/settings/Settings.cpp b/src/settings/Settings.cpp index c5e5bb0286..9ec36c2446 100644 --- a/src/settings/Settings.cpp +++ b/src/settings/Settings.cpp @@ -26,7 +26,7 @@ #include "settings/types/Ratio.h" //For ratio settings and percentages. #include "settings/types/Temperature.h" //For temperature settings. #include "settings/types/Velocity.h" //For velocity settings. -#include "utils/FMatrix4x3.h" +#include "utils/Matrix4x3D.h" #include "utils/polygon.h" #include "utils/string.h" //For Escaped. #include "utils/types/string_switch.h" //For string switch. @@ -319,11 +319,11 @@ Polygons Settings::get(const std::string& key) const } template<> -FMatrix4x3 Settings::get(const std::string& key) const +Matrix4x3D Settings::get(const std::string& key) const { const std::string value_string = get(key); - FMatrix4x3 result; + Matrix4x3D result; if (value_string.empty()) { return result; // Standard matrix ([[1,0,0], [0,1,0], [0,0,1]]). diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/FMatrix4x3.cpp index 0aa49bc434..74a337fa31 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/FMatrix4x3.cpp @@ -1,23 +1,23 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/FMatrix4x3.h" //The definitions we're implementing. +#include "utils/Matrix4x3D.h" //The definitions we're implementing. #include "settings/types/Ratio.h" //Scale factor. #include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. -#include "utils/Point3d.h" //This matrix gets applied to floating point coordinates. +#include "utils/Point3D.h" //This matrix gets applied to floating point coordinates. namespace cura { -FMatrix4x3 FMatrix4x3::scale(const Ratio scale, const Point3 origin) +Matrix4x3D Matrix4x3D::scale(const Ratio scale, const Point3 origin) { - return FMatrix4x3::scale(scale, scale, scale, origin); + return Matrix4x3D::scale(scale, scale, scale, origin); } -FMatrix4x3 FMatrix4x3::scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin) +Matrix4x3D Matrix4x3D::scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin) { - FMatrix4x3 result; + Matrix4x3D result; result.m[0][0] = scale_x; // X scale. result.m[1][1] = scale_y; // Y scale. result.m[2][2] = scale_z; // Z scale. @@ -30,7 +30,7 @@ FMatrix4x3 FMatrix4x3::scale(const Ratio scale_x, const Ratio scale_y, const Rat return result; } -FMatrix4x3::FMatrix4x3() +Matrix4x3D::Matrix4x3D() { m[0][0] = 1.0; m[1][0] = 0.0; @@ -46,7 +46,7 @@ FMatrix4x3::FMatrix4x3() m[3][2] = 0.0; } -Point3 FMatrix4x3::apply(const Point3d& p) const +Point3 Matrix4x3D::apply(const Point3D& p) const { return Point3( MM2INT(p.x * m[0][0] + p.y * m[1][0] + p.z * m[2][0] + m[3][0]), @@ -54,7 +54,7 @@ Point3 FMatrix4x3::apply(const Point3d& p) const MM2INT(p.x * m[0][2] + p.y * m[1][2] + p.z * m[2][2] + m[3][2])); } -Point3 FMatrix4x3::apply(const Point3& p) const +Point3 Matrix4x3D::apply(const Point3& p) const { return Point3( m[0][0] * p.x_ + m[1][0] * p.y_ + m[2][0] * p.z_ + m[3][0], diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index e495a566aa..b01a250810 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -8,7 +8,7 @@ #include #include "utils/ExtrusionLine.h" -#include "utils/Point3d.h" +#include "utils/Point3D.h" #include "utils/polygon.h" namespace cura @@ -145,9 +145,9 @@ Point SVG::transform(const Point& p) const return Point(std::llrint(static_cast(p.X - aabb_.min.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min.Y) * scale_)); } -Point3d SVG::transformF(const Point& p) const +Point3D SVG::transformF(const Point& p) const { - return Point3d(static_cast(p.X - aabb_.min.X) * scale_, static_cast(p.Y - aabb_.min.Y) * scale_, 0.0); + return Point3D(static_cast(p.X - aabb_.min.X) * scale_, static_cast(p.Y - aabb_.min.Y) * scale_, 0.0); } void SVG::writeComment(const std::string& comment) const @@ -166,7 +166,7 @@ void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const Co fprintf(out_, "(fp.x), static_cast(fp.y)); } if (j == 0) @@ -187,7 +187,7 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col static_cast(stroke_width)); // The beginning of the polygon tag. for (const Point& point : polygon) // Add every point to the list of points. { - Point3d transformed = transformF(point); + Point3D transformed = transformF(point); fprintf(out_, "%f,%f ", static_cast(transformed.x), static_cast(transformed.y)); } fprintf(out_, "\" />\n"); // The end of the polygon tag. @@ -195,7 +195,7 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col void SVG::writePoint(const Point& p, const bool write_coords, const double size, const ColorObject color) const { - Point3d pf = transformF(p); + Point3D pf = transformF(p); fprintf( out_, "\n", @@ -233,7 +233,7 @@ void SVG::writeLines(const std::vector& polyline, const ColorObject color return; } - Point3d transformed = transformF(polyline[0]); // Element 0 must exist due to the check above. + Point3D transformed = transformF(polyline[0]); // Element 0 must exist due to the check above. fprintf( out_, "& polyline, const ColorObject color void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, const double stroke_width) const { - Point3d fa = transformF(a); - Point3d fb = transformF(b); + Point3D fa = transformF(a); + Point3D fb = transformF(b); fprintf( out_, "\n", @@ -265,15 +265,15 @@ void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, con void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, const double stroke_width, const double head_size) const { - Point3d fa = transformF(a); - Point3d fb = transformF(b); - Point3d ab = fb - fa; - Point3d normal = Point3d(ab.y, -ab.x, 0.0).normalized(); - Point3d direction = ab.normalized(); - - Point3d tip = fb + normal * head_size - direction * head_size; - Point3d b_base = fb + normal * stroke_width - direction * stroke_width * 2.41f; - Point3d a_base = fa + normal * stroke_width; + Point3D fa = transformF(a); + Point3D fb = transformF(b); + Point3D ab = fb - fa; + Point3D normal = Point3D(ab.y, -ab.x, 0.0).normalized(); + Point3D direction = ab.normalized(); + + Point3D tip = fb + normal * head_size - direction * head_size; + Point3D b_base = fb + normal * stroke_width - direction * stroke_width * 2.41f; + Point3D a_base = fa + normal * stroke_width; fprintf( out_, "", @@ -292,8 +292,8 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const double stroke_width) const { - Point3d fa = transformF(from); - Point3d fb = transformF(to); + Point3D fa = transformF(from); + Point3D fb = transformF(to); fprintf( out_, "\n", @@ -309,8 +309,8 @@ void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const in void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) const { - Point3d fa = transformF(a); - Point3d fb = transformF(b); + Point3D fa = transformF(a); + Point3D fb = transformF(b); fprintf( out_, "\n", @@ -323,7 +323,7 @@ void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) con void SVG::writeText(const Point& p, const std::string& txt, const ColorObject color, const double font_size) const { - Point3d pf = transformF(p); + Point3D pf = transformF(p); fprintf( out_, "%s\n", @@ -448,12 +448,12 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const do const Point direction_vector = end_vertex.p - start_vertex.p; const Point direction_left = turn90CCW(direction_vector); const Point direction_right = -direction_left; // Opposite of left. - const Point3d start_left + const Point3D start_left = transformF(start_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); - const Point3d start_right + const Point3D start_right = transformF(start_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); - const Point3d end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); - const Point3d end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + const Point3D end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + const Point3D end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); fprintf( out_, diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 42508af961..c357169170 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -9,7 +9,7 @@ #include "Slice.h" // To set up a scene to slice. #include "slicer.h" // Starts the slicing phase that we want to test. #include "utils/Coord_t.h" -#include "utils/FMatrix4x3.h" // To load STL files. +#include "utils/Matrix4x3D.h" // To load STL files. #include "utils/polygon.h" // Creating polygons to compare to sliced layers. #include "utils/polygonUtils.h" // Comparing similarity of polygons. @@ -69,7 +69,7 @@ TEST_F(SlicePhaseTest, Cube) Scene& scene = Application::getInstance().current_slice_->scene; MeshGroup& mesh_group = scene.mesh_groups.back(); - const FMatrix4x3 transformation; + const Matrix4x3D transformation; // Path to cube.stl is relative to CMAKE_CURRENT_SOURCE_DIR/tests. ASSERT_TRUE(loadMeshIntoMeshGroup(&mesh_group, std::filesystem::path(__FILE__).parent_path().append("resources/cube.stl").string().c_str(), transformation, scene.settings)); EXPECT_EQ(mesh_group.meshes.size(), 1); @@ -129,7 +129,7 @@ TEST_F(SlicePhaseTest, Cylinder1000) Scene& scene = Application::getInstance().current_slice_->scene; MeshGroup& mesh_group = scene.mesh_groups.back(); - const FMatrix4x3 transformation; + const Matrix4x3D transformation; // Path to cylinder1000.stl is relative to CMAKE_CURRENT_SOURCE_DIR/tests. ASSERT_TRUE( loadMeshIntoMeshGroup(&mesh_group, std::filesystem::path(__FILE__).parent_path().append("resources/cylinder1000.stl").string().c_str(), transformation, scene.settings)); diff --git a/tests/settings/SettingsTest.cpp b/tests/settings/SettingsTest.cpp index ecc9884a00..8486ce2292 100644 --- a/tests/settings/SettingsTest.cpp +++ b/tests/settings/SettingsTest.cpp @@ -15,7 +15,7 @@ #include "settings/types/Temperature.h" #include "settings/types/Velocity.h" #include "utils/Coord_t.h" -#include "utils/FMatrix4x3.h" //Testing matrix transformation settings. +#include "utils/Matrix4x3D.h" //Testing matrix transformation settings. #include //For std::numbers::pi. #include @@ -184,7 +184,7 @@ TEST_F(SettingsTest, AddSettingFlowTempGraph) TEST_F(SettingsTest, AddSettingFMatrix3x3) { settings.add("test_setting", "[[1.0, 2.0, 3.3],[ 2 , 3.0 , 1.0],[3.0 ,1.0,2.0 ]]"); // Try various spacing and radixes. - auto float_matrix = settings.get("test_setting"); + auto float_matrix = settings.get("test_setting"); EXPECT_DOUBLE_EQ(1.0, float_matrix.m[0][0]); EXPECT_DOUBLE_EQ(2.0, float_matrix.m[1][0]); From db39edeeb820632e94800f493a1238811517134e Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 14:47:37 +0100 Subject: [PATCH 077/218] Geometry classes variables naming consistency --- include/utils/Point3D.h | 64 ++++++++++----------- include/utils/Point3F.h | 12 ++-- src/MeshGroup.cpp | 2 +- src/settings/AdaptiveLayerHeights.cpp | 14 ++--- src/utils/FMatrix4x3.cpp | 6 +- src/utils/SVG.cpp | 82 +++++++++++++-------------- 6 files changed, 90 insertions(+), 90 deletions(-) diff --git a/include/utils/Point3D.h b/include/utils/Point3D.h index 5371b16f4d..c44f6e79e6 100644 --- a/include/utils/Point3D.h +++ b/include/utils/Point3D.h @@ -20,81 +20,81 @@ They represent millimeters in 3D space. class Point3D { public: - double x, y, z; + double x_, y_, z_; Point3D() { } - Point3D(double _x, double _y, double _z) - : x(_x) - , y(_y) - , z(_z) + Point3D(double x, double y, double z) + : x_(x) + , y_(y) + , z_(z) { } Point3D(const Point3& p) - : x(static_cast(p.x_) * .001) - , y(static_cast(p.y_) * .001) - , z(static_cast(p.z_) * .001) + : x_(static_cast(p.x_) * .001) + , y_(static_cast(p.y_) * .001) + , z_(static_cast(p.z_) * .001) { } Point3D operator+(const Point3D& p) const { - return Point3D(x + p.x, y + p.y, z + p.z); + return Point3D(x_ + p.x_, y_ + p.y_, z_ + p.z_); } Point3D operator-(const Point3D& p) const { - return Point3D(x - p.x, y - p.y, z - p.z); + return Point3D(x_ - p.x_, y_ - p.y_, z_ - p.z_); } Point3D operator*(const double f) const { - return Point3D(x * f, y * f, z * f); + return Point3D(x_ * f, y_ * f, z_ * f); } Point3D operator/(const double f) const { - return Point3D(x / f, y / f, z / f); + return Point3D(x_ / f, y_ / f, z_ / f); } Point3D& operator+=(const Point3D& p) { - x += p.x; - y += p.y; - z += p.z; + x_ += p.x_; + y_ += p.y_; + z_ += p.z_; return *this; } Point3D& operator-=(const Point3D& p) { - x -= p.x; - y -= p.y; - z -= p.z; + x_ -= p.x_; + y_ -= p.y_; + z_ -= p.z_; return *this; } Point3D& operator*=(const double f) { - x *= f; - y *= f; - z *= f; + x_ *= f; + y_ *= f; + z_ *= f; return *this; } bool operator==(Point3D& p) const { - return x == p.x && y == p.y && z == p.z; + return x_ == p.x_ && y_ == p.y_ && z_ == p.z_; } bool operator!=(Point3D& p) const { - return x != p.x || y != p.y || z != p.z; + return x_ != p.x_ || y_ != p.y_ || z_ != p.z_; } double max() const { - if (x > y && x > z) - return x; - if (y > z) - return y; - return z; + if (x_ > y_ && x_ > z_) + return x_; + if (y_ > z_) + return y_; + return z_; } bool testLength(double len) const @@ -104,7 +104,7 @@ class Point3D double vSize2() const { - return x * x + y * y + z * z; + return x_ * x_ + y_ * y_ + z_ * z_; } double vSize() const @@ -119,7 +119,7 @@ class Point3D Point3D cross(const Point3D& p) const { - return Point3D(y * p.z - z * p.y, z * p.x - x * p.z, x * p.y - y * p.x); + return Point3D(y_ * p.z_ - z_ * p.y_, z_ * p.x_ - x_ * p.z_, x_ * p.y_ - y_ * p.x_); } static Point3D cross(const Point3& a, const Point3& b) @@ -129,13 +129,13 @@ class Point3D Point3 toPoint3() { - return Point3(MM2INT(x), MM2INT(y), MM2INT(z)); + return Point3(MM2INT(x_), MM2INT(y_), MM2INT(z_)); } }; inline double operator*(Point3D lhs, const Point3D& rhs) { - return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z; + return lhs.x_ * rhs.x_ + lhs.y_ * rhs.y_ + lhs.z_ * rhs.z_; } } // namespace cura diff --git a/include/utils/Point3F.h b/include/utils/Point3F.h index 3d8a5b83d3..0772521240 100644 --- a/include/utils/Point3F.h +++ b/include/utils/Point3F.h @@ -22,22 +22,22 @@ This class should not be used for geometric computation. Use Point3d for this pu class Point3F { public: - float x, y, z; + float x_, y_, z_; Point3F() { } - Point3F(double _x, double _y, double _z) - : x(_x) - , y(_y) - , z(_z) + Point3F(float x, float y, float z) + : x_(x) + , y_(y) + , z_(z) { } Point3D toPoint3d() const { - return Point3D(static_cast(x), static_cast(y), static_cast(z)); + return Point3D(static_cast(x_), static_cast(y_), static_cast(z_)); } }; diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index ff93cc39c4..4940471de3 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -145,7 +145,7 @@ bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const Matrix4x3D& matri Point3 v0(0, 0, 0), v1(0, 0, 0), v2(0, 0, 0); while (fgets_(buffer, sizeof(buffer), f)) { - if (sscanf(buffer, " vertex %f %f %f", &vertex.x, &vertex.y, &vertex.z) == 3) + if (sscanf(buffer, " vertex %f %f %f", &vertex.x_, &vertex.y_, &vertex.z_) == 3) { n++; switch (n) diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 82da909588..66fae223bf 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -205,17 +205,17 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() const Point3D p1 = v1.p_; const Point3D p2 = v2.p_; - double min_z = p0.z; - min_z = std::min(min_z, p1.z); - min_z = std::min(min_z, p2.z); - double max_z = p0.z; - max_z = std::max(max_z, p1.z); - max_z = std::max(max_z, p2.z); + double min_z = p0.z_; + min_z = std::min(min_z, p1.z_); + min_z = std::min(min_z, p2.z_); + double max_z = p0.z_; + max_z = std::max(max_z, p1.z_); + max_z = std::max(max_z, p2.z_); // calculate the angle of this triangle in the z direction const Point3D n = (p1 - p0).cross(p2 - p0); const Point3D normal = n.normalized(); - AngleRadians z_angle = std::acos(std::abs(normal.z)); + AngleRadians z_angle = std::acos(std::abs(normal.z_)); // prevent flat surfaces from influencing the algorithm if (z_angle == 0) diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/FMatrix4x3.cpp index 74a337fa31..bdf5adb257 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/FMatrix4x3.cpp @@ -49,9 +49,9 @@ Matrix4x3D::Matrix4x3D() Point3 Matrix4x3D::apply(const Point3D& p) const { return Point3( - MM2INT(p.x * m[0][0] + p.y * m[1][0] + p.z * m[2][0] + m[3][0]), - MM2INT(p.x * m[0][1] + p.y * m[1][1] + p.z * m[2][1] + m[3][1]), - MM2INT(p.x * m[0][2] + p.y * m[1][2] + p.z * m[2][2] + m[3][2])); + MM2INT(p.x_ * m[0][0] + p.y_ * m[1][0] + p.z_ * m[2][0] + m[3][0]), + MM2INT(p.x_ * m[0][1] + p.y_ * m[1][1] + p.z_ * m[2][1] + m[3][1]), + MM2INT(p.x_ * m[0][2] + p.y_ * m[1][2] + p.z_ * m[2][2] + m[3][2])); } Point3 Matrix4x3D::apply(const Point3& p) const diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index b01a250810..317bd32fba 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -167,7 +167,7 @@ void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const Co for (Point& p : part[j]) { Point3D fp = transformF(p); - fprintf(out_, "%f,%f ", static_cast(fp.x), static_cast(fp.y)); + fprintf(out_, "%f,%f ", static_cast(fp.x_), static_cast(fp.y_)); } if (j == 0) fprintf(out_, "\" style=\"fill:%s;stroke:%s;stroke-width:%f\" />\n", toString(color).c_str(), toString(outline_color).c_str(), static_cast(stroke_width)); @@ -188,7 +188,7 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col for (const Point& point : polygon) // Add every point to the list of points. { Point3D transformed = transformF(point); - fprintf(out_, "%f,%f ", static_cast(transformed.x), static_cast(transformed.y)); + fprintf(out_, "%f,%f ", static_cast(transformed.x_), static_cast(transformed.y_)); } fprintf(out_, "\" />\n"); // The end of the polygon tag. } @@ -199,14 +199,14 @@ void SVG::writePoint(const Point& p, const bool write_coords, const double size, fprintf( out_, "\n", - static_cast(pf.x), - static_cast(pf.y), + static_cast(pf.x_), + static_cast(pf.y_), static_cast(size), toString(color).c_str()); if (write_coords) { - fprintf(out_, "%lli,%lli\n", static_cast(pf.x), static_cast(pf.y), p.X, p.Y); + fprintf(out_, "%lli,%lli\n", static_cast(pf.x_), static_cast(pf.y_), p.X, p.Y); } } @@ -238,12 +238,12 @@ void SVG::writeLines(const std::vector& polyline, const ColorObject color out_, "(transformed.x), - static_cast(transformed.y)); // Write the start of the path tag and the first endpoint. + static_cast(transformed.x_), + static_cast(transformed.y_)); // Write the start of the path tag and the first endpoint. for (size_t point = 1; point < polyline.size(); point++) { transformed = transformF(polyline[point]); - fprintf(out_, "L%f,%f", static_cast(transformed.x), static_cast(transformed.y)); // Write a line segment to the next point. + fprintf(out_, "L%f,%f", static_cast(transformed.x_), static_cast(transformed.y_)); // Write a line segment to the next point. } fprintf(out_, "\" />\n"); // Write the end of the tag. } @@ -255,10 +255,10 @@ void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, con fprintf( out_, "\n", - static_cast(fa.x), - static_cast(fa.y), - static_cast(fb.x), - static_cast(fb.y), + static_cast(fa.x_), + static_cast(fa.y_), + static_cast(fb.x_), + static_cast(fb.y_), toString(color).c_str(), static_cast(stroke_width)); } @@ -268,7 +268,7 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co Point3D fa = transformF(a); Point3D fb = transformF(b); Point3D ab = fb - fa; - Point3D normal = Point3D(ab.y, -ab.x, 0.0).normalized(); + Point3D normal = Point3D(ab.y_, -ab.x_, 0.0).normalized(); Point3D direction = ab.normalized(); Point3D tip = fb + normal * head_size - direction * head_size; @@ -278,16 +278,16 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co out_, "", toString(color).c_str(), - static_cast(fa.x), - static_cast(fa.y), - static_cast(fb.x), - static_cast(fb.y), - static_cast(tip.x), - static_cast(tip.y), - static_cast(b_base.x), - static_cast(b_base.y), - static_cast(a_base.x), - static_cast(a_base.y)); + static_cast(fa.x_), + static_cast(fa.y_), + static_cast(fb.x_), + static_cast(fb.y_), + static_cast(tip.x_), + static_cast(tip.y_), + static_cast(b_base.x_), + static_cast(b_base.y_), + static_cast(a_base.x_), + static_cast(a_base.y_)); } void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const double stroke_width) const @@ -297,10 +297,10 @@ void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const in fprintf( out_, "\n", - static_cast(fa.x), - static_cast(fa.y), - static_cast(fb.x), - static_cast(fb.y), + static_cast(fa.x_), + static_cast(fa.y_), + static_cast(fb.x_), + static_cast(fb.y_), r, g, b, @@ -314,10 +314,10 @@ void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) con fprintf( out_, "\n", - static_cast(fa.x), - static_cast(fa.y), - static_cast(fb.x), - static_cast(fb.y), + static_cast(fa.x_), + static_cast(fa.y_), + static_cast(fb.x_), + static_cast(fb.y_), toString(color).c_str()); } @@ -327,8 +327,8 @@ void SVG::writeText(const Point& p, const std::string& txt, const ColorObject co fprintf( out_, "%s\n", - static_cast(pf.x), - static_cast(pf.y), + static_cast(pf.x_), + static_cast(pf.y_), static_cast(font_size), toString(color).c_str(), txt.c_str()); @@ -459,14 +459,14 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const do out_, "\n", toString(color).c_str(), - static_cast(start_left.x), - static_cast(start_left.y), - static_cast(start_right.x), - static_cast(start_right.y), - static_cast(end_right.x), - static_cast(end_right.y), - static_cast(end_left.x), - static_cast(end_left.y)); + static_cast(start_left.x_), + static_cast(start_left.y_), + static_cast(start_right.x_), + static_cast(start_right.y_), + static_cast(end_right.x_), + static_cast(end_right.y_), + static_cast(end_left.x_), + static_cast(end_left.y_)); start_vertex = end_vertex; // For the next line segment. } From 4763b3b13b0d566ca0643b71a837a2753ebbdf36 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 14:52:15 +0100 Subject: [PATCH 078/218] Fixed variable shadowing warnings --- include/SkeletalTrapezoidation.h | 182 ++++++++++++++++----------- src/SkeletalTrapezoidation.cpp | 204 +++++++++++++++---------------- 2 files changed, 210 insertions(+), 176 deletions(-) diff --git a/include/SkeletalTrapezoidation.h b/include/SkeletalTrapezoidation.h index 87b5155099..b277ffd0ce 100644 --- a/include/SkeletalTrapezoidation.h +++ b/include/SkeletalTrapezoidation.h @@ -4,39 +4,39 @@ #ifndef SKELETAL_TRAPEZOIDATION_H #define SKELETAL_TRAPEZOIDATION_H -#include - #include // smart pointers #include #include // pair -#include "utils/HalfEdgeGraph.h" -#include "utils/polygon.h" -#include "utils/PolygonsSegmentIndex.h" +#include + +#include "BeadingStrategy/BeadingStrategy.h" +#include "SkeletalTrapezoidationEdge.h" +#include "SkeletalTrapezoidationGraph.h" +#include "SkeletalTrapezoidationJoint.h" +#include "settings/types/Ratio.h" #include "utils/ExtrusionJunction.h" #include "utils/ExtrusionLine.h" +#include "utils/HalfEdgeGraph.h" +#include "utils/PolygonsSegmentIndex.h" +#include "utils/polygon.h" #include "utils/section_type.h" -#include "settings/types/Ratio.h" -#include "SkeletalTrapezoidationEdge.h" -#include "SkeletalTrapezoidationJoint.h" -#include "BeadingStrategy/BeadingStrategy.h" -#include "SkeletalTrapezoidationGraph.h" namespace cura { /*! * Main class of the dynamic beading strategies. - * + * * The input polygon region is decomposed into trapezoids and represented as a half-edge data-structure. - * + * * We determine which edges are 'central' accordinding to the transitioning_angle of the beading strategy, * and determine the bead count for these central regions and apply them outward when generating toolpaths. [oversimplified] - * + * * The method can be visually explained as generating the 3D union of cones surface on the outline polygons, - * and changing the heights along central regions of that surface so that they are flat. + * and changing the heights along central regions of that surface so that they are flat. * For more info, please consult the paper "A framework for adaptive width control of dense contour-parallel toolpaths in fused -deposition modeling" by Kuipers et al. +deposition modeling" by Kuipers et al. * This visual explanation aid explains the use of "upward", "lower" etc, * i.e. the radial distance and/or the bead count are used as heights of this visualization, there is no coordinate called 'Z'. * @@ -59,15 +59,15 @@ class SkeletalTrapezoidation template using ptr_vector_t = std::vector>; - AngleRadians transitioning_angle; //!< How pointy a region should be before we apply the method. Equals 180* - limit_bisector_angle - coord_t discretization_step_size; //!< approximate size of segments when parabolic VD edges get discretized (and vertex-vertex edges) - coord_t transition_filter_dist; //!< Filter transition mids (i.e. anchors) closer together than this - coord_t allowed_filter_deviation; //!< The allowed line width deviation induced by filtering - coord_t beading_propagation_transition_dist; //!< When there are different beadings propagated from below and from above, use this transitioning distance - static constexpr coord_t central_filter_dist = 20; //!< Filter areas marked as 'central' smaller than this - static constexpr coord_t snap_dist = 20; //!< Generic arithmatic inaccuracy. Only used to determine whether a transition really needs to insert an extra edge. - int layer_idx { }; - SectionType section_type; + AngleRadians transitioning_angle_; //!< How pointy a region should be before we apply the method. Equals 180* - limit_bisector_angle + coord_t discretization_step_size_; //!< approximate size of segments when parabolic VD edges get discretized (and vertex-vertex edges) + coord_t transition_filter_dist_; //!< Filter transition mids (i.e. anchors) closer together than this + coord_t allowed_filter_deviation_; //!< The allowed line width deviation induced by filtering + coord_t beading_propagation_transition_dist_; //!< When there are different beadings propagated from below and from above, use this transitioning distance + static constexpr coord_t central_filter_dist_ = 20; //!< Filter areas marked as 'central' smaller than this + static constexpr coord_t snap_dist_ = 20; //!< Generic arithmatic inaccuracy. Only used to determine whether a transition really needs to insert an extra edge. + int layer_idx_{}; + SectionType section_type_; /*! * The strategy to use to fill a certain shape with lines. @@ -77,11 +77,21 @@ class SkeletalTrapezoidation * how the joints are handled where we transition to different numbers of * lines. */ - const BeadingStrategy& beading_strategy; + const BeadingStrategy& beading_strategy_; public: using Segment = PolygonsSegmentIndex; + /*! + * A skeletal graph through the polygons that we need to fill with beads. + * + * The skeletal graph represents the medial axes through each part of the + * polygons, and the lines from these medial axes towards each vertex of the + * polygons. The graph can be used to see what the width is of a polygon in + * each place and where the width transitions. + */ + graph_t graph_; + /*! * Construct a new trapezoidation problem to solve. * \param polys The shapes to fill with walls. @@ -99,26 +109,16 @@ class SkeletalTrapezoidation * beadings propagated from below and from above, use this transitioning * distance. */ - SkeletalTrapezoidation(const Polygons& polys, - const BeadingStrategy& beading_strategy, - AngleRadians transitioning_angle, - coord_t discretization_step_size, - coord_t transition_filter_dist, - coord_t allowed_filter_deviation, - coord_t beading_propagation_transition_dist, - int layer_idx, - SectionType section_type - ); - - /*! - * A skeletal graph through the polygons that we need to fill with beads. - * - * The skeletal graph represents the medial axes through each part of the - * polygons, and the lines from these medial axes towards each vertex of the - * polygons. The graph can be used to see what the width is of a polygon in - * each place and where the width transitions. - */ - graph_t graph; + SkeletalTrapezoidation( + const Polygons& polys, + const BeadingStrategy& beading_strategy, + AngleRadians transitioning_angle, + coord_t discretization_step_size, + coord_t transition_filter_dist, + coord_t allowed_filter_deviation, + coord_t beading_propagation_transition_dist, + int layer_idx, + SectionType section_type); /*! * Generate the paths that the printer must extrude, to print the outlines @@ -141,35 +141,37 @@ class SkeletalTrapezoidation TransitionMidRef(edge_t* edge, std::list::iterator transition_it) : edge_(edge) , transition_it_(transition_it) - {} + { + } }; + /*! + * mapping each voronoi VD edge to the corresponding halfedge HE edge + * In case the result segment is discretized, we map the VD edge to the *last* HE edge + */ + std::unordered_map vd_edge_to_he_edge_; + std::unordered_map vd_node_to_he_node_; + /*! * Compute the skeletal trapezoidation decomposition of the input shape. - * + * * Compute the Voronoi Diagram (VD) and transfer all inside edges into our half-edge (HE) datastructure. - * + * * The algorithm is currently a bit overcomplicated, because the discretization of parabolic edges is performed at the same time as all edges are being transfered, * which means that there is no one-to-one mapping from VD edges to HE edges. * Instead we map from a VD edge to the last HE edge. * This could be cimplified by recording the edges which should be discretized and discretizing the mafterwards. - * + * * Another complication arises because the VD uses floating logic, which can result in zero-length segments after rounding to integers. * We therefore collapse edges and their whole cells afterwards. */ void constructFromPolygons(const Polygons& polys); - /*! - * mapping each voronoi VD edge to the corresponding halfedge HE edge - * In case the result segment is discretized, we map the VD edge to the *last* HE edge - */ - std::unordered_map vd_edge_to_he_edge; - std::unordered_map vd_node_to_he_node; node_t& makeNode(vd_t::vertex_type& vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. /*! * (Eventual) returned 'polylines per index' result (from generateToolpaths): - * + * * Binned by inset_idx. */ std::vector* p_generated_toolpaths; @@ -178,7 +180,15 @@ class SkeletalTrapezoidation * Transfer an edge from the VD to the HE and perform discretization of parabolic edges (and vertex-vertex edges) * \p prev_edge serves as input and output. May be null as input. */ - void transferEdge(Point from, Point to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, Point& start_source_point, Point& end_source_point, const std::vector& points, const std::vector& segments); + void transferEdge( + Point from, + Point to, + vd_t::edge_type& vd_edge, + edge_t*& prev_edge, + Point& start_source_point, + Point& end_source_point, + const std::vector& points, + const std::vector& segments); /*! * Discretize a Voronoi edge that represents the medial axis of a vertex- @@ -231,7 +241,14 @@ class SkeletalTrapezoidation * /return Whether the cell is inside of the polygon. If it's outside of the * polygon we should skip processing it altogether. */ - bool computePointCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& points, const std::vector& segments); + bool computePointCellRange( + vd_t::cell_type& cell, + Point& start_source_point, + Point& end_source_point, + vd_t::edge_type*& starting_vd_edge, + vd_t::edge_type*& ending_vd_edge, + const std::vector& points, + const std::vector& segments); /*! * Compute the range of line segments that surround a cell of the skeletal @@ -257,7 +274,14 @@ class SkeletalTrapezoidation * /return Whether the cell is inside of the polygon. If it's outside of the * polygon we should skip processing it altogether. */ - void computeSegmentCellRange(vd_t::cell_type& cell, Point& start_source_point, Point& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, const std::vector& points, const std::vector& segments); + void computeSegmentCellRange( + vd_t::cell_type& cell, + Point& start_source_point, + Point& end_source_point, + vd_t::edge_type*& starting_vd_edge, + vd_t::edge_type*& ending_vd_edge, + const std::vector& points, + const std::vector& segments); /*! * For VD cells associated with an input polygon vertex, we need to separate the node at the end and start of the cell into two @@ -273,7 +297,7 @@ class SkeletalTrapezoidation /*! * Filter out small central areas. - * + * * Only used to get rid of small edges which get marked as central because * of rounding errors because the region is so small. */ @@ -289,9 +313,9 @@ class SkeletalTrapezoidation /*! * Unmark the outermost edges directly connected to the outline, as not * being central. - * + * * Only used to emulate some related literature. - * + * * The paper shows that this function is bad for the stability of the framework. */ void filterOuterCentral(); @@ -429,7 +453,15 @@ class SkeletalTrapezoidation * \return Whether the given edge is going downward (i.e. towards a thinner * region of the polygon). */ - bool generateTransitionEnd(edge_t& edge, coord_t start_pos, coord_t end_pos, coord_t transition_half_length, Ratio start_rest, Ratio end_rest, coord_t transition_lower_bead_count, ptr_vector_t>& edge_transition_ends); + bool generateTransitionEnd( + edge_t& edge, + coord_t start_pos, + coord_t end_pos, + coord_t transition_half_length, + Ratio start_rest, + Ratio end_rest, + coord_t transition_lower_bead_count, + ptr_vector_t>& edge_transition_ends); /*! * Determines whether an edge is going downwards or upwards in the graph. @@ -488,28 +520,30 @@ class SkeletalTrapezoidation /*! * Propagate beading information from nodes that are closer to the edge * (low radius R) to nodes that are farther from the edge (high R). - * + * * only propagate from nodes with beading info upward to nodes without beading info - * + * * Edges are sorted by their radius, so that we can do a depth-first walk * without employing a recursive algorithm. - * + * * In upward propagated beadings we store the distance traveled, so that we can merge these beadings with the downward propagated beadings in \ref propagateBeadingsDownward(.) - * - * \param upward_quad_mids all upward halfedges of the inner skeletal edges (not directly connected to the outline) sorted on their highest [distance_to_boundary]. Higher dist first. + * + * \param upward_quad_mids all upward halfedges of the inner skeletal edges (not directly connected to the outline) sorted on their highest [distance_to_boundary]. Higher dist + * first. */ void propagateBeadingsUpward(std::vector& upward_quad_mids, ptr_vector_t& node_beadings); /*! * propagate beading info from higher R nodes to lower R nodes - * + * * merge with upward propagated beadings if they are encountered - * + * * don't transfer to nodes which lie on the outline polygon - * + * * edges are sorted so that we can do a depth-first walk without employing a recursive algorithm - * - * \param upward_quad_mids all upward halfedges of the inner skeletal edges (not directly connected to the outline) sorted on their highest [distance_to_boundary]. Higher dist first. + * + * \param upward_quad_mids all upward halfedges of the inner skeletal edges (not directly connected to the outline) sorted on their highest [distance_to_boundary]. Higher dist + * first. */ void propagateBeadingsDownward(std::vector& upward_quad_mids, ptr_vector_t& node_beadings); @@ -580,7 +614,7 @@ class SkeletalTrapezoidation /*! * Add a new toolpath segment, defined between two extrusion-juntions. - * + * * \param from The junction from which to add a segment. * \param to The junction to which to add a segment. * \param is_odd Whether this segment is an odd gap filler along the middle of the skeleton. diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 346e1eb46f..e56844549a 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -27,12 +27,12 @@ namespace cura SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_type& vd_node, Point p) { - auto he_node_it = vd_node_to_he_node.find(&vd_node); - if (he_node_it == vd_node_to_he_node.end()) + auto he_node_it = vd_node_to_he_node_.find(&vd_node); + if (he_node_it == vd_node_to_he_node_.end()) { - graph.nodes.emplace_front(SkeletalTrapezoidationJoint(), p); - node_t& node = graph.nodes.front(); - vd_node_to_he_node.emplace(&vd_node, &node); + graph_.nodes.emplace_front(SkeletalTrapezoidationJoint(), p); + node_t& node = graph_.nodes.front(); + vd_node_to_he_node_.emplace(&vd_node, &node); return node; } else @@ -51,13 +51,13 @@ void SkeletalTrapezoidation::transferEdge( const std::vector& points, const std::vector& segments) { - auto he_edge_it = vd_edge_to_he_edge.find(vd_edge.twin()); - if (he_edge_it != vd_edge_to_he_edge.end()) + auto he_edge_it = vd_edge_to_he_edge_.find(vd_edge.twin()); + if (he_edge_it != vd_edge_to_he_edge_.end()) { // Twin segment(s) have already been made edge_t* source_twin = he_edge_it->second; assert(source_twin); - auto end_node_it = vd_node_to_he_node.find(vd_edge.vertex1()); - assert(end_node_it != vd_node_to_he_node.end()); + auto end_node_it = vd_node_to_he_node_.find(vd_edge.vertex1()); + assert(end_node_it != vd_node_to_he_node_.end()); node_t* end_node = end_node_it->second; for (edge_t* twin = source_twin;; twin = twin->prev->twin->prev) { @@ -67,8 +67,8 @@ void SkeletalTrapezoidation::transferEdge( continue; // Prevent reading unallocated memory. } assert(twin); - graph.edges.emplace_front(SkeletalTrapezoidationEdge()); - edge_t* edge = &graph.edges.front(); + graph_.edges.emplace_front(SkeletalTrapezoidationEdge()); + edge_t* edge = &graph_.edges.front(); edge->from = twin->to; edge->to = twin->from; edge->twin = twin; @@ -99,7 +99,7 @@ void SkeletalTrapezoidation::transferEdge( assert(twin->prev->twin->prev); // Prev segment along parabola constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); } assert(prev_edge); } @@ -126,16 +126,16 @@ void SkeletalTrapezoidation::transferEdge( node_t* v1; if (p1_idx < discretized.size() - 1) { - graph.nodes.emplace_front(SkeletalTrapezoidationJoint(), p1); - v1 = &graph.nodes.front(); + graph_.nodes.emplace_front(SkeletalTrapezoidationJoint(), p1); + v1 = &graph_.nodes.front(); } else { v1 = &makeNode(*vd_edge.vertex1(), to); } - graph.edges.emplace_front(SkeletalTrapezoidationEdge()); - edge_t* edge = &graph.edges.front(); + graph_.edges.emplace_front(SkeletalTrapezoidationEdge()); + edge_t* edge = &graph_.edges.front(); edge->from = v0; edge->to = v1; edge->from->incident_edge = edge; @@ -153,11 +153,11 @@ void SkeletalTrapezoidation::transferEdge( if (p1_idx < discretized.size() - 1) { // Rib for last segment gets introduced outside this function! constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); } } assert(prev_edge); - vd_edge_to_he_edge.emplace(&vd_edge, prev_edge); + vd_edge_to_he_edge_.emplace(&vd_edge, prev_edge); } } @@ -182,7 +182,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ { Point p = VoronoiUtils::getSourcePoint(*(point_left ? left_cell : right_cell), points, segments); const Segment& s = VoronoiUtils::getSourceSegment(*(point_left ? right_cell : left_cell), points, segments); - return VoronoiUtils::discretizeParabola(p, s, start, end, discretization_step_size, transitioning_angle); + return VoronoiUtils::discretizeParabola(p, s, start, end, discretization_step_size_, transitioning_angle_); } else // This is a straight edge between two points. { @@ -207,7 +207,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ coord_t end_x = projected_x(end); // Part of the edge will be bound to the markings on the endpoints of the edge. Calculate how far that is. - double bound = 0.5 / tan((std::numbers::pi - transitioning_angle) * 0.5); + double bound = 0.5 / tan((std::numbers::pi - transitioning_angle_) * 0.5); coord_t marking_start_x = -d * bound; coord_t marking_end_x = d * bound; Point marking_start = middle + x_axis_dir * marking_start_x / x_axis_length; @@ -234,7 +234,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ // The edge's length may not be divisible by the step size, so calculate an integer step count and evenly distribute the vertices among those. Point ab = b - a; coord_t ab_size = vSize(ab); - coord_t step_count = (ab_size + discretization_step_size / 2) / discretization_step_size; + coord_t step_count = (ab_size + discretization_step_size_ / 2) / discretization_step_size_; if (step_count % 2 == 1) { step_count++; // enforce a discretization point being added in the middle @@ -382,14 +382,14 @@ SkeletalTrapezoidation::SkeletalTrapezoidation( coord_t beading_propagation_transition_dist, int layer_idx, SectionType section_type) - : transitioning_angle(transitioning_angle) - , discretization_step_size(discretization_step_size) - , transition_filter_dist(transition_filter_dist) - , allowed_filter_deviation(allowed_filter_deviation) - , beading_propagation_transition_dist(beading_propagation_transition_dist) - , beading_strategy(beading_strategy) - , layer_idx(layer_idx) - , section_type(section_type) + : transitioning_angle_(transitioning_angle) + , discretization_step_size_(discretization_step_size) + , transition_filter_dist_(transition_filter_dist) + , allowed_filter_deviation_(allowed_filter_deviation) + , beading_propagation_transition_dist_(beading_propagation_transition_dist) + , beading_strategy_(beading_strategy) + , layer_idx_(layer_idx) + , section_type_(section_type) { scripta::log("skeletal_trapezoidation_0", polys, section_type, layer_idx); constructFromPolygons(polys); @@ -397,8 +397,8 @@ SkeletalTrapezoidation::SkeletalTrapezoidation( void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) { - vd_edge_to_he_edge.clear(); - vd_node_to_he_node.clear(); + vd_edge_to_he_edge_.clear(); + vd_node_to_he_node_.clear(); std::vector points; // Remains empty @@ -457,11 +457,11 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) end_source_point, points, segments); - node_t* starting_node = vd_node_to_he_node[starting_vonoroi_edge->vertex0()]; + node_t* starting_node = vd_node_to_he_node_[starting_vonoroi_edge->vertex0()]; starting_node->data.distance_to_boundary_ = 0; constexpr bool is_next_to_start_or_end = true; - graph.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); for (vd_t::edge_type* vd_edge = starting_vonoroi_edge->next(); vd_edge != ending_vonoroi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); @@ -469,7 +469,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) Point v2 = VoronoiUtils::p(vd_edge->vertex1()); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, points, segments); - graph.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); + graph_.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); } transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, points, segments); @@ -478,11 +478,11 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) separatePointyQuadEndNodes(); - graph.collapseSmallEdges(); + graph_.collapseSmallEdges(); // Set [incident_edge] the the first possible edge that way we can iterate over all reachable edges from node.incident_edge, // without needing to iterate backward - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (! edge.prev) { @@ -494,7 +494,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) void SkeletalTrapezoidation::separatePointyQuadEndNodes() { std::unordered_set visited_nodes; - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (edge.prev) { @@ -507,8 +507,8 @@ void SkeletalTrapezoidation::separatePointyQuadEndNodes() } else { // Needs to be duplicated - graph.nodes.emplace_back(*quad_start->from); - node_t* new_node = &graph.nodes.back(); + graph_.nodes.emplace_back(*quad_start->from); + node_t* new_node = &graph_.nodes.back(); new_node->incident_edge = quad_start; quad_start->from = new_node; quad_start->twin->to = new_node; @@ -532,7 +532,7 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& updateIsCentral(); - filterCentral(central_filter_dist); + filterCentral(central_filter_dist_); if (filter_outermost_central_edges) { @@ -542,9 +542,9 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& updateBeadCount(); scripta::log( "st_graph_0", - graph, - section_type, - layer_idx, + graph_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_central", [](const auto& edge) { @@ -574,9 +574,9 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& filterNoncentralRegions(); scripta::log( "st_graph_1", - graph, - section_type, - layer_idx, + graph_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_central", [](const auto& edge) { @@ -606,9 +606,9 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& generateTransitioningRibs(); scripta::log( "st_graph_2", - graph, - section_type, - layer_idx, + graph_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_central", [](const auto& edge) { @@ -638,9 +638,9 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& generateExtraRibs(); scripta::log( "st_graph_3", - graph, - section_type, - layer_idx, + graph_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_central", [](const auto& edge) { @@ -670,9 +670,9 @@ void SkeletalTrapezoidation::generateToolpaths(std::vector& generateSegments(); scripta::log( "st_graph_4", - graph, - section_type, - layer_idx, + graph_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_central", [](const auto& edge) { @@ -715,10 +715,10 @@ void SkeletalTrapezoidation::updateIsCentral() // `^'-._ corner is obtuse. // sin a = dR / dD - coord_t outer_edge_filter_length = beading_strategy.getTransitionThickness(0) / 2; + coord_t outer_edge_filter_length = beading_strategy_.getTransitionThickness(0) / 2; - double cap = sin(beading_strategy.getTransitioningAngle() * 0.5); // = cos(bisector_angle / 2) - for (edge_t& edge : graph.edges) + double cap = sin(beading_strategy_.getTransitioningAngle() * 0.5); // = cos(bisector_angle / 2) + for (edge_t& edge : graph_.edges) { assert(edge.twin); if (! edge.twin) @@ -752,7 +752,7 @@ void SkeletalTrapezoidation::updateIsCentral() void SkeletalTrapezoidation::filterCentral(coord_t max_length) { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (isEndOfCentral(edge) && edge.to->isLocalMaximum() && ! edge.to->isLocalMaximum()) { @@ -789,7 +789,7 @@ bool SkeletalTrapezoidation::filterCentral(edge_t* starting_edge, coord_t travel void SkeletalTrapezoidation::filterOuterCentral() { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (! edge.prev) { @@ -801,16 +801,16 @@ void SkeletalTrapezoidation::filterOuterCentral() void SkeletalTrapezoidation::updateBeadCount() { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (edge.data.isCentral()) { - edge.to->data.bead_count_ = beading_strategy.getOptimalBeadCount(edge.to->data.distance_to_boundary_ * 2); + edge.to->data.bead_count_ = beading_strategy_.getOptimalBeadCount(edge.to->data.distance_to_boundary_ * 2); } } // Fix bead count at locally maximal R, also for central regions!! See TODO s in generateTransitionEnd(.) - for (node_t& node : graph.nodes) + for (node_t& node : graph_.nodes) { if (node.isLocalMaximum()) { @@ -824,7 +824,7 @@ void SkeletalTrapezoidation::updateBeadCount() node.data.distance_to_boundary_ = std::min(node.data.distance_to_boundary_, edge->to->data.distance_to_boundary_ + vSize(edge->from->p - edge->to->p)); } while (edge = edge->twin->next, edge != node.incident_edge); } - coord_t bead_count = beading_strategy.getOptimalBeadCount(node.data.distance_to_boundary_ * 2); + coord_t bead_count = beading_strategy_.getOptimalBeadCount(node.data.distance_to_boundary_ * 2); node.data.bead_count_ = bead_count; } } @@ -832,7 +832,7 @@ void SkeletalTrapezoidation::updateBeadCount() void SkeletalTrapezoidation::filterNoncentralRegions() { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (! isEndOfCentral(edge)) { @@ -886,7 +886,7 @@ bool SkeletalTrapezoidation::filterNoncentralRegions(edge_t* to_edge, coord_t be { next_edge->data.setIsCentral(true); next_edge->twin->data.setIsCentral(true); - next_edge->to->data.bead_count_ = beading_strategy.getOptimalBeadCount(next_edge->to->data.distance_to_boundary_ * 2); + next_edge->to->data.bead_count_ = beading_strategy_.getOptimalBeadCount(next_edge->to->data.distance_to_boundary_ * 2); next_edge->to->data.transition_ratio_ = 0; } return dissolve; // Dissolving only depend on the one edge going upward. There cannot be multiple edges going upward. @@ -899,7 +899,7 @@ void SkeletalTrapezoidation::generateTransitioningRibs() ptr_vector_t> edge_transitions; generateTransitionMids(edge_transitions); - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { // Check if there is a transition in between nodes with different bead counts if (edge.data.isCentral() && edge.from->data.bead_count_ != edge.to->data.bead_count_) { @@ -919,7 +919,7 @@ void SkeletalTrapezoidation::generateTransitioningRibs() void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_t>& edge_transitions) { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { assert(edge.data.centralIsSet()); if (! edge.data.isCentral()) @@ -950,7 +950,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_t beading_strategy.getOptimalBeadCount(start_R * 2) || end_bead_count > beading_strategy.getOptimalBeadCount(end_R * 2)) + if (start_bead_count > beading_strategy_.getOptimalBeadCount(start_R * 2) || end_bead_count > beading_strategy_.getOptimalBeadCount(end_R * 2)) { // Wasn't the case earlier in this function because of already introduced transitions spdlog::error("transitioning segment overlap!"); } @@ -962,7 +962,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tp - edge.to->p); for (int transition_lower_bead_count = start_bead_count; transition_lower_bead_count < end_bead_count; transition_lower_bead_count++) { - coord_t mid_R = beading_strategy.getTransitionThickness(transition_lower_bead_count) / 2; + coord_t mid_R = beading_strategy_.getTransitionThickness(transition_lower_bead_count) / 2; if (mid_R > end_R) { spdlog::error("transition on segment lies outside of segment!"); @@ -997,7 +997,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_t to_be_dissolved_back - = dissolveNearbyTransitions(&edge, transitions.back(), ab_size - transitions.back().pos_, transition_filter_dist, going_up); + = dissolveNearbyTransitions(&edge, transitions.back(), ab_size - transitions.back().pos_, transition_filter_dist_, going_up); bool should_dissolve_back = ! to_be_dissolved_back.empty(); for (TransitionMidRef& ref : to_be_dissolved_back) { @@ -1026,7 +1026,7 @@ void SkeletalTrapezoidation::filterTransitionMids() { coord_t trans_bead_count = transitions.back().lower_bead_count_; - coord_t upper_transition_half_length = (1.0 - beading_strategy.getTransitionAnchorPos(trans_bead_count)) * beading_strategy.getTransitioningLength(trans_bead_count); + coord_t upper_transition_half_length = (1.0 - beading_strategy_.getTransitionAnchorPos(trans_bead_count)) * beading_strategy_.getTransitioningLength(trans_bead_count); should_dissolve_back |= filterEndOfCentralTransition(&edge, ab_size - transitions.back().pos_, upper_transition_half_length, trans_bead_count); } @@ -1040,7 +1040,7 @@ void SkeletalTrapezoidation::filterTransitionMids() } going_up = false; - std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin, transitions.front(), transitions.front().pos_, transition_filter_dist, going_up); + std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin, transitions.front(), transitions.front().pos_, transition_filter_dist_, going_up); bool should_dissolve_front = ! to_be_dissolved_front.empty(); for (TransitionMidRef& ref : to_be_dissolved_front) { @@ -1050,7 +1050,7 @@ void SkeletalTrapezoidation::filterTransitionMids() { coord_t trans_bead_count = transitions.front().lower_bead_count_; - coord_t lower_transition_half_length = beading_strategy.getTransitionAnchorPos(trans_bead_count) * beading_strategy.getTransitioningLength(trans_bead_count); + coord_t lower_transition_half_length = beading_strategy_.getTransitionAnchorPos(trans_bead_count) * beading_strategy_.getTransitioningLength(trans_bead_count); should_dissolve_front |= filterEndOfCentralTransition(edge.twin, transitions.front().pos_, lower_transition_half_length, trans_bead_count + 1); } @@ -1096,7 +1096,7 @@ std::list const coord_t line_width_deviation = dissolve_result_is_odd ? width_deviation : width_deviation / 2; // assume the deviation will be split over either 1 or 2 lines, i.e. assume wall_distribution_count = 1 - if (line_width_deviation > allowed_filter_deviation) + if (line_width_deviation > allowed_filter_deviation_) { should_dissolve = false; } @@ -1110,7 +1110,7 @@ std::list coord_t pos = is_aligned ? transition_it->pos_ : ab_size - transition_it->pos_; if (traveled_dist + pos < max_dist && transition_it->lower_bead_count_ == origin_transition.lower_bead_count_) // Only dissolve local optima { - if (traveled_dist + pos < beading_strategy.getTransitioningLength(transition_it->lower_bead_count_)) + if (traveled_dist + pos < beading_strategy_.getTransitioningLength(transition_it->lower_bead_count_)) { // Consecutive transitions both in/decreasing in bead count should never be closer together than the transition distance assert(going_up != is_aligned || transition_it->lower_bead_count_ == 0); @@ -1194,7 +1194,7 @@ bool SkeletalTrapezoidation::filterEndOfCentralTransition(edge_t* edge_to_start, void SkeletalTrapezoidation::generateAllTransitionEnds(ptr_vector_t>& edge_transition_ends) { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (! edge.data.hasTransitions()) { @@ -1219,8 +1219,8 @@ void SkeletalTrapezoidation::generateTransitionEnds(edge_t& edge, coord_t mid_po const Point ab = b - a; const coord_t ab_size = vSize(ab); - const coord_t transition_length = beading_strategy.getTransitioningLength(lower_bead_count); - const double transition_mid_position = beading_strategy.getTransitionAnchorPos(lower_bead_count); + const coord_t transition_length = beading_strategy_.getTransitioningLength(lower_bead_count); + const double transition_mid_position = beading_strategy_.getTransitionAnchorPos(lower_bead_count); constexpr double inner_bead_width_ratio_after_transition = 1.0; constexpr Ratio start_rest{ 0.0 }; @@ -1419,7 +1419,7 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist void SkeletalTrapezoidation::applyTransitions(ptr_vector_t>& edge_transition_ends) { - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (edge.twin->data.hasTransitionEnds()) { @@ -1439,7 +1439,7 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_t ab_size - snap_dist) && close_node->data.bead_count_ == new_node_bead_count) + if ((end_pos < snap_dist_ || end_pos > ab_size - snap_dist_) && close_node->data.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); close_node->data.transition_ratio_ = 0; @@ -1478,7 +1478,7 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_tdata.isCentral()); assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); - last_edge_replacing_input = graph.insertNode(last_edge_replacing_input, mid, new_node_bead_count); + last_edge_replacing_input = graph_.insertNode(last_edge_replacing_input, mid, new_node_bead_count); assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); assert(last_edge_replacing_input->data.isCentral()); } @@ -1510,15 +1510,15 @@ void SkeletalTrapezoidation::generateExtraRibs() { // NOTE: At one point there was a comment here and some odd code that seemed to suggest some edge(s?) at the end should perhaps not be looped over. // The code was equivalent to a full loop over all the edges though, unless there was one edge or less, in which case it would produce undefined behaviour. - for (auto& edge : graph.edges) + for (auto& edge : graph_.edges) { - if (! edge.data.isCentral() || shorterThen(edge.to->p - edge.from->p, discretization_step_size) + if (! edge.data.isCentral() || shorterThen(edge.to->p - edge.from->p, discretization_step_size_) || edge.from->data.distance_to_boundary_ >= edge.to->data.distance_to_boundary_) { continue; } - std::vector rib_thicknesses = beading_strategy.getNonlinearThicknesses(edge.from->data.bead_count_); + std::vector rib_thicknesses = beading_strategy_.getNonlinearThicknesses(edge.from->data.bead_count_); if (rib_thicknesses.empty()) { @@ -1552,7 +1552,7 @@ void SkeletalTrapezoidation::generateExtraRibs() assert(end_pos > 0); assert(end_pos < ab_size); node_t* close_node = (end_pos < ab_size / 2) ? from : to; - if ((end_pos < snap_dist || end_pos > ab_size - snap_dist) && close_node->data.bead_count_ == new_node_bead_count) + if ((end_pos < snap_dist_ || end_pos > ab_size - snap_dist_) && close_node->data.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); close_node->data.transition_ratio_ = 0; @@ -1562,7 +1562,7 @@ void SkeletalTrapezoidation::generateExtraRibs() assert(last_edge_replacing_input->data.isCentral()); assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); - last_edge_replacing_input = graph.insertNode(last_edge_replacing_input, mid, new_node_bead_count); + last_edge_replacing_input = graph_.insertNode(last_edge_replacing_input, mid, new_node_bead_count); assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); assert(last_edge_replacing_input->data.isCentral()); } @@ -1580,7 +1580,7 @@ void SkeletalTrapezoidation::generateExtraRibs() void SkeletalTrapezoidation::generateSegments() { std::vector upward_quad_mids; - for (edge_t& edge : graph.edges) + for (edge_t& edge : graph_.edges) { if (edge.prev && edge.next && edge.isUpward()) { @@ -1620,7 +1620,7 @@ void SkeletalTrapezoidation::generateSegments() ptr_vector_t node_beadings; { // Store beading - for (node_t& node : graph.nodes) + for (node_t& node : graph_.nodes) { if (node.data.bead_count_ <= 0) { @@ -1628,7 +1628,7 @@ void SkeletalTrapezoidation::generateSegments() } if (node.data.transition_ratio_ == 0) { - node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_))); + node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_))); node.data.setBeading(node_beadings.back()); assert(node_beadings.back()->beading_.total_thickness == node.data.distance_to_boundary_ * 2); if (node_beadings.back()->beading_.total_thickness != node.data.distance_to_boundary_ * 2) @@ -1638,8 +1638,8 @@ void SkeletalTrapezoidation::generateSegments() } else { - Beading low_count_beading = beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_); - Beading high_count_beading = beading_strategy.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_ + 1); + Beading low_count_beading = beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_); + Beading high_count_beading = beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_ + 1); Beading merged = interpolate(low_count_beading, 1.0 - node.data.transition_ratio_, high_count_beading); node_beadings.emplace_back(new BeadingPropagation(merged)); node.data.setBeading(node_beadings.back()); @@ -1708,7 +1708,7 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar } assert( (upward_edge->from->data.distance_to_boundary_ != upward_edge->to->data.distance_to_boundary_ - || shorterThen(upward_edge->to->p - upward_edge->from->p, central_filter_dist)) + || shorterThen(upward_edge->to->p - upward_edge->from->p, central_filter_dist_)) && "zero difference R edges should always be central"); coord_t length = vSize(upward_edge->to->p - upward_edge->from->p); BeadingPropagation upper_beading = lower_beading; @@ -1768,7 +1768,7 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr { BeadingPropagation& bottom_beading = *edge_to_peak->from->data.getBeading(); coord_t total_dist = top_beading.dist_from_top_source_ + length + bottom_beading.dist_to_bottom_source_; - Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist); + Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist_); ratio_of_top = std::max(0.0_r, ratio_of_top); if (ratio_of_top >= 1.0) { @@ -1857,7 +1857,7 @@ SkeletalTrapezoidation::Beading SkeletalTrapezoidation::interpolate(const Beadin void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& node_beadings, ptr_vector_t& edge_junctions) { - for (edge_t& edge_ : graph.edges) + for (edge_t& edge_ : graph_.edges) { edge_t* edge = &edge_; if (edge->from->data.distance_to_boundary_ > edge->to->data.distance_to_boundary_) @@ -1958,10 +1958,10 @@ std::shared_ptr SkeletalTrapezo spdlog::error("Unknown beading for non-central node!"); } assert(dist != std::numeric_limits::max()); - node->data.bead_count_ = beading_strategy.getOptimalBeadCount(dist * 2); + node->data.bead_count_ = beading_strategy_.getOptimalBeadCount(dist * 2); } assert(node->data.bead_count_ != -1); - node_beadings.emplace_back(new BeadingPropagation(beading_strategy.compute(node->data.distance_to_boundary_ * 2, node->data.bead_count_))); + node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node->data.distance_to_boundary_ * 2, node->data.bead_count_))); node->data.setBeading(node_beadings.back()); } assert(node->data.hasBeading()); @@ -2062,8 +2062,8 @@ void SkeletalTrapezoidation::addToolpathSegment(const ExtrusionJunction& from, c void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_junctions) { - std::unordered_set unprocessed_quad_starts(graph.edges.size() * 5 / 2); - for (edge_t& edge : graph.edges) + std::unordered_set unprocessed_quad_starts(graph_.edges.size() * 5 / 2); + for (edge_t& edge : graph_.edges) { if (! edge.prev) { @@ -2187,7 +2187,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() { std::vector& generated_toolpaths = *p_generated_toolpaths; - for (auto& node : graph.nodes) + for (auto& node : graph_.nodes) { if (! node.data.hasBeading()) { From c05b7766134a3d0c94fdf06884ce4c4472c7fb3c Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 21 Nov 2023 14:56:10 +0100 Subject: [PATCH 079/218] Refactor sentry config path generation The sentry config path creation is improved by leveraging the fmt library to format the respective path strings. This change streamlines the code and boosts its overall comprehensibility. Also, the sentry options set database path now makes use of the native function for string conversion. Contributes to CURA-11364 --- src/main.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 89a3a766ad..95d2ce1624 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,9 +9,11 @@ #ifdef SENTRY_URL #include -#include #include +#include +#include + #include #endif #include @@ -65,13 +67,13 @@ int main(int argc, char** argv) // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path #if defined(__linux__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/.local/share/cura/.sentry-native"); + const auto config_path = std::filesystem::path(fmt::format("{}/.local/share/cura/.sentry-native", std::getenv("HOME"))); #elif defined(__APPLE__) && defined(__MACH__) - const auto config_path = std::filesystem::path(std::getenv("HOME")).append("/Library/Application Support/cura/.sentry-native"); + const auto config_path = std::filesystem::path(fmt::format("{}/Library/Application Support/cura/.sentry-native", std::getenv("HOME"))); #elif defined(_WIN64) - const auto config_path = std::filesystem::path(std::getenv("APPDATA")).append("/cura/.sentry-native"); + const auto config_path = std::filesystem::path(fmt::format("{}/cura/.sentry-native", std::getenv("APPDATA"))); #endif - sentry_options_set_database_path(options, config_path.c_str()); + sentry_options_set_database_path(options, config_path.native().c_str()); sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); sentry_init(options); } From f397fb59586a828e148388efb8ca044a8cf02ace Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 21 Nov 2023 14:58:41 +0100 Subject: [PATCH 080/218] Log Sentry URL and Path Made sure that user identifiable paths aren't logged with a custom formatter. See example output on Linux ``` [2023-11-21 14:57:13.764] [info] Sentry config path: /home/*******/.local/share/cura/.sentry-native ``` Untested on Windows Contributes to CURA-11364 --- include/utils/format/filesystem_path.h | 47 ++++++++++++++++++++++++++ src/main.cpp | 8 +++-- 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 include/utils/format/filesystem_path.h diff --git a/include/utils/format/filesystem_path.h b/include/utils/format/filesystem_path.h new file mode 100644 index 0000000000..679b69223e --- /dev/null +++ b/include/utils/format/filesystem_path.h @@ -0,0 +1,47 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef CURAENGINE_INCLUDE_UTILS_FORMAT_FILESYSTEM_PATH_H +#define CURAENGINE_INCLUDE_UTILS_FORMAT_FILESYSTEM_PATH_H + +#include +#include + +#include + +namespace fmt +{ +template<> +struct formatter : formatter +{ + static std::string USERNAME; + static constexpr std::string_view OBFUSCATED_STRING = "*******"; + + [[nodiscard]] static std::string anonymizePath(const std::string& path) + { + std::string anonymized_path = path; + size_t pos = anonymized_path.find(USERNAME); + while (pos != std::string::npos) + { + anonymized_path.replace(pos, USERNAME.size(), OBFUSCATED_STRING); + pos = anonymized_path.find(USERNAME, pos + OBFUSCATED_STRING.size()); + } + return anonymized_path; + } + + template + auto format(const std::filesystem::path& path, FormatContext& ctx) + { + return formatter::format(anonymizePath(path.native()), ctx); + } +}; + +#ifdef _WIN32 +std::string fmt::formatter::USERNAME = std::getenv("USERNAME") != nullptr ? std::getenv("USERNAME") : ""; +#else +std::string fmt::formatter::USERNAME = std::getenv("USER") != nullptr ? std::getenv("USER") : ""; +#endif + +} // namespace fmt + +#endif // CURAENGINE_INCLUDE_UTILS_FORMAT_FILESYSTEM_PATH_H diff --git a/src/main.cpp b/src/main.cpp index 95d2ce1624..fc11a1a611 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,12 +9,12 @@ #ifdef SENTRY_URL #include +#include #include #include -#include -#include +#include "utils/format/filesystem_path.h" #endif #include @@ -64,15 +64,17 @@ int main(int argc, char** argv) // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); sentry_options_set_dsn(options, std::string(SENTRY_URL).c_str()); + spdlog::info("Sentry url: {}", std::string(SENTRY_URL).c_str()); // This is also the default-path. For further information and recommendations: // https://docs.sentry.io/platforms/native/configuration/options/#database-path #if defined(__linux__) - const auto config_path = std::filesystem::path(fmt::format("{}/.local/share/cura/.sentry-native", std::getenv("HOME"))); + const auto config_path = std::filesystem::path(fmt::format("{}/.local/share/cura/.sentry-native", std::getenv("HOME"))); #elif defined(__APPLE__) && defined(__MACH__) const auto config_path = std::filesystem::path(fmt::format("{}/Library/Application Support/cura/.sentry-native", std::getenv("HOME"))); #elif defined(_WIN64) const auto config_path = std::filesystem::path(fmt::format("{}/cura/.sentry-native", std::getenv("APPDATA"))); #endif + spdlog::info("Sentry config path: {}", config_path); sentry_options_set_database_path(options, config_path.native().c_str()); sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); sentry_init(options); From e52f91af42193653a58062bc730b7f8360987065 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 15:32:47 +0100 Subject: [PATCH 081/218] Fixed variable shadowing warnings --- include/PrimeTower.h | 28 +- include/gcodeExport.h | 131 ++-- include/progress/ProgressStageEstimator.h | 40 +- include/skin.h | 31 +- include/utils/HalfEdge.h | 22 +- include/utils/HalfEdgeNode.h | 17 +- src/FffGcodeWriter.cpp | 33 +- src/FffPolygonGenerator.cpp | 2 +- src/PrimeTower.cpp | 91 ++- src/SkeletalTrapezoidation.cpp | 633 ++++++++--------- src/SkeletalTrapezoidationGraph.cpp | 270 ++++---- src/SkirtBrim.cpp | 4 +- src/TreeModelVolumes.cpp | 2 +- src/gcodeExport.cpp | 802 +++++++++++----------- src/infill.cpp | 28 +- src/progress/ProgressStageEstimator.cpp | 32 +- src/raft.cpp | 2 +- src/skin.cpp | 122 ++-- src/sliceDataStorage.cpp | 4 +- tests/GCodeExportTest.cpp | 78 +-- 20 files changed, 1193 insertions(+), 1179 deletions(-) diff --git a/include/PrimeTower.h b/include/PrimeTower.h index a493cfb3be..9761c12e0f 100644 --- a/include/PrimeTower.h +++ b/include/PrimeTower.h @@ -29,26 +29,26 @@ class PrimeTower using MovesByExtruder = std::vector; using MovesByLayer = std::vector; - size_t extruder_count; //!< Number of extruders + size_t extruder_count_; //!< Number of extruders - bool wipe_from_middle; //!< Whether to wipe on the inside of the hollow prime tower - Point middle; //!< The middle of the prime tower + bool wipe_from_middle_; //!< Whether to wipe on the inside of the hollow prime tower + Point middle_; //!< The middle of the prime tower - Point post_wipe_point; //!< Location to post-wipe the unused nozzle off on + Point post_wipe_point_; //!< Location to post-wipe the unused nozzle off on - std::vector prime_tower_start_locations; //!< The differernt locations where to pre-wipe the active nozzle - const unsigned int number_of_prime_tower_start_locations = 21; //!< The required size of \ref PrimeTower::wipe_locations + std::vector prime_tower_start_locations_; //!< The differernt locations where to pre-wipe the active nozzle + const unsigned int number_of_prime_tower_start_locations_ = 21; //!< The required size of \ref PrimeTower::wipe_locations - MovesByExtruder prime_moves; //!< For each extruder, the moves to be processed for actual priming. - MovesByLayer base_extra_moves; //!< For each layer and each extruder, the extra moves to be processed for better adhesion/strength + MovesByExtruder prime_moves_; //!< For each extruder, the moves to be processed for actual priming. + MovesByLayer base_extra_moves_; //!< For each layer and each extruder, the extra moves to be processed for better adhesion/strength - Polygons outer_poly; //!< The outline of the outermost prime tower. - std::vector outer_poly_base; //!< The outline of the layers having extra width for the base + Polygons outer_poly_; //!< The outline of the outermost prime tower. + std::vector outer_poly_base_; //!< The outline of the layers having extra width for the base public: - bool enabled; //!< Whether the prime tower is enabled. - bool would_have_actual_tower; //!< Whether there is an actual tower. - bool multiple_extruders_on_first_layer; //!< Whether multiple extruders are allowed on the first layer of the prime tower (e.g. when a raft is there) + bool enabled_; //!< Whether the prime tower is enabled. + bool would_have_actual_tower_; //!< Whether there is an actual tower. + bool multiple_extruders_on_first_layer_; //!< Whether multiple extruders are allowed on the first layer of the prime tower (e.g. when a raft is there) /* * In which order, from outside to inside, will we be printing the prime @@ -57,7 +57,7 @@ class PrimeTower * This is the spatial order from outside to inside. This is NOT the actual * order in time in which they are printed. */ - std::vector extruder_order; + std::vector extruder_order_; /*! * \brief Creates a prime tower instance that will determine where and how diff --git a/include/gcodeExport.h b/include/gcodeExport.h index b16512569b..f05cac2a81 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -67,76 +67,76 @@ class GCodeExport : public NoCopy private: struct ExtruderTrainAttributes { - bool is_primed; //!< Whether this extruder has currently already been primed in this print + bool is_primed_; //!< Whether this extruder has currently already been primed in this print - bool is_used; //!< Whether this extruder train is actually used during the printing of all meshgroups - char extruderCharacter; + bool is_used_; //!< Whether this extruder train is actually used during the printing of all meshgroups + char extruder_character_; - double filament_area; //!< in mm^2 for non-volumetric, cylindrical filament + double filament_area_; //!< in mm^2 for non-volumetric, cylindrical filament - double totalFilament; //!< total filament used per extruder in mm^3 - Temperature currentTemperature; - bool waited_for_temperature; //!< Whether the most recent temperature command has been a heat-and-wait command (M109) or not (M104). - Temperature initial_temp; //!< Temperature this nozzle needs to be at the start of the print. + double total_filament_; //!< total filament used per extruder in mm^3 + Temperature current_temperature_; + bool waited_for_temperature_; //!< Whether the most recent temperature command has been a heat-and-wait command (M109) or not (M104). + Temperature initial_temp_; //!< Temperature this nozzle needs to be at the start of the print. - double retraction_e_amount_current; //!< The current retracted amount (in mm or mm^3), or zero(i.e. false) if it is not currently retracted (positive values mean retracted + double retraction_e_amount_current_; //!< The current retracted amount (in mm or mm^3), or zero(i.e. false) if it is not currently retracted (positive values mean retracted //!< amount, so negative impact on E values) - double retraction_e_amount_at_e_start; //!< The ExtruderTrainAttributes::retraction_amount_current value at E0, i.e. the offset (in mm or mm^3) from E0 to the situation + double retraction_e_amount_at_e_start_; //!< The ExtruderTrainAttributes::retraction_amount_current value at E0, i.e. the offset (in mm or mm^3) from E0 to the situation //!< where the filament is at the tip of the nozzle. - double prime_volume; //!< Amount of material (in mm^3) to be primed after an unretration (due to oozing and/or coasting) - Velocity last_retraction_prime_speed; //!< The last prime speed (in mm/s) of the to-be-primed amount + double prime_volume_; //!< Amount of material (in mm^3) to be primed after an unretration (due to oozing and/or coasting) + Velocity last_retraction_prime_speed_; //!< The last prime speed (in mm/s) of the to-be-primed amount - double last_e_value_after_wipe; //!< The current material amount extruded since last wipe + double last_e_value_after_wipe_; //!< The current material amount extruded since last wipe - unsigned fan_number; // nozzle print cooling fan number - Point nozzle_offset; //!< Cache of setting machine_nozzle_offset_[xy] - bool machine_firmware_retract; //!< Cache of setting machine_firmware_retract + unsigned fan_number_; // nozzle print cooling fan number + Point nozzle_offset_; //!< Cache of setting machine_nozzle_offset_[xy] + bool machine_firmware_retract_; //!< Cache of setting machine_firmware_retract - std::deque extruded_volume_at_previous_n_retractions; // in mm^3 + std::deque extruded_volume_at_previous_n_retractions_; // in mm^3 ExtruderTrainAttributes() - : is_primed(false) - , is_used(false) - , extruderCharacter(0) - , filament_area(0) - , totalFilament(0) - , currentTemperature(0) - , waited_for_temperature(false) - , initial_temp(0) - , retraction_e_amount_current(0.0) - , retraction_e_amount_at_e_start(0.0) - , prime_volume(0.0) - , last_retraction_prime_speed(0.0) - , fan_number(0) + : is_primed_(false) + , is_used_(false) + , extruder_character_(0) + , filament_area_(0) + , total_filament_(0) + , current_temperature_(0) + , waited_for_temperature_(false) + , initial_temp_(0) + , retraction_e_amount_current_(0.0) + , retraction_e_amount_at_e_start_(0.0) + , prime_volume_(0.0) + , last_retraction_prime_speed_(0.0) + , fan_number_(0) { } }; - ExtruderTrainAttributes extruder_attr[MAX_EXTRUDERS]; - bool use_extruder_offset_to_offset_coords; - std::string machine_name; + ExtruderTrainAttributes extruder_attr_[MAX_EXTRUDERS]; + bool use_extruder_offset_to_offset_coords_; + std::string machine_name_; std::string slice_uuid_; //!< The UUID of the current slice. - std::ostream* output_stream; - std::string new_line; + std::ostream* output_stream_; + std::string new_line_; - double current_e_value; //!< The last E value written to gcode (in mm or mm^3) + double current_e_value_; //!< The last E value written to gcode (in mm or mm^3) // flow-rate compensation - double current_e_offset; //!< Offset to compensate for flow rate (mm or mm^3) - double max_extrusion_offset; //!< 0 to turn it off, normally 4 - double extrusion_offset_factor; //!< default 1 - - Point3 currentPosition; //!< The last build plate coordinates written to gcode (which might be different from actually written gcode coordinates when the extruder offset is - //!< encoded in the gcode) - Velocity currentSpeed; //!< The current speed (F values / 60) in mm/s - Acceleration current_print_acceleration; //!< The current acceleration (in mm/s^2) used for print moves (and also for travel moves if the gcode flavor doesn't have separate - //!< travel acceleration) + double current_e_offset_; //!< Offset to compensate for flow rate (mm or mm^3) + double max_extrusion_offset_; //!< 0 to turn it off, normally 4 + double extrusion_offset_factor_; //!< default 1 + + Point3 current_position_; //!< The last build plate coordinates written to gcode (which might be different from actually written gcode coordinates when the extruder offset is + //!< encoded in the gcode) + Velocity current_speed_; //!< The current speed (F values / 60) in mm/s + Acceleration current_print_acceleration_; //!< The current acceleration (in mm/s^2) used for print moves (and also for travel moves if the gcode flavor doesn't have separate + //!< travel acceleration) Acceleration - current_travel_acceleration; //!< The current acceleration (in mm/s^2) used for travel moves for those gcode flavors that have separate print and travel accelerations - Velocity current_jerk; //!< The current jerk in the XY direction (in mm/s^3) + current_travel_acceleration_; //!< The current acceleration (in mm/s^2) used for travel moves for those gcode flavors that have separate print and travel accelerations + Velocity current_jerk_; //!< The current jerk in the XY direction (in mm/s^3) - AABB3D total_bounding_box; //!< The bounding box of all g-code. + AABB3D total_bounding_box_; //!< The bounding box of all g-code. /*! * The z position to be used on the next xy move, if the head wasn't in the correct z position yet. @@ -145,28 +145,29 @@ class GCodeExport : public NoCopy * * \note After GCodeExport::writeExtrusion(Point, double, double) has been called currentPosition.z coincides with this value */ - coord_t current_layer_z; - coord_t is_z_hopped; //!< The amount by which the print head is currently z hopped, or zero if it is not z hopped. (A z hop is used during travel moves to avoid collision with - //!< other layer parts) + coord_t current_layer_z_; + coord_t is_z_hopped_; //!< The amount by which the print head is currently z hopped, or zero if it is not z hopped. (A z hop is used during travel moves to avoid collision with + //!< other layer parts) - size_t current_extruder; - double current_fan_speed; - unsigned fan_number; // current print cooling fan number - EGCodeFlavor flavor; + size_t current_extruder_; + double current_fan_speed_; + unsigned fan_number_; // current print cooling fan number + EGCodeFlavor flavor_; - std::vector total_print_times; //!< The total estimated print time in seconds for each feature - TimeEstimateCalculator estimateCalculator; + std::vector total_print_times_; //!< The total estimated print time in seconds for each feature + TimeEstimateCalculator estimate_calculator_; - LayerIndex layer_nr; //!< for sending travel data + LayerIndex layer_nr_; //!< for sending travel data - bool is_volumetric; - bool relative_extrusion; //!< whether to use relative extrusion distances rather than absolute - bool always_write_active_tool; //!< whether to write the active tool after sending commands to inactive tool + bool is_volumetric_; + bool relative_extrusion_; //!< whether to use relative extrusion distances rather than absolute + bool always_write_active_tool_; //!< whether to write the active tool after sending commands to inactive tool + + Temperature initial_bed_temp_; //!< bed temperature at the beginning of the print. + Temperature bed_temperature_; //!< Current build plate temperature. + Temperature build_volume_temperature_; //!< build volume temperature + bool machine_heated_build_volume_; //!< does the machine have the ability to control/stabilize build-volume-temperature - Temperature initial_bed_temp; //!< bed temperature at the beginning of the print. - Temperature bed_temperature; //!< Current build plate temperature. - Temperature build_volume_temperature; //!< build volume temperature - bool machine_heated_build_volume; //!< does the machine have the ability to control/stabilize build-volume-temperature protected: /*! * Convert an E value to a value in mm (if it wasn't already in mm) for the current extruder. diff --git a/include/progress/ProgressStageEstimator.h b/include/progress/ProgressStageEstimator.h index f6a9f14376..a60bd5e32f 100644 --- a/include/progress/ProgressStageEstimator.h +++ b/include/progress/ProgressStageEstimator.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PROGRESS_PROGRESS_STAGE_ESTIMATOR_H #define PROGRESS_PROGRESS_STAGE_ESTIMATOR_H @@ -18,39 +18,39 @@ class ProgressStageEstimator : public ProgressEstimator { struct ProgressStage { - double relative_estimated_time; - ProgressEstimator* stage; + double relative_estimated_time_; + ProgressEstimator* stage_; + ProgressStage(double relative_estimated_time) - : relative_estimated_time(relative_estimated_time) - , stage(nullptr) + : relative_estimated_time_(relative_estimated_time) + , stage_(nullptr) { } - }; - + protected: - std::vector stages; - double total_estimated_time; - + std::vector stages_; + double total_estimated_time_; + private: - double accumulated_estimate; - int current_stage_idx; - + double accumulated_estimate_; + int current_stage_idx_; + public: ProgressStageEstimator(std::vector& relative_time_estimates); - + double progress(int current_step); - + /*! - * + * * \warning This class is responsible for deleting the \p stage - * + * */ void nextStage(ProgressEstimator* stage); - + ~ProgressStageEstimator(); }; } // namespace cura -#endif // PROGRESS_PROGRESS_STAGE_ESTIMATOR_H \ No newline at end of file +#endif // PROGRESS_PROGRESS_STAGE_ESTIMATOR_H diff --git a/include/skin.h b/include/skin.h index de96d6e1c3..e0367cbf0c 100644 --- a/include/skin.h +++ b/include/skin.h @@ -161,21 +161,22 @@ class SkinInfillAreaComputation Polygons generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count); protected: - LayerIndex layer_nr; //!< The index of the layer for which to generate the skins and infill. - SliceMeshStorage& mesh; //!< The storage where the layer outline information (input) is stored and where the skin insets and fill areas (output) are stored. - size_t bottom_layer_count; //!< The number of layers of bottom skin - size_t initial_bottom_layer_count; //!< Whether to make bottom skin for the initial layer - size_t top_layer_count; //!< The number of layers of top skin - size_t wall_line_count; //!< The number of walls, i.e. the number of the wall from which to offset. - coord_t skin_line_width; //!< The line width of the skin. - size_t skin_inset_count; //!< The number of perimeters to surround the skin - bool no_small_gaps_heuristic; //!< A heuristic which assumes there will be no small gaps between bottom and top skin with a z size smaller than the skin size itself - bool process_infill; //!< Whether to process infill, i.e. whether there's a positive infill density or there are infill meshes modifying this mesh. - - coord_t top_skin_preshrink; //!< The top skin removal width, to remove thin strips of skin along nearly-vertical walls. - coord_t bottom_skin_preshrink; //!< The bottom skin removal width, to remove thin strips of skin along nearly-vertical walls. - coord_t top_skin_expand_distance; //!< The distance by which the top skins should be larger than the original top skins. - coord_t bottom_skin_expand_distance; //!< The distance by which the bottom skins should be larger than the original bottom skins. + LayerIndex layer_nr_; //!< The index of the layer for which to generate the skins and infill. + SliceMeshStorage& mesh_; //!< The storage where the layer outline information (input) is stored and where the skin insets and fill areas (output) are stored. + size_t bottom_layer_count_; //!< The number of layers of bottom skin + size_t initial_bottom_layer_count_; //!< Whether to make bottom skin for the initial layer + size_t top_layer_count_; //!< The number of layers of top skin + size_t wall_line_count_; //!< The number of walls, i.e. the number of the wall from which to offset. + coord_t skin_line_width_; //!< The line width of the skin. + size_t skin_inset_count_; //!< The number of perimeters to surround the skin + bool no_small_gaps_heuristic_; //!< A heuristic which assumes there will be no small gaps between bottom and top skin with a z size smaller than the skin size itself + bool process_infill_; //!< Whether to process infill, i.e. whether there's a positive infill density or there are infill meshes modifying this mesh. + + coord_t top_skin_preshrink_; //!< The top skin removal width, to remove thin strips of skin along nearly-vertical walls. + coord_t bottom_skin_preshrink_; //!< The bottom skin removal width, to remove thin strips of skin along nearly-vertical walls. + coord_t top_skin_expand_distance_; //!< The distance by which the top skins should be larger than the original top skins. + coord_t bottom_skin_expand_distance_; //!< The distance by which the bottom skins should be larger than the original bottom skins. + private: static coord_t getSkinLineWidth(const SliceMeshStorage& mesh, const LayerIndex& layer_nr); //!< Compute the skin line width, which might be different for the first layer. diff --git a/include/utils/HalfEdge.h b/include/utils/HalfEdge.h index 63ef040ead..34df6f2a48 100644 --- a/include/utils/HalfEdge.h +++ b/include/utils/HalfEdge.h @@ -18,16 +18,20 @@ class HalfEdge { using edge_t = derived_edge_t; using node_t = derived_node_t; + public: - edge_data_t data; - edge_t* twin = nullptr; - edge_t* next = nullptr; - edge_t* prev = nullptr; - node_t* from = nullptr; - node_t* to = nullptr; + edge_data_t data_; + edge_t* twin_ = nullptr; + edge_t* next_ = nullptr; + edge_t* prev_ = nullptr; + node_t* from_ = nullptr; + node_t* to_ = nullptr; + HalfEdge(edge_data_t data) - : data(data) - {} + : data_(data) + { + } + bool operator==(const edge_t& other) { return this == &other; @@ -35,7 +39,5 @@ class HalfEdge }; - - } // namespace cura #endif // UTILS_HALF_EDGE_H diff --git a/include/utils/HalfEdgeNode.h b/include/utils/HalfEdgeNode.h index b22a7fa804..3da47ba7fe 100644 --- a/include/utils/HalfEdgeNode.h +++ b/include/utils/HalfEdgeNode.h @@ -16,14 +16,17 @@ class HalfEdgeNode { using edge_t = derived_edge_t; using node_t = derived_node_t; + public: - node_data_t data; - Point p; - edge_t* incident_edge = nullptr; + node_data_t data_; + Point p_; + edge_t* incident_edge_ = nullptr; + HalfEdgeNode(node_data_t data, Point p) - : data(data) - , p(p) - {} + : data_(data) + , p_(p) + { + } bool operator==(const node_t& other) { @@ -32,7 +35,5 @@ class HalfEdgeNode }; - - } // namespace cura #endif // UTILS_HALF_EDGE_NODE_H diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 91fb9ffbbe..119ddfbd31 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -558,7 +558,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const size_t base_extruder_nr = mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_; const size_t interface_extruder_nr = mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_; const size_t surface_extruder_nr = mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_; - const size_t prime_tower_extruder_nr = storage.primeTower.extruder_order.front(); + const size_t prime_tower_extruder_nr = storage.primeTower.extruder_order_.front(); coord_t z = 0; const LayerIndex initial_raft_layer_nr = -Raft::getTotalExtraLayers(); @@ -631,7 +631,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) std::vector raft_outline_paths; raft_outline_paths.emplace_back(ParameterizedRaftPath{ line_spacing, storage.raftOutline }); - if (storage.primeTower.enabled) + if (storage.primeTower.enabled_) { const Polygons& raft_outline_prime_tower = storage.primeTower.getOuterPoly(layer_nr); if (line_spacing_prime_tower == line_spacing) @@ -718,7 +718,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) for (LayerIndex raft_interface_layer = 1; static_cast(raft_interface_layer) <= num_interface_layers; ++raft_interface_layer) { // raft interface layer - bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled; + bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled_; const LayerIndex layer_nr = initial_raft_layer_nr + raft_interface_layer; z += interface_layer_height; @@ -779,7 +779,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr int zag_skip_count = 0; constexpr coord_t pocket_size = 0; - if (storage.primeTower.enabled) + if (storage.primeTower.enabled_) { // Interface layer excludes prime tower base raft_outline_path = raft_outline_path.difference(storage.primeTower.getOuterPoly(layer_nr)); @@ -836,7 +836,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) for (LayerIndex raft_surface_layer = 1; static_cast(raft_surface_layer) <= num_surface_layers; raft_surface_layer++) { // raft surface layers - bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled; + bool prime_tower_added_on_this_layer = ! storage.primeTower.enabled_; const LayerIndex layer_nr = initial_raft_layer_nr + 1 + num_interface_layers + raft_surface_layer - 1; // +1: 1 base layer z += surface_layer_height; @@ -899,7 +899,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr size_t zag_skip_count = 0; constexpr coord_t pocket_size = 0; - if (storage.primeTower.enabled) + if (storage.primeTower.enabled_) { // Surface layers exclude prime tower base raft_outline_path = raft_outline_path.difference(storage.primeTower.getOuterPoly(layer_nr)); @@ -1413,7 +1413,7 @@ std::vector FffGcodeWriter::getUsedExtrudersOnLayerExcludingStartingExtr // The outermost prime tower extruder is always used if there is a prime tower, apart on layers with negative index (e.g. for the raft) if (mesh_group_settings.get("prime_tower_enable") && /*layer_nr >= 0 &&*/ layer_nr <= storage.max_print_height_second_to_last_extruder) { - extruder_is_used_on_this_layer[storage.primeTower.extruder_order[0]] = true; + extruder_is_used_on_this_layer[storage.primeTower.extruder_order_[0]] = true; } // check if we are on the first layer @@ -2484,13 +2484,13 @@ bool FffGcodeWriter::processInsets( const size_t roofing_layer_count = std::min(mesh.settings.get("roofing_layer_count"), mesh.settings.get("top_layers")); const bool no_small_gaps_heuristic = mesh.settings.get("skin_no_small_gaps_heuristic"); const int layer_nr = gcode_layer.getLayerNr(); - auto filled_area_above = getOutlineOnLayer(part, layer_nr + roofing_layer_count); + auto filled_area_above_res = getOutlineOnLayer(part, layer_nr + roofing_layer_count); if (! no_small_gaps_heuristic) { for (int layer_nr_above = layer_nr + 1; layer_nr_above < layer_nr + roofing_layer_count; layer_nr_above++) { Polygons outlines_above = getOutlineOnLayer(part, layer_nr_above); - filled_area_above = filled_area_above.intersection(outlines_above); + filled_area_above_res = filled_area_above_res.intersection(outlines_above); } } if (layer_nr > 0) @@ -2506,11 +2506,11 @@ bool FffGcodeWriter::processInsets( if (! air_below.empty()) { // add the polygons that have air below to the no air above polygons - filled_area_above = filled_area_above.unionPolygons(air_below); + filled_area_above_res = filled_area_above_res.unionPolygons(air_below); } } - return filled_area_above; + return filled_area_above_res; }(); if (filled_area_above.empty()) @@ -3047,17 +3047,18 @@ void FffGcodeWriter::processSkinPrintFeature( else { std::optional near_start_location; - const EFillMethod pattern + const EFillMethod actual_pattern = (gcode_layer.getLayerNr() == 0) ? mesh.settings.get("top_bottom_pattern_0") : mesh.settings.get("top_bottom_pattern"); - if (pattern == EFillMethod::LINES || pattern == EFillMethod::ZIG_ZAG) + if (actual_pattern == EFillMethod::LINES || actual_pattern == EFillMethod::ZIG_ZAG) { // update near_start_location to a location which tries to avoid seams in skin near_start_location = getSeamAvoidingLocation(area, skin_angle, gcode_layer.getLastPlannedPositionOrStartingPosition()); } constexpr bool enable_travel_optimization = false; constexpr double flow = 1.0; - if (pattern == EFillMethod::GRID || pattern == EFillMethod::LINES || pattern == EFillMethod::TRIANGLES || pattern == EFillMethod::CUBIC - || pattern == EFillMethod::TETRAHEDRAL || pattern == EFillMethod::QUARTER_CUBIC || pattern == EFillMethod::CUBICSUBDIV || pattern == EFillMethod::LIGHTNING) + if (actual_pattern == EFillMethod::GRID || actual_pattern == EFillMethod::LINES || actual_pattern == EFillMethod::TRIANGLES || actual_pattern == EFillMethod::CUBIC + || actual_pattern == EFillMethod::TETRAHEDRAL || actual_pattern == EFillMethod::QUARTER_CUBIC || actual_pattern == EFillMethod::CUBICSUBDIV + || actual_pattern == EFillMethod::LIGHTNING) { gcode_layer.addLinesByOptimizer( skin_lines, @@ -3071,7 +3072,7 @@ void FffGcodeWriter::processSkinPrintFeature( } else { - SpaceFillType space_fill_type = (pattern == EFillMethod::ZIG_ZAG) ? SpaceFillType::PolyLines : SpaceFillType::Lines; + SpaceFillType space_fill_type = (actual_pattern == EFillMethod::ZIG_ZAG) ? SpaceFillType::PolyLines : SpaceFillType::Lines; constexpr coord_t wipe_dist = 0; gcode_layer.addLinesByOptimizer(skin_lines, config, space_fill_type, enable_travel_optimization, wipe_dist, flow, near_start_location, fan_speed); } diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 4335a1b49d..cb4d60f6d4 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -425,7 +425,7 @@ void FffPolygonGenerator::slices2polygons(SliceDataStorage& storage, TimeKeeper& // This catches a special case in which the models are in the air, and then // the adhesion mustn't be calculated. - if (! isEmptyLayer(storage, 0) || storage.primeTower.enabled) + if (! isEmptyLayer(storage, 0) || storage.primeTower.enabled_) { spdlog::debug("Processing platform adhesion"); processPlatformAdhesion(storage); diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 41bf694f43..bfcaed4bdb 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -24,7 +24,7 @@ namespace cura { PrimeTower::PrimeTower() - : wipe_from_middle(false) + : wipe_from_middle_(false) { const Scene& scene = Application::getInstance().current_slice_->scene; @@ -39,25 +39,25 @@ PrimeTower::PrimeTower() // used (sacrifying for this purpose the usual single-extruder first layer, that would be better for prime-tower // adhesion). - multiple_extruders_on_first_layer = scene.current_mesh_group->settings.get("machine_extruders_share_nozzle") - && ((adhesion_type != EPlatformAdhesion::SKIRT) && (adhesion_type != EPlatformAdhesion::BRIM)); + multiple_extruders_on_first_layer_ = scene.current_mesh_group->settings.get("machine_extruders_share_nozzle") + && ((adhesion_type != EPlatformAdhesion::SKIRT) && (adhesion_type != EPlatformAdhesion::BRIM)); } - enabled = scene.current_mesh_group->settings.get("prime_tower_enable") && scene.current_mesh_group->settings.get("prime_tower_min_volume") > 10 - && scene.current_mesh_group->settings.get("prime_tower_size") > 10; - would_have_actual_tower = enabled; // Assume so for now. + enabled_ = scene.current_mesh_group->settings.get("prime_tower_enable") && scene.current_mesh_group->settings.get("prime_tower_min_volume") > 10 + && scene.current_mesh_group->settings.get("prime_tower_size") > 10; + would_have_actual_tower_ = enabled_; // Assume so for now. - extruder_count = scene.extruders.size(); - extruder_order.resize(extruder_count); - for (unsigned int extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) + extruder_count_ = scene.extruders.size(); + extruder_order_.resize(extruder_count_); + for (unsigned int extruder_nr = 0; extruder_nr < extruder_count_; extruder_nr++) { - extruder_order[extruder_nr] = extruder_nr; // Start with default order, then sort. + extruder_order_[extruder_nr] = extruder_nr; // Start with default order, then sort. } // Sort from high adhesion to low adhesion. const Scene* scene_pointer = &scene; // Communicate to lambda via pointer to prevent copy. std::stable_sort( - extruder_order.begin(), - extruder_order.end(), + extruder_order_.begin(), + extruder_order_.end(), [scene_pointer](const unsigned int& extruder_nr_a, const unsigned int& extruder_nr_b) -> bool { const Ratio adhesion_a = scene_pointer->extruders[extruder_nr_a].settings_.get("material_adhesion_tendency"); @@ -76,13 +76,13 @@ void PrimeTower::checkUsed(const SliceDataStorage& storage) } if (used_extruder_count <= 1) { - enabled = false; + enabled_ = false; } } void PrimeTower::generateGroundpoly() { - if (! enabled) + if (! enabled_) { return; } @@ -94,18 +94,18 @@ void PrimeTower::generateGroundpoly() const coord_t x = mesh_group_settings.get("prime_tower_position_x"); const coord_t y = mesh_group_settings.get("prime_tower_position_y"); const coord_t tower_radius = tower_size / 2; - outer_poly.add(PolygonUtils::makeCircle(Point(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); - middle = Point(x - tower_size / 2, y + tower_size / 2); + outer_poly_.add(PolygonUtils::makeCircle(Point(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); + middle_ = Point(x - tower_size / 2, y + tower_size / 2); - post_wipe_point = Point(x - tower_size / 2, y + tower_size / 2); + post_wipe_point_ = Point(x - tower_size / 2, y + tower_size / 2); } void PrimeTower::generatePaths(const SliceDataStorage& storage) { const int raft_total_extra_layers = Raft::getTotalExtraLayers(); - would_have_actual_tower = storage.max_print_height_second_to_last_extruder - >= -raft_total_extra_layers; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. - if (would_have_actual_tower && enabled) + would_have_actual_tower_ = storage.max_print_height_second_to_last_extruder + >= -raft_total_extra_layers; // Maybe it turns out that we don't need a prime tower after all because there are no layer switches. + if (would_have_actual_tower_ && enabled_) { generatePaths_denseInfill(); generateStartLocations(); @@ -122,27 +122,26 @@ void PrimeTower::generatePaths_denseInfill() const bool has_raft = mesh_group_settings.get("adhesion_type") == EPlatformAdhesion::RAFT; const coord_t base_height = std::max(scene.settings.get("prime_tower_base_height"), has_raft ? layer_height : 0); const double base_curve_magnitude = mesh_group_settings.get("prime_tower_base_curve_magnitude"); - const coord_t line_width = scene.extruders[extruder_order.front()].settings_.get("prime_tower_line_width"); - prime_moves.resize(extruder_count); - base_extra_moves.resize(extruder_count); + prime_moves_.resize(extruder_count_); + base_extra_moves_.resize(extruder_count_); coord_t cumulative_inset = 0; // Each tower shape is going to be printed inside the other. This is the inset we're doing for each extruder. - for (size_t extruder_nr : extruder_order) + for (size_t extruder_nr : extruder_order_) { const coord_t line_width = scene.extruders[extruder_nr].settings_.get("prime_tower_line_width"); const coord_t required_volume = MM3_2INT(scene.extruders[extruder_nr].settings_.get("prime_tower_min_volume")); const Ratio flow = scene.extruders[extruder_nr].settings_.get("prime_tower_flow"); coord_t current_volume = 0; - Polygons& pattern = prime_moves[extruder_nr]; + Polygons& prime_moves = prime_moves_[extruder_nr]; // Create the walls of the prime tower. unsigned int wall_nr = 0; for (; current_volume < required_volume; wall_nr++) { // Create a new polygon with an offset from the outer polygon. - Polygons polygons = outer_poly.offset(-cumulative_inset - wall_nr * line_width - line_width / 2); - pattern.add(polygons); + Polygons polygons = outer_poly_.offset(-cumulative_inset - wall_nr * line_width - line_width / 2); + prime_moves.add(polygons); current_volume += polygons.polygonLength() * line_width * layer_height * flow; if (polygons.empty()) // Don't continue. We won't ever reach the required volume because it doesn't fit. { @@ -151,7 +150,7 @@ void PrimeTower::generatePaths_denseInfill() } // The most outside extruder is used for the base - if (extruder_nr == extruder_order.front() && (base_enabled || has_raft) && base_extra_radius > 0 && base_height > 0) + if (extruder_nr == extruder_order_.front() && (base_enabled || has_raft) && base_extra_radius > 0 && base_height > 0) { for (coord_t z = 0; z < base_height; z += layer_height) { @@ -163,21 +162,21 @@ void PrimeTower::generatePaths_denseInfill() break; } extra_radius = line_width * extra_rings; - outer_poly_base.push_back(outer_poly.offset(extra_radius)); + outer_poly_base_.push_back(outer_poly_.offset(extra_radius)); - base_extra_moves[extruder_nr].push_back(PolygonUtils::generateOutset(outer_poly, extra_rings, line_width)); + base_extra_moves_[extruder_nr].push_back(PolygonUtils::generateOutset(outer_poly_, extra_rings, line_width)); } } cumulative_inset += wall_nr * line_width; // Only the most inside extruder needs to fill the inside of the prime tower - if (extruder_nr == extruder_order.back()) + if (extruder_nr == extruder_order_.back()) { - Polygons pattern = PolygonUtils::generateInset(outer_poly, line_width, cumulative_inset); - if (! pattern.empty()) + Polygons base_extra_moves = PolygonUtils::generateInset(outer_poly_, line_width, cumulative_inset); + if (! base_extra_moves.empty()) { - base_extra_moves[extruder_nr].push_back(pattern); + base_extra_moves_[extruder_nr].push_back(base_extra_moves); } } } @@ -187,15 +186,15 @@ void PrimeTower::generateStartLocations() { // Evenly spread out a number of dots along the prime tower's outline. This is done for the complete outline, // so use the same start and end segments for this. - PolygonsPointIndex segment_start = PolygonsPointIndex(&outer_poly, 0, 0); + PolygonsPointIndex segment_start = PolygonsPointIndex(&outer_poly_, 0, 0); PolygonsPointIndex segment_end = segment_start; - PolygonUtils::spreadDots(segment_start, segment_end, number_of_prime_tower_start_locations, prime_tower_start_locations); + PolygonUtils::spreadDots(segment_start, segment_end, number_of_prime_tower_start_locations_, prime_tower_start_locations_); } void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_layer, const size_t prev_extruder, const size_t new_extruder) const { - if (! (enabled && would_have_actual_tower)) + if (! (enabled_ && would_have_actual_tower_)) { return; } @@ -234,7 +233,7 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la const Point previous_nozzle_offset = Point(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder].settings_; const Point new_nozzle_offset = Point(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); - gcode_layer.addTravel(post_wipe_point - previous_nozzle_offset + new_nozzle_offset); + gcode_layer.addTravel(post_wipe_point_ - previous_nozzle_offset + new_nozzle_offset); } gcode_layer.setPrimeTowerIsPlanned(new_extruder); @@ -250,11 +249,11 @@ void PrimeTower::addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t ext { // Actual prime pattern const GCodePathConfig& config = gcode_layer.configs_storage.prime_tower_config_per_extruder[extruder_nr]; - const Polygons& pattern = prime_moves[extruder_nr]; + const Polygons& pattern = prime_moves_[extruder_nr]; gcode_layer.addPolygonsByOptimizer(pattern, config); } - const std::vector& pattern_extra_brim = base_extra_moves[extruder_nr]; + const std::vector& pattern_extra_brim = base_extra_moves_[extruder_nr]; if (absolute_layer_number < pattern_extra_brim.size()) { // Extra rings for stronger base @@ -279,13 +278,13 @@ void PrimeTower::subtractFromSupport(SliceDataStorage& storage) const Polygons& PrimeTower::getOuterPoly(const LayerIndex& layer_nr) const { const LayerIndex absolute_layer_nr = layer_nr + Raft::getTotalExtraLayers(); - if (absolute_layer_nr < outer_poly_base.size()) + if (absolute_layer_nr < outer_poly_base_.size()) { - return outer_poly_base[absolute_layer_nr]; + return outer_poly_base_[absolute_layer_nr]; } else { - return outer_poly; + return outer_poly_; } } @@ -296,10 +295,10 @@ const Polygons& PrimeTower::getGroundPoly() const void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr) const { - int current_start_location_idx = ((((extruder_nr + 1) * gcode_layer.getLayerNr()) % number_of_prime_tower_start_locations) + number_of_prime_tower_start_locations) - % number_of_prime_tower_start_locations; + int current_start_location_idx = ((((extruder_nr + 1) * gcode_layer.getLayerNr()) % number_of_prime_tower_start_locations_) + number_of_prime_tower_start_locations_) + % number_of_prime_tower_start_locations_; - const ClosestPolygonPoint wipe_location = prime_tower_start_locations[current_start_location_idx]; + const ClosestPolygonPoint wipe_location = prime_tower_start_locations_[current_start_location_idx]; const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index e56844549a..94adbffe11 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -59,7 +59,7 @@ void SkeletalTrapezoidation::transferEdge( auto end_node_it = vd_node_to_he_node_.find(vd_edge.vertex1()); assert(end_node_it != vd_node_to_he_node_.end()); node_t* end_node = end_node_it->second; - for (edge_t* twin = source_twin;; twin = twin->prev->twin->prev) + for (edge_t* twin = source_twin;; twin = twin->prev_->twin_->prev_) { if (! twin) { @@ -69,34 +69,34 @@ void SkeletalTrapezoidation::transferEdge( assert(twin); graph_.edges.emplace_front(SkeletalTrapezoidationEdge()); edge_t* edge = &graph_.edges.front(); - edge->from = twin->to; - edge->to = twin->from; - edge->twin = twin; - twin->twin = edge; - edge->from->incident_edge = edge; + edge->from_ = twin->to_; + edge->to_ = twin->from_; + edge->twin_ = twin; + twin->twin_ = edge; + edge->from_->incident_edge_ = edge; if (prev_edge) { - edge->prev = prev_edge; - prev_edge->next = edge; + edge->prev_ = prev_edge; + prev_edge->next_ = edge; } prev_edge = edge; - if (prev_edge->to == end_node) + if (prev_edge->to_ == end_node) { return; } - if (! twin->prev || ! twin->prev->twin || ! twin->prev->twin->prev) + if (! twin->prev_ || ! twin->prev_->twin_ || ! twin->prev_->twin_->prev_) { spdlog::error("Discretized segment behaves oddly!"); return; } - assert(twin->prev); // Forth rib - assert(twin->prev->twin); // Back rib - assert(twin->prev->twin->prev); // Prev segment along parabola + assert(twin->prev_); // Forth rib + assert(twin->prev_->twin_); // Back rib + assert(twin->prev_->twin_->prev_); // Prev segment along parabola constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped graph_.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); @@ -112,13 +112,13 @@ void SkeletalTrapezoidation::transferEdge( spdlog::warn("Discretized Voronoi edge is degenerate."); } - assert(! prev_edge || prev_edge->to); - if (prev_edge && ! prev_edge->to) + assert(! prev_edge || prev_edge->to_); + if (prev_edge && ! prev_edge->to_) { spdlog::warn("Previous edge doesn't go anywhere."); } node_t* v0 - = (prev_edge) ? prev_edge->to : &makeNode(*vd_edge.vertex0(), from); // TODO: investigate whether boost:voronoi can produce multiple verts and violates consistency + = (prev_edge) ? prev_edge->to_ : &makeNode(*vd_edge.vertex0(), from); // TODO: investigate whether boost:voronoi can produce multiple verts and violates consistency Point p0 = discretized.front(); for (size_t p1_idx = 1; p1_idx < discretized.size(); p1_idx++) { @@ -136,14 +136,14 @@ void SkeletalTrapezoidation::transferEdge( graph_.edges.emplace_front(SkeletalTrapezoidationEdge()); edge_t* edge = &graph_.edges.front(); - edge->from = v0; - edge->to = v1; - edge->from->incident_edge = edge; + edge->from_ = v0; + edge->to_ = v1; + edge->from_->incident_edge_ = edge; if (prev_edge) { - edge->prev = prev_edge; - prev_edge->next = edge; + edge->prev_ = prev_edge; + prev_edge->next_ = edge; } prev_edge = edge; @@ -458,7 +458,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) points, segments); node_t* starting_node = vd_node_to_he_node_[starting_vonoroi_edge->vertex0()]; - starting_node->data.distance_to_boundary_ = 0; + starting_node->data_.distance_to_boundary_ = 0; constexpr bool is_next_to_start_or_end = true; graph_.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); @@ -473,7 +473,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) } transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, points, segments); - prev_edge->to->data.distance_to_boundary_ = 0; + prev_edge->to_->data_.distance_to_boundary_ = 0; } separatePointyQuadEndNodes(); @@ -484,9 +484,9 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) // without needing to iterate backward for (edge_t& edge : graph_.edges) { - if (! edge.prev) + if (! edge.prev_) { - edge.from->incident_edge = &edge; + edge.from_->incident_edge_ = &edge; } } } @@ -496,22 +496,22 @@ void SkeletalTrapezoidation::separatePointyQuadEndNodes() std::unordered_set visited_nodes; for (edge_t& edge : graph_.edges) { - if (edge.prev) + if (edge.prev_) { continue; } edge_t* quad_start = &edge; - if (visited_nodes.find(quad_start->from) == visited_nodes.end()) + if (visited_nodes.find(quad_start->from_) == visited_nodes.end()) { - visited_nodes.emplace(quad_start->from); + visited_nodes.emplace(quad_start->from_); } else { // Needs to be duplicated - graph_.nodes.emplace_back(*quad_start->from); + graph_.nodes.emplace_back(*quad_start->from_); node_t* new_node = &graph_.nodes.back(); - new_node->incident_edge = quad_start; - quad_start->from = new_node; - quad_start->twin->to = new_node; + new_node->incident_edge_ = quad_start; + quad_start->from_ = new_node; + quad_start->twin_->to_ = new_node; } } } @@ -720,32 +720,32 @@ void SkeletalTrapezoidation::updateIsCentral() double cap = sin(beading_strategy_.getTransitioningAngle() * 0.5); // = cos(bisector_angle / 2) for (edge_t& edge : graph_.edges) { - assert(edge.twin); - if (! edge.twin) + assert(edge.twin_); + if (! edge.twin_) { spdlog::warn("Encountered a Voronoi edge without twin!"); continue; } - if (edge.twin->data.centralIsSet()) + if (edge.twin_->data_.centralIsSet()) { - edge.data.setIsCentral(edge.twin->data.isCentral()); + edge.data_.setIsCentral(edge.twin_->data_.isCentral()); } - else if (edge.data.type_ == SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD) + else if (edge.data_.type_ == SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD) { - edge.data.setIsCentral(false); + edge.data_.setIsCentral(false); } - else if (std::max(edge.from->data.distance_to_boundary_, edge.to->data.distance_to_boundary_) < outer_edge_filter_length) + else if (std::max(edge.from_->data_.distance_to_boundary_, edge.to_->data_.distance_to_boundary_) < outer_edge_filter_length) { - edge.data.setIsCentral(false); + edge.data_.setIsCentral(false); } else { - Point a = edge.from->p; - Point b = edge.to->p; + Point a = edge.from_->p_; + Point b = edge.to_->p_; Point ab = b - a; - coord_t dR = std::abs(edge.to->data.distance_to_boundary_ - edge.from->data.distance_to_boundary_); + coord_t dR = std::abs(edge.to_->data_.distance_to_boundary_ - edge.from_->data_.distance_to_boundary_); coord_t dD = vSize(ab); - edge.data.setIsCentral(dR < dD * cap); + edge.data_.setIsCentral(dR < dD * cap); } } } @@ -754,35 +754,35 @@ void SkeletalTrapezoidation::filterCentral(coord_t max_length) { for (edge_t& edge : graph_.edges) { - if (isEndOfCentral(edge) && edge.to->isLocalMaximum() && ! edge.to->isLocalMaximum()) + if (isEndOfCentral(edge) && edge.to_->isLocalMaximum() && ! edge.to_->isLocalMaximum()) { - filterCentral(edge.twin, 0, max_length); + filterCentral(edge.twin_, 0, max_length); } } } bool SkeletalTrapezoidation::filterCentral(edge_t* starting_edge, coord_t traveled_dist, coord_t max_length) { - coord_t length = vSize(starting_edge->from->p - starting_edge->to->p); + coord_t length = vSize(starting_edge->from_->p_ - starting_edge->to_->p_); if (traveled_dist + length > max_length) { return false; } bool should_dissolve = true; // Should we unmark this as central and propagate that? - for (edge_t* next_edge = starting_edge->next; next_edge && next_edge != starting_edge->twin; next_edge = next_edge->twin->next) + for (edge_t* next_edge = starting_edge->next_; next_edge && next_edge != starting_edge->twin_; next_edge = next_edge->twin_->next_) { - if (next_edge->data.isCentral()) + if (next_edge->data_.isCentral()) { should_dissolve &= filterCentral(next_edge, traveled_dist + length, max_length); } } - should_dissolve &= ! starting_edge->to->isLocalMaximum(); // Don't filter central regions with a local maximum! + should_dissolve &= ! starting_edge->to_->isLocalMaximum(); // Don't filter central regions with a local maximum! if (should_dissolve) { - starting_edge->data.setIsCentral(false); - starting_edge->twin->data.setIsCentral(false); + starting_edge->data_.setIsCentral(false); + starting_edge->twin_->data_.setIsCentral(false); } return should_dissolve; } @@ -791,10 +791,10 @@ void SkeletalTrapezoidation::filterOuterCentral() { for (edge_t& edge : graph_.edges) { - if (! edge.prev) + if (! edge.prev_) { - edge.data.setIsCentral(false); - edge.twin->data.setIsCentral(false); + edge.data_.setIsCentral(false); + edge.twin_->data_.setIsCentral(false); } } } @@ -803,9 +803,9 @@ void SkeletalTrapezoidation::updateBeadCount() { for (edge_t& edge : graph_.edges) { - if (edge.data.isCentral()) + if (edge.data_.isCentral()) { - edge.to->data.bead_count_ = beading_strategy_.getOptimalBeadCount(edge.to->data.distance_to_boundary_ * 2); + edge.to_->data_.bead_count_ = beading_strategy_.getOptimalBeadCount(edge.to_->data_.distance_to_boundary_ * 2); } } @@ -814,18 +814,18 @@ void SkeletalTrapezoidation::updateBeadCount() { if (node.isLocalMaximum()) { - if (node.data.distance_to_boundary_ < 0) + if (node.data_.distance_to_boundary_ < 0) { spdlog::warn("Distance to boundary not yet computed for local maximum!"); - node.data.distance_to_boundary_ = std::numeric_limits::max(); - edge_t* edge = node.incident_edge; + node.data_.distance_to_boundary_ = std::numeric_limits::max(); + edge_t* edge = node.incident_edge_; do { - node.data.distance_to_boundary_ = std::min(node.data.distance_to_boundary_, edge->to->data.distance_to_boundary_ + vSize(edge->from->p - edge->to->p)); - } while (edge = edge->twin->next, edge != node.incident_edge); + node.data_.distance_to_boundary_ = std::min(node.data_.distance_to_boundary_, edge->to_->data_.distance_to_boundary_ + vSize(edge->from_->p_ - edge->to_->p_)); + } while (edge = edge->twin_->next_, edge != node.incident_edge_); } - coord_t bead_count = beading_strategy_.getOptimalBeadCount(node.data.distance_to_boundary_ * 2); - node.data.bead_count_ = bead_count; + coord_t bead_count = beading_strategy_.getOptimalBeadCount(node.data_.distance_to_boundary_ * 2); + node.data_.bead_count_ = bead_count; } } } @@ -838,56 +838,56 @@ void SkeletalTrapezoidation::filterNoncentralRegions() { continue; } - if (edge.to->data.bead_count_ < 0 && edge.to->data.distance_to_boundary_ != 0) + if (edge.to_->data_.bead_count_ < 0 && edge.to_->data_.distance_to_boundary_ != 0) { spdlog::warn("Encountered an uninitialized bead at the boundary!"); } - assert(edge.to->data.bead_count_ >= 0 || edge.to->data.distance_to_boundary_ == 0); + assert(edge.to_->data_.bead_count_ >= 0 || edge.to_->data_.distance_to_boundary_ == 0); constexpr coord_t max_dist = 400; - filterNoncentralRegions(&edge, edge.to->data.bead_count_, 0, max_dist); + filterNoncentralRegions(&edge, edge.to_->data_.bead_count_, 0, max_dist); } } bool SkeletalTrapezoidation::filterNoncentralRegions(edge_t* to_edge, coord_t bead_count, coord_t traveled_dist, coord_t max_dist) { - coord_t r = to_edge->to->data.distance_to_boundary_; + coord_t r = to_edge->to_->data_.distance_to_boundary_; - edge_t* next_edge = to_edge->next; - for (; next_edge && next_edge != to_edge->twin; next_edge = next_edge->twin->next) + edge_t* next_edge = to_edge->next_; + for (; next_edge && next_edge != to_edge->twin_; next_edge = next_edge->twin_->next_) { - if (next_edge->to->data.distance_to_boundary_ >= r || shorterThen(next_edge->to->p - next_edge->from->p, 10)) + if (next_edge->to_->data_.distance_to_boundary_ >= r || shorterThen(next_edge->to_->p_ - next_edge->from_->p_, 10)) { break; // Only walk upward } } - if (next_edge == to_edge->twin || ! next_edge) + if (next_edge == to_edge->twin_ || ! next_edge) { return false; } - const coord_t length = vSize(next_edge->to->p - next_edge->from->p); + const coord_t length = vSize(next_edge->to_->p_ - next_edge->from_->p_); bool dissolve = false; - if (next_edge->to->data.bead_count_ == bead_count) + if (next_edge->to_->data_.bead_count_ == bead_count) { dissolve = true; } - else if (next_edge->to->data.bead_count_ < 0) + else if (next_edge->to_->data_.bead_count_ < 0) { dissolve = filterNoncentralRegions(next_edge, bead_count, traveled_dist + length, max_dist); } else // Upward bead count is different { // Dissolve if two central regions with different bead count are closer together than the max_dist (= transition distance) - dissolve = (traveled_dist + length < max_dist) && std::abs(next_edge->to->data.bead_count_ - bead_count) == 1; + dissolve = (traveled_dist + length < max_dist) && std::abs(next_edge->to_->data_.bead_count_ - bead_count) == 1; } if (dissolve) { - next_edge->data.setIsCentral(true); - next_edge->twin->data.setIsCentral(true); - next_edge->to->data.bead_count_ = beading_strategy_.getOptimalBeadCount(next_edge->to->data.distance_to_boundary_ * 2); - next_edge->to->data.transition_ratio_ = 0; + next_edge->data_.setIsCentral(true); + next_edge->twin_->data_.setIsCentral(true); + next_edge->to_->data_.bead_count_ = beading_strategy_.getOptimalBeadCount(next_edge->to_->data_.distance_to_boundary_ * 2); + next_edge->to_->data_.transition_ratio_ = 0; } return dissolve; // Dissolving only depend on the one edge going upward. There cannot be multiple edges going upward. } @@ -901,9 +901,9 @@ void SkeletalTrapezoidation::generateTransitioningRibs() for (edge_t& edge : graph_.edges) { // Check if there is a transition in between nodes with different bead counts - if (edge.data.isCentral() && edge.from->data.bead_count_ != edge.to->data.bead_count_) + if (edge.data_.isCentral() && edge.from_->data_.bead_count_ != edge.to_->data_.bead_count_) { - assert(edge.data.hasTransitions() || edge.twin->data.hasTransitions()); + assert(edge.data_.hasTransitions() || edge.twin_->data_.hasTransitions()); } } @@ -921,22 +921,22 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tdata.distance_to_boundary_; - coord_t end_R = edge.to->data.distance_to_boundary_; - int start_bead_count = edge.from->data.bead_count_; - int end_bead_count = edge.to->data.bead_count_; + coord_t start_R = edge.from_->data_.distance_to_boundary_; + coord_t end_R = edge.to_->data_.distance_to_boundary_; + int start_bead_count = edge.from_->data_.bead_count_; + int end_bead_count = edge.to_->data_.bead_count_; if (start_R == end_R) { // No transitions occur when both end points have the same distance_to_boundary - assert(edge.from->data.bead_count_ == edge.to->data.bead_count_); - if (edge.from->data.bead_count_ != edge.to->data.bead_count_) + assert(edge.from_->data_.bead_count_ == edge.to_->data_.bead_count_); + if (edge.from_->data_.bead_count_ != edge.to_->data_.bead_count_) { - spdlog::warn("Bead count {} is different from {} even though distance to boundary is the same.", edge.from->data.bead_count_, edge.to->data.bead_count_); + spdlog::warn("Bead count {} is different from {} even though distance to boundary is the same.", edge.from_->data_.bead_count_, edge.to_->data_.bead_count_); } continue; } @@ -945,7 +945,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tdata.bead_count_ == edge.to->data.bead_count_) + if (edge.from_->data_.bead_count_ == edge.to_->data_.bead_count_) { // No transitions should occur according to the enforced bead counts continue; } @@ -959,7 +959,7 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_tp - edge.to->p); + coord_t edge_size = vSize(edge.from_->p_ - edge.to_->p_); for (int transition_lower_bead_count = start_bead_count; transition_lower_bead_count < end_bead_count; transition_lower_bead_count++) { coord_t mid_R = beading_strategy_.getTransitionThickness(transition_lower_bead_count) / 2; @@ -980,18 +980,18 @@ void SkeletalTrapezoidation::generateTransitionMids(ptr_vector_t= transitions->back().pos_); - if (! edge.data.hasTransitions(ignore_empty)) + assert((! edge.data_.hasTransitions(ignore_empty)) || mid_pos >= transitions->back().pos_); + if (! edge.data_.hasTransitions(ignore_empty)) { edge_transitions.emplace_back(std::make_shared>()); - edge.data.setTransitions(edge_transitions.back()); // initialization - transitions = edge.data.getTransitions(); + edge.data_.setTransitions(edge_transitions.back()); // initialization + transitions = edge.data_.getTransitions(); } transitions->emplace_back(mid_pos, transition_lower_bead_count, mid_R); } - assert((edge.from->data.bead_count_ == edge.to->data.bead_count_) || edge.data.hasTransitions()); + assert((edge.from_->data_.bead_count_ == edge.to_->data_.bead_count_) || edge.data_.hasTransitions()); } } @@ -999,18 +999,18 @@ void SkeletalTrapezoidation::filterTransitionMids() { for (edge_t& edge : graph_.edges) { - if (! edge.data.hasTransitions()) + if (! edge.data_.hasTransitions()) { continue; } - auto& transitions = *edge.data.getTransitions(); + auto& transitions = *edge.data_.getTransitions(); // This is how stuff should be stored in transitions assert(transitions.front().lower_bead_count_ <= transitions.back().lower_bead_count_); - assert(edge.from->data.distance_to_boundary_ <= edge.to->data.distance_to_boundary_); + assert(edge.from_->data_.distance_to_boundary_ <= edge.to_->data_.distance_to_boundary_); - const Point a = edge.from->p; - const Point b = edge.to->p; + const Point a = edge.from_->p_; + const Point b = edge.to_->p_; Point ab = b - a; coord_t ab_size = vSize(ab); @@ -1021,7 +1021,7 @@ void SkeletalTrapezoidation::filterTransitionMids() for (TransitionMidRef& ref : to_be_dissolved_back) { dissolveBeadCountRegion(&edge, transitions.back().lower_bead_count_ + 1, transitions.back().lower_bead_count_); - ref.edge_->data.getTransitions()->erase(ref.transition_it_); + ref.edge_->data_.getTransitions()->erase(ref.transition_it_); } { @@ -1040,18 +1040,18 @@ void SkeletalTrapezoidation::filterTransitionMids() } going_up = false; - std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin, transitions.front(), transitions.front().pos_, transition_filter_dist_, going_up); + std::list to_be_dissolved_front = dissolveNearbyTransitions(edge.twin_, transitions.front(), transitions.front().pos_, transition_filter_dist_, going_up); bool should_dissolve_front = ! to_be_dissolved_front.empty(); for (TransitionMidRef& ref : to_be_dissolved_front) { - dissolveBeadCountRegion(edge.twin, transitions.front().lower_bead_count_, transitions.front().lower_bead_count_ + 1); - ref.edge_->data.getTransitions()->erase(ref.transition_it_); + dissolveBeadCountRegion(edge.twin_, transitions.front().lower_bead_count_, transitions.front().lower_bead_count_ + 1); + ref.edge_->data_.getTransitions()->erase(ref.transition_it_); } { coord_t trans_bead_count = transitions.front().lower_bead_count_; coord_t lower_transition_half_length = beading_strategy_.getTransitionAnchorPos(trans_bead_count) * beading_strategy_.getTransitioningLength(trans_bead_count); - should_dissolve_front |= filterEndOfCentralTransition(edge.twin, transitions.front().pos_, lower_transition_half_length, trans_bead_count + 1); + should_dissolve_front |= filterEndOfCentralTransition(edge.twin_, transitions.front().pos_, lower_transition_half_length, trans_bead_count + 1); } if (should_dissolve_front) @@ -1074,23 +1074,23 @@ std::list return to_be_dissolved; } bool should_dissolve = true; - for (edge_t* edge = edge_to_start->next; edge && edge != edge_to_start->twin; edge = edge->twin->next) + for (edge_t* edge = edge_to_start->next_; edge && edge != edge_to_start->twin_; edge = edge->twin_->next_) { - if (! edge->data.isCentral()) + if (! edge->data_.isCentral()) { continue; } - Point a = edge->from->p; - Point b = edge->to->p; + Point a = edge->from_->p_; + Point b = edge->to_->p_; Point ab = b - a; coord_t ab_size = vSize(ab); bool is_aligned = edge->isUpward(); - edge_t* aligned_edge = is_aligned ? edge : edge->twin; + edge_t* aligned_edge = is_aligned ? edge : edge->twin_; bool seen_transition_on_this_edge = false; const coord_t origin_radius = origin_transition.feature_radius_; - const coord_t radius_here = edge->from->data.distance_to_boundary_; + const coord_t radius_here = edge->from_->data_.distance_to_boundary_; const bool dissolve_result_is_odd = bool(origin_transition.lower_bead_count_ % 2) == going_up; const coord_t width_deviation = std::abs(origin_radius - radius_here) * 2; // times by two because the deviation happens at both sides of the significant edge const coord_t line_width_deviation = dissolve_result_is_odd @@ -1101,9 +1101,9 @@ std::list should_dissolve = false; } - if (should_dissolve && aligned_edge->data.hasTransitions()) + if (should_dissolve && aligned_edge->data_.hasTransitions()) { - auto& transitions = *aligned_edge->data.getTransitions(); + auto& transitions = *aligned_edge->data_.getTransitions(); for (auto transition_it = transitions.begin(); transition_it != transitions.end(); ++transition_it) { // Note: this is not necessarily iterating in the traveling direction! // Check whether we should dissolve @@ -1146,15 +1146,15 @@ std::list void SkeletalTrapezoidation::dissolveBeadCountRegion(edge_t* edge_to_start, coord_t from_bead_count, coord_t to_bead_count) { assert(from_bead_count != to_bead_count); - if (edge_to_start->to->data.bead_count_ != from_bead_count) + if (edge_to_start->to_->data_.bead_count_ != from_bead_count) { return; } - edge_to_start->to->data.bead_count_ = to_bead_count; - for (edge_t* edge = edge_to_start->next; edge && edge != edge_to_start->twin; edge = edge->twin->next) + edge_to_start->to_->data_.bead_count_ = to_bead_count; + for (edge_t* edge = edge_to_start->next_; edge && edge != edge_to_start->twin_; edge = edge->twin_->next_) { - if (! edge->data.isCentral()) + if (! edge->data_.isCentral()) { continue; } @@ -1171,11 +1171,11 @@ bool SkeletalTrapezoidation::filterEndOfCentralTransition(edge_t* edge_to_start, bool is_end_of_central = true; bool should_dissolve = false; - for (edge_t* next_edge = edge_to_start->next; next_edge && next_edge != edge_to_start->twin; next_edge = next_edge->twin->next) + for (edge_t* next_edge = edge_to_start->next_; next_edge && next_edge != edge_to_start->twin_; next_edge = next_edge->twin_->next_) { - if (next_edge->data.isCentral()) + if (next_edge->data_.isCentral()) { - coord_t length = vSize(next_edge->to->p - next_edge->from->p); + coord_t length = vSize(next_edge->to_->p_ - next_edge->from_->p_); should_dissolve |= filterEndOfCentralTransition(next_edge, traveled_dist + length, max_dist, replacing_bead_count); is_end_of_central = false; } @@ -1187,7 +1187,7 @@ bool SkeletalTrapezoidation::filterEndOfCentralTransition(edge_t* edge_to_start, if (should_dissolve) { - edge_to_start->to->data.bead_count_ = replacing_bead_count; + edge_to_start->to_->data_.bead_count_ = replacing_bead_count; } return should_dissolve; } @@ -1196,13 +1196,13 @@ void SkeletalTrapezoidation::generateAllTransitionEnds(ptr_vector_tdata.distance_to_boundary_ <= edge.to->data.distance_to_boundary_); + assert(edge.from_->data_.distance_to_boundary_ <= edge.to_->data_.distance_to_boundary_); for (TransitionMiddle& transition_middle : transition_positions) { assert(transition_positions.front().pos_ <= transition_middle.pos_); @@ -1214,8 +1214,8 @@ void SkeletalTrapezoidation::generateAllTransitionEnds(ptr_vector_t>& edge_transition_ends) { - const Point a = edge.from->p; - const Point b = edge.to->p; + const Point a = edge.from_->p_; + const Point b = edge.to_->p_; const Point ab = b - a; const coord_t ab_size = vSize(ab); @@ -1231,7 +1231,7 @@ void SkeletalTrapezoidation::generateTransitionEnds(edge_t& edge, coord_t mid_po const coord_t start_pos = ab_size - mid_pos; const coord_t transition_half_length = transition_mid_position * transition_length; const coord_t end_pos = start_pos + transition_half_length; - generateTransitionEnd(*edge.twin, start_pos, end_pos, transition_half_length, mid_rest, start_rest, lower_bead_count, edge_transition_ends); + generateTransitionEnd(*edge.twin_, start_pos, end_pos, transition_half_length, mid_rest, start_rest, lower_bead_count, edge_transition_ends); } { // Upper bead count transition end @@ -1259,8 +1259,8 @@ bool SkeletalTrapezoidation::generateTransitionEnd( coord_t lower_bead_count, ptr_vector_t>& edge_transition_ends) { - Point a = edge.from->p; - Point b = edge.to->p; + Point a = edge.from_->p_; + Point b = edge.to_->p_; Point ab = b - a; coord_t ab_size = vSize(ab); // TODO: prevent recalculation of these values @@ -1272,8 +1272,8 @@ bool SkeletalTrapezoidation::generateTransitionEnd( bool going_up = end_rest > start_rest; - assert(edge.data.isCentral()); - if (! edge.data.isCentral()) + assert(edge.data_.isCentral()); + if (! edge.data_.isCentral()) { spdlog::warn("This function shouldn't generate ends in or beyond non-central regions."); return false; @@ -1287,19 +1287,19 @@ bool SkeletalTrapezoidation::generateTransitionEnd( assert(rest >= std::min(end_rest, start_rest)); coord_t central_edge_count = 0; - for (edge_t* outgoing = edge.next; outgoing && outgoing != edge.twin; outgoing = outgoing->twin->next) + for (edge_t* outgoing = edge.next_; outgoing && outgoing != edge.twin_; outgoing = outgoing->twin_->next_) { - if (! outgoing->data.isCentral()) + if (! outgoing->data_.isCentral()) continue; central_edge_count++; } bool is_only_going_down = true; bool has_recursed = false; - for (edge_t* outgoing = edge.next; outgoing && outgoing != edge.twin;) + for (edge_t* outgoing = edge.next_; outgoing && outgoing != edge.twin_;) { - edge_t* next = outgoing->twin->next; // Before we change the outgoing edge itself - if (! outgoing->data.isCentral()) + edge_t* next = outgoing->twin_->next_; // Before we change the outgoing edge itself + if (! outgoing->data_.isCentral()) { outgoing = next; continue; // Don't put transition ends in non-central regions @@ -1318,8 +1318,8 @@ bool SkeletalTrapezoidation::generateTransitionEnd( } if (! going_up || (has_recursed && ! is_only_going_down)) { - edge.to->data.transition_ratio_ = rest; - edge.to->data.bead_count_ = lower_bead_count; + edge.to_->data_.transition_ratio_ = rest; + edge.to_->data_.bead_count_ = lower_bead_count; } return is_only_going_down; } @@ -1336,20 +1336,20 @@ bool SkeletalTrapezoidation::generateTransitionEnd( } else { - upward_edge = edge.twin; + upward_edge = edge.twin_; pos = ab_size - end_pos; } - if (! upward_edge->data.hasTransitionEnds()) + if (! upward_edge->data_.hasTransitionEnds()) { // This edge doesn't have a data structure yet for the transition ends. Make one. edge_transition_ends.emplace_back(std::make_shared>()); - upward_edge->data.setTransitionEnds(edge_transition_ends.back()); + upward_edge->data_.setTransitionEnds(edge_transition_ends.back()); } - auto transitions = upward_edge->data.getTransitionEnds(); + auto transitions = upward_edge->data_.getTransitionEnds(); // Add a transition to it (on the correct side). - assert(ab_size == vSize(edge.twin->from->p - edge.twin->to->p)); + assert(ab_size == vSize(edge.twin_->from_->p_ - edge.twin_->to_->p_)); assert(pos <= ab_size); if (transitions->empty() || pos < transitions->front().pos_) { // Preorder so that sorting later on is faster @@ -1368,25 +1368,25 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist { // NOTE: the logic below is not fully thought through. // TODO: take transition mids into account - if (outgoing->to->data.distance_to_boundary_ == 0) + if (outgoing->to_->data_.distance_to_boundary_ == 0) { return true; } - bool is_upward = outgoing->to->data.distance_to_boundary_ >= outgoing->from->data.distance_to_boundary_; - edge_t* upward_edge = is_upward ? outgoing : outgoing->twin; - if (outgoing->to->data.bead_count_ > lower_bead_count + 1) + bool is_upward = outgoing->to_->data_.distance_to_boundary_ >= outgoing->from_->data_.distance_to_boundary_; + edge_t* upward_edge = is_upward ? outgoing : outgoing->twin_; + if (outgoing->to_->data_.bead_count_ > lower_bead_count + 1) { - assert(upward_edge->data.hasTransitions() && "If the bead count is going down there has to be a transition mid!"); - if (! upward_edge->data.hasTransitions()) + assert(upward_edge->data_.hasTransitions() && "If the bead count is going down there has to be a transition mid!"); + if (! upward_edge->data_.hasTransitions()) { spdlog::warn("If the bead count is going down there has to be a transition mid!"); } return false; } - coord_t length = vSize(outgoing->to->p - outgoing->from->p); - if (upward_edge->data.hasTransitions()) + coord_t length = vSize(outgoing->to_->p_ - outgoing->from_->p_); + if (upward_edge->data_.hasTransitions()) { - auto& transition_mids = *upward_edge->data.getTransitions(); + auto& transition_mids = *upward_edge->data_.getTransitions(); TransitionMiddle& mid = is_upward ? transition_mids.front() : transition_mids.back(); if (mid.lower_bead_count_ == lower_bead_count && ((is_upward && mid.pos_ + traveled_dist < max_dist) || (! is_upward && length - mid.pos_ + traveled_dist < max_dist))) { @@ -1397,16 +1397,16 @@ bool SkeletalTrapezoidation::isGoingDown(edge_t* outgoing, coord_t traveled_dist { return false; } - if (outgoing->to->data.bead_count_ <= lower_bead_count && ! (outgoing->to->data.bead_count_ == lower_bead_count && outgoing->to->data.transition_ratio_ > 0.0)) + if (outgoing->to_->data_.bead_count_ <= lower_bead_count && ! (outgoing->to_->data_.bead_count_ == lower_bead_count && outgoing->to_->data_.transition_ratio_ > 0.0)) { return true; } bool is_only_going_down = true; bool has_recursed = false; - for (edge_t* next = outgoing->next; next && next != outgoing->twin; next = next->twin->next) + for (edge_t* next = outgoing->next_; next && next != outgoing->twin_; next = next->twin_->next_) { - if (! next->data.isCentral()) + if (! next->data_.isCentral()) { continue; } @@ -1421,16 +1421,16 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_tdata.hasTransitionEnds()) + if (edge.twin_->data_.hasTransitionEnds()) { - coord_t length = vSize(edge.from->p - edge.to->p); - auto& twin_transition_ends = *edge.twin->data.getTransitionEnds(); - if (! edge.data.hasTransitionEnds()) + coord_t length = vSize(edge.from_->p_ - edge.to_->p_); + auto& twin_transition_ends = *edge.twin_->data_.getTransitionEnds(); + if (! edge.data_.hasTransitionEnds()) { edge_transition_ends.emplace_back(std::make_shared>()); - edge.data.setTransitionEnds(edge_transition_ends.back()); + edge.data_.setTransitionEnds(edge_transition_ends.back()); } - auto& transition_ends = *edge.data.getTransitionEnds(); + auto& transition_ends = *edge.data_.getTransitionEnds(); for (TransitionEnd& end : twin_transition_ends) { transition_ends.emplace_back(length - end.pos_, end.lower_bead_count_, end.is_lower_end_); @@ -1441,24 +1441,24 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_tp; - Point b = to->p; + node_t* from = edge.from_; + node_t* to = edge.to_; + Point a = from->p_; + Point b = to->p_; Point ab = b - a; coord_t ab_size = vSize(ab); @@ -1468,40 +1468,40 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_t ab_size - snap_dist_) && close_node->data.bead_count_ == new_node_bead_count) + if ((end_pos < snap_dist_ || end_pos > ab_size - snap_dist_) && close_node->data_.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); - close_node->data.transition_ratio_ = 0; + close_node->data_.transition_ratio_ = 0; continue; } Point mid = a + normal(ab, end_pos); - assert(last_edge_replacing_input->data.isCentral()); - assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data_.isCentral()); + assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); last_edge_replacing_input = graph_.insertNode(last_edge_replacing_input, mid, new_node_bead_count); - assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); - assert(last_edge_replacing_input->data.isCentral()); + assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data_.isCentral()); } } } bool SkeletalTrapezoidation::isEndOfCentral(const edge_t& edge_to) const { - if (! edge_to.data.isCentral()) + if (! edge_to.data_.isCentral()) { return false; } - if (! edge_to.next) + if (! edge_to.next_) { return true; } - for (const edge_t* edge = edge_to.next; edge && edge != edge_to.twin; edge = edge->twin->next) + for (const edge_t* edge = edge_to.next_; edge && edge != edge_to.twin_; edge = edge->twin_->next_) { - if (edge->data.isCentral()) + if (edge->data_.isCentral()) { return false; } - assert(edge->twin); + assert(edge->twin_); } return true; } @@ -1512,13 +1512,13 @@ void SkeletalTrapezoidation::generateExtraRibs() // The code was equivalent to a full loop over all the edges though, unless there was one edge or less, in which case it would produce undefined behaviour. for (auto& edge : graph_.edges) { - if (! edge.data.isCentral() || shorterThen(edge.to->p - edge.from->p, discretization_step_size_) - || edge.from->data.distance_to_boundary_ >= edge.to->data.distance_to_boundary_) + if (! edge.data_.isCentral() || shorterThen(edge.to_->p_ - edge.from_->p_, discretization_step_size_) + || edge.from_->data_.distance_to_boundary_ >= edge.to_->data_.distance_to_boundary_) { continue; } - std::vector rib_thicknesses = beading_strategy_.getNonlinearThicknesses(edge.from->data.bead_count_); + std::vector rib_thicknesses = beading_strategy_.getNonlinearThicknesses(edge.from_->data_.bead_count_); if (rib_thicknesses.empty()) { @@ -1526,14 +1526,14 @@ void SkeletalTrapezoidation::generateExtraRibs() } // Preload some variables before [edge] gets changed - node_t* from = edge.from; - node_t* to = edge.to; - Point a = from->p; - Point b = to->p; + node_t* from = edge.from_; + node_t* to = edge.to_; + Point a = from->p_; + Point b = to->p_; Point ab = b - a; coord_t ab_size = vSize(ab); - coord_t a_R = edge.from->data.distance_to_boundary_; - coord_t b_R = edge.to->data.distance_to_boundary_; + coord_t a_R = edge.from_->data_.distance_to_boundary_; + coord_t b_R = edge.to_->data_.distance_to_boundary_; edge_t* last_edge_replacing_input = &edge; for (coord_t rib_thickness : rib_thicknesses) @@ -1547,24 +1547,24 @@ void SkeletalTrapezoidation::generateExtraRibs() break; } - coord_t new_node_bead_count = std::min(edge.from->data.bead_count_, edge.to->data.bead_count_); + coord_t new_node_bead_count = std::min(edge.from_->data_.bead_count_, edge.to_->data_.bead_count_); coord_t end_pos = ab_size * (rib_thickness / 2 - a_R) / (b_R - a_R); assert(end_pos > 0); assert(end_pos < ab_size); node_t* close_node = (end_pos < ab_size / 2) ? from : to; - if ((end_pos < snap_dist_ || end_pos > ab_size - snap_dist_) && close_node->data.bead_count_ == new_node_bead_count) + if ((end_pos < snap_dist_ || end_pos > ab_size - snap_dist_) && close_node->data_.bead_count_ == new_node_bead_count) { assert(end_pos <= ab_size); - close_node->data.transition_ratio_ = 0; + close_node->data_.transition_ratio_ = 0; continue; } Point mid = a + normal(ab, end_pos); - assert(last_edge_replacing_input->data.isCentral()); - assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data_.isCentral()); + assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); last_edge_replacing_input = graph_.insertNode(last_edge_replacing_input, mid, new_node_bead_count); - assert(last_edge_replacing_input->data.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); - assert(last_edge_replacing_input->data.isCentral()); + assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); + assert(last_edge_replacing_input->data_.isCentral()); } } } @@ -1582,7 +1582,7 @@ void SkeletalTrapezoidation::generateSegments() std::vector upward_quad_mids; for (edge_t& edge : graph_.edges) { - if (edge.prev && edge.next && edge.isUpward()) + if (edge.prev_ && edge.next_ && edge.isUpward()) { upward_quad_mids.emplace_back(&edge); } @@ -1593,20 +1593,20 @@ void SkeletalTrapezoidation::generateSegments() upward_quad_mids.end(), [this](edge_t* a, edge_t* b) { - if (a->to->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) + if (a->to_->data_.distance_to_boundary_ == b->to_->data_.distance_to_boundary_) { // PathOrdering between two 'upward' edges of the same distance is important when one of the edges is flat and connected to the other - if (a->from->data.distance_to_boundary_ == a->to->data.distance_to_boundary_ && b->from->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) + if (a->from_->data_.distance_to_boundary_ == a->to_->data_.distance_to_boundary_ && b->from_->data_.distance_to_boundary_ == b->to_->data_.distance_to_boundary_) { coord_t max = std::numeric_limits::max(); - coord_t a_dist_from_up = std::min(a->distToGoUp().value_or(max), a->twin->distToGoUp().value_or(max)) - vSize(a->to->p - a->from->p); - coord_t b_dist_from_up = std::min(b->distToGoUp().value_or(max), b->twin->distToGoUp().value_or(max)) - vSize(b->to->p - b->from->p); + coord_t a_dist_from_up = std::min(a->distToGoUp().value_or(max), a->twin_->distToGoUp().value_or(max)) - vSize(a->to_->p_ - a->from_->p_); + coord_t b_dist_from_up = std::min(b->distToGoUp().value_or(max), b->twin_->distToGoUp().value_or(max)) - vSize(b->to_->p_ - b->from_->p_); return a_dist_from_up < b_dist_from_up; } - else if (a->from->data.distance_to_boundary_ == a->to->data.distance_to_boundary_) + else if (a->from_->data_.distance_to_boundary_ == a->to_->data_.distance_to_boundary_) { return true; // Edge a might be 'above' edge b } - else if (b->from->data.distance_to_boundary_ == b->to->data.distance_to_boundary_) + else if (b->from_->data_.distance_to_boundary_ == b->to_->data_.distance_to_boundary_) { return false; // Edge b might be 'above' edge a } @@ -1615,36 +1615,36 @@ void SkeletalTrapezoidation::generateSegments() // PathOrdering is not important } } - return a->to->data.distance_to_boundary_ > b->to->data.distance_to_boundary_; + return a->to_->data_.distance_to_boundary_ > b->to_->data_.distance_to_boundary_; }); ptr_vector_t node_beadings; { // Store beading for (node_t& node : graph_.nodes) { - if (node.data.bead_count_ <= 0) + if (node.data_.bead_count_ <= 0) { continue; } - if (node.data.transition_ratio_ == 0) + if (node.data_.transition_ratio_ == 0) { - node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_))); - node.data.setBeading(node_beadings.back()); - assert(node_beadings.back()->beading_.total_thickness == node.data.distance_to_boundary_ * 2); - if (node_beadings.back()->beading_.total_thickness != node.data.distance_to_boundary_ * 2) + node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node.data_.distance_to_boundary_ * 2, node.data_.bead_count_))); + node.data_.setBeading(node_beadings.back()); + assert(node_beadings.back()->beading_.total_thickness == node.data_.distance_to_boundary_ * 2); + if (node_beadings.back()->beading_.total_thickness != node.data_.distance_to_boundary_ * 2) { spdlog::warn("If transitioning to an endpoint (ratio 0), the node should be exactly in the middle."); } } else { - Beading low_count_beading = beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_); - Beading high_count_beading = beading_strategy_.compute(node.data.distance_to_boundary_ * 2, node.data.bead_count_ + 1); - Beading merged = interpolate(low_count_beading, 1.0 - node.data.transition_ratio_, high_count_beading); + Beading low_count_beading = beading_strategy_.compute(node.data_.distance_to_boundary_ * 2, node.data_.bead_count_); + Beading high_count_beading = beading_strategy_.compute(node.data_.distance_to_boundary_ * 2, node.data_.bead_count_ + 1); + Beading merged = interpolate(low_count_beading, 1.0 - node.data_.transition_ratio_, high_count_beading); node_beadings.emplace_back(new BeadingPropagation(merged)); - node.data.setBeading(node_beadings.back()); - assert(merged.total_thickness == node.data.distance_to_boundary_ * 2); - if (merged.total_thickness != node.data.distance_to_boundary_ * 2) + node.data_.setBeading(node_beadings.back()); + assert(merged.total_thickness == node.data_.distance_to_boundary_ * 2); + if (merged.total_thickness != node.data_.distance_to_boundary_ * 2) { spdlog::warn("If merging two beads, the new bead must be exactly in the middle."); } @@ -1666,25 +1666,25 @@ void SkeletalTrapezoidation::generateSegments() SkeletalTrapezoidation::edge_t* SkeletalTrapezoidation::getQuadMaxRedgeTo(edge_t* quad_start_edge) { - assert(quad_start_edge->prev == nullptr); - assert(quad_start_edge->from->data.distance_to_boundary_ == 0); + assert(quad_start_edge->prev_ == nullptr); + assert(quad_start_edge->from_->data_.distance_to_boundary_ == 0); coord_t max_R = -1; edge_t* ret = nullptr; - for (edge_t* edge = quad_start_edge; edge; edge = edge->next) + for (edge_t* edge = quad_start_edge; edge; edge = edge->next_) { - coord_t r = edge->to->data.distance_to_boundary_; + coord_t r = edge->to_->data_.distance_to_boundary_; if (r > max_R) { max_R = r; ret = edge; } } - if (! ret->next && ret->to->data.distance_to_boundary_ - 5 < ret->from->data.distance_to_boundary_) + if (! ret->next_ && ret->to_->data_.distance_to_boundary_ - 5 < ret->from_->data_.distance_to_boundary_) { - ret = ret->prev; + ret = ret->prev_; } assert(ret); - assert(ret->next); + assert(ret->next_); return ret; } @@ -1693,30 +1693,30 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar for (auto upward_quad_mids_it = upward_quad_mids.rbegin(); upward_quad_mids_it != upward_quad_mids.rend(); ++upward_quad_mids_it) { edge_t* upward_edge = *upward_quad_mids_it; - if (upward_edge->to->data.bead_count_ >= 0) + if (upward_edge->to_->data_.bead_count_ >= 0) { // Don't override local beading continue; } - if (! upward_edge->from->data.hasBeading()) + if (! upward_edge->from_->data_.hasBeading()) { // Only propagate if we have something to propagate continue; } - BeadingPropagation& lower_beading = *upward_edge->from->data.getBeading(); - if (upward_edge->to->data.hasBeading()) + BeadingPropagation& lower_beading = *upward_edge->from_->data_.getBeading(); + if (upward_edge->to_->data_.hasBeading()) { // Only propagate to places where there is place continue; } assert( - (upward_edge->from->data.distance_to_boundary_ != upward_edge->to->data.distance_to_boundary_ - || shorterThen(upward_edge->to->p - upward_edge->from->p, central_filter_dist_)) + (upward_edge->from_->data_.distance_to_boundary_ != upward_edge->to_->data_.distance_to_boundary_ + || shorterThen(upward_edge->to_->p_ - upward_edge->from_->p_, central_filter_dist_)) && "zero difference R edges should always be central"); - coord_t length = vSize(upward_edge->to->p - upward_edge->from->p); + coord_t length = vSize(upward_edge->to_->p_ - upward_edge->from_->p_); BeadingPropagation upper_beading = lower_beading; upper_beading.dist_to_bottom_source_ += length; upper_beading.is_upward_propagated_only_ = true; node_beadings.emplace_back(new BeadingPropagation(upper_beading)); - upward_edge->to->data.setBeading(node_beadings.back()); - assert(upper_beading.beading_.total_thickness <= upward_edge->to->data.distance_to_boundary_ * 2); + upward_edge->to_->data_.setBeading(node_beadings.back()); + assert(upper_beading.beading_.total_thickness <= upward_edge->to_->data_.distance_to_boundary_ * 2); } } @@ -1725,13 +1725,13 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(std::vector& upw for (edge_t* upward_quad_mid : upward_quad_mids) { // Transfer beading information to lower nodes - if (! upward_quad_mid->data.isCentral()) + if (! upward_quad_mid->data_.isCentral()) { // for equidistant edge: propagate from known beading to node with unknown beading - if (upward_quad_mid->from->data.distance_to_boundary_ == upward_quad_mid->to->data.distance_to_boundary_ && upward_quad_mid->from->data.hasBeading() - && ! upward_quad_mid->to->data.hasBeading()) + if (upward_quad_mid->from_->data_.distance_to_boundary_ == upward_quad_mid->to_->data_.distance_to_boundary_ && upward_quad_mid->from_->data_.hasBeading() + && ! upward_quad_mid->to_->data_.hasBeading()) { - propagateBeadingsDownward(upward_quad_mid->twin, node_beadings); + propagateBeadingsDownward(upward_quad_mid->twin_, node_beadings); } else { @@ -1743,30 +1743,30 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(std::vector& upw void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr_vector_t& node_beadings) { - coord_t length = vSize(edge_to_peak->to->p - edge_to_peak->from->p); - BeadingPropagation& top_beading = *getOrCreateBeading(edge_to_peak->to, node_beadings); - assert(top_beading.beading_.total_thickness >= edge_to_peak->to->data.distance_to_boundary_ * 2); - if (top_beading.beading_.total_thickness < edge_to_peak->to->data.distance_to_boundary_ * 2) + coord_t length = vSize(edge_to_peak->to_->p_ - edge_to_peak->from_->p_); + BeadingPropagation& top_beading = *getOrCreateBeading(edge_to_peak->to_, node_beadings); + assert(top_beading.beading_.total_thickness >= edge_to_peak->to_->data_.distance_to_boundary_ * 2); + if (top_beading.beading_.total_thickness < edge_to_peak->to_->data_.distance_to_boundary_ * 2) { spdlog::warn("Top bead is beyond the center of the total width."); } assert(! top_beading.is_upward_propagated_only_); - if (! edge_to_peak->from->data.hasBeading()) + if (! edge_to_peak->from_->data_.hasBeading()) { // Set new beading if there is no beading associated with the node yet BeadingPropagation propagated_beading = top_beading; propagated_beading.dist_from_top_source_ += length; node_beadings.emplace_back(new BeadingPropagation(propagated_beading)); - edge_to_peak->from->data.setBeading(node_beadings.back()); - assert(propagated_beading.beading_.total_thickness >= edge_to_peak->from->data.distance_to_boundary_ * 2); - if (propagated_beading.beading_.total_thickness < edge_to_peak->from->data.distance_to_boundary_ * 2) + edge_to_peak->from_->data_.setBeading(node_beadings.back()); + assert(propagated_beading.beading_.total_thickness >= edge_to_peak->from_->data_.distance_to_boundary_ * 2); + if (propagated_beading.beading_.total_thickness < edge_to_peak->from_->data_.distance_to_boundary_ * 2) { spdlog::warn("Propagated bead is beyond the center of the total width."); } } else { - BeadingPropagation& bottom_beading = *edge_to_peak->from->data.getBeading(); + BeadingPropagation& bottom_beading = *edge_to_peak->from_->data_.getBeading(); coord_t total_dist = top_beading.dist_from_top_source_ + length + bottom_beading.dist_to_bottom_source_; Ratio ratio_of_top = static_cast(bottom_beading.dist_to_bottom_source_) / std::min(total_dist, beading_propagation_transition_dist_); ratio_of_top = std::max(0.0_r, ratio_of_top); @@ -1777,11 +1777,11 @@ void SkeletalTrapezoidation::propagateBeadingsDownward(edge_t* edge_to_peak, ptr } else { - Beading merged_beading = interpolate(top_beading.beading_, ratio_of_top, bottom_beading.beading_, edge_to_peak->from->data.distance_to_boundary_); + Beading merged_beading = interpolate(top_beading.beading_, ratio_of_top, bottom_beading.beading_, edge_to_peak->from_->data_.distance_to_boundary_); bottom_beading = BeadingPropagation(merged_beading); bottom_beading.is_upward_propagated_only_ = false; - assert(merged_beading.total_thickness >= edge_to_peak->from->data.distance_to_boundary_ * 2); - if (merged_beading.total_thickness < edge_to_peak->from->data.distance_to_boundary_ * 2) + assert(merged_beading.total_thickness >= edge_to_peak->from_->data_.distance_to_boundary_ * 2); + if (merged_beading.total_thickness < edge_to_peak->from_->data_.distance_to_boundary_ * 2) { spdlog::warn("Merged bead is beyond the center of the total width."); } @@ -1860,32 +1860,32 @@ void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& for (edge_t& edge_ : graph_.edges) { edge_t* edge = &edge_; - if (edge->from->data.distance_to_boundary_ > edge->to->data.distance_to_boundary_) + if (edge->from_->data_.distance_to_boundary_ > edge->to_->data_.distance_to_boundary_) { // Only consider the upward half-edges continue; } - coord_t start_R = edge->to->data.distance_to_boundary_; // higher R - coord_t end_R = edge->from->data.distance_to_boundary_; // lower R + coord_t start_R = edge->to_->data_.distance_to_boundary_; // higher R + coord_t end_R = edge->from_->data_.distance_to_boundary_; // lower R - if ((edge->from->data.bead_count_ == edge->to->data.bead_count_ && edge->from->data.bead_count_ >= 0) || end_R >= start_R) + if ((edge->from_->data_.bead_count_ == edge->to_->data_.bead_count_ && edge->from_->data_.bead_count_ >= 0) || end_R >= start_R) { // No beads to generate continue; } - Beading* beading = &getOrCreateBeading(edge->to, node_beadings)->beading_; + Beading* beading = &getOrCreateBeading(edge->to_, node_beadings)->beading_; edge_junctions.emplace_back(std::make_shared()); - edge_.data.setExtrusionJunctions(edge_junctions.back()); // initialization + edge_.data_.setExtrusionJunctions(edge_junctions.back()); // initialization LineJunctions& ret = *edge_junctions.back(); - assert(beading->total_thickness >= edge->to->data.distance_to_boundary_ * 2); - if (beading->total_thickness < edge->to->data.distance_to_boundary_ * 2) + assert(beading->total_thickness >= edge->to_->data_.distance_to_boundary_ * 2); + if (beading->total_thickness < edge->to_->data_.distance_to_boundary_ * 2) { spdlog::warn("Generated junction is beyond the center of total width."); } - Point a = edge->to->p; - Point b = edge->from->p; + Point a = edge->to_->p_; + Point b = edge->from_->p_; Point ab = b - a; const size_t num_junctions = beading->toolpath_locations.size(); @@ -1928,9 +1928,9 @@ void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& std::shared_ptr SkeletalTrapezoidation::getOrCreateBeading(node_t* node, ptr_vector_t& node_beadings) { - if (! node->data.hasBeading()) + if (! node->data_.hasBeading()) { - if (node->data.bead_count_ == -1) + if (node->data_.bead_count_ == -1) { // This bug is due to too small central edges constexpr coord_t nearby_dist = 100; // TODO auto nearest_beading = getNearestBeading(node, nearby_dist); @@ -1943,14 +1943,14 @@ std::shared_ptr SkeletalTrapezo bool has_central_edge = false; bool first = true; coord_t dist = std::numeric_limits::max(); - for (edge_t* edge = node->incident_edge; edge && (first || edge != node->incident_edge); edge = edge->twin->next) + for (edge_t* edge = node->incident_edge_; edge && (first || edge != node->incident_edge_); edge = edge->twin_->next_) { - if (edge->data.isCentral()) + if (edge->data_.isCentral()) { has_central_edge = true; } - assert(edge->to->data.distance_to_boundary_ >= 0); - dist = std::min(dist, edge->to->data.distance_to_boundary_ + vSize(edge->to->p - edge->from->p)); + assert(edge->to_->data_.distance_to_boundary_ >= 0); + dist = std::min(dist, edge->to_->data_.distance_to_boundary_ + vSize(edge->to_->p_ - edge->from_->p_)); first = false; } if (! has_central_edge) @@ -1958,38 +1958,39 @@ std::shared_ptr SkeletalTrapezo spdlog::error("Unknown beading for non-central node!"); } assert(dist != std::numeric_limits::max()); - node->data.bead_count_ = beading_strategy_.getOptimalBeadCount(dist * 2); + node->data_.bead_count_ = beading_strategy_.getOptimalBeadCount(dist * 2); } - assert(node->data.bead_count_ != -1); - node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node->data.distance_to_boundary_ * 2, node->data.bead_count_))); - node->data.setBeading(node_beadings.back()); + assert(node->data_.bead_count_ != -1); + node_beadings.emplace_back(new BeadingPropagation(beading_strategy_.compute(node->data_.distance_to_boundary_ * 2, node->data_.bead_count_))); + node->data_.setBeading(node_beadings.back()); } - assert(node->data.hasBeading()); - return node->data.getBeading(); + assert(node->data_.hasBeading()); + return node->data_.getBeading(); } std::shared_ptr SkeletalTrapezoidation::getNearestBeading(node_t* node, coord_t max_dist) { struct DistEdge { - edge_t* edge_to; - coord_t dist; + edge_t* edge_to_; + coord_t dist_; + DistEdge(edge_t* edge_to, coord_t dist) - : edge_to(edge_to) - , dist(dist) + : edge_to_(edge_to) + , dist_(dist) { } }; auto compare = [](const DistEdge& l, const DistEdge& r) -> bool { - return l.dist > r.dist; + return l.dist_ > r.dist_; }; std::priority_queue, decltype(compare)> further_edges(compare); bool first = true; - for (edge_t* outgoing = node->incident_edge; outgoing && (first || outgoing != node->incident_edge); outgoing = outgoing->twin->next) + for (edge_t* outgoing = node->incident_edge_; outgoing && (first || outgoing != node->incident_edge_); outgoing = outgoing->twin_->next_) { - further_edges.emplace(outgoing, vSize(outgoing->to->p - outgoing->from->p)); + further_edges.emplace(outgoing, vSize(outgoing->to_->p_ - outgoing->from_->p_)); first = false; } @@ -1999,17 +2000,17 @@ std::shared_ptr SkeletalTrapezo return nullptr; DistEdge here = further_edges.top(); further_edges.pop(); - if (here.dist > max_dist) + if (here.dist_ > max_dist) return nullptr; - if (here.edge_to->to->data.hasBeading()) + if (here.edge_to_->to_->data_.hasBeading()) { - return here.edge_to->to->data.getBeading(); + return here.edge_to_->to_->data_.getBeading(); } else { // recurse - for (edge_t* further_edge = here.edge_to->next; further_edge && further_edge != here.edge_to->twin; further_edge = further_edge->twin->next) + for (edge_t* further_edge = here.edge_to_->next_; further_edge && further_edge != here.edge_to_->twin_; further_edge = further_edge->twin_->next_) { - further_edges.emplace(further_edge, here.dist + vSize(further_edge->to->p - further_edge->from->p)); + further_edges.emplace(further_edge, here.dist_ + vSize(further_edge->to_->p_ - further_edge->from_->p_)); } } } @@ -2065,7 +2066,7 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ std::unordered_set unprocessed_quad_starts(graph_.edges.size() * 5 / 2); for (edge_t& edge : graph_.edges) { - if (! edge.prev) + if (! edge.prev_) { unprocessed_quad_starts.insert(&edge); } @@ -2081,58 +2082,58 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ do { edge_t* quad_end = quad_start; - while (quad_end->next) + while (quad_end->next_) { - quad_end = quad_end->next; + quad_end = quad_end->next_; } edge_t* edge_to_peak = getQuadMaxRedgeTo(quad_start); // walk down on both sides and connect junctions - edge_t* edge_from_peak = edge_to_peak->next; + edge_t* edge_from_peak = edge_to_peak->next_; assert(edge_from_peak); unprocessed_quad_starts.erase(quad_start); - if (! edge_to_peak->data.hasExtrusionJunctions()) + if (! edge_to_peak->data_.hasExtrusionJunctions()) { edge_junctions.emplace_back(std::make_shared()); - edge_to_peak->data.setExtrusionJunctions(edge_junctions.back()); + edge_to_peak->data_.setExtrusionJunctions(edge_junctions.back()); } // The junctions on the edge(s) from the start of the quad to the node with highest R - LineJunctions from_junctions = *edge_to_peak->data.getExtrusionJunctions(); - if (! edge_from_peak->twin->data.hasExtrusionJunctions()) + LineJunctions from_junctions = *edge_to_peak->data_.getExtrusionJunctions(); + if (! edge_from_peak->twin_->data_.hasExtrusionJunctions()) { edge_junctions.emplace_back(std::make_shared()); - edge_from_peak->twin->data.setExtrusionJunctions(edge_junctions.back()); + edge_from_peak->twin_->data_.setExtrusionJunctions(edge_junctions.back()); } // The junctions on the edge(s) from the end of the quad to the node with highest R - LineJunctions to_junctions = *edge_from_peak->twin->data.getExtrusionJunctions(); - if (edge_to_peak->prev) + LineJunctions to_junctions = *edge_from_peak->twin_->data_.getExtrusionJunctions(); + if (edge_to_peak->prev_) { - LineJunctions from_prev_junctions = *edge_to_peak->prev->data.getExtrusionJunctions(); + LineJunctions from_prev_junctions = *edge_to_peak->prev_->data_.getExtrusionJunctions(); while (! from_junctions.empty() && ! from_prev_junctions.empty() && from_junctions.back().perimeter_index <= from_prev_junctions.front().perimeter_index) { from_junctions.pop_back(); } from_junctions.reserve(from_junctions.size() + from_prev_junctions.size()); from_junctions.insert(from_junctions.end(), from_prev_junctions.begin(), from_prev_junctions.end()); - assert(! edge_to_peak->prev->prev); - if (edge_to_peak->prev->prev) + assert(! edge_to_peak->prev_->prev_); + if (edge_to_peak->prev_->prev_) { spdlog::warn("The edge we're about to connect is already connected."); } } - if (edge_from_peak->next) + if (edge_from_peak->next_) { - LineJunctions to_next_junctions = *edge_from_peak->next->twin->data.getExtrusionJunctions(); + LineJunctions to_next_junctions = *edge_from_peak->next_->twin_->data_.getExtrusionJunctions(); while (! to_junctions.empty() && ! to_next_junctions.empty() && to_junctions.back().perimeter_index <= to_next_junctions.front().perimeter_index) { to_junctions.pop_back(); } to_junctions.reserve(to_junctions.size() + to_next_junctions.size()); to_junctions.insert(to_junctions.end(), to_next_junctions.begin(), to_next_junctions.end()); - assert(! edge_from_peak->next->next); - if (edge_from_peak->next->next) + assert(! edge_from_peak->next_->next_); + if (edge_from_peak->next_->next_) { spdlog::warn("The edge we're about to connect is already connected!"); } @@ -2156,25 +2157,25 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ { spdlog::warn("Connecting two perimeters with different indices! Perimeter {} and {}", from.perimeter_index, to.perimeter_index); } - const bool from_is_odd = quad_start->to->data.bead_count_ > 0 && quad_start->to->data.bead_count_ % 2 == 1 // quad contains single bead segment - && quad_start->to->data.transition_ratio_ == 0 // We're not in a transition + const bool from_is_odd = quad_start->to_->data_.bead_count_ > 0 && quad_start->to_->data_.bead_count_ % 2 == 1 // quad contains single bead segment + && quad_start->to_->data_.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment - && shorterThen(from.p - quad_start->to->p, 5); - const bool to_is_odd = quad_end->from->data.bead_count_ > 0 && quad_end->from->data.bead_count_ % 2 == 1 // quad contains single bead segment - && quad_end->from->data.transition_ratio_ == 0 // We're not in a transition + && shorterThen(from.p - quad_start->to_->p_, 5); + const bool to_is_odd = quad_end->from_->data_.bead_count_ > 0 && quad_end->from_->data_.bead_count_ % 2 == 1 // quad contains single bead segment + && quad_end->from_->data_.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment - && shorterThen(to.p - quad_end->from->p, 5); + && shorterThen(to.p - quad_end->from_->p_, 5); const bool is_odd_segment = from_is_odd && to_is_odd; - if (is_odd_segment && passed_odd_edges.count(quad_start->next->twin) > 0) // Only generate toolpath for odd segments once + if (is_odd_segment && passed_odd_edges.count(quad_start->next_->twin_) > 0) // Only generate toolpath for odd segments once { continue; // Prevent duplication of single bead segments } - bool from_is_3way = from_is_odd && quad_start->to->isMultiIntersection(); - bool to_is_3way = to_is_odd && quad_end->from->isMultiIntersection(); + bool from_is_3way = from_is_odd && quad_start->to_->isMultiIntersection(); + bool to_is_3way = to_is_odd && quad_end->from_->isMultiIntersection(); - passed_odd_edges.emplace(quad_start->next); + passed_odd_edges.emplace(quad_start->next_); addToolpathSegment(from, to, is_odd_segment, new_domain_start, from_is_3way, to_is_3way); } @@ -2189,11 +2190,11 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() for (auto& node : graph_.nodes) { - if (! node.data.hasBeading()) + if (! node.data_.hasBeading()) { continue; } - Beading& beading = node.data.getBeading()->beading_; + Beading& beading = node.data_.getBeading()->beading_; if (beading.bead_widths.size() % 2 == 1 && node.isLocalMaximum(true) && ! node.isCentral()) { const size_t inset_index = beading.bead_widths.size() / 2; @@ -2214,7 +2215,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() for (coord_t segment = 0; segment < n_segments; segment++) { double a = 2.0 * std::numbers::pi / n_segments * segment; - line.junctions.emplace_back(node.p + Point(r * cos(a), r * sin(a)), width, inset_index); + line.junctions.emplace_back(node.p_ + Point(r * cos(a), r * sin(a)), width, inset_index); } } } diff --git a/src/SkeletalTrapezoidationGraph.cpp b/src/SkeletalTrapezoidationGraph.cpp index 0ac596ea2c..35dec4cd61 100644 --- a/src/SkeletalTrapezoidationGraph.cpp +++ b/src/SkeletalTrapezoidationGraph.cpp @@ -20,27 +20,27 @@ STHalfEdge::STHalfEdge(SkeletalTrapezoidationEdge data) bool STHalfEdge::canGoUp(bool strict) const { - if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) + if (to_->data_.distance_to_boundary_ > from_->data_.distance_to_boundary_) { return true; } - if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_ || strict) + if (to_->data_.distance_to_boundary_ < from_->data_.distance_to_boundary_ || strict) { return false; } // Edge is between equidistqant verts; recurse! - for (edge_t* outgoing = next; outgoing != twin; outgoing = outgoing->twin->next) + for (edge_t* outgoing = next_; outgoing != twin_; outgoing = outgoing->twin_->next_) { if (outgoing->canGoUp()) { return true; } - assert(outgoing->twin); - if (! outgoing->twin) + assert(outgoing->twin_); + if (! outgoing->twin_) return false; - assert(outgoing->twin->next); - if (! outgoing->twin->next) + assert(outgoing->twin_->next_); + if (! outgoing->twin_->next_) return true; // This point is on the boundary?! Should never occur } return false; @@ -48,18 +48,18 @@ bool STHalfEdge::canGoUp(bool strict) const bool STHalfEdge::isUpward() const { - if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) + if (to_->data_.distance_to_boundary_ > from_->data_.distance_to_boundary_) { return true; } - if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_) + if (to_->data_.distance_to_boundary_ < from_->data_.distance_to_boundary_) { return false; } // Equidistant edge case: std::optional forward_up_dist = this->distToGoUp(); - std::optional backward_up_dist = twin->distToGoUp(); + std::optional backward_up_dist = twin_->distToGoUp(); if (forward_up_dist && backward_up_dist) { return forward_up_dist < backward_up_dist; @@ -74,23 +74,23 @@ bool STHalfEdge::isUpward() const { return false; } - return to->p < from->p; // Arbitrary ordering, which returns the opposite for the twin edge + return to_->p_ < from_->p_; // Arbitrary ordering, which returns the opposite for the twin edge } std::optional STHalfEdge::distToGoUp() const { - if (to->data.distance_to_boundary_ > from->data.distance_to_boundary_) + if (to_->data_.distance_to_boundary_ > from_->data_.distance_to_boundary_) { return 0; } - if (to->data.distance_to_boundary_ < from->data.distance_to_boundary_) + if (to_->data_.distance_to_boundary_ < from_->data_.distance_to_boundary_) { return std::optional(); } // Edge is between equidistqant verts; recurse! std::optional ret; - for (edge_t* outgoing = next; outgoing != twin; outgoing = outgoing->twin->next) + for (edge_t* outgoing = next_; outgoing != twin_; outgoing = outgoing->twin_->next_) { std::optional dist_to_up = outgoing->distToGoUp(); if (dist_to_up) @@ -104,16 +104,16 @@ std::optional STHalfEdge::distToGoUp() const ret = dist_to_up; } } - assert(outgoing->twin); - if (! outgoing->twin) + assert(outgoing->twin_); + if (! outgoing->twin_) return std::optional(); - assert(outgoing->twin->next); - if (! outgoing->twin->next) + assert(outgoing->twin_->next_); + if (! outgoing->twin_->next_) return 0; // This point is on the boundary?! Should never occur } if (ret) { - ret = *ret + cura::vSize(to->p - from->p); + ret = *ret + cura::vSize(to_->p_ - from_->p_); } return ret; } @@ -121,15 +121,15 @@ std::optional STHalfEdge::distToGoUp() const STHalfEdge* STHalfEdge::getNextUnconnected() { edge_t* result = static_cast(this); - while (result->next) + while (result->next_) { - result = result->next; + result = result->next_; if (result == this) { return nullptr; } } - return result->twin; + return result->twin_; } STHalfEdgeNode::STHalfEdgeNode(SkeletalTrapezoidationJoint data, Point p) @@ -140,60 +140,60 @@ STHalfEdgeNode::STHalfEdgeNode(SkeletalTrapezoidationJoint data, Point p) bool STHalfEdgeNode::isMultiIntersection() { int odd_path_count = 0; - edge_t* outgoing = this->incident_edge; + edge_t* outgoing = incident_edge_; do { if (! outgoing) { // This is a node on the outside return false; } - if (outgoing->data.isCentral()) + if (outgoing->data_.isCentral()) { odd_path_count++; } - } while (outgoing = outgoing->twin->next, outgoing != this->incident_edge); + } while (outgoing = outgoing->twin_->next_, outgoing != incident_edge_); return odd_path_count > 2; } bool STHalfEdgeNode::isCentral() const { - edge_t* edge = incident_edge; + edge_t* edge = incident_edge_; do { - if (edge->data.isCentral()) + if (edge->data_.isCentral()) { return true; } - assert(edge->twin); - if (! edge->twin) + assert(edge->twin_); + if (! edge->twin_) return false; - } while (edge = edge->twin->next, edge != incident_edge); + } while (edge = edge->twin_->next_, edge != incident_edge_); return false; } bool STHalfEdgeNode::isLocalMaximum(bool strict) const { - if (data.distance_to_boundary_ == 0) + if (data_.distance_to_boundary_ == 0) { return false; } - edge_t* edge = incident_edge; + edge_t* edge = incident_edge_; do { if (edge->canGoUp(strict)) { return false; } - assert(edge->twin); - if (! edge->twin) + assert(edge->twin_); + if (! edge->twin_) return false; - if (! edge->twin->next) + if (! edge->twin_->next_) { // This point is on the boundary return false; } - } while (edge = edge->twin->next, edge != incident_edge); + } while (edge = edge->twin_->next_, edge != incident_edge_); return true; } @@ -227,12 +227,12 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) auto should_collapse = [snap_dist](node_t* a, node_t* b) { - return shorterThen(a->p - b->p, snap_dist); + return shorterThen(a->p_ - b->p_, snap_dist); }; for (auto edge_it = edges.begin(); edge_it != edges.end();) { - if (edge_it->prev) + if (edge_it->prev_) { edge_it++; continue; @@ -240,24 +240,24 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) edge_t* quad_start = &*edge_it; edge_t* quad_end = quad_start; - while (quad_end->next) - quad_end = quad_end->next; - edge_t* quad_mid = (quad_start->next == quad_end) ? nullptr : quad_start->next; + while (quad_end->next_) + quad_end = quad_end->next_; + edge_t* quad_mid = (quad_start->next_ == quad_end) ? nullptr : quad_start->next_; bool edge_it_is_updated = false; - if (quad_mid && should_collapse(quad_mid->from, quad_mid->to)) + if (quad_mid && should_collapse(quad_mid->from_, quad_mid->to_)) { - assert(quad_mid->twin); - if (! quad_mid->twin) + assert(quad_mid->twin_); + if (! quad_mid->twin_) { RUN_ONCE(spdlog::warn("Encountered quad edge without a twin.")); continue; // Prevent accessing unallocated memory. } int count = 0; - for (edge_t* edge_from_3 = quad_end; edge_from_3 && edge_from_3 != quad_mid->twin; edge_from_3 = edge_from_3->twin->next) + for (edge_t* edge_from_3 = quad_end; edge_from_3 && edge_from_3 != quad_mid->twin_; edge_from_3 = edge_from_3->twin_->next_) { - edge_from_3->from = quad_mid->from; - edge_from_3->twin->to = quad_mid->from; + edge_from_3->from_ = quad_mid->from_; + edge_from_3->twin_->to_ = quad_mid->from_; if (++count > 1000) { break; @@ -269,52 +269,52 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) // | | // | | // o o - if (quad_mid->from->incident_edge == quad_mid) + if (quad_mid->from_->incident_edge_ == quad_mid) { - if (quad_mid->twin->next) + if (quad_mid->twin_->next_) { - quad_mid->from->incident_edge = quad_mid->twin->next; + quad_mid->from_->incident_edge_ = quad_mid->twin_->next_; } else { - quad_mid->from->incident_edge = quad_mid->prev->twin; + quad_mid->from_->incident_edge_ = quad_mid->prev_->twin_; } } - nodes.erase(node_locator[quad_mid->to]); + nodes.erase(node_locator[quad_mid->to_]); - quad_mid->prev->next = quad_mid->next; - quad_mid->next->prev = quad_mid->prev; - quad_mid->twin->next->prev = quad_mid->twin->prev; - quad_mid->twin->prev->next = quad_mid->twin->next; + quad_mid->prev_->next_ = quad_mid->next_; + quad_mid->next_->prev_ = quad_mid->prev_; + quad_mid->twin_->next_->prev_ = quad_mid->twin_->prev_; + quad_mid->twin_->prev_->next_ = quad_mid->twin_->next_; - safelyRemoveEdge(quad_mid->twin, edge_it, edge_it_is_updated); + safelyRemoveEdge(quad_mid->twin_, edge_it, edge_it_is_updated); safelyRemoveEdge(quad_mid, edge_it, edge_it_is_updated); } // o-o // | | > collapse sides // o o - if (should_collapse(quad_start->from, quad_end->to) && should_collapse(quad_start->to, quad_end->from)) + if (should_collapse(quad_start->from_, quad_end->to_) && should_collapse(quad_start->to_, quad_end->from_)) { // Collapse start and end edges and remove whole cell - quad_start->twin->to = quad_end->to; - quad_end->to->incident_edge = quad_end->twin; - if (quad_end->from->incident_edge == quad_end) + quad_start->twin_->to_ = quad_end->to_; + quad_end->to_->incident_edge_ = quad_end->twin_; + if (quad_end->from_->incident_edge_ == quad_end) { - if (quad_end->twin->next) + if (quad_end->twin_->next_) { - quad_end->from->incident_edge = quad_end->twin->next; + quad_end->from_->incident_edge_ = quad_end->twin_->next_; } else { - quad_end->from->incident_edge = quad_end->prev->twin; + quad_end->from_->incident_edge_ = quad_end->prev_->twin_; } } - nodes.erase(node_locator[quad_start->from]); + nodes.erase(node_locator[quad_start->from_]); - quad_start->twin->twin = quad_end->twin; - quad_end->twin->twin = quad_start->twin; + quad_start->twin_->twin_ = quad_end->twin_; + quad_end->twin_->twin_ = quad_start->twin_; safelyRemoveEdge(quad_start, edge_it, edge_it_is_updated); safelyRemoveEdge(quad_end, edge_it, edge_it_is_updated); } @@ -331,52 +331,52 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point, bool is_next_to_start_or_end) { - Point p = LinearAlg2D::getClosestOnLine(prev_edge->to->p, start_source_point, end_source_point); - coord_t dist = vSize(prev_edge->to->p - p); - prev_edge->to->data.distance_to_boundary_ = dist; + Point p = LinearAlg2D::getClosestOnLine(prev_edge->to_->p_, start_source_point, end_source_point); + coord_t dist = vSize(prev_edge->to_->p_ - p); + prev_edge->to_->data_.distance_to_boundary_ = dist; assert(dist >= 0); nodes.emplace_front(SkeletalTrapezoidationJoint(), p); node_t* node = &nodes.front(); - node->data.distance_to_boundary_ = 0; + node->data_.distance_to_boundary_ = 0; edges.emplace_front(SkeletalTrapezoidationEdge(SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD)); edge_t* forth_edge = &edges.front(); edges.emplace_front(SkeletalTrapezoidationEdge(SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD)); edge_t* back_edge = &edges.front(); - prev_edge->next = forth_edge; - forth_edge->prev = prev_edge; - forth_edge->from = prev_edge->to; - forth_edge->to = node; - forth_edge->twin = back_edge; - back_edge->twin = forth_edge; - back_edge->from = node; - back_edge->to = prev_edge->to; - node->incident_edge = back_edge; + prev_edge->next_ = forth_edge; + forth_edge->prev_ = prev_edge; + forth_edge->from_ = prev_edge->to_; + forth_edge->to_ = node; + forth_edge->twin_ = back_edge; + back_edge->twin_ = forth_edge; + back_edge->from_ = node; + back_edge->to_ = prev_edge->to_; + node->incident_edge_ = back_edge; prev_edge = back_edge; } std::pair SkeletalTrapezoidationGraph::insertRib(edge_t& edge, node_t* mid_node) { - edge_t* edge_before = edge.prev; - edge_t* edge_after = edge.next; - node_t* node_before = edge.from; - node_t* node_after = edge.to; + edge_t* edge_before = edge.prev_; + edge_t* edge_after = edge.next_; + node_t* node_before = edge.from_; + node_t* node_after = edge.to_; - Point p = mid_node->p; + Point p = mid_node->p_; std::pair source_segment = getSource(edge); Point px = LinearAlg2D::getClosestOnLineSegment(p, source_segment.first, source_segment.second); coord_t dist = vSize(p - px); assert(dist > 0); - mid_node->data.distance_to_boundary_ = dist; - mid_node->data.transition_ratio_ = 0; // Both transition end should have rest = 0, because at the ends a whole number of beads fits without rest + mid_node->data_.distance_to_boundary_ = dist; + mid_node->data_.transition_ratio_ = 0; // Both transition end should have rest = 0, because at the ends a whole number of beads fits without rest nodes.emplace_back(SkeletalTrapezoidationJoint(), px); node_t* source_node = &nodes.back(); - source_node->data.distance_to_boundary_ = 0; + source_node->data_.distance_to_boundary_ = 0; edge_t* first = &edge; edges.emplace_back(SkeletalTrapezoidationEdge()); @@ -388,52 +388,52 @@ std::pairnext = first; + edge_before->next_ = first; } - first->next = outward_edge; - outward_edge->next = nullptr; - inward_edge->next = second; - second->next = edge_after; + first->next_ = outward_edge; + outward_edge->next_ = nullptr; + inward_edge->next_ = second; + second->next_ = edge_after; if (edge_after) { - edge_after->prev = second; + edge_after->prev_ = second; } - second->prev = inward_edge; - inward_edge->prev = nullptr; - outward_edge->prev = first; - first->prev = edge_before; - - first->to = mid_node; - outward_edge->to = source_node; - inward_edge->to = mid_node; - second->to = node_after; - - first->from = node_before; - outward_edge->from = mid_node; - inward_edge->from = source_node; - second->from = mid_node; - - node_before->incident_edge = first; - mid_node->incident_edge = outward_edge; - source_node->incident_edge = inward_edge; + second->prev_ = inward_edge; + inward_edge->prev_ = nullptr; + outward_edge->prev_ = first; + first->prev_ = edge_before; + + first->to_ = mid_node; + outward_edge->to_ = source_node; + inward_edge->to_ = mid_node; + second->to_ = node_after; + + first->from_ = node_before; + outward_edge->from_ = mid_node; + inward_edge->from_ = source_node; + second->from_ = mid_node; + + node_before->incident_edge_ = first; + mid_node->incident_edge_ = outward_edge; + source_node->incident_edge_ = inward_edge; if (edge_after) { - node_after->incident_edge = edge_after; + node_after->incident_edge_ = edge_after; } - first->data.setIsCentral(true); - outward_edge->data.setIsCentral(false); // TODO verify this is always the case. - inward_edge->data.setIsCentral(false); - second->data.setIsCentral(true); + first->data_.setIsCentral(true); + outward_edge->data_.setIsCentral(false); // TODO verify this is always the case. + inward_edge->data_.setIsCentral(false); + second->data_.setIsCentral(true); - outward_edge->twin = inward_edge; - inward_edge->twin = outward_edge; + outward_edge->twin_ = inward_edge; + inward_edge->twin_ = outward_edge; - first->twin = nullptr; // we don't know these yet! - second->twin = nullptr; + first->twin_ = nullptr; // we don't know these yet! + second->twin_ = nullptr; - assert(second->prev->from->data.distance_to_boundary_ == 0); + assert(second->prev_->from_->data_.distance_to_boundary_ == 0); return std::make_pair(first, second); } @@ -445,9 +445,9 @@ SkeletalTrapezoidationGraph::edge_t* SkeletalTrapezoidationGraph::insertNode(edg nodes.emplace_back(SkeletalTrapezoidationJoint(), mid); node_t* mid_node = &nodes.back(); - edge_t* twin = last_edge_replacing_input->twin; - last_edge_replacing_input->twin = nullptr; - twin->twin = nullptr; + edge_t* twin = last_edge_replacing_input->twin_; + last_edge_replacing_input->twin_ = nullptr; + twin->twin_ = nullptr; std::pair left_pair = insertRib(*last_edge_replacing_input, mid_node); std::pair right_pair = insertRib(*twin, mid_node); edge_t* first_edge_replacing_input = left_pair.first; @@ -455,12 +455,12 @@ SkeletalTrapezoidationGraph::edge_t* SkeletalTrapezoidationGraph::insertNode(edg edge_t* first_edge_replacing_twin = right_pair.first; edge_t* last_edge_replacing_twin = right_pair.second; - first_edge_replacing_input->twin = last_edge_replacing_twin; - last_edge_replacing_twin->twin = first_edge_replacing_input; - last_edge_replacing_input->twin = first_edge_replacing_twin; - first_edge_replacing_twin->twin = last_edge_replacing_input; + first_edge_replacing_input->twin_ = last_edge_replacing_twin; + last_edge_replacing_twin->twin_ = first_edge_replacing_input; + last_edge_replacing_input->twin_ = first_edge_replacing_twin; + first_edge_replacing_twin->twin_ = last_edge_replacing_input; - mid_node->data.bead_count_ = mide_node_bead_count; + mid_node->data_.bead_count_ = mide_node_bead_count; return last_edge_replacing_input; } @@ -468,18 +468,18 @@ SkeletalTrapezoidationGraph::edge_t* SkeletalTrapezoidationGraph::insertNode(edg std::pair SkeletalTrapezoidationGraph::getSource(const edge_t& edge) { const edge_t* from_edge = &edge; - while (from_edge->prev) + while (from_edge->prev_) { - from_edge = from_edge->prev; + from_edge = from_edge->prev_; } const edge_t* to_edge = &edge; - while (to_edge->next) + while (to_edge->next_) { - to_edge = to_edge->next; + to_edge = to_edge->next_; } - return std::make_pair(from_edge->from->p, to_edge->to->p); + return std::make_pair(from_edge->from_->p_, to_edge->to_->p_); } } // namespace cura diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index 18da72094a..4567a92d6c 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -118,7 +118,7 @@ void SkirtBrim::generate() constexpr LayerIndex layer_nr = 0; constexpr bool include_support = true; const bool include_prime_tower = adhesion_type_ == EPlatformAdhesion::SKIRT; - const bool has_prime_tower = storage_.primeTower.enabled; + const bool has_prime_tower = storage_.primeTower.enabled_; Polygons covered_area = storage_.getLayerOutlines(layer_nr, include_support, include_prime_tower, /*external_polys_only*/ false); std::vector allowed_areas_per_extruder(extruder_count_); @@ -350,7 +350,7 @@ Polygons SkirtBrim::getFirstLayerOutline(const int extruder_nr /* = -1 */) const int primary_line_count = line_count_[reference_extruder_nr]; const bool external_only = adhesion_type_ == EPlatformAdhesion::SKIRT || external_polys_only_[reference_extruder_nr]; // Whether to include holes or not. Skirt doesn't have any holes. - const bool has_prime_tower = storage_.primeTower.enabled; + const bool has_prime_tower = storage_.primeTower.enabled_; const LayerIndex layer_nr = 0; if (adhesion_type_ == EPlatformAdhesion::SKIRT) { diff --git a/src/TreeModelVolumes.cpp b/src/TreeModelVolumes.cpp index 4604967baf..750020cc1d 100644 --- a/src/TreeModelVolumes.cpp +++ b/src/TreeModelVolumes.cpp @@ -148,7 +148,7 @@ TreeModelVolumes::TreeModelVolumes( anti_overhang_[layer_idx].add(storage.support.supportLayers[layer_idx].anti_overhang); } - if (storage.primeTower.enabled) + if (storage.primeTower.enabled_) { anti_overhang_[layer_idx].add(storage.primeTower.getGroundPoly()); } diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 559ff91b4e..5e4e1db16e 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -37,38 +37,38 @@ std::string transliterate(const std::string& text) } GCodeExport::GCodeExport() - : output_stream(&std::cout) - , currentPosition(0, 0, MM2INT(20)) - , layer_nr(0) - , relative_extrusion(false) + : output_stream_(&std::cout) + , current_position_(0, 0, MM2INT(20)) + , layer_nr_(0) + , relative_extrusion_(false) { - *output_stream << std::fixed; + *output_stream_ << std::fixed; - current_e_value = 0; - current_extruder = 0; - current_fan_speed = -1; + current_e_value_ = 0; + current_extruder_ = 0; + current_fan_speed_ = -1; - total_print_times = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); + total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); - currentSpeed = 1.0; - current_print_acceleration = -1.0; - current_travel_acceleration = -1.0; - current_jerk = -1.0; + current_speed_ = 1.0; + current_print_acceleration_ = -1.0; + current_travel_acceleration_ = -1.0; + current_jerk_ = -1.0; - is_z_hopped = 0; + is_z_hopped_ = 0; setFlavor(EGCodeFlavor::MARLIN); - initial_bed_temp = 0; - bed_temperature = 0; - build_volume_temperature = 0; - machine_heated_build_volume = false; + initial_bed_temp_ = 0; + bed_temperature_ = 0; + build_volume_temperature_ = 0; + machine_heated_build_volume_ = false; - fan_number = 0; - use_extruder_offset_to_offset_coords = false; - machine_name = ""; - relative_extrusion = false; - new_line = "\n"; + fan_number_ = 0; + use_extruder_offset_to_offset_coords_ = false; + machine_name_ = ""; + relative_extrusion_ = false; + new_line_ = "\n"; - total_bounding_box = AABB3D(); + total_bounding_box_ = AABB3D(); } GCodeExport::~GCodeExport() @@ -77,12 +77,12 @@ GCodeExport::~GCodeExport() void GCodeExport::preSetup(const size_t start_extruder) { - current_extruder = start_extruder; + current_extruder_ = start_extruder; const Scene& scene = Application::getInstance().current_slice_->scene; std::vector::iterator mesh_group = scene.current_mesh_group; setFlavor(mesh_group->settings.get("machine_gcode_flavor")); - use_extruder_offset_to_offset_coords = mesh_group->settings.get("machine_use_extruder_offset_to_offset_coords"); + use_extruder_offset_to_offset_coords_ = mesh_group->settings.get("machine_use_extruder_offset_to_offset_coords"); const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) @@ -90,45 +90,45 @@ void GCodeExport::preSetup(const size_t start_extruder) const ExtruderTrain& train = scene.extruders[extruder_nr]; setFilamentDiameter(extruder_nr, train.settings_.get("material_diameter")); - extruder_attr[extruder_nr].last_retraction_prime_speed + extruder_attr_[extruder_nr].last_retraction_prime_speed_ = train.settings_.get("retraction_prime_speed"); // the alternative would be switch_extruder_prime_speed, but dual extrusion might not even be configured... - extruder_attr[extruder_nr].fan_number = train.settings_.get("machine_extruder_cooling_fan_number"); + extruder_attr_[extruder_nr].fan_number_ = train.settings_.get("machine_extruder_cooling_fan_number"); // Cache some settings that we use frequently. const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; - if (use_extruder_offset_to_offset_coords) + if (use_extruder_offset_to_offset_coords_) { - extruder_attr[extruder_nr].nozzle_offset = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + extruder_attr_[extruder_nr].nozzle_offset_ = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); } else { - extruder_attr[extruder_nr].nozzle_offset = Point(0, 0); + extruder_attr_[extruder_nr].nozzle_offset_ = Point(0, 0); } - extruder_attr[extruder_nr].machine_firmware_retract = extruder_settings.get("machine_firmware_retract"); + extruder_attr_[extruder_nr].machine_firmware_retract_ = extruder_settings.get("machine_firmware_retract"); } - machine_name = mesh_group->settings.get("machine_name"); + machine_name_ = mesh_group->settings.get("machine_name"); - relative_extrusion = mesh_group->settings.get("relative_extrusion"); - always_write_active_tool = mesh_group->settings.get("machine_always_write_active_tool"); + relative_extrusion_ = mesh_group->settings.get("relative_extrusion"); + always_write_active_tool_ = mesh_group->settings.get("machine_always_write_active_tool"); - if (flavor == EGCodeFlavor::BFB) + if (flavor_ == EGCodeFlavor::BFB) { - new_line = "\r\n"; + new_line_ = "\r\n"; } else { - new_line = "\n"; + new_line_ = "\n"; } - estimateCalculator.setFirmwareDefaults(mesh_group->settings); + estimate_calculator_.setFirmwareDefaults(mesh_group->settings); if (mesh_group == scene.mesh_groups.begin()) { if (! scene.current_mesh_group->settings.get("material_bed_temp_prepend")) { // Current bed temperature is the one of the first layer (has already been set in header) - bed_temperature = scene.current_mesh_group->settings.get("material_bed_temperature_layer_0"); + bed_temperature_ = scene.current_mesh_group->settings.get("material_bed_temperature_layer_0"); } else { @@ -138,7 +138,7 @@ void GCodeExport::preSetup(const size_t start_extruder) else { // Current bed temperature is the one of the previous group - bed_temperature = (scene.current_mesh_group - 1)->settings.get("material_bed_temperature"); + bed_temperature_ = (scene.current_mesh_group - 1)->settings.get("material_bed_temperature"); } } @@ -156,17 +156,17 @@ void GCodeExport::setInitialAndBuildVolumeTemps(const unsigned int start_extrude setInitialTemp(extruder_nr, temp); } - initial_bed_temp = scene.current_mesh_group->settings.get("material_bed_temperature_layer_0"); - machine_heated_build_volume = scene.current_mesh_group->settings.get("machine_heated_build_volume"); - build_volume_temperature = machine_heated_build_volume ? scene.current_mesh_group->settings.get("build_volume_temperature") : Temperature(0); + initial_bed_temp_ = scene.current_mesh_group->settings.get("material_bed_temperature_layer_0"); + machine_heated_build_volume_ = scene.current_mesh_group->settings.get("machine_heated_build_volume"); + build_volume_temperature_ = machine_heated_build_volume_ ? scene.current_mesh_group->settings.get("build_volume_temperature") : Temperature(0); } void GCodeExport::setInitialTemp(int extruder_nr, double temp) { - extruder_attr[extruder_nr].initial_temp = temp; - if (flavor == EGCodeFlavor::GRIFFIN || flavor == EGCodeFlavor::ULTIGCODE) + extruder_attr_[extruder_nr].initial_temp_ = temp; + if (flavor_ == EGCodeFlavor::GRIFFIN || flavor_ == EGCodeFlavor::ULTIGCODE) { - extruder_attr[extruder_nr].currentTemperature = temp; + extruder_attr_[extruder_nr].current_temperature_ = temp; } } @@ -205,16 +205,16 @@ std::string GCodeExport::getFileHeader( std::ostringstream prefix; const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); - switch (flavor) + switch (flavor_) { case EGCodeFlavor::GRIFFIN: - prefix << ";START_OF_HEADER" << new_line; - prefix << ";HEADER_VERSION:0.1" << new_line; - prefix << ";FLAVOR:" << flavorToString(flavor) << new_line; - prefix << ";GENERATOR.NAME:Cura_SteamEngine" << new_line; - prefix << ";GENERATOR.VERSION:" << CURA_ENGINE_VERSION << new_line; - prefix << ";GENERATOR.BUILD_DATE:" << Date::getDate().toStringDashed() << new_line; - prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name) << new_line; + prefix << ";START_OF_HEADER" << new_line_; + prefix << ";HEADER_VERSION:0.1" << new_line_; + prefix << ";FLAVOR:" << flavorToString(flavor_) << new_line_; + prefix << ";GENERATOR.NAME:Cura_SteamEngine" << new_line_; + prefix << ";GENERATOR.VERSION:" << CURA_ENGINE_VERSION << new_line_; + prefix << ";GENERATOR.BUILD_DATE:" << Date::getDate().toStringDashed() << new_line_; + prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name_) << new_line_; for (size_t extr_nr = 0; extr_nr < extruder_count; extr_nr++) { @@ -222,59 +222,59 @@ std::string GCodeExport::getFileHeader( { continue; } - prefix << ";EXTRUDER_TRAIN." << extr_nr << ".INITIAL_TEMPERATURE:" << extruder_attr[extr_nr].initial_temp << new_line; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".INITIAL_TEMPERATURE:" << extruder_attr_[extr_nr].initial_temp_ << new_line_; if (filament_used.size() == extruder_count) { - prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.VOLUME_USED:" << static_cast(filament_used[extr_nr]) << new_line; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.VOLUME_USED:" << static_cast(filament_used[extr_nr]) << new_line_; } if (mat_ids.size() == extruder_count && mat_ids[extr_nr] != "") { - prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.GUID:" << mat_ids[extr_nr] << new_line; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".MATERIAL.GUID:" << mat_ids[extr_nr] << new_line_; } const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extr_nr].settings_; - prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.DIAMETER:" << extruder_settings.get("machine_nozzle_size") << new_line; - prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.NAME:" << extruder_settings.get("machine_nozzle_id") << new_line; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.DIAMETER:" << extruder_settings.get("machine_nozzle_size") << new_line_; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".NOZZLE.NAME:" << extruder_settings.get("machine_nozzle_id") << new_line_; } - prefix << ";BUILD_PLATE.INITIAL_TEMPERATURE:" << initial_bed_temp << new_line; + prefix << ";BUILD_PLATE.INITIAL_TEMPERATURE:" << initial_bed_temp_ << new_line_; - if (machine_heated_build_volume) + if (machine_heated_build_volume_) { - prefix << ";BUILD_VOLUME.TEMPERATURE:" << build_volume_temperature << new_line; + prefix << ";BUILD_VOLUME.TEMPERATURE:" << build_volume_temperature_ << new_line_; } if (print_time) { - prefix << ";PRINT.TIME:" << static_cast(*print_time) << new_line; + prefix << ";PRINT.TIME:" << static_cast(*print_time) << new_line_; } - prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice_->scene.mesh_groups.size() << new_line; + prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice_->scene.mesh_groups.size() << new_line_; - if (total_bounding_box.min.x_ > total_bounding_box.max.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. + if (total_bounding_box_.min.x_ > total_bounding_box_.max.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. { // Put some small default in there. - total_bounding_box.min = Point3(0, 0, 0); - total_bounding_box.max = Point3(10, 10, 10); + total_bounding_box_.min = Point3(0, 0, 0); + total_bounding_box_.max = Point3(10, 10, 10); } - prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box.min.x_) << new_line; - prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box.min.y_) << new_line; - prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box.min.z_) << new_line; - prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box.max.x_) << new_line; - prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box.max.y_) << new_line; - prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box.max.z_) << new_line; - prefix << ";SLICE_UUID:" << slice_uuid_ << new_line; - prefix << ";END_OF_HEADER" << new_line; + prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box_.min.x_) << new_line_; + prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box_.min.y_) << new_line_; + prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box_.min.z_) << new_line_; + prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box_.max.x_) << new_line_; + prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box_.max.y_) << new_line_; + prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box_.max.z_) << new_line_; + prefix << ";SLICE_UUID:" << slice_uuid_ << new_line_; + prefix << ";END_OF_HEADER" << new_line_; break; default: - prefix << ";FLAVOR:" << flavorToString(flavor) << new_line; - prefix << ";TIME:" << ((print_time) ? static_cast(*print_time) : 6666) << new_line; - if (flavor == EGCodeFlavor::ULTIGCODE) + prefix << ";FLAVOR:" << flavorToString(flavor_) << new_line_; + prefix << ";TIME:" << ((print_time) ? static_cast(*print_time) : 6666) << new_line_; + if (flavor_ == EGCodeFlavor::ULTIGCODE) { - prefix << ";MATERIAL:" << ((filament_used.size() >= 1) ? static_cast(filament_used[0]) : 6666) << new_line; - prefix << ";MATERIAL2:" << ((filament_used.size() >= 2) ? static_cast(filament_used[1]) : 0) << new_line; + prefix << ";MATERIAL:" << ((filament_used.size() >= 1) ? static_cast(filament_used[0]) : 6666) << new_line_; + prefix << ";MATERIAL2:" << ((filament_used.size() >= 2) ? static_cast(filament_used[1]) : 0) << new_line_; - prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("machine_nozzle_size") << new_line; + prefix << ";NOZZLE_DIAMETER:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("machine_nozzle_size") << new_line_; } - else if (flavor == EGCodeFlavor::REPRAP || flavor == EGCodeFlavor::MARLIN || flavor == EGCodeFlavor::MARLIN_VOLUMATRIC) + else if (flavor_ == EGCodeFlavor::REPRAP || flavor_ == EGCodeFlavor::MARLIN || flavor_ == EGCodeFlavor::MARLIN_VOLUMATRIC) { prefix << ";Filament used: "; if (filament_used.size() > 0) @@ -285,9 +285,9 @@ std::string GCodeExport::getFileHeader( { prefix << ", "; } - if (flavor != EGCodeFlavor::MARLIN_VOLUMATRIC) + if (flavor_ != EGCodeFlavor::MARLIN_VOLUMATRIC) { - prefix << filament_used[i] / (1000 * extruder_attr[i].filament_area) << "m"; + prefix << filament_used[i] / (1000 * extruder_attr_[i].filament_area_) << "m"; } else // Use volumetric filament used. { @@ -299,144 +299,144 @@ std::string GCodeExport::getFileHeader( { prefix << "0m"; } - prefix << new_line; - prefix << ";Layer height: " << Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height") << new_line; + prefix << new_line_; + prefix << ";Layer height: " << Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height") << new_line_; } - prefix << ";MINX:" << INT2MM(total_bounding_box.min.x_) << new_line; - prefix << ";MINY:" << INT2MM(total_bounding_box.min.y_) << new_line; - prefix << ";MINZ:" << INT2MM(total_bounding_box.min.z_) << new_line; - prefix << ";MAXX:" << INT2MM(total_bounding_box.max.x_) << new_line; - prefix << ";MAXY:" << INT2MM(total_bounding_box.max.y_) << new_line; - prefix << ";MAXZ:" << INT2MM(total_bounding_box.max.z_) << new_line; - prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name) << new_line; + prefix << ";MINX:" << INT2MM(total_bounding_box_.min.x_) << new_line_; + prefix << ";MINY:" << INT2MM(total_bounding_box_.min.y_) << new_line_; + prefix << ";MINZ:" << INT2MM(total_bounding_box_.min.z_) << new_line_; + prefix << ";MAXX:" << INT2MM(total_bounding_box_.max.x_) << new_line_; + prefix << ";MAXY:" << INT2MM(total_bounding_box_.max.y_) << new_line_; + prefix << ";MAXZ:" << INT2MM(total_bounding_box_.max.z_) << new_line_; + prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name_) << new_line_; } return prefix.str(); } -void GCodeExport::setLayerNr(const LayerIndex& layer_nr_) +void GCodeExport::setLayerNr(const LayerIndex& layer_nr) { - layer_nr = layer_nr_; + layer_nr_ = layer_nr; } void GCodeExport::setOutputStream(std::ostream* stream) { - output_stream = stream; - *output_stream << std::fixed; + output_stream_ = stream; + *output_stream_ << std::fixed; } bool GCodeExport::getExtruderIsUsed(const int extruder_nr) const { assert(extruder_nr >= 0); assert(extruder_nr < MAX_EXTRUDERS); - return extruder_attr[extruder_nr].is_used; + return extruder_attr_[extruder_nr].is_used_; } Point GCodeExport::getGcodePos(const coord_t x, const coord_t y, const int extruder_train) const { - return Point(x, y) - extruder_attr[extruder_train].nozzle_offset; + return Point(x, y) - extruder_attr_[extruder_train].nozzle_offset_; } void GCodeExport::setFlavor(EGCodeFlavor flavor) { - this->flavor = flavor; + this->flavor_ = flavor; if (flavor == EGCodeFlavor::MACH3) { for (int n = 0; n < MAX_EXTRUDERS; n++) { - extruder_attr[n].extruderCharacter = 'A' + n; + extruder_attr_[n].extruder_character_ = 'A' + n; } } else { for (int n = 0; n < MAX_EXTRUDERS; n++) { - extruder_attr[n].extruderCharacter = 'E'; + extruder_attr_[n].extruder_character_ = 'E'; } } if (flavor == EGCodeFlavor::ULTIGCODE || flavor == EGCodeFlavor::MARLIN_VOLUMATRIC) { - is_volumetric = true; + is_volumetric_ = true; } else { - is_volumetric = false; + is_volumetric_ = false; } } EGCodeFlavor GCodeExport::getFlavor() const { - return flavor; + return flavor_; } void GCodeExport::setZ(int z) { - current_layer_z = z; + current_layer_z_ = z; } void GCodeExport::addExtraPrimeAmount(double extra_prime_volume) { - extruder_attr[current_extruder].prime_volume += extra_prime_volume; + extruder_attr_[current_extruder_].prime_volume_ += extra_prime_volume; } void GCodeExport::setFlowRateExtrusionSettings(double max_extrusion_offset, double extrusion_offset_factor) { - this->max_extrusion_offset = max_extrusion_offset; - this->extrusion_offset_factor = extrusion_offset_factor; + this->max_extrusion_offset_ = max_extrusion_offset; + this->extrusion_offset_factor_ = extrusion_offset_factor; } Point3 GCodeExport::getPosition() const { - return currentPosition; + return current_position_; } Point GCodeExport::getPositionXY() const { - return Point(currentPosition.x_, currentPosition.y_); + return Point(current_position_.x_, current_position_.y_); } int GCodeExport::getPositionZ() const { - return currentPosition.z_; + return current_position_.z_; } int GCodeExport::getExtruderNr() const { - return current_extruder; + return current_extruder_; } void GCodeExport::setFilamentDiameter(const size_t extruder, const coord_t diameter) { const double r = INT2MM(diameter) / 2.0; const double area = std::numbers::pi * r * r; - extruder_attr[extruder].filament_area = area; + extruder_attr_[extruder].filament_area_ = area; } double GCodeExport::getCurrentExtrudedVolume() const { - double extrusion_amount = current_e_value; - if (! extruder_attr[current_extruder].machine_firmware_retract) + double extrusion_amount = current_e_value_; + if (! extruder_attr_[current_extruder_].machine_firmware_retract_) { // no E values are changed to perform a retraction extrusion_amount - -= extruder_attr[current_extruder].retraction_e_amount_at_e_start; // subtract the increment in E which was used for the first unretraction instead of extrusion + -= extruder_attr_[current_extruder_].retraction_e_amount_at_e_start_; // subtract the increment in E which was used for the first unretraction instead of extrusion extrusion_amount - += extruder_attr[current_extruder].retraction_e_amount_current; // add the decrement in E which the filament is behind on extrusion due to the last retraction + += extruder_attr_[current_extruder_].retraction_e_amount_current_; // add the decrement in E which the filament is behind on extrusion due to the last retraction } - if (is_volumetric) + if (is_volumetric_) { return extrusion_amount; } else { - return extrusion_amount * extruder_attr[current_extruder].filament_area; + return extrusion_amount * extruder_attr_[current_extruder_].filament_area_; } } double GCodeExport::eToMm(double e) { - if (is_volumetric) + if (is_volumetric_) { - return e / extruder_attr[current_extruder].filament_area; + return e / extruder_attr_[current_extruder_].filament_area_; } else { @@ -446,21 +446,21 @@ double GCodeExport::eToMm(double e) double GCodeExport::mm3ToE(double mm3) { - if (is_volumetric) + if (is_volumetric_) { return mm3; } else { - return mm3 / extruder_attr[current_extruder].filament_area; + return mm3 / extruder_attr_[current_extruder_].filament_area_; } } double GCodeExport::mmToE(double mm) { - if (is_volumetric) + if (is_volumetric_) { - return mm * extruder_attr[current_extruder].filament_area; + return mm * extruder_attr_[current_extruder_].filament_area_; } else { @@ -470,26 +470,26 @@ double GCodeExport::mmToE(double mm) double GCodeExport::eToMm3(double e, size_t extruder) { - if (is_volumetric) + if (is_volumetric_) { return e; } else { - return e * extruder_attr[extruder].filament_area; + return e * extruder_attr_[extruder].filament_area_; } } double GCodeExport::getTotalFilamentUsed(size_t extruder_nr) { - if (extruder_nr == current_extruder) - return extruder_attr[extruder_nr].totalFilament + getCurrentExtrudedVolume(); - return extruder_attr[extruder_nr].totalFilament; + if (extruder_nr == current_extruder_) + return extruder_attr_[extruder_nr].total_filament_ + getCurrentExtrudedVolume(); + return extruder_attr_[extruder_nr].total_filament_; } std::vector GCodeExport::getTotalPrintTimePerFeature() { - return total_print_times; + return total_print_times_; } double GCodeExport::getSumTotalPrintTimes() @@ -504,28 +504,28 @@ double GCodeExport::getSumTotalPrintTimes() void GCodeExport::resetTotalPrintTimeAndFilament() { - for (size_t i = 0; i < total_print_times.size(); i++) + for (size_t i = 0; i < total_print_times_.size(); i++) { - total_print_times[i] = 0.0; + total_print_times_[i] = 0.0; } for (unsigned int e = 0; e < MAX_EXTRUDERS; e++) { - extruder_attr[e].totalFilament = 0.0; - extruder_attr[e].currentTemperature = 0; - extruder_attr[e].waited_for_temperature = false; + extruder_attr_[e].total_filament_ = 0.0; + extruder_attr_[e].current_temperature_ = 0; + extruder_attr_[e].waited_for_temperature_ = false; } - current_e_value = 0.0; - estimateCalculator.reset(); + current_e_value_ = 0.0; + estimate_calculator_.reset(); } void GCodeExport::updateTotalPrintTime() { - std::vector estimates = estimateCalculator.calculate(); + std::vector estimates = estimate_calculator_.calculate(); for (size_t i = 0; i < estimates.size(); i++) { - total_print_times[i] += estimates[i]; + total_print_times_[i] += estimates[i]; } - estimateCalculator.reset(); + estimate_calculator_.reset(); writeTimeComment(getSumTotalPrintTimes()); } @@ -533,24 +533,24 @@ void GCodeExport::writeComment(const std::string& unsanitized_comment) { const std::string comment = transliterate(unsanitized_comment); - *output_stream << ";"; + *output_stream_ << ";"; for (unsigned int i = 0; i < comment.length(); i++) { if (comment[i] == '\n') { - *output_stream << new_line << ";"; + *output_stream_ << new_line_ << ";"; } else { - *output_stream << comment[i]; + *output_stream_ << comment[i]; } } - *output_stream << new_line; + *output_stream_ << new_line_; } void GCodeExport::writeTimeComment(const Duration time) { - *output_stream << ";TIME_ELAPSED:" << time << new_line; + *output_stream_ << ";TIME_ELAPSED:" << time << new_line_; } void GCodeExport::writeTypeComment(const PrintFeatureType& type) @@ -558,31 +558,31 @@ void GCodeExport::writeTypeComment(const PrintFeatureType& type) switch (type) { case PrintFeatureType::OuterWall: - *output_stream << ";TYPE:WALL-OUTER" << new_line; + *output_stream_ << ";TYPE:WALL-OUTER" << new_line_; break; case PrintFeatureType::InnerWall: - *output_stream << ";TYPE:WALL-INNER" << new_line; + *output_stream_ << ";TYPE:WALL-INNER" << new_line_; break; case PrintFeatureType::Skin: - *output_stream << ";TYPE:SKIN" << new_line; + *output_stream_ << ";TYPE:SKIN" << new_line_; break; case PrintFeatureType::Support: - *output_stream << ";TYPE:SUPPORT" << new_line; + *output_stream_ << ";TYPE:SUPPORT" << new_line_; break; case PrintFeatureType::SkirtBrim: - *output_stream << ";TYPE:SKIRT" << new_line; + *output_stream_ << ";TYPE:SKIRT" << new_line_; break; case PrintFeatureType::Infill: - *output_stream << ";TYPE:FILL" << new_line; + *output_stream_ << ";TYPE:FILL" << new_line_; break; case PrintFeatureType::SupportInfill: - *output_stream << ";TYPE:SUPPORT" << new_line; + *output_stream_ << ";TYPE:SUPPORT" << new_line_; break; case PrintFeatureType::SupportInterface: - *output_stream << ";TYPE:SUPPORT-INTERFACE" << new_line; + *output_stream_ << ";TYPE:SUPPORT-INTERFACE" << new_line_; break; case PrintFeatureType::PrimeTower: - *output_stream << ";TYPE:PRIME-TOWER" << new_line; + *output_stream_ << ";TYPE:PRIME-TOWER" << new_line_; break; case PrintFeatureType::MoveCombing: case PrintFeatureType::MoveRetraction: @@ -596,17 +596,17 @@ void GCodeExport::writeTypeComment(const PrintFeatureType& type) void GCodeExport::writeLayerComment(const LayerIndex layer_nr) { - *output_stream << ";LAYER:" << layer_nr << new_line; + *output_stream_ << ";LAYER:" << layer_nr << new_line_; } void GCodeExport::writeLayerCountComment(const size_t layer_count) { - *output_stream << ";LAYER_COUNT:" << layer_count << new_line; + *output_stream_ << ";LAYER_COUNT:" << layer_count << new_line_; } void GCodeExport::writeLine(const char* line) { - *output_stream << line << new_line; + *output_stream_ << line << new_line_; } void GCodeExport::resetExtrusionMode() @@ -619,28 +619,28 @@ void GCodeExport::writeExtrusionMode(bool set_relative_extrusion_mode) { if (set_relative_extrusion_mode) { - *output_stream << "M83 ;relative extrusion mode" << new_line; + *output_stream_ << "M83 ;relative extrusion mode" << new_line_; } else { - *output_stream << "M82 ;absolute extrusion mode" << new_line; + *output_stream_ << "M82 ;absolute extrusion mode" << new_line_; } } void GCodeExport::resetExtrusionValue() { - if (! relative_extrusion) + if (! relative_extrusion_) { - *output_stream << "G92 " << extruder_attr[current_extruder].extruderCharacter << "0" << new_line; + *output_stream_ << "G92 " << extruder_attr_[current_extruder_].extruder_character_ << "0" << new_line_; } double current_extruded_volume = getCurrentExtrudedVolume(); - extruder_attr[current_extruder].totalFilament += current_extruded_volume; - for (double& extruded_volume_at_retraction : extruder_attr[current_extruder].extruded_volume_at_previous_n_retractions) + extruder_attr_[current_extruder_].total_filament_ += current_extruded_volume; + for (double& extruded_volume_at_retraction : extruder_attr_[current_extruder_].extruded_volume_at_previous_n_retractions_) { // update the extruded_volume_at_previous_n_retractions only of the current extruder, since other extruders don't extrude the current volume extruded_volume_at_retraction -= current_extruded_volume; } - current_e_value = 0.0; - extruder_attr[current_extruder].retraction_e_amount_at_e_start = extruder_attr[current_extruder].retraction_e_amount_current; + current_e_value_ = 0.0; + extruder_attr_[current_extruder_].retraction_e_amount_at_e_start_ = extruder_attr_[current_extruder_].retraction_e_amount_current_; } bool GCodeExport::initializeExtruderTrains(const SliceDataStorage& storage, const size_t start_extruder_nr) @@ -822,32 +822,32 @@ bool GCodeExport::needPrimeBlob() const void GCodeExport::writeDelay(const Duration& time_amount) { - *output_stream << "G4 P" << int(time_amount * 1000) << new_line; - estimateCalculator.addTime(time_amount); + *output_stream_ << "G4 P" << int(time_amount * 1000) << new_line_; + estimate_calculator_.addTime(time_amount); } void GCodeExport::writeTravel(const Point& p, const Velocity& speed) { - writeTravel(Point3(p.X, p.Y, current_layer_z), speed); + writeTravel(Point3(p.X, p.Y, current_layer_z_), speed); } void GCodeExport::writeExtrusion(const Point& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) { - writeExtrusion(Point3(p.X, p.Y, current_layer_z), speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); + writeExtrusion(Point3(p.X, p.Y, current_layer_z_), speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); } void GCodeExport::writeTravel(const Point3& p, const Velocity& speed) { - if (flavor == EGCodeFlavor::BFB) + if (flavor_ == EGCodeFlavor::BFB) { - writeMoveBFB(p.x_, p.y_, p.z_ + is_z_hopped, speed, 0.0, PrintFeatureType::MoveCombing); + writeMoveBFB(p.x_, p.y_, p.z_ + is_z_hopped_, speed, 0.0, PrintFeatureType::MoveCombing); return; } - writeTravel(p.x_, p.y_, p.z_ + is_z_hopped, speed); + writeTravel(p.x_, p.y_, p.z_ + is_z_hopped_, speed); } void GCodeExport::writeExtrusion(const Point3& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) { - if (flavor == EGCodeFlavor::BFB) + if (flavor_ == EGCodeFlavor::BFB) { writeMoveBFB(p.x_, p.y_, p.z_, speed, extrusion_mm3_per_mm, feature); return; @@ -872,7 +872,7 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo double extrusion_per_mm = mm3ToE(extrusion_mm3_per_mm); - Point gcode_pos = getGcodePos(x, y, current_extruder); + Point gcode_pos = getGcodePos(x, y, current_extruder_); // For Bits From Bytes machines, we need to handle this completely differently. As they do not use E values but RPM values. double fspeed = speed * 60; @@ -881,18 +881,18 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo rpm /= mm_per_rpm; if (rpm > 0) { - if (extruder_attr[current_extruder].retraction_e_amount_current) + if (extruder_attr_[current_extruder_].retraction_e_amount_current_) { - if (currentSpeed != double(rpm)) + if (current_speed_ != double(rpm)) { // fprintf(f, "; %f e-per-mm %d mm-width %d mm/s\n", extrusion_per_mm, lineWidth, speed); // fprintf(f, "M108 S%0.1f\r\n", rpm); - *output_stream << "M108 S" << PrecisionedDouble{ 1, rpm } << new_line; - currentSpeed = double(rpm); + *output_stream_ << "M108 S" << PrecisionedDouble{ 1, rpm } << new_line_; + current_speed_ = double(rpm); } // Add M101 or M201 to enable the proper extruder. - *output_stream << "M" << int((current_extruder + 1) * 100 + 1) << new_line; - extruder_attr[current_extruder].retraction_e_amount_current = 0.0; + *output_stream_ << "M" << int((current_extruder_ + 1) * 100 + 1) << new_line_; + extruder_attr_[current_extruder_].retraction_e_amount_current_ = 0.0; } // Fix the speed by the actual RPM we are asking, because of rounding errors we cannot get all RPM values, but we have a lot more resolution in the feedrate value. // (Trick copied from KISSlicer, thanks Jonathan) @@ -901,49 +901,49 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo // Increase the extrusion amount to calculate the amount of filament used. Point3 diff = Point3(x, y, z) - getPosition(); - current_e_value += extrusion_per_mm * diff.vSizeMM(); + current_e_value_ += extrusion_per_mm * diff.vSizeMM(); } else { // If we are not extruding, check if we still need to disable the extruder. This causes a retraction due to auto-retraction. - if (! extruder_attr[current_extruder].retraction_e_amount_current) + if (! extruder_attr_[current_extruder_].retraction_e_amount_current_) { - *output_stream << "M103" << new_line; - extruder_attr[current_extruder].retraction_e_amount_current + *output_stream_ << "M103" << new_line_; + extruder_attr_[current_extruder_].retraction_e_amount_current_ = 1.0; // 1.0 used as stub; BFB doesn't use the actual retraction amount; it performs retraction on the firmware automatically } } - *output_stream << "G1 X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y } << " Z" << MMtoStream{ z }; - *output_stream << " F" << PrecisionedDouble{ 1, fspeed } << new_line; + *output_stream_ << "G1 X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y } << " Z" << MMtoStream{ z }; + *output_stream_ << " F" << PrecisionedDouble{ 1, fspeed } << new_line_; - currentPosition = Point3(x, y, z); - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), + current_position_ = Point3(x, y, z); + estimate_calculator_.plan( + TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), speed, feature); } void GCodeExport::writeTravel(const coord_t x, const coord_t y, const coord_t z, const Velocity& speed) { - if (currentPosition.x_ == x && currentPosition.y_ == y && currentPosition.z_ == z) + if (current_position_.x_ == x && current_position_.y_ == y && current_position_.z_ == z) { return; } #ifdef ASSERT_INSANE_OUTPUT assert(speed < 1000 && speed > 1); // normal F values occurring in UM2 gcode (this code should not be compiled for release) - assert(currentPosition != no_point3); + assert(current_position_ != no_point3); assert(Point3(x, y, z) != no_point3); - assert((Point3(x, y, z) - currentPosition).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) + assert((Point3(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) #endif // ASSERT_INSANE_OUTPUT - const PrintFeatureType travel_move_type = extruder_attr[current_extruder].retraction_e_amount_current ? PrintFeatureType::MoveRetraction : PrintFeatureType::MoveCombing; - const int display_width = extruder_attr[current_extruder].retraction_e_amount_current ? MM2INT(0.2) : MM2INT(0.1); + const PrintFeatureType travel_move_type = extruder_attr_[current_extruder_].retraction_e_amount_current_ ? PrintFeatureType::MoveRetraction : PrintFeatureType::MoveCombing; + const int display_width = extruder_attr_[current_extruder_].retraction_e_amount_current_ ? MM2INT(0.2) : MM2INT(0.1); const double layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); Application::getInstance().communication_->sendLineTo(travel_move_type, Point(x, y), display_width, layer_height, speed); - *output_stream << "G0"; - writeFXYZE(speed, x, y, z, current_e_value, travel_move_type); + *output_stream_ << "G0"; + writeFXYZE(speed, x, y, z, current_e_value_, travel_move_type); } void GCodeExport::writeExtrusion( @@ -955,16 +955,16 @@ void GCodeExport::writeExtrusion( const PrintFeatureType& feature, const bool update_extrusion_offset) { - if (currentPosition.x_ == x && currentPosition.y_ == y && currentPosition.z_ == z) + if (current_position_.x_ == x && current_position_.y_ == y && current_position_.z_ == z) { return; } #ifdef ASSERT_INSANE_OUTPUT assert(speed < 1000 && speed > 1); // normal F values occurring in UM2 gcode (this code should not be compiled for release) - assert(currentPosition != no_point3); + assert(current_position_ != no_point3); assert(Point3(x, y, z) != no_point3); - assert((Point3(x, y, z) - currentPosition).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) + assert((Point3(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) assert(extrusion_mm3_per_mm >= 0.0); #endif // ASSERT_INSANE_OUTPUT #ifdef DEBUG @@ -990,12 +990,12 @@ void GCodeExport::writeExtrusion( const double extrusion_per_mm = mm3ToE(extrusion_mm3_per_mm); - if (is_z_hopped > 0) + if (is_z_hopped_ > 0) { writeZhopEnd(); } - const Point3 diff = Point3(x, y, z) - currentPosition; + const Point3 diff = Point3(x, y, z) - current_position_; const double diff_length = diff.vSizeMM(); writeUnretractionAndPrime(); @@ -1004,134 +1004,134 @@ void GCodeExport::writeExtrusion( double extrusion_offset = 0; if (diff_length) { - extrusion_offset = speed * extrusion_mm3_per_mm * extrusion_offset_factor; - if (extrusion_offset > max_extrusion_offset) + extrusion_offset = speed * extrusion_mm3_per_mm * extrusion_offset_factor_; + if (extrusion_offset > max_extrusion_offset_) { - extrusion_offset = max_extrusion_offset; + extrusion_offset = max_extrusion_offset_; } } // write new value of extrusion_offset, which will be remembered. - if (update_extrusion_offset && (extrusion_offset != current_e_offset)) + if (update_extrusion_offset && (extrusion_offset != current_e_offset_)) { - current_e_offset = extrusion_offset; - *output_stream << ";FLOW_RATE_COMPENSATED_OFFSET = " << current_e_offset << new_line; + current_e_offset_ = extrusion_offset; + *output_stream_ << ";FLOW_RATE_COMPENSATED_OFFSET = " << current_e_offset_ << new_line_; } - extruder_attr[current_extruder].last_e_value_after_wipe += extrusion_per_mm * diff_length; - const double new_e_value = current_e_value + extrusion_per_mm * diff_length; + extruder_attr_[current_extruder_].last_e_value_after_wipe_ += extrusion_per_mm * diff_length; + const double new_e_value = current_e_value_ + extrusion_per_mm * diff_length; - *output_stream << "G1"; + *output_stream_ << "G1"; writeFXYZE(speed, x, y, z, new_e_value, feature); } void GCodeExport::writeFXYZE(const Velocity& speed, const coord_t x, const coord_t y, const coord_t z, const double e, const PrintFeatureType& feature) { - if (currentSpeed != speed) + if (current_speed_ != speed) { - *output_stream << " F" << PrecisionedDouble{ 1, speed * 60 }; - currentSpeed = speed; + *output_stream_ << " F" << PrecisionedDouble{ 1, speed * 60 }; + current_speed_ = speed; } - Point gcode_pos = getGcodePos(x, y, current_extruder); - total_bounding_box.include(Point3(gcode_pos.X, gcode_pos.Y, z)); + Point gcode_pos = getGcodePos(x, y, current_extruder_); + total_bounding_box_.include(Point3(gcode_pos.X, gcode_pos.Y, z)); - *output_stream << " X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y }; - if (z != currentPosition.z_) + *output_stream_ << " X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y }; + if (z != current_position_.z_) { - *output_stream << " Z" << MMtoStream{ z }; + *output_stream_ << " Z" << MMtoStream{ z }; } - if (e + current_e_offset != current_e_value) + if (e + current_e_offset_ != current_e_value_) { - const double output_e = (relative_extrusion) ? e + current_e_offset - current_e_value : e + current_e_offset; - *output_stream << " " << extruder_attr[current_extruder].extruderCharacter << PrecisionedDouble{ 5, output_e }; + const double output_e = (relative_extrusion_) ? e + current_e_offset_ - current_e_value_ : e + current_e_offset_; + *output_stream_ << " " << extruder_attr_[current_extruder_].extruder_character_ << PrecisionedDouble{ 5, output_e }; } - *output_stream << new_line; + *output_stream_ << new_line_; - currentPosition = Point3(x, y, z); - current_e_value = e; - estimateCalculator.plan(TimeEstimateCalculator::Position(INT2MM(x), INT2MM(y), INT2MM(z), eToMm(e)), speed, feature); + current_position_ = Point3(x, y, z); + current_e_value_ = e; + estimate_calculator_.plan(TimeEstimateCalculator::Position(INT2MM(x), INT2MM(y), INT2MM(z), eToMm(e)), speed, feature); } void GCodeExport::writeUnretractionAndPrime() { - const double prime_volume = extruder_attr[current_extruder].prime_volume; + const double prime_volume = extruder_attr_[current_extruder_].prime_volume_; const double prime_volume_e = mm3ToE(prime_volume); - current_e_value += prime_volume_e; - if (extruder_attr[current_extruder].retraction_e_amount_current) + current_e_value_ += prime_volume_e; + if (extruder_attr_[current_extruder_].retraction_e_amount_current_) { - if (extruder_attr[current_extruder].machine_firmware_retract) + if (extruder_attr_[current_extruder_].machine_firmware_retract_) { // note that BFB is handled differently - *output_stream << "G11" << new_line; + *output_stream_ << "G11" << new_line_; // Assume default UM2 retraction settings. if (prime_volume != 0) { - const double output_e = (relative_extrusion) ? prime_volume_e : current_e_value; - *output_stream << "G1 F" << PrecisionedDouble{ 1, extruder_attr[current_extruder].last_retraction_prime_speed * 60 } << " " - << extruder_attr[current_extruder].extruderCharacter << PrecisionedDouble{ 5, output_e } << new_line; - currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; + const double output_e = (relative_extrusion_) ? prime_volume_e : current_e_value_; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, extruder_attr_[current_extruder_].last_retraction_prime_speed_ * 60 } << " " + << extruder_attr_[current_extruder_].extruder_character_ << PrecisionedDouble{ 5, output_e } << new_line_; + current_speed_ = extruder_attr_[current_extruder_].last_retraction_prime_speed_; } - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), + estimate_calculator_.plan( + TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), 25.0, PrintFeatureType::MoveRetraction); } else { - current_e_value += extruder_attr[current_extruder].retraction_e_amount_current; - const double output_e = (relative_extrusion) ? extruder_attr[current_extruder].retraction_e_amount_current + prime_volume_e : current_e_value; - *output_stream << "G1 F" << PrecisionedDouble{ 1, extruder_attr[current_extruder].last_retraction_prime_speed * 60 } << " " - << extruder_attr[current_extruder].extruderCharacter << PrecisionedDouble{ 5, output_e } << new_line; - currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), - currentSpeed, + current_e_value_ += extruder_attr_[current_extruder_].retraction_e_amount_current_; + const double output_e = (relative_extrusion_) ? extruder_attr_[current_extruder_].retraction_e_amount_current_ + prime_volume_e : current_e_value_; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, extruder_attr_[current_extruder_].last_retraction_prime_speed_ * 60 } << " " + << extruder_attr_[current_extruder_].extruder_character_ << PrecisionedDouble{ 5, output_e } << new_line_; + current_speed_ = extruder_attr_[current_extruder_].last_retraction_prime_speed_; + estimate_calculator_.plan( + TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), + current_speed_, PrintFeatureType::MoveRetraction); } } else if (prime_volume != 0.0) { - const double output_e = (relative_extrusion) ? prime_volume_e : current_e_value; - *output_stream << "G1 F" << PrecisionedDouble{ 1, extruder_attr[current_extruder].last_retraction_prime_speed * 60 } << " " - << extruder_attr[current_extruder].extruderCharacter; - *output_stream << PrecisionedDouble{ 5, output_e } << new_line; - currentSpeed = extruder_attr[current_extruder].last_retraction_prime_speed; - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), - currentSpeed, + const double output_e = (relative_extrusion_) ? prime_volume_e : current_e_value_; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, extruder_attr_[current_extruder_].last_retraction_prime_speed_ * 60 } << " " + << extruder_attr_[current_extruder_].extruder_character_; + *output_stream_ << PrecisionedDouble{ 5, output_e } << new_line_; + current_speed_ = extruder_attr_[current_extruder_].last_retraction_prime_speed_; + estimate_calculator_.plan( + TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), + current_speed_, PrintFeatureType::NoneType); } - extruder_attr[current_extruder].prime_volume = 0.0; + extruder_attr_[current_extruder_].prime_volume_ = 0.0; - if (getCurrentExtrudedVolume() > 10000.0 && flavor != EGCodeFlavor::BFB - && flavor != EGCodeFlavor::MAKERBOT) // According to https://github.com/Ultimaker/CuraEngine/issues/14 having more then 21m of extrusion causes inaccuracies. So reset it - // every 10m, just to be sure. + if (getCurrentExtrudedVolume() > 10000.0 && flavor_ != EGCodeFlavor::BFB + && flavor_ != EGCodeFlavor::MAKERBOT) // According to https://github.com/Ultimaker/CuraEngine/issues/14 having more then 21m of extrusion causes inaccuracies. So reset it + // every 10m, just to be sure. { resetExtrusionValue(); } - if (extruder_attr[current_extruder].retraction_e_amount_current) + if (extruder_attr_[current_extruder_].retraction_e_amount_current_) { - extruder_attr[current_extruder].retraction_e_amount_current = 0.0; + extruder_attr_[current_extruder_].retraction_e_amount_current_ = 0.0; } } void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bool extruder_switch) { - ExtruderTrainAttributes& extr_attr = extruder_attr[current_extruder]; + ExtruderTrainAttributes& extr_attr = extruder_attr_[current_extruder_]; - if (flavor == EGCodeFlavor::BFB) // BitsFromBytes does automatic retraction. + if (flavor_ == EGCodeFlavor::BFB) // BitsFromBytes does automatic retraction. { if (extruder_switch) { - if (! extr_attr.retraction_e_amount_current) + if (! extr_attr.retraction_e_amount_current_) { - *output_stream << "M103" << new_line; + *output_stream_ << "M103" << new_line_; } - extr_attr.retraction_e_amount_current = 1.0; // 1.0 is a stub; BFB doesn't use the actual retracted amount; retraction is performed by firmware + extr_attr.retraction_e_amount_current_ = 1.0; // 1.0 is a stub; BFB doesn't use the actual retracted amount; retraction is performed by firmware } return; } - double old_retraction_e_amount = extr_attr.retraction_e_amount_current; + double old_retraction_e_amount = extr_attr.retraction_e_amount_current_; double new_retraction_e_amount = mmToE(config.distance); double retraction_diff_e_amount = old_retraction_e_amount - new_retraction_e_amount; if (std::abs(retraction_diff_e_amount) < 0.000001) @@ -1141,7 +1141,7 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo { // handle retraction limitation double current_extruded_volume = getCurrentExtrudedVolume(); - std::deque& extruded_volume_at_previous_n_retractions = extr_attr.extruded_volume_at_previous_n_retractions; + std::deque& extruded_volume_at_previous_n_retractions = extr_attr.extruded_volume_at_previous_n_retractions_; while (extruded_volume_at_previous_n_retractions.size() > config.retraction_count_max && ! extruded_volume_at_previous_n_retractions.empty()) { // extruder switch could have introduced data which falls outside the retraction window @@ -1153,7 +1153,7 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo return; } if (! force && extruded_volume_at_previous_n_retractions.size() == config.retraction_count_max - && current_extruded_volume < extruded_volume_at_previous_n_retractions.back() + config.retraction_extrusion_window * extr_attr.filament_area) + && current_extruded_volume < extruded_volume_at_previous_n_retractions.back() + config.retraction_extrusion_window * extr_attr.filament_area_) { return; } @@ -1164,40 +1164,44 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo } } - if (extruder_attr[current_extruder].machine_firmware_retract) + if (extruder_attr_[current_extruder_].machine_firmware_retract_) { - if (extruder_switch && extr_attr.retraction_e_amount_current) + if (extruder_switch && extr_attr.retraction_e_amount_current_) { return; } - *output_stream << "G10"; - if (extruder_switch && flavor == EGCodeFlavor::REPETIER) + *output_stream_ << "G10"; + if (extruder_switch && flavor_ == EGCodeFlavor::REPETIER) { - *output_stream << " S1"; + *output_stream_ << " S1"; } - *output_stream << new_line; + *output_stream_ << new_line_; // Assume default UM2 retraction settings. - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value + retraction_diff_e_amount)), + estimate_calculator_.plan( + TimeEstimateCalculator::Position( + INT2MM(current_position_.x_), + INT2MM(current_position_.y_), + INT2MM(current_position_.z_), + eToMm(current_e_value_ + retraction_diff_e_amount)), 25.0, PrintFeatureType::MoveRetraction); // TODO: hardcoded values! } else { - double speed = ((retraction_diff_e_amount < 0.0) ? config.speed : extr_attr.last_retraction_prime_speed); - current_e_value += retraction_diff_e_amount; - const double output_e = (relative_extrusion) ? retraction_diff_e_amount : current_e_value; - *output_stream << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " " << extr_attr.extruderCharacter << PrecisionedDouble{ 5, output_e } << new_line; - currentSpeed = speed; - estimateCalculator.plan( - TimeEstimateCalculator::Position(INT2MM(currentPosition.x_), INT2MM(currentPosition.y_), INT2MM(currentPosition.z_), eToMm(current_e_value)), - currentSpeed, + double speed = ((retraction_diff_e_amount < 0.0) ? config.speed : extr_attr.last_retraction_prime_speed_); + current_e_value_ += retraction_diff_e_amount; + const double output_e = (relative_extrusion_) ? retraction_diff_e_amount : current_e_value_; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " " << extr_attr.extruder_character_ << PrecisionedDouble{ 5, output_e } << new_line_; + current_speed_ = speed; + estimate_calculator_.plan( + TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), + current_speed_, PrintFeatureType::MoveRetraction); - extr_attr.last_retraction_prime_speed = config.primeSpeed; + extr_attr.last_retraction_prime_speed_ = config.primeSpeed; } - extr_attr.retraction_e_amount_current = new_retraction_e_amount; // suppose that for UM2 the retraction amount in the firmware is equal to the provided amount - extr_attr.prime_volume += config.prime_volume; + extr_attr.retraction_e_amount_current_ = new_retraction_e_amount; // suppose that for UM2 the retraction amount in the firmware is equal to the provided amount + extr_attr.prime_volume_ += config.prime_volume; } void GCodeExport::writeZhopStart(const coord_t hop_height, Velocity speed /*= 0*/) @@ -1206,50 +1210,50 @@ void GCodeExport::writeZhopStart(const coord_t hop_height, Velocity speed /*= 0* { if (speed == 0) { - const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder_]; speed = extruder.settings_.get("speed_z_hop"); } - is_z_hopped = hop_height; - currentSpeed = speed; - *output_stream << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " Z" << MMtoStream{ current_layer_z + is_z_hopped } << new_line; - total_bounding_box.includeZ(current_layer_z + is_z_hopped); + is_z_hopped_ = hop_height; + current_speed_ = speed; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " Z" << MMtoStream{ current_layer_z_ + is_z_hopped_ } << new_line_; + total_bounding_box_.includeZ(current_layer_z_ + is_z_hopped_); assert(speed > 0.0 && "Z hop speed should be positive."); } } void GCodeExport::writeZhopEnd(Velocity speed /*= 0*/) { - if (is_z_hopped) + if (is_z_hopped_) { if (speed == 0) { - const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder]; + const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[current_extruder_]; speed = extruder.settings_.get("speed_z_hop"); } - is_z_hopped = 0; - currentPosition.z_ = current_layer_z; - currentSpeed = speed; - *output_stream << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " Z" << MMtoStream{ current_layer_z } << new_line; + is_z_hopped_ = 0; + current_position_.z_ = current_layer_z_; + current_speed_ = speed; + *output_stream_ << "G1 F" << PrecisionedDouble{ 1, speed * 60 } << " Z" << MMtoStream{ current_layer_z_ } << new_line_; assert(speed > 0.0 && "Z hop speed should be positive."); } } void GCodeExport::startExtruder(const size_t new_extruder) { - extruder_attr[new_extruder].is_used = true; - if (new_extruder != current_extruder) // wouldn't be the case on the very first extruder start if it's extruder 0 + extruder_attr_[new_extruder].is_used_ = true; + if (new_extruder != current_extruder_) // wouldn't be the case on the very first extruder start if it's extruder 0 { - if (flavor == EGCodeFlavor::MAKERBOT) + if (flavor_ == EGCodeFlavor::MAKERBOT) { - *output_stream << "M135 T" << new_extruder << new_line; + *output_stream_ << "M135 T" << new_extruder << new_line_; } else { - *output_stream << "T" << new_extruder << new_line; + *output_stream_ << "T" << new_extruder << new_line_; } } - current_extruder = new_extruder; + current_extruder_ = new_extruder; assert(getCurrentExtrudedVolume() == 0.0 && "Just after an extruder switch we haven't extruded anything yet!"); resetExtrusionValue(); // zero the E value on the new extruder, just to be sure @@ -1258,14 +1262,14 @@ void GCodeExport::startExtruder(const size_t new_extruder) if (! start_code.empty()) { - if (relative_extrusion) + if (relative_extrusion_) { writeExtrusionMode(false); // ensure absolute extrusion mode is set before the start gcode } writeCode(start_code.c_str()); - if (relative_extrusion) + if (relative_extrusion_) { writeExtrusionMode(true); // restore relative extrusion mode } @@ -1275,19 +1279,19 @@ void GCodeExport::startExtruder(const size_t new_extruder) Application::getInstance().communication_->sendCurrentPosition(getPositionXY()); // Change the Z position so it gets re-written again. We do not know if the switch code modified the Z position. - currentPosition.z_ += 1; + current_position_.z_ += 1; setExtruderFanNumber(new_extruder); } void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& retraction_config_old_extruder, coord_t perform_z_hop /*= 0*/) { - if (current_extruder == new_extruder) + if (current_extruder_ == new_extruder) { return; } - const Settings& old_extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder].settings_; + const Settings& old_extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder_].settings_; if (old_extruder_settings.get("retraction_enable")) { constexpr bool force = true; @@ -1306,14 +1310,14 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re if (! end_code.empty()) { - if (relative_extrusion) + if (relative_extrusion_) { writeExtrusionMode(false); // ensure absolute extrusion mode is set before the end gcode } writeCode(end_code.c_str()); - if (relative_extrusion) + if (relative_extrusion_) { writeExtrusionMode(true); // restore relative extrusion mode } @@ -1324,23 +1328,23 @@ void GCodeExport::switchExtruder(size_t new_extruder, const RetractionConfig& re void GCodeExport::writeCode(const char* str) { - *output_stream << str << new_line; + *output_stream_ << str << new_line_; } void GCodeExport::resetExtruderToPrimed(const size_t extruder, const double initial_retraction) { - extruder_attr[extruder].is_primed = true; + extruder_attr_[extruder].is_primed_ = true; - extruder_attr[extruder].retraction_e_amount_current = initial_retraction; + extruder_attr_[extruder].retraction_e_amount_current_ = initial_retraction; } void GCodeExport::writePrimeTrain(const Velocity& travel_speed) { - if (extruder_attr[current_extruder].is_primed) + if (extruder_attr_[current_extruder_].is_primed_) { // extruder is already primed once! return; } - const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[current_extruder_].settings_; if (extruder_settings.get("prime_blob_enable")) { // only move to prime position if we do a blob/poop // ideally the prime position would be respected whether we do a blob or not, @@ -1353,12 +1357,12 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) if (! extruder_settings.get("extruder_prime_pos_abs")) { // currentPosition.z can be already z hopped - prime_pos += Point3(currentPosition.x_, currentPosition.y_, current_layer_z); + prime_pos += Point3(current_position_.x_, current_position_.y_, current_layer_z_); } writeTravel(prime_pos, travel_speed); } - if (flavor == EGCodeFlavor::GRIFFIN) + if (flavor_ == EGCodeFlavor::GRIFFIN) { bool should_correct_z = false; @@ -1368,7 +1372,7 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) command += " S1"; // use S1 to disable prime blob should_correct_z = true; } - *output_stream << command << new_line; + *output_stream_ << command << new_line_; // There was an issue with the S1 strategy parameter, where it would only change the material-position, // as opposed to 'be a prime-blob maneuvre without actually printing the prime blob', as we assumed here. @@ -1378,7 +1382,7 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) { // Can't output via 'writeTravel', since if this is needed, the value saved for 'current height' will not be correct. // For similar reasons, this isn't written to the front-end via command-socket. - *output_stream << "G0 Z" << MMtoStream{ getPositionZ() } << new_line; + *output_stream_ << "G0 Z" << MMtoStream{ getPositionZ() } << new_line_; } } else @@ -1386,56 +1390,56 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) // there is no prime gcode for other firmware versions... } - extruder_attr[current_extruder].is_primed = true; + extruder_attr_[current_extruder_].is_primed_ = true; } void GCodeExport::setExtruderFanNumber(int extruder) { - if (extruder_attr[extruder].fan_number != fan_number) + if (extruder_attr_[extruder].fan_number_ != fan_number_) { - fan_number = extruder_attr[extruder].fan_number; - current_fan_speed = -1; // ensure fan speed gcode gets output for this fan + fan_number_ = extruder_attr_[extruder].fan_number_; + current_fan_speed_ = -1; // ensure fan speed gcode gets output for this fan } } void GCodeExport::writeFanCommand(double speed) { - if (std::abs(current_fan_speed - speed) < 0.1) + if (std::abs(current_fan_speed_ - speed) < 0.1) { return; } - if (flavor == EGCodeFlavor::MAKERBOT) + if (flavor_ == EGCodeFlavor::MAKERBOT) { if (speed >= 50) { - *output_stream << "M126 T0" << new_line; // Makerbot cannot PWM the fan speed... + *output_stream_ << "M126 T0" << new_line_; // Makerbot cannot PWM the fan speed... } else { - *output_stream << "M127 T0" << new_line; + *output_stream_ << "M127 T0" << new_line_; } } else if (speed > 0) { const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); - *output_stream << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? 2u : 1u), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; - if (fan_number) + *output_stream_ << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? 2u : 1u), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; + if (fan_number_) { - *output_stream << " P" << fan_number; + *output_stream_ << " P" << fan_number_; } - *output_stream << new_line; + *output_stream_ << new_line_; } else { - *output_stream << "M107"; - if (fan_number) + *output_stream_ << "M107"; + if (fan_number_) { - *output_stream << " P" << fan_number; + *output_stream_ << " P" << fan_number_; } - *output_stream << new_line; + *output_stream_ << new_line_; } - current_fan_speed = speed; + current_fan_speed_ = speed; } void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperature& temperature, const bool wait) @@ -1450,7 +1454,7 @@ void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperatu if (extruder_train.settings_.get("machine_extruders_share_heater")) { // extruders share a single heater - if (extruder != current_extruder) + if (extruder != current_extruder_) { // ignore all changes to the non-current extruder return; @@ -1465,101 +1469,101 @@ void GCodeExport::writeTemperatureCommand(const size_t extruder, const Temperatu { // only reset the other extruders' waited_for_temperature state when the new temperature // is greater than the old temperature - if (wait || temperature > extruder_attr[extruder_nr].currentTemperature) + if (wait || temperature > extruder_attr_[extruder_nr].current_temperature_) { - extruder_attr[extruder_nr].waited_for_temperature = wait; + extruder_attr_[extruder_nr].waited_for_temperature_ = wait; } - extruder_attr[extruder_nr].currentTemperature = temperature; + extruder_attr_[extruder_nr].current_temperature_ = temperature; } } } - if ((! wait || extruder_attr[extruder].waited_for_temperature) && extruder_attr[extruder].currentTemperature == temperature) + if ((! wait || extruder_attr_[extruder].waited_for_temperature_) && extruder_attr_[extruder].current_temperature_ == temperature) { return; } - if (wait && flavor != EGCodeFlavor::MAKERBOT) + if (wait && flavor_ != EGCodeFlavor::MAKERBOT) { - if (flavor == EGCodeFlavor::MARLIN) + if (flavor_ == EGCodeFlavor::MARLIN) { - *output_stream << "M105" << new_line; // get temperatures from the last update, the M109 will not let get the target temperature + *output_stream_ << "M105" << new_line_; // get temperatures from the last update, the M109 will not let get the target temperature } - *output_stream << "M109"; - extruder_attr[extruder].waited_for_temperature = true; + *output_stream_ << "M109"; + extruder_attr_[extruder].waited_for_temperature_ = true; } else { - *output_stream << "M104"; - extruder_attr[extruder].waited_for_temperature = false; + *output_stream_ << "M104"; + extruder_attr_[extruder].waited_for_temperature_ = false; } - if (extruder != current_extruder) + if (extruder != current_extruder_) { - *output_stream << " T" << extruder; + *output_stream_ << " T" << extruder; } #ifdef ASSERT_INSANE_OUTPUT assert(temperature >= 0); #endif // ASSERT_INSANE_OUTPUT - *output_stream << " S" << PrecisionedDouble{ 1, temperature } << new_line; - if (extruder != current_extruder && always_write_active_tool) + *output_stream_ << " S" << PrecisionedDouble{ 1, temperature } << new_line_; + if (extruder != current_extruder_ && always_write_active_tool_) { // Some firmwares (ie Smoothieware) change tools every time a "T" command is read - even on a M104 line, so we need to switch back to the active tool. - *output_stream << "T" << current_extruder << new_line; + *output_stream_ << "T" << current_extruder_ << new_line_; } - if (wait && flavor == EGCodeFlavor::MAKERBOT) + if (wait && flavor_ == EGCodeFlavor::MAKERBOT) { // Makerbot doesn't use M109 for heat-and-wait. Instead, use M104 and then wait using M116. - *output_stream << "M116" << new_line; + *output_stream_ << "M116" << new_line_; } - extruder_attr[extruder].currentTemperature = temperature; + extruder_attr_[extruder].current_temperature_ = temperature; } void GCodeExport::writeBedTemperatureCommand(const Temperature& temperature, const bool wait) { - if (flavor == EGCodeFlavor::ULTIGCODE) + if (flavor_ == EGCodeFlavor::ULTIGCODE) { // The UM2 family doesn't support temperature commands (they are fixed in the firmware) return; } - if (bed_temperature != temperature) // Not already at the desired temperature. + if (bed_temperature_ != temperature) // Not already at the desired temperature. { if (wait) { - if (flavor == EGCodeFlavor::MARLIN) + if (flavor_ == EGCodeFlavor::MARLIN) { - *output_stream << "M140 S"; // set the temperature, it will be used as target temperature from M105 - *output_stream << PrecisionedDouble{ 1, temperature } << new_line; - *output_stream << "M105" << new_line; + *output_stream_ << "M140 S"; // set the temperature, it will be used as target temperature from M105 + *output_stream_ << PrecisionedDouble{ 1, temperature } << new_line_; + *output_stream_ << "M105" << new_line_; } - *output_stream << "M190 S"; + *output_stream_ << "M190 S"; } else { - *output_stream << "M140 S"; + *output_stream_ << "M140 S"; } - *output_stream << PrecisionedDouble{ 1, temperature } << new_line; + *output_stream_ << PrecisionedDouble{ 1, temperature } << new_line_; - bed_temperature = temperature; + bed_temperature_ = temperature; } } void GCodeExport::writeBuildVolumeTemperatureCommand(const Temperature& temperature, const bool wait) { - if (flavor == EGCodeFlavor::ULTIGCODE || flavor == EGCodeFlavor::GRIFFIN) + if (flavor_ == EGCodeFlavor::ULTIGCODE || flavor_ == EGCodeFlavor::GRIFFIN) { // Ultimaker printers don't support build volume temperature commands. return; } if (wait) { - *output_stream << "M191 S"; + *output_stream_ << "M191 S"; } else { - *output_stream << "M141 S"; + *output_stream_ << "M141 S"; } - *output_stream << PrecisionedDouble{ 1, temperature } << new_line; + *output_stream_ << PrecisionedDouble{ 1, temperature } << new_line_; } void GCodeExport::writePrintAcceleration(const Acceleration& acceleration) @@ -1567,27 +1571,27 @@ void GCodeExport::writePrintAcceleration(const Acceleration& acceleration) switch (getFlavor()) { case EGCodeFlavor::REPETIER: - if (current_print_acceleration != acceleration) + if (current_print_acceleration_ != acceleration) { - *output_stream << "M201 X" << PrecisionedDouble{ 0, acceleration } << " Y" << PrecisionedDouble{ 0, acceleration } << new_line; + *output_stream_ << "M201 X" << PrecisionedDouble{ 0, acceleration } << " Y" << PrecisionedDouble{ 0, acceleration } << new_line_; } break; case EGCodeFlavor::REPRAP: - if (current_print_acceleration != acceleration) + if (current_print_acceleration_ != acceleration) { - *output_stream << "M204 P" << PrecisionedDouble{ 0, acceleration } << new_line; + *output_stream_ << "M204 P" << PrecisionedDouble{ 0, acceleration } << new_line_; } break; default: // MARLIN, etc. only have one acceleration for both print and travel - if (current_print_acceleration != acceleration) + if (current_print_acceleration_ != acceleration) { - *output_stream << "M204 S" << PrecisionedDouble{ 0, acceleration } << new_line; + *output_stream_ << "M204 S" << PrecisionedDouble{ 0, acceleration } << new_line_; } break; } - current_print_acceleration = acceleration; - estimateCalculator.setAcceleration(acceleration); + current_print_acceleration_ = acceleration; + estimate_calculator_.setAcceleration(acceleration); } void GCodeExport::writeTravelAcceleration(const Acceleration& acceleration) @@ -1595,15 +1599,15 @@ void GCodeExport::writeTravelAcceleration(const Acceleration& acceleration) switch (getFlavor()) { case EGCodeFlavor::REPETIER: - if (current_travel_acceleration != acceleration) + if (current_travel_acceleration_ != acceleration) { - *output_stream << "M202 X" << PrecisionedDouble{ 0, acceleration } << " Y" << PrecisionedDouble{ 0, acceleration } << new_line; + *output_stream_ << "M202 X" << PrecisionedDouble{ 0, acceleration } << " Y" << PrecisionedDouble{ 0, acceleration } << new_line_; } break; case EGCodeFlavor::REPRAP: - if (current_travel_acceleration != acceleration) + if (current_travel_acceleration_ != acceleration) { - *output_stream << "M204 T" << PrecisionedDouble{ 0, acceleration } << new_line; + *output_stream_ << "M204 T" << PrecisionedDouble{ 0, acceleration } << new_line_; } break; default: @@ -1611,28 +1615,28 @@ void GCodeExport::writeTravelAcceleration(const Acceleration& acceleration) writePrintAcceleration(acceleration); break; } - current_travel_acceleration = acceleration; - estimateCalculator.setAcceleration(acceleration); + current_travel_acceleration_ = acceleration; + estimate_calculator_.setAcceleration(acceleration); } void GCodeExport::writeJerk(const Velocity& jerk) { - if (current_jerk != jerk) + if (current_jerk_ != jerk) { switch (getFlavor()) { case EGCodeFlavor::REPETIER: - *output_stream << "M207 X" << PrecisionedDouble{ 2, jerk } << new_line; + *output_stream_ << "M207 X" << PrecisionedDouble{ 2, jerk } << new_line_; break; case EGCodeFlavor::REPRAP: - *output_stream << "M566 X" << PrecisionedDouble{ 2, jerk * 60 } << " Y" << PrecisionedDouble{ 2, jerk * 60 } << new_line; + *output_stream_ << "M566 X" << PrecisionedDouble{ 2, jerk * 60 } << " Y" << PrecisionedDouble{ 2, jerk * 60 } << new_line_; break; default: - *output_stream << "M205 X" << PrecisionedDouble{ 2, jerk } << " Y" << PrecisionedDouble{ 2, jerk } << new_line; + *output_stream_ << "M205 X" << PrecisionedDouble{ 2, jerk } << " Y" << PrecisionedDouble{ 2, jerk } << new_line_; break; } - current_jerk = jerk; - estimateCalculator.setMaxXyJerk(jerk); + current_jerk_ = jerk; + estimate_calculator_.setMaxXyJerk(jerk); } } @@ -1648,22 +1652,22 @@ void GCodeExport::finalize(const char* endCode) for (int n = 1; n < MAX_EXTRUDERS; n++) if (getTotalFilamentUsed(n) > 0) spdlog::info("Filament {}: {}", n + 1, int(getTotalFilamentUsed(n))); - output_stream->flush(); + output_stream_->flush(); } double GCodeExport::getExtrudedVolumeAfterLastWipe(size_t extruder) { - return eToMm3(extruder_attr[extruder].last_e_value_after_wipe, extruder); + return eToMm3(extruder_attr_[extruder].last_e_value_after_wipe_, extruder); } void GCodeExport::ResetLastEValueAfterWipe(size_t extruder) { - extruder_attr[extruder].last_e_value_after_wipe = 0; + extruder_attr_[extruder].last_e_value_after_wipe_ = 0; } void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) { - const Point3 prev_position = currentPosition; + const Point3 prev_position = current_position_; writeComment("WIPE_SCRIPT_BEGIN"); if (wipe_config.retraction_enable) @@ -1676,11 +1680,11 @@ void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) writeZhopStart(wipe_config.hop_amount, wipe_config.hop_speed); } - writeTravel(Point(wipe_config.brush_pos_x, currentPosition.y_), wipe_config.move_speed); + writeTravel(Point(wipe_config.brush_pos_x, current_position_.y_), wipe_config.move_speed); for (size_t i = 0; i < wipe_config.repeat_count; ++i) { - coord_t x = currentPosition.x_ + (i % 2 ? -wipe_config.move_distance : wipe_config.move_distance); - writeTravel(Point(x, currentPosition.y_), wipe_config.move_speed); + coord_t x = current_position_.x_ + (i % 2 ? -wipe_config.move_distance : wipe_config.move_distance); + writeTravel(Point(x, current_position_.y_), wipe_config.move_speed); } writeTravel(prev_position, wipe_config.move_speed); diff --git a/src/infill.cpp b/src/infill.cpp index 39e3342b50..6c7f5e80dc 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -675,16 +675,20 @@ void Infill::generateLinearBasedInfill( // Then we can later join two crossings together to form lines and still know what polygon line segments that infill line connected to. struct Crossing { + Point coordinate_; + size_t polygon_index_; + size_t vertex_index_; + Crossing(Point coordinate, size_t polygon_index, size_t vertex_index) - : coordinate(coordinate) - , polygon_index(polygon_index) - , vertex_index(vertex_index){}; - Point coordinate; - size_t polygon_index; - size_t vertex_index; + : coordinate_(coordinate) + , polygon_index_(polygon_index) + , vertex_index_(vertex_index) + { + } + bool operator<(const Crossing& other) const // Crossings will be ordered by their Y coordinate so that they get ordered along the scanline. { - return coordinate.Y < other.coordinate.Y; + return coordinate_.Y < other.coordinate_.Y; } }; std::vector> crossings_per_scanline; // For each scanline, a list of crossings. @@ -768,17 +772,17 @@ void Infill::generateLinearBasedInfill( const Crossing& first = crossings[crossing_index]; const Crossing& second = crossings[crossing_index + 1]; // Avoid creating zero length crossing lines - const Point unrotated_first = rotation_matrix.unapply(first.coordinate); - const Point unrotated_second = rotation_matrix.unapply(second.coordinate); + const Point unrotated_first = rotation_matrix.unapply(first.coordinate_); + const Point unrotated_second = rotation_matrix.unapply(second.coordinate_); if (unrotated_first == unrotated_second) { continue; } InfillLineSegment* new_segment - = new InfillLineSegment(unrotated_first, first.vertex_index, first.polygon_index, unrotated_second, second.vertex_index, second.polygon_index); + = new InfillLineSegment(unrotated_first, first.vertex_index_, first.polygon_index_, unrotated_second, second.vertex_index_, second.polygon_index_); // Put the same line segment in the data structure twice: Once for each of the polygon line segment that it crosses. - crossings_on_line_[first.polygon_index][first.vertex_index].push_back(new_segment); - crossings_on_line_[second.polygon_index][second.vertex_index].push_back(new_segment); + crossings_on_line_[first.polygon_index_][first.vertex_index_].push_back(new_segment); + crossings_on_line_[second.polygon_index_][second.vertex_index_].push_back(new_segment); } } } diff --git a/src/progress/ProgressStageEstimator.cpp b/src/progress/ProgressStageEstimator.cpp index 667103a046..e587141a0b 100644 --- a/src/progress/ProgressStageEstimator.cpp +++ b/src/progress/ProgressStageEstimator.cpp @@ -9,45 +9,45 @@ namespace cura ProgressStageEstimator::ProgressStageEstimator(std::vector< double >& relative_time_estimates) -: total_estimated_time(0) -, accumulated_estimate(0) -, current_stage_idx(-1) +: total_estimated_time_(0) +, accumulated_estimate_(0) +, current_stage_idx_(-1) { - stages.reserve(relative_time_estimates.size()); + stages_.reserve(relative_time_estimates.size()); for (double relative_estimated_time : relative_time_estimates) { - stages.emplace_back(relative_estimated_time); - total_estimated_time += relative_estimated_time; + stages_.emplace_back(relative_estimated_time); + total_estimated_time_ += relative_estimated_time; } } ProgressStageEstimator::~ProgressStageEstimator() { - for (ProgressStage& stage : stages) + for (ProgressStage& stage : stages_) { - delete stage.stage; + delete stage.stage_; } } double ProgressStageEstimator::progress(int current_step) { - ProgressStage& current_stage = stages[current_stage_idx]; - return (accumulated_estimate + current_stage.stage->progress(current_step) * current_stage.relative_estimated_time) / total_estimated_time; + ProgressStage& current_stage = stages_[current_stage_idx_]; + return (accumulated_estimate_ + current_stage.stage_->progress(current_step) * current_stage.relative_estimated_time_) / total_estimated_time_; } void ProgressStageEstimator::nextStage(ProgressEstimator* stage) { - if (current_stage_idx >= int(stages.size()) - 1) + if (current_stage_idx_ >= int(stages_.size()) - 1) { return; } - if (current_stage_idx >= 0) + if (current_stage_idx_ >= 0) { - ProgressStage& current_stage = stages[current_stage_idx]; - accumulated_estimate += current_stage.relative_estimated_time; + ProgressStage& current_stage = stages_[current_stage_idx_]; + accumulated_estimate_ += current_stage.relative_estimated_time_; } - current_stage_idx++; - stages[current_stage_idx].stage = stage; + current_stage_idx_++; + stages_[current_stage_idx_].stage_ = stage; } diff --git a/src/raft.cpp b/src/raft.cpp index 74325690d0..0bdc72bbfe 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -51,7 +51,7 @@ void Raft::generate(SliceDataStorage& storage) storage.raftOutline = storage.raftOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); // remove small holes and smooth inward corners } - if (storage.primeTower.enabled && ! storage.primeTower.would_have_actual_tower) + if (storage.primeTower.enabled_ && ! storage.primeTower.would_have_actual_tower_) { // Find out if the prime-tower part of the raft still needs to be printed, even if there is no actual tower. // This will only happen if the different raft layers are printed by different extruders. diff --git a/src/skin.cpp b/src/skin.cpp index 19e54f2072..9f1d865dcd 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -34,18 +34,18 @@ coord_t SkinInfillAreaComputation::getSkinLineWidth(const SliceMeshStorage& mesh } SkinInfillAreaComputation::SkinInfillAreaComputation(const LayerIndex& layer_nr, SliceMeshStorage& mesh, bool process_infill) - : layer_nr(layer_nr) - , mesh(mesh) - , bottom_layer_count(mesh.settings.get("bottom_layers")) - , initial_bottom_layer_count(mesh.settings.get("initial_bottom_layers")) - , top_layer_count(mesh.settings.get("top_layers")) - , skin_line_width(getSkinLineWidth(mesh, layer_nr)) - , no_small_gaps_heuristic(mesh.settings.get("skin_no_small_gaps_heuristic")) - , process_infill(process_infill) - , top_skin_preshrink(mesh.settings.get("top_skin_preshrink")) - , bottom_skin_preshrink(mesh.settings.get("bottom_skin_preshrink")) - , top_skin_expand_distance(mesh.settings.get("top_skin_expand_distance")) - , bottom_skin_expand_distance(mesh.settings.get("bottom_skin_expand_distance")) + : layer_nr_(layer_nr) + , mesh_(mesh) + , bottom_layer_count_(mesh.settings.get("bottom_layers")) + , initial_bottom_layer_count_(mesh.settings.get("initial_bottom_layers")) + , top_layer_count_(mesh.settings.get("top_layers")) + , skin_line_width_(getSkinLineWidth(mesh, layer_nr)) + , no_small_gaps_heuristic_(mesh.settings.get("skin_no_small_gaps_heuristic")) + , process_infill_(process_infill) + , top_skin_preshrink_(mesh.settings.get("top_skin_preshrink")) + , bottom_skin_preshrink_(mesh.settings.get("bottom_skin_preshrink")) + , top_skin_expand_distance_(mesh.settings.get("top_skin_expand_distance")) + , bottom_skin_expand_distance_(mesh.settings.get("bottom_skin_expand_distance")) { } @@ -58,11 +58,11 @@ SkinInfillAreaComputation::SkinInfillAreaComputation(const LayerIndex& layer_nr, Polygons SkinInfillAreaComputation::getOutlineOnLayer(const SliceLayerPart& part_here, const LayerIndex layer2_nr) { Polygons result; - if (layer2_nr >= static_cast(mesh.layers.size())) + if (layer2_nr >= static_cast(mesh_.layers.size())) { return result; } - const SliceLayer& layer2 = mesh.layers[layer2_nr]; + const SliceLayer& layer2 = mesh_.layers[layer2_nr]; for (const SliceLayerPart& part2 : layer2.parts) { if (part_here.boundaryBox.hit(part2.boundaryBox)) @@ -86,7 +86,7 @@ void SkinInfillAreaComputation::generateSkinsAndInfill() { generateSkinAndInfillAreas(); - SliceLayer* layer = &mesh.layers[layer_nr]; + SliceLayer* layer = &mesh_.layers[layer_nr_]; for (SliceLayerPart& part : layer->parts) { @@ -104,9 +104,9 @@ void SkinInfillAreaComputation::generateSkinsAndInfill() */ void SkinInfillAreaComputation::generateSkinAndInfillAreas() { - SliceLayer& layer = mesh.layers[layer_nr]; + SliceLayer& layer = mesh_.layers[layer_nr_]; - if (! process_infill && bottom_layer_count == 0 && top_layer_count == 0) + if (! process_infill_ && bottom_layer_count_ == 0 && top_layer_count_ == 0) { return; } @@ -127,12 +127,12 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) { // Make a copy of the outline which we later intersect and union with the resized skins to ensure the resized skin isn't too large or removed completely. Polygons top_skin; - if (top_layer_count > 0) + if (top_layer_count_ > 0) { top_skin = Polygons(part.inner_area); } Polygons bottom_skin; - if (bottom_layer_count > 0 || layer_nr < LayerIndex(initial_bottom_layer_count)) + if (bottom_layer_count_ > 0 || layer_nr_ < LayerIndex(initial_bottom_layer_count_)) { bottom_skin = Polygons(part.inner_area); } @@ -148,7 +148,7 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) skin.removeSmallAreas(MIN_AREA_SIZE); // Create infill area irrespective if the infill is to be generated or not(would be used for bridging). part.infill_area = part.inner_area.difference(skin); - if (process_infill) + if (process_infill_) { // process infill when infill density > 0 // or when other infill meshes want to modify this infill generateInfill(part); @@ -169,24 +169,24 @@ void SkinInfillAreaComputation::generateSkinAndInfillAreas(SliceLayerPart& part) */ void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, Polygons& downskin) { - if (bottom_layer_count == 0 && initial_bottom_layer_count == 0) + if (bottom_layer_count_ == 0 && initial_bottom_layer_count_ == 0) { return; // downskin remains empty } - if (layer_nr < LayerIndex(initial_bottom_layer_count)) + if (layer_nr_ < LayerIndex(initial_bottom_layer_count_)) { return; // don't subtract anything form the downskin } - LayerIndex bottom_check_start_layer_idx{ std::max(LayerIndex{ 0 }, LayerIndex{ layer_nr - bottom_layer_count }) }; + LayerIndex bottom_check_start_layer_idx{ std::max(LayerIndex{ 0 }, LayerIndex{ layer_nr_ - bottom_layer_count_ }) }; Polygons not_air = getOutlineOnLayer(part, bottom_check_start_layer_idx); - if (! no_small_gaps_heuristic) + if (! no_small_gaps_heuristic_) { - for (int downskin_layer_nr = bottom_check_start_layer_idx + 1; downskin_layer_nr < layer_nr; downskin_layer_nr++) + for (int downskin_layer_nr = bottom_check_start_layer_idx + 1; downskin_layer_nr < layer_nr_; downskin_layer_nr++) { not_air = not_air.intersection(getOutlineOnLayer(part, downskin_layer_nr)); } } - const double min_infill_area = mesh.settings.get("min_infill_area"); + const double min_infill_area = mesh_.settings.get("min_infill_area"); if (min_infill_area > 0.0) { not_air.removeSmallAreas(min_infill_area); @@ -196,23 +196,23 @@ void SkinInfillAreaComputation::calculateBottomSkin(const SliceLayerPart& part, void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Polygons& upskin) { - if (layer_nr > LayerIndex(mesh.layers.size()) - top_layer_count || top_layer_count <= 0) + if (layer_nr_ > LayerIndex(mesh_.layers.size()) - top_layer_count_ || top_layer_count_ <= 0) { // If we're in the very top layers (less than top_layer_count from the top of the mesh) everything will be top skin anyway, so no need to generate infill. Just take the // original inner contour. If top_layer_count is 0, no need to calculate anything either. return; } - Polygons not_air = getOutlineOnLayer(part, layer_nr + top_layer_count); - if (! no_small_gaps_heuristic) + Polygons not_air = getOutlineOnLayer(part, layer_nr_ + top_layer_count_); + if (! no_small_gaps_heuristic_) { - for (int upskin_layer_nr = layer_nr + 1; upskin_layer_nr < layer_nr + top_layer_count; upskin_layer_nr++) + for (int upskin_layer_nr = layer_nr_ + 1; upskin_layer_nr < layer_nr_ + top_layer_count_; upskin_layer_nr++) { not_air = not_air.intersection(getOutlineOnLayer(part, upskin_layer_nr)); } } - const double min_infill_area = mesh.settings.get("min_infill_area"); + const double min_infill_area = mesh_.settings.get("min_infill_area"); if (min_infill_area > 0.0) { not_air.removeSmallAreas(min_infill_area); @@ -229,39 +229,39 @@ void SkinInfillAreaComputation::calculateTopSkin(const SliceLayerPart& part, Pol */ void SkinInfillAreaComputation::applySkinExpansion(const Polygons& original_outline, Polygons& upskin, Polygons& downskin) { - const coord_t min_width = mesh.settings.get("min_skin_width_for_expansion") / 2; + const coord_t min_width = mesh_.settings.get("min_skin_width_for_expansion") / 2; // Expand some areas of the skin for Skin Expand Distance. if (min_width > 0) { // This performs an opening operation by first insetting by the minimum width, then offsetting with the same width. // The expansion is only applied to that opened shape. - if (bottom_skin_expand_distance != 0) + if (bottom_skin_expand_distance_ != 0) { - const Polygons expanded = downskin.offset(-min_width).offset(min_width + bottom_skin_expand_distance); + const Polygons expanded = downskin.offset(-min_width).offset(min_width + bottom_skin_expand_distance_); // And then re-joined with the original part that was not offset, to retain parts smaller than min_width. downskin = downskin.unionPolygons(expanded); } - if (top_skin_expand_distance != 0) + if (top_skin_expand_distance_ != 0) { - const Polygons expanded = upskin.offset(-min_width).offset(min_width + top_skin_expand_distance); + const Polygons expanded = upskin.offset(-min_width).offset(min_width + top_skin_expand_distance_); upskin = upskin.unionPolygons(expanded); } } else // No need to pay attention to minimum width. Just expand. { - if (bottom_skin_expand_distance != 0) + if (bottom_skin_expand_distance_ != 0) { - downskin = downskin.offset(bottom_skin_expand_distance); + downskin = downskin.offset(bottom_skin_expand_distance_); } - if (top_skin_expand_distance != 0) + if (top_skin_expand_distance_ != 0) { - upskin = upskin.offset(top_skin_expand_distance); + upskin = upskin.offset(top_skin_expand_distance_); } } - bool should_bottom_be_clipped = bottom_skin_expand_distance > 0; - bool should_top_be_clipped = top_skin_expand_distance > 0; + bool should_bottom_be_clipped = bottom_skin_expand_distance_ > 0; + bool should_top_be_clipped = top_skin_expand_distance_ > 0; // Set miter limit for morphological open in order to fill in // "narrow point" features of polygons due to offsetting artifacts. @@ -278,16 +278,16 @@ void SkinInfillAreaComputation::applySkinExpansion(const Polygons& original_outl // as the final polygon is limited (intersected) with the original polygon. constexpr double MITER_LIMIT = 10000000.0; // Remove thin pieces of support for Skin Removal Width. - if (bottom_skin_preshrink > 0 || (min_width == 0 && bottom_skin_expand_distance != 0)) + if (bottom_skin_preshrink_ > 0 || (min_width == 0 && bottom_skin_expand_distance_ != 0)) { - downskin = downskin.offset(-bottom_skin_preshrink / 2, ClipperLib::jtMiter, MITER_LIMIT) - .offset(bottom_skin_preshrink / 2, ClipperLib::jtMiter, MITER_LIMIT) + downskin = downskin.offset(-bottom_skin_preshrink_ / 2, ClipperLib::jtMiter, MITER_LIMIT) + .offset(bottom_skin_preshrink_ / 2, ClipperLib::jtMiter, MITER_LIMIT) .intersection(downskin); should_bottom_be_clipped = true; // Rounding errors can lead to propagation of errors. This could mean that skin goes beyond the original outline } - if (top_skin_preshrink > 0 || (min_width == 0 && top_skin_expand_distance != 0)) + if (top_skin_preshrink_ > 0 || (min_width == 0 && top_skin_expand_distance_ != 0)) { - upskin = upskin.offset(-top_skin_preshrink / 2, ClipperLib::jtMiter, MITER_LIMIT).offset(top_skin_preshrink / 2, ClipperLib::jtMiter, MITER_LIMIT); + upskin = upskin.offset(-top_skin_preshrink_ / 2, ClipperLib::jtMiter, MITER_LIMIT).offset(top_skin_preshrink_ / 2, ClipperLib::jtMiter, MITER_LIMIT); should_top_be_clipped = true; // Rounding errors can lead to propagation of errors. This could mean that skin goes beyond the original outline } @@ -323,8 +323,8 @@ void SkinInfillAreaComputation::generateRoofingFillAndSkinFill(SliceLayerPart& p { for (SkinPart& skin_part : part.skin_parts) { - const size_t roofing_layer_count = std::min(mesh.settings.get("roofing_layer_count"), mesh.settings.get("top_layers")); - const coord_t skin_overlap = mesh.settings.get("skin_overlap_mm"); + const size_t roofing_layer_count = std::min(mesh_.settings.get("roofing_layer_count"), mesh_.settings.get("top_layers")); + const coord_t skin_overlap = mesh_.settings.get("skin_overlap_mm"); Polygons filled_area_above = generateFilledAreaAbove(part, roofing_layer_count); @@ -346,16 +346,16 @@ void SkinInfillAreaComputation::generateRoofingFillAndSkinFill(SliceLayerPart& p */ Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part, size_t roofing_layer_count) { - Polygons filled_area_above = getOutlineOnLayer(part, layer_nr + roofing_layer_count); - if (! no_small_gaps_heuristic) + Polygons filled_area_above = getOutlineOnLayer(part, layer_nr_ + roofing_layer_count); + if (! no_small_gaps_heuristic_) { - for (int layer_nr_above = layer_nr + 1; layer_nr_above < layer_nr + roofing_layer_count; layer_nr_above++) + for (int layer_nr_above = layer_nr_ + 1; layer_nr_above < layer_nr_ + roofing_layer_count; layer_nr_above++) { Polygons outlines_above = getOutlineOnLayer(part, layer_nr_above); filled_area_above = filled_area_above.intersection(outlines_above); } } - if (layer_nr > 0) + if (layer_nr_ > 0) { // if the skin has air below it then cutting it into regions could cause a region // to be wholely or partly above air and it may not be printable so restrict @@ -363,7 +363,7 @@ Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part // has air below (fixes https://github.com/Ultimaker/Cura/issues/2656) // set air_below to the skin area for the current layer that has air below it - Polygons air_below = getOutlineOnLayer(part, layer_nr).difference(getOutlineOnLayer(part, layer_nr - 1)); + Polygons air_below = getOutlineOnLayer(part, layer_nr_).difference(getOutlineOnLayer(part, layer_nr_ - 1)); if (! air_below.empty()) { @@ -382,18 +382,18 @@ Polygons SkinInfillAreaComputation::generateFilledAreaAbove(SliceLayerPart& part */ Polygons SkinInfillAreaComputation::generateFilledAreaBelow(SliceLayerPart& part, size_t flooring_layer_count) { - if (layer_nr < flooring_layer_count) + if (layer_nr_ < flooring_layer_count) { return {}; } constexpr size_t min_wall_line_count = 2; - const int lowest_flooring_layer = layer_nr - flooring_layer_count; + const int lowest_flooring_layer = layer_nr_ - flooring_layer_count; Polygons filled_area_below = getOutlineOnLayer(part, lowest_flooring_layer); - if (! no_small_gaps_heuristic) + if (! no_small_gaps_heuristic_) { const int next_lowest_flooring_layer = lowest_flooring_layer + 1; - for (int layer_nr_below = next_lowest_flooring_layer; layer_nr_below < layer_nr; layer_nr_below++) + for (int layer_nr_below = next_lowest_flooring_layer; layer_nr_below < layer_nr_; layer_nr_below++) { Polygons outlines_below = getOutlineOnLayer(part, layer_nr_below); filled_area_below = filled_area_below.intersection(outlines_below); @@ -459,8 +459,8 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) layer_skip_count = gradual_infill_step_layer_count / n_skip_steps_per_gradual_step; const size_t max_infill_steps = mesh.settings.get("gradual_infill_steps"); - const LayerIndex min_layer = mesh.settings.get("initial_bottom_layers"); - const LayerIndex max_layer = mesh.layers.size() - 1 - mesh.settings.get("top_layers"); + const LayerIndex mesh_min_layer = mesh.settings.get("initial_bottom_layers"); + const LayerIndex mesh_max_layer = mesh.layers.size() - 1 - mesh.settings.get("top_layers"); const auto infill_wall_count = mesh.settings.get("infill_wall_line_count"); const auto infill_wall_width = mesh.settings.get("infill_line_width"); @@ -483,7 +483,7 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) layer_idx, SectionType::SKIN); - if (infill_area.empty() || layer_idx < min_layer || layer_idx > max_layer) + if (infill_area.empty() || layer_idx < mesh_min_layer || layer_idx > mesh_max_layer) { // initialize infill_area_per_combine_per_density empty part.infill_area_per_combine_per_density.emplace_back(); // create a new infill_area_per_combine part.infill_area_per_combine_per_density.back().emplace_back(); // put empty infill area in the newly constructed infill_area_per_combine diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 27f0266c69..ddce31175b 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -328,10 +328,10 @@ Polygons total.add(support_layer.support_roof); } } - int prime_tower_outer_extruder_nr = primeTower.extruder_order[0]; + int prime_tower_outer_extruder_nr = primeTower.extruder_order_[0]; if (include_prime_tower && (extruder_nr == -1 || extruder_nr == prime_tower_outer_extruder_nr)) { - if (primeTower.enabled) + if (primeTower.enabled_) { total.add(primeTower.getOuterPoly(layer_nr)); } diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index e85b6fb2da..4a80f409ca 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -43,31 +43,31 @@ class GCodeExportTest : public testing::Test void SetUp() override { output << std::fixed; - gcode.output_stream = &output; + gcode.output_stream_ = &output; // Since GCodeExport doesn't support copying, we have to reset everything in-place. - gcode.currentPosition = Point3(0, 0, MM2INT(20)); - gcode.layer_nr = 0; - gcode.current_e_value = 0; - gcode.current_e_offset = 0; - gcode.current_extruder = 0; - gcode.current_fan_speed = -1; - gcode.total_print_times = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); - gcode.currentSpeed = 1.0; - gcode.current_print_acceleration = -1.0; - gcode.current_travel_acceleration = -1.0; - gcode.current_jerk = -1.0; - gcode.is_z_hopped = 0; + gcode.current_position_ = Point3(0, 0, MM2INT(20)); + gcode.layer_nr_ = 0; + gcode.current_e_value_ = 0; + gcode.current_e_offset_ = 0; + gcode.current_extruder_ = 0; + gcode.current_fan_speed_ = -1; + gcode.total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); + gcode.current_speed_ = 1.0; + gcode.current_print_acceleration_ = -1.0; + gcode.current_travel_acceleration_ = -1.0; + gcode.current_jerk_ = -1.0; + gcode.is_z_hopped_ = 0; gcode.setFlavor(EGCodeFlavor::MARLIN); - gcode.bed_temperature = 0; - gcode.initial_bed_temp = 0; - gcode.fan_number = 0; - gcode.total_bounding_box = AABB3D(); - gcode.current_layer_z = 0; - gcode.relative_extrusion = false; + gcode.bed_temperature_ = 0; + gcode.initial_bed_temp_ = 0; + gcode.fan_number_ = 0; + gcode.total_bounding_box_ = AABB3D(); + gcode.current_layer_z_ = 0; + gcode.relative_extrusion_ = false; - gcode.new_line = "\n"; // Not BFB flavour by default. - gcode.machine_name = "Your favourite 3D printer"; + gcode.new_line_ = "\n"; // Not BFB flavour by default. + gcode.machine_name_ = "Your favourite 3D printer"; // Set up a scene so that we may request settings. Application::getInstance().current_slice_ = new Slice(1); @@ -204,28 +204,28 @@ class GriffinHeaderTest : public testing::TestWithParam void SetUp() override { output << std::fixed; - gcode.output_stream = &output; + gcode.output_stream_ = &output; // Since GCodeExport doesn't support copying, we have to reset everything in-place. - gcode.currentPosition = Point3(0, 0, MM2INT(20)); - gcode.layer_nr = 0; - gcode.current_e_value = 0; - gcode.current_extruder = 0; - gcode.current_fan_speed = -1; - gcode.total_print_times = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); - gcode.currentSpeed = 1.0; - gcode.current_print_acceleration = -1.0; - gcode.current_travel_acceleration = -1.0; - gcode.current_jerk = -1.0; - gcode.is_z_hopped = 0; + gcode.current_position_ = Point3(0, 0, MM2INT(20)); + gcode.layer_nr_ = 0; + gcode.current_e_value_ = 0; + gcode.current_extruder_ = 0; + gcode.current_fan_speed_ = -1; + gcode.total_print_times_ = std::vector(static_cast(PrintFeatureType::NumPrintFeatureTypes), 0.0); + gcode.current_speed_ = 1.0; + gcode.current_print_acceleration_ = -1.0; + gcode.current_travel_acceleration_ = -1.0; + gcode.current_jerk_ = -1.0; + gcode.is_z_hopped_ = 0; gcode.setFlavor(EGCodeFlavor::MARLIN); - gcode.initial_bed_temp = 0; - gcode.bed_temperature = 0; - gcode.fan_number = 0; - gcode.total_bounding_box = AABB3D(); + gcode.initial_bed_temp_ = 0; + gcode.bed_temperature_ = 0; + gcode.fan_number_ = 0; + gcode.total_bounding_box_ = AABB3D(); - gcode.new_line = "\n"; // Not BFB flavour by default. - gcode.machine_name = "Your favourite 3D printer"; + gcode.new_line_ = "\n"; // Not BFB flavour by default. + gcode.machine_name_ = "Your favourite 3D printer"; // Set up a scene so that we may request settings. Application::getInstance().current_slice_ = new Slice(0); From 4bcc29c1a44e2e5c9ac7c282e146e0a62593724c Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 21 Nov 2023 16:26:51 +0100 Subject: [PATCH 082/218] Fixed shadowed variables warnings --- include/BeadingStrategy/BeadingStrategy.h | 12 +- .../DistributedBeadingStrategy.h | 2 +- .../BeadingStrategy/LimitedBeadingStrategy.h | 4 +- .../OuterWallInsetBeadingStrategy.h | 4 +- .../RedistributeBeadingStrategy.h | 6 +- .../BeadingStrategy/WideningBeadingStrategy.h | 6 +- include/ExtruderPlan.h | 2 +- include/LayerPlan.h | 64 +-- include/PathOrder.h | 18 +- include/PathOrderMonotonic.h | 354 ++++++++-------- include/TreeModelVolumes.h | 30 +- include/WallToolPaths.h | 32 +- include/WallsComputation.h | 4 +- include/infill/LightningDistanceField.h | 41 +- src/BeadingStrategy/BeadingStrategy.cpp | 42 +- .../DistributedBeadingStrategy.cpp | 18 +- .../LimitedBeadingStrategy.cpp | 72 ++-- .../OuterWallInsetBeadingStrategy.cpp | 20 +- .../RedistributeBeadingStrategy.cpp | 40 +- .../WideningBeadingStrategy.cpp | 36 +- src/FffGcodeWriter.cpp | 60 +-- src/LayerPlan.cpp | 377 +++++++++--------- src/LayerPlanBuffer.cpp | 28 +- src/PrimeTower.cpp | 4 +- src/TopSurface.cpp | 6 +- src/TreeModelVolumes.cpp | 188 ++++----- src/WallToolPaths.cpp | 196 ++++----- src/WallsComputation.cpp | 40 +- src/infill/LightningDistanceField.cpp | 48 +-- src/support.cpp | 16 +- tests/LayerPlanTest.cpp | 22 +- tests/PathOrderMonotonicTest.cpp | 4 +- 32 files changed, 915 insertions(+), 881 deletions(-) diff --git a/include/BeadingStrategy/BeadingStrategy.h b/include/BeadingStrategy/BeadingStrategy.h index 0b6d28a87d..ab628788cd 100644 --- a/include/BeadingStrategy/BeadingStrategy.h +++ b/include/BeadingStrategy/BeadingStrategy.h @@ -104,21 +104,21 @@ class BeadingStrategy AngleRadians getTransitioningAngle() const; protected: - std::string name; + std::string name_; - coord_t optimal_width; //! Optimal bead width, nominal width off the walls in 'ideal' circumstances. + coord_t optimal_width_; //! Optimal bead width, nominal width off the walls in 'ideal' circumstances. - Ratio wall_split_middle_threshold; //! Threshold when a middle wall should be split into two, as a ratio of the optimal wall width. + Ratio wall_split_middle_threshold_; //! Threshold when a middle wall should be split into two, as a ratio of the optimal wall width. - Ratio wall_add_middle_threshold; //! Threshold when a new middle wall should be added between an even number of walls, as a ratio of the optimal wall width. + Ratio wall_add_middle_threshold_; //! Threshold when a new middle wall should be added between an even number of walls, as a ratio of the optimal wall width. - coord_t default_transition_length; //! The length of the region to smoothly transfer between bead counts + coord_t default_transition_length_; //! The length of the region to smoothly transfer between bead counts /*! * The maximum angle between outline segments smaller than which we are going to add transitions * Equals 180 - the "limit bisector angle" from the paper */ - AngleRadians transitioning_angle; + AngleRadians transitioning_angle_; }; using BeadingStrategyPtr = std::unique_ptr; diff --git a/include/BeadingStrategy/DistributedBeadingStrategy.h b/include/BeadingStrategy/DistributedBeadingStrategy.h index 35a7bb0bde..bddb1e8140 100644 --- a/include/BeadingStrategy/DistributedBeadingStrategy.h +++ b/include/BeadingStrategy/DistributedBeadingStrategy.h @@ -18,7 +18,7 @@ namespace cura class DistributedBeadingStrategy : public BeadingStrategy { protected: - double one_over_distribution_radius_squared; // (1 / distribution_radius)^2 + double one_over_distribution_radius_squared_; // (1 / distribution_radius)^2 public: /*! diff --git a/include/BeadingStrategy/LimitedBeadingStrategy.h b/include/BeadingStrategy/LimitedBeadingStrategy.h index b4ca975fd6..42d34f86a4 100644 --- a/include/BeadingStrategy/LimitedBeadingStrategy.h +++ b/include/BeadingStrategy/LimitedBeadingStrategy.h @@ -42,8 +42,8 @@ class LimitedBeadingStrategy : public BeadingStrategy double getTransitionAnchorPos(coord_t lower_bead_count) const override; protected: - const coord_t max_bead_count; - const BeadingStrategyPtr parent; + const coord_t max_bead_count_; + const BeadingStrategyPtr parent_; }; diff --git a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h index f1ea71af7d..87fb2b8258 100644 --- a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h +++ b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h @@ -28,8 +28,8 @@ namespace cura virtual std::string toString() const; private: - BeadingStrategyPtr parent; - coord_t outer_wall_offset; + BeadingStrategyPtr parent_; + coord_t outer_wall_offset_; }; } // namespace cura #endif // OUTER_WALL_INSET_BEADING_STRATEGY_H diff --git a/include/BeadingStrategy/RedistributeBeadingStrategy.h b/include/BeadingStrategy/RedistributeBeadingStrategy.h index 6609eee995..2f8304bf39 100644 --- a/include/BeadingStrategy/RedistributeBeadingStrategy.h +++ b/include/BeadingStrategy/RedistributeBeadingStrategy.h @@ -83,9 +83,9 @@ class RedistributeBeadingStrategy : public BeadingStrategy */ static bool validateInnerBeadWidths(Beading& beading, coord_t minimum_width_inner); - BeadingStrategyPtr parent; - coord_t optimal_width_outer; - Ratio minimum_variable_line_ratio; + BeadingStrategyPtr parent_; + coord_t optimal_width_outer_; + Ratio minimum_variable_line_ratio_; }; } // namespace cura diff --git a/include/BeadingStrategy/WideningBeadingStrategy.h b/include/BeadingStrategy/WideningBeadingStrategy.h index 5ec9bf4cad..bda69f345d 100644 --- a/include/BeadingStrategy/WideningBeadingStrategy.h +++ b/include/BeadingStrategy/WideningBeadingStrategy.h @@ -37,9 +37,9 @@ class WideningBeadingStrategy : public BeadingStrategy virtual std::string toString() const override; protected: - BeadingStrategyPtr parent; - const coord_t min_input_width; - const coord_t min_output_width; + BeadingStrategyPtr parent_; + const coord_t min_input_width_; + const coord_t min_output_width_; }; } // namespace cura diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index 5f42adfc09..ab0fef772e 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -44,7 +44,7 @@ class ExtruderPlan FRIEND_TEST(ExtruderPlanTest, BackPressureCompensationEmptyPlan); #endif public: - size_t extruder_nr_{ 0 }; //!< The extruder used for this paths in the current plan. + size_t extruder_nr_; //!< The extruder used for this paths in the current plan. ExtruderPlan() noexcept = default; diff --git a/include/LayerPlan.h b/include/LayerPlan.h index a4b639030a..aff1b0304a 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -54,49 +54,49 @@ class LayerPlan : public NoCopy #endif public: - const PathConfigStorage configs_storage; //!< The line configs for this layer for each feature type - coord_t z; - coord_t final_travel_z; - bool mode_skip_agressive_merge; //!< Whether to give every new path the 'skip_agressive_merge_hint' property (see GCodePath); default is false. + const PathConfigStorage configs_storage_; //!< The line configs for this layer for each feature type + coord_t z_; + coord_t final_travel_z_; + bool mode_skip_agressive_merge_; //!< Whether to give every new path the 'skip_agressive_merge_hint' property (see GCodePath); default is false. private: - const SliceDataStorage& storage; //!< The polygon data obtained from FffPolygonProcessor - const LayerIndex layer_nr; //!< The layer number of this layer plan - const bool is_initial_layer; //!< Whether this is the first layer (which might be raft) - const bool is_raft_layer; //!< Whether this is a layer which is part of the raft - coord_t layer_thickness; + const SliceDataStorage& storage_; //!< The polygon data obtained from FffPolygonProcessor + const LayerIndex layer_nr_; //!< The layer number of this layer plan + const bool is_initial_layer_; //!< Whether this is the first layer (which might be raft) + const bool is_raft_layer_; //!< Whether this is a layer which is part of the raft + coord_t layer_thickness_; - std::vector layer_start_pos_per_extruder; //!< The starting position of a layer for each extruder - std::vector has_prime_tower_planned_per_extruder; //!< For each extruder, whether the prime tower is planned yet or not. - std::optional last_planned_position; //!< The last planned XY position of the print head (if known) + std::vector layer_start_pos_per_extruder_; //!< The starting position of a layer for each extruder + std::vector has_prime_tower_planned_per_extruder_; //!< For each extruder, whether the prime tower is planned yet or not. + std::optional last_planned_position_; //!< The last planned XY position of the print head (if known) - std::shared_ptr current_mesh; //!< The mesh of the last planned move. + std::shared_ptr current_mesh_; //!< The mesh of the last planned move. /*! * Whether the skirt or brim polygons have been processed into planned paths * for each extruder train. */ - bool skirt_brim_is_processed[MAX_EXTRUDERS]; + bool skirt_brim_is_processed_[MAX_EXTRUDERS]; - std::vector extruder_plans; //!< should always contain at least one ExtruderPlan + std::vector extruder_plans_; //!< should always contain at least one ExtruderPlan - size_t last_extruder_previous_layer; //!< The last id of the extruder with which was printed in the previous layer - ExtruderTrain* last_planned_extruder; //!< The extruder for which a move has most recently been planned. + size_t last_extruder_previous_layer_; //!< The last id of the extruder with which was printed in the previous layer + ExtruderTrain* last_planned_extruder_; //!< The extruder for which a move has most recently been planned. - std::optional first_travel_destination; //!< The destination of the first (travel) move (if this layer is not empty) - bool first_travel_destination_is_inside; //!< Whether the destination of the first planned travel move is inside a layer part - std::optional> first_extrusion_acc_jerk; //!< The acceleration and jerk rates of the first extruded move (if this layer is not empty). - std::optional> next_layer_acc_jerk; //!< If there is a next layer, the first acceleration and jerk it starts with. - bool was_inside; //!< Whether the last planned (extrusion) move was inside a layer part - bool is_inside; //!< Whether the destination of the next planned travel move is inside a layer part - Polygons comb_boundary_minimum; //!< The minimum boundary within which to comb, or to move into when performing a retraction. - Polygons comb_boundary_preferred; //!< The boundary preferably within which to comb, or to move into when performing a retraction. - Comb* comb; - coord_t comb_move_inside_distance; //!< Whenever using the minimum boundary for combing it tries to move the coordinates inside by this distance after calculating the combing. - Polygons bridge_wall_mask; //!< The regions of a layer part that are not supported, used for bridging - Polygons overhang_mask; //!< The regions of a layer part where the walls overhang + std::optional first_travel_destination_; //!< The destination of the first (travel) move (if this layer is not empty) + bool first_travel_destination_is_inside_; //!< Whether the destination of the first planned travel move is inside a layer part + std::optional> first_extrusion_acc_jerk_; //!< The acceleration and jerk rates of the first extruded move (if this layer is not empty). + std::optional> next_layer_acc_jerk_; //!< If there is a next layer, the first acceleration and jerk it starts with. + bool was_inside_; //!< Whether the last planned (extrusion) move was inside a layer part + bool is_inside_; //!< Whether the destination of the next planned travel move is inside a layer part + Polygons comb_boundary_minimum_; //!< The minimum boundary within which to comb, or to move into when performing a retraction. + Polygons comb_boundary_preferred_; //!< The boundary preferably within which to comb, or to move into when performing a retraction. + Comb* comb_; + coord_t comb_move_inside_distance_; //!< Whenever using the minimum boundary for combing it tries to move the coordinates inside by this distance after calculating the combing. + Polygons bridge_wall_mask_; //!< The regions of a layer part that are not supported, used for bridging + Polygons overhang_mask_; //!< The regions of a layer part where the walls overhang - const std::vector fan_speed_layer_time_settings_per_extruder; + const std::vector fan_speed_layer_time_settings_per_extruder_; enum CombBoundary { @@ -619,12 +619,12 @@ class LayerPlan : public NoCopy template unsigned locateFirstSupportedVertex(const T& wall, const unsigned start_idx) const { - if (bridge_wall_mask.empty() && overhang_mask.empty()) + if (bridge_wall_mask_.empty() && overhang_mask_.empty()) { return start_idx; } - Polygons air_below(bridge_wall_mask.unionPolygons(overhang_mask)); + Polygons air_below(bridge_wall_mask_.unionPolygons(overhang_mask_)); unsigned curr_idx = start_idx; diff --git a/include/PathOrder.h b/include/PathOrder.h index 9b909a6605..bb87aa0a44 100644 --- a/include/PathOrder.h +++ b/include/PathOrder.h @@ -37,18 +37,18 @@ class PathOrder * pointer to the vertex data, whether to close the loop or not, the * direction in which to print the path and where to start the path. */ - std::vector> paths; + std::vector> paths_; /*! * The location where the nozzle is assumed to start from before printing * these parts. */ - Point start_point; + Point start_point_; /*! * Seam settings. */ - ZSeamConfig seam_config; + ZSeamConfig seam_config_; /*! * Add a new polygon to be planned. @@ -59,7 +59,7 @@ class PathOrder void addPolygon(const PathType& polygon) { constexpr bool is_closed = true; - paths.emplace_back(polygon, is_closed); + paths_.emplace_back(polygon, is_closed); } /*! @@ -71,7 +71,7 @@ class PathOrder void addPolyline(const PathType& polyline) { constexpr bool is_closed = false; - paths.emplace_back(polyline, is_closed); + paths_.emplace_back(polyline, is_closed); } /*! @@ -96,7 +96,7 @@ class PathOrder * pretend they are the same point. * This is used for detecting loops and chaining lines together. */ - constexpr static coord_t coincident_point_distance = 10; + constexpr static coord_t coincident_point_distance_ = 10; /*! @@ -108,7 +108,7 @@ class PathOrder */ void detectLoops() { - for(PathOrdering& path : paths) + for(PathOrdering& path : paths_) { if(path.is_closed_) //Already a polygon. No need to detect loops. { @@ -118,7 +118,7 @@ class PathOrder { continue; } - if(vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance * coincident_point_distance) + if(vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance_ * coincident_point_distance_) { //Endpoints are really close to one another. Consider it a closed loop. path.is_closed_ = true; @@ -129,4 +129,4 @@ class PathOrder } -#endif //PATHORDER_H \ No newline at end of file +#endif //PATHORDER_H diff --git a/include/PathOrderMonotonic.h b/include/PathOrderMonotonic.h index fa35bb513a..267fcc7261 100644 --- a/include/PathOrderMonotonic.h +++ b/include/PathOrderMonotonic.h @@ -1,12 +1,12 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATHORDERMONOTONIC_H #define PATHORDERMONOTONIC_H #include //For std::sin() and std::cos(). -#include //To track starting points of monotonic sequences. #include //To track monotonic sequences. +#include //To track starting points of monotonic sequences. #include "PathOrder.h" #include "PathOrdering.h" @@ -42,38 +42,38 @@ class PathOrderMonotonic : public PathOrder { public: using Path = PathOrdering; - using PathOrder::coincident_point_distance; + using PathOrder::coincident_point_distance_; PathOrderMonotonic(const AngleRadians monotonic_direction, const coord_t max_adjacent_distance, const Point start_point) - //The monotonic vector needs to rotate clockwise instead of counter-clockwise, the same as how the infill patterns are generated. - : monotonic_vector(-std::cos(monotonic_direction) * monotonic_vector_resolution, std::sin(monotonic_direction) * monotonic_vector_resolution) - , max_adjacent_distance(max_adjacent_distance) + // The monotonic vector needs to rotate clockwise instead of counter-clockwise, the same as how the infill patterns are generated. + : monotonic_vector_(-std::cos(monotonic_direction) * monotonic_vector_resolution_, std::sin(monotonic_direction) * monotonic_vector_resolution_) + , max_adjacent_distance_(max_adjacent_distance) { - this->start_point = start_point; + this->start_point_ = start_point; } void optimize() { - if(this->paths.empty()) + if (this->paths_.empty()) { return; } - //Get the vertex data and store it in the paths. - for(Path& path : this->paths) + // Get the vertex data and store it in the paths. + for (Path& path : this->paths_) { path.converted_ = path.getVertexData(); } - std::vector reordered; //To store the result in. At the end, we'll std::swap with the real paths. - reordered.reserve(this->paths.size()); + std::vector reordered; // To store the result in. At the end, we'll std::swap with the real paths. + reordered.reserve(this->paths_.size()); - //First print all the looping polygons, if there are any. - std::vector polylines; //Also find all polylines and store them in a vector that we can sort in-place without making copies all the time. - this->detectLoops(); //Always filter out loops. We don't specifically want to print those in monotonic order. - for(Path& path : this->paths) + // First print all the looping polygons, if there are any. + std::vector polylines; // Also find all polylines and store them in a vector that we can sort in-place without making copies all the time. + this->detectLoops(); // Always filter out loops. We don't specifically want to print those in monotonic order. + for (Path& path : this->paths_) { - if(path.is_closed_ || path.vertices_->size() <= 1) + if (path.is_closed_ || path.vertices_->size() <= 1) { reordered.push_back(path); } @@ -85,101 +85,107 @@ class PathOrderMonotonic : public PathOrder } } - //Sort the polylines by their projection on the monotonic vector. This helps find adjacent lines quickly. - std::sort(polylines.begin(), polylines.end(), [this](Path* a, Path* b) { - const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector); - const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector); - const coord_t a_projection = std::min(a_start_projection, a_end_projection); //The projection of a path is the endpoint furthest back of the two endpoints. - - const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector); - const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector); - const coord_t b_projection = std::min(b_start_projection, b_end_projection); - - return a_projection < b_projection; - }); - //Create a bucket grid to be able to find adjacent lines quickly. - SparsePointGridInclusive line_bucket_grid(MM2INT(2)); //Grid size of 2mm. - for(Path* polyline : polylines) + // Sort the polylines by their projection on the monotonic vector. This helps find adjacent lines quickly. + std::sort( + polylines.begin(), + polylines.end(), + [this](Path* a, Path* b) + { + const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector_); + const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector_); + const coord_t a_projection = std::min(a_start_projection, a_end_projection); // The projection of a path is the endpoint furthest back of the two endpoints. + + const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector_); + const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector_); + const coord_t b_projection = std::min(b_start_projection, b_end_projection); + + return a_projection < b_projection; + }); + // Create a bucket grid to be able to find adjacent lines quickly. + SparsePointGridInclusive line_bucket_grid(MM2INT(2)); // Grid size of 2mm. + for (Path* polyline : polylines) { - if(! polyline->converted_->empty()) + if (! polyline->converted_->empty()) { line_bucket_grid.insert(polyline->converted_->front(), polyline); line_bucket_grid.insert(polyline->converted_->back(), polyline); } } - //Create sequences of line segments that get printed together in a monotonic direction. - //There are several constraints we impose here: - // - Strings of incident polylines are printed in sequence. That is, if their endpoints are incident. - // - The endpoint of the string that is earlier in the monotonic direction will get printed first. - // - The start_vertex of this line will already be set to indicate where to start from. - // - If a line overlaps with another line in the perpendicular direction, and is within max_adjacent_distance (~1 line width) in the monotonic direction, it must be printed in monotonic order. - // - The earlier line is marked as being in sequence with the later line. - // - The later line is no longer a starting point, unless there are multiple adjacent lines before it. - //The ``starting_lines`` set indicates possible locations to start from. Each starting line represents one "sequence", which is either a set of adjacent line segments or a string of polylines. - //The ``connections`` map indicates, starting from each starting segment, the sequence of line segments to print in order. - //Note that for performance reasons, the ``connections`` map will sometimes link the end of one segment to the start of the next segment. This link should be ignored. - const Point perpendicular = turn90CCW(monotonic_vector); //To project on to detect adjacent lines. - - std::unordered_set connected_lines; //Lines that are reachable from one of the starting lines through its connections. - std::unordered_set starting_lines; //Starting points of a linearly connected segment. - std::unordered_map connections; //For each polyline, which polyline it overlaps with, closest in the projected order. - - for(auto polyline_it = polylines.begin(); polyline_it != polylines.end(); polyline_it++) + // Create sequences of line segments that get printed together in a monotonic direction. + // There are several constraints we impose here: + // - Strings of incident polylines are printed in sequence. That is, if their endpoints are incident. + // - The endpoint of the string that is earlier in the monotonic direction will get printed first. + // - The start_vertex of this line will already be set to indicate where to start from. + // - If a line overlaps with another line in the perpendicular direction, and is within max_adjacent_distance (~1 line width) in the monotonic direction, it must be + // printed in monotonic order. + // - The earlier line is marked as being in sequence with the later line. + // - The later line is no longer a starting point, unless there are multiple adjacent lines before it. + // The ``starting_lines`` set indicates possible locations to start from. Each starting line represents one "sequence", which is either a set of adjacent line segments or a + // string of polylines. The ``connections`` map indicates, starting from each starting segment, the sequence of line segments to print in order. Note that for performance + // reasons, the ``connections`` map will sometimes link the end of one segment to the start of the next segment. This link should be ignored. + const Point perpendicular = turn90CCW(monotonic_vector_); // To project on to detect adjacent lines. + + std::unordered_set connected_lines; // Lines that are reachable from one of the starting lines through its connections. + std::unordered_set starting_lines; // Starting points of a linearly connected segment. + std::unordered_map connections; // For each polyline, which polyline it overlaps with, closest in the projected order. + + for (auto polyline_it = polylines.begin(); polyline_it != polylines.end(); polyline_it++) { - if(connections.contains(*polyline_it)) //Already connected this one through a polyline. + if (connections.contains(*polyline_it)) // Already connected this one through a polyline. { continue; } - //First find out if this polyline is part of a string of polylines. - std::deque polystring = findPolylineString(*polyline_it, line_bucket_grid, monotonic_vector); + // First find out if this polyline is part of a string of polylines. + std::deque polystring = findPolylineString(*polyline_it, line_bucket_grid, monotonic_vector_); - //If we're part of a string of polylines, connect up the whole string and mark all of them as being connected. - if(polystring.size() > 1) + // If we're part of a string of polylines, connect up the whole string and mark all of them as being connected. + if (polystring.size() > 1) { starting_lines.insert(polystring[0]); - for(size_t i = 0; i < polystring.size() - 1; ++i) //Iterate over every pair of adjacent polylines in the string (so skip the last one)! + for (size_t i = 0; i < polystring.size() - 1; ++i) // Iterate over every pair of adjacent polylines in the string (so skip the last one)! { connections[polystring[i]] = polystring[i + 1]; connected_lines.insert(polystring[i + 1]); - //Even though we chain polylines, we still want to find lines that they overlap with. - //The strings of polylines may still have weird shapes which interweave with other strings of polylines or loose lines. - //So when a polyline string comes into contact with other lines, we still want to guarantee their order. - //So here we will look for which lines they come into contact with, and thus mark those as possible starting points, so that they function as a new junction. + // Even though we chain polylines, we still want to find lines that they overlap with. + // The strings of polylines may still have weird shapes which interweave with other strings of polylines or loose lines. + // So when a polyline string comes into contact with other lines, we still want to guarantee their order. + // So here we will look for which lines they come into contact with, and thus mark those as possible starting points, so that they function as a new junction. const std::vector overlapping_lines = getOverlappingLines(std::find(polylines.begin(), polylines.end(), polystring[i]), perpendicular, polylines); - for(Path* overlapping_line : overlapping_lines) + for (Path* overlapping_line : overlapping_lines) { - if(std::find(polystring.begin(), polystring.end(), overlapping_line) == polystring.end()) //Mark all overlapping lines not part of the string as possible starting points. + if (std::find(polystring.begin(), polystring.end(), overlapping_line) + == polystring.end()) // Mark all overlapping lines not part of the string as possible starting points. { starting_lines.insert(overlapping_line); - starting_lines.insert(polystring[i + 1]); //Also be able to re-start from this point in the string. + starting_lines.insert(polystring[i + 1]); // Also be able to re-start from this point in the string. } } } } - else //Not a string of polylines, but simply adjacent line segments. + else // Not a string of polylines, but simply adjacent line segments. { - if(! connected_lines.contains(*polyline_it)) //Nothing connects to this line yet. + if (! connected_lines.contains(*polyline_it)) // Nothing connects to this line yet. { - starting_lines.insert(*polyline_it); //This is a starting point then. + starting_lines.insert(*polyline_it); // This is a starting point then. } const std::vector overlapping_lines = getOverlappingLines(polyline_it, perpendicular, polylines); - if(overlapping_lines.size() == 1) //If we're not a string of polylines, but adjacent to only one other polyline, create a sequence of polylines. + if (overlapping_lines.size() == 1) // If we're not a string of polylines, but adjacent to only one other polyline, create a sequence of polylines. { connections[*polyline_it] = overlapping_lines[0]; - if(connected_lines.contains(overlapping_lines[0])) //This line was already connected to. + if (connected_lines.contains(overlapping_lines[0])) // This line was already connected to. { - starting_lines.insert(overlapping_lines[0]); //Multiple lines connect to it, so we must be able to start there. + starting_lines.insert(overlapping_lines[0]); // Multiple lines connect to it, so we must be able to start there. } else { connected_lines.insert(overlapping_lines[0]); } } - else //Either 0 (the for loop terminates immediately) or multiple overlapping lines. For multiple lines we need to mark all of them a starting position. + else // Either 0 (the for loop terminates immediately) or multiple overlapping lines. For multiple lines we need to mark all of them a starting position. { - for(Path* overlapping_line : overlapping_lines) + for (Path* overlapping_line : overlapping_lines) { starting_lines.insert(overlapping_line); } @@ -187,48 +193,57 @@ class PathOrderMonotonic : public PathOrder } } - //Order the starting points of each segments monotonically. This is the order in which to print each segment. + // Order the starting points of each segments monotonically. This is the order in which to print each segment. std::vector starting_lines_monotonic; starting_lines_monotonic.resize(starting_lines.size()); - std::partial_sort_copy(starting_lines.begin(), starting_lines.end(), starting_lines_monotonic.begin(), starting_lines_monotonic.end(), [this](Path* a, Path* b) { - const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector); - const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector); - const coord_t a_projection_min = std::min(a_start_projection, a_end_projection); //The projection of a path is the endpoint furthest back of the two endpoints. - const coord_t a_projection_max = std::max(a_start_projection, a_end_projection); //But in case of ties, the other endpoint counts too. Important for polylines where multiple endpoints have the same position! - - const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector); - const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector); - const coord_t b_projection_min = std::min(b_start_projection, b_end_projection); - const coord_t b_projection_max = std::max(b_start_projection, b_end_projection); - - return a_projection_min < b_projection_min || (a_projection_min == b_projection_min && a_projection_max < b_projection_max); - }); - - //Now that we have the segments of overlapping lines, and know in which order to print the segments, print segments in monotonic order. - Point current_pos = this->start_point; - for(Path* line : starting_lines_monotonic) + std::partial_sort_copy( + starting_lines.begin(), + starting_lines.end(), + starting_lines_monotonic.begin(), + starting_lines_monotonic.end(), + [this](Path* a, Path* b) + { + const coord_t a_start_projection = dot(a->converted_->front(), monotonic_vector_); + const coord_t a_end_projection = dot(a->converted_->back(), monotonic_vector_); + const coord_t a_projection_min = std::min(a_start_projection, a_end_projection); // The projection of a path is the endpoint furthest back of the two endpoints. + const coord_t a_projection_max = std::max( + a_start_projection, + a_end_projection); // But in case of ties, the other endpoint counts too. Important for polylines where multiple endpoints have the same position! + + const coord_t b_start_projection = dot(b->converted_->front(), monotonic_vector_); + const coord_t b_end_projection = dot(b->converted_->back(), monotonic_vector_); + const coord_t b_projection_min = std::min(b_start_projection, b_end_projection); + const coord_t b_projection_max = std::max(b_start_projection, b_end_projection); + + return a_projection_min < b_projection_min || (a_projection_min == b_projection_min && a_projection_max < b_projection_max); + }); + + // Now that we have the segments of overlapping lines, and know in which order to print the segments, print segments in monotonic order. + Point current_pos = this->start_point_; + for (Path* line : starting_lines_monotonic) { optimizeClosestStartPoint(*line, current_pos); - reordered.push_back(*line); //Plan the start of the sequence to be printed next! + reordered.push_back(*line); // Plan the start of the sequence to be printed next! auto connection = connections.find(line); std::unordered_map checked_connections; // Which connections have already been iterated over auto checked_connection = checked_connections.find(line); - while(connection != connections.end() //Stop if the sequence ends - && starting_lines.find(connection->second) == starting_lines.end() // or if we hit another starting point. - && (checked_connection == checked_connections.end() || checked_connection->second != connection->second)) // or if we have already checked the connection (to avoid falling into a cyclical connection) + while (connection != connections.end() // Stop if the sequence ends + && starting_lines.find(connection->second) == starting_lines.end() // or if we hit another starting point. + && (checked_connection == checked_connections.end() + || checked_connection->second != connection->second)) // or if we have already checked the connection (to avoid falling into a cyclical connection) { - checked_connections.insert({connection->first, connection->second}); + checked_connections.insert({ connection->first, connection->second }); line = connection->second; optimizeClosestStartPoint(*line, current_pos); - reordered.push_back(*line); //Plan this line in, to be printed next! + reordered.push_back(*line); // Plan this line in, to be printed next! connection = connections.find(line); checked_connection = checked_connections.find(line); } } - std::swap(reordered, this->paths); //Store the resulting list in the main paths. + std::swap(reordered, this->paths_); // Store the resulting list in the main paths. } protected: @@ -239,7 +254,7 @@ class PathOrderMonotonic : public PathOrder * The resulting ordering will cause clusters of paths to be sorted * according to their projection on this vector. */ - Point monotonic_vector; + Point monotonic_vector_; /*! * Maximum distance at which lines are considered to be adjacent. @@ -247,7 +262,7 @@ class PathOrderMonotonic : public PathOrder * The monotonicity constraint is only held for lines that are closer than * this distance together. */ - coord_t max_adjacent_distance; + coord_t max_adjacent_distance_; /*! * For a given path, make sure that it is configured correctly to start @@ -266,11 +281,11 @@ class PathOrderMonotonic : public PathOrder */ void optimizeClosestStartPoint(Path& path, Point& current_pos) { - if(path.start_vertex_ == path.converted_->size()) + if (path.start_vertex_ == path.converted_->size()) { const coord_t dist_start = vSize2(current_pos - path.converted_->front()); const coord_t dist_end = vSize2(current_pos - path.converted_->back()); - if(dist_start < dist_end) + if (dist_start < dist_end) { path.start_vertex_ = 0; path.backwards_ = false; @@ -281,7 +296,7 @@ class PathOrderMonotonic : public PathOrder path.backwards_ = true; } } - current_pos = (*path.converted_)[path.converted_->size() - 1 - path.start_vertex_]; //Opposite of the start vertex. + current_pos = (*path.converted_)[path.converted_->size() - 1 - path.start_vertex_]; // Opposite of the start vertex. } /*! @@ -298,69 +313,85 @@ class PathOrderMonotonic : public PathOrder std::deque findPolylineString(Path* polyline, const SparsePointGridInclusive& line_bucket_grid, const Point monotonic_vector) { std::deque result; - if(polyline->converted_->empty()) + if (polyline->converted_->empty()) { return result; } - //Find the two endpoints of the polyline string, on either side. + // Find the two endpoints of the polyline string, on either side. result.push_back(polyline); polyline->start_vertex_ = 0; Point first_endpoint = polyline->converted_->front(); Point last_endpoint = polyline->converted_->back(); - std::vector> lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance); - auto close_line_before = std::find_if(lines_before.begin(), lines_before.end(), [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return canConnectToPolyline(first_endpoint, found_path); - }); - std::vector> lines_after = line_bucket_grid.getNearby(last_endpoint, coincident_point_distance); - auto close_line_after = std::find_if(lines_after.begin(), lines_after.end(), [last_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return canConnectToPolyline(last_endpoint, found_path); - }); - - while(close_line_before != lines_before.end()) + std::vector> lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance_); + auto close_line_before = std::find_if( + lines_before.begin(), + lines_before.end(), + [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) + { + return canConnectToPolyline(first_endpoint, found_path); + }); + std::vector> lines_after = line_bucket_grid.getNearby(last_endpoint, coincident_point_distance_); + auto close_line_after = std::find_if( + lines_after.begin(), + lines_after.end(), + [last_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) + { + return canConnectToPolyline(last_endpoint, found_path); + }); + + while (close_line_before != lines_before.end()) { Path* first = close_line_before->val; - result.push_front(first); //Store this one in the sequence. It's a good one. - size_t farthest_vertex = getFarthestEndpoint(first, close_line_before->point); //Get to the opposite side. + result.push_front(first); // Store this one in the sequence. It's a good one. + size_t farthest_vertex = getFarthestEndpoint(first, close_line_before->point); // Get to the opposite side. first->start_vertex_ = farthest_vertex; first->backwards_ = farthest_vertex != 0; first_endpoint = (*first->converted_)[farthest_vertex]; - lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance); - close_line_before = std::find_if(lines_before.begin(), lines_before.end(), [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return canConnectToPolyline(first_endpoint, found_path); - }); + lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance_); + close_line_before = std::find_if( + lines_before.begin(), + lines_before.end(), + [first_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) + { + return canConnectToPolyline(first_endpoint, found_path); + }); } - while(close_line_after != lines_after.end()) + while (close_line_after != lines_after.end()) { Path* last = close_line_after->val; result.push_back(last); - size_t farthest_vertex = getFarthestEndpoint(last, close_line_after->point); //Get to the opposite side. + size_t farthest_vertex = getFarthestEndpoint(last, close_line_after->point); // Get to the opposite side. last->start_vertex_ = (farthest_vertex == 0) ? last->converted_->size() - 1 : 0; last->backwards_ = farthest_vertex != 0; last_endpoint = (*last->converted_)[farthest_vertex]; - lines_after = line_bucket_grid.getNearby(last_endpoint, coincident_point_distance); - close_line_after = std::find_if(lines_after.begin(), lines_after.end(), [last_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return canConnectToPolyline(last_endpoint, found_path); - }); + lines_after = line_bucket_grid.getNearby(last_endpoint, coincident_point_distance_); + close_line_after = std::find_if( + lines_after.begin(), + lines_after.end(), + [last_endpoint](SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) + { + return canConnectToPolyline(last_endpoint, found_path); + }); } - //Figure out which of the two endpoints to start with: The one monotonically earliest. + // Figure out which of the two endpoints to start with: The one monotonically earliest. const coord_t first_projection = dot(first_endpoint, monotonic_vector); const coord_t last_projection = dot(last_endpoint, monotonic_vector); - //If the last endpoint should be printed first (unlikely due to monotonic start, but possible), flip the whole polyline! - if(last_projection < first_projection) + // If the last endpoint should be printed first (unlikely due to monotonic start, but possible), flip the whole polyline! + if (last_projection < first_projection) { std::reverse(result.begin(), result.end()); - for(Path* path : result) //Also reverse their start_vertex. + for (Path* path : result) // Also reverse their start_vertex. { path->start_vertex_ = (path->start_vertex_ == 0) ? path->converted_->size() - 1 : 0; - path->backwards_ = !path->backwards_; + path->backwards_ = ! path->backwards_; } } - if(result.size() == 1) + if (result.size() == 1) { - result[0]->start_vertex_ = result[0]->converted_->size(); //Reset start vertex as "unknown" again if it's not a string of polylines. + result[0]->start_vertex_ = result[0]->converted_->size(); // Reset start vertex as "unknown" again if it's not a string of polylines. } return result; } @@ -376,7 +407,7 @@ class PathOrderMonotonic : public PathOrder { const coord_t front_dist = vSize2(polyline->converted_->front() - point); const coord_t back_dist = vSize2(polyline->converted_->back() - point); - if(front_dist < back_dist) + if (front_dist < back_dist) { return polyline->converted_->size() - 1; } @@ -398,50 +429,49 @@ class PathOrderMonotonic : public PathOrder */ std::vector getOverlappingLines(const typename std::vector::iterator polyline_it, const Point perpendicular, const std::vector& polylines) { - const coord_t max_adjacent_projected_distance = max_adjacent_distance * monotonic_vector_resolution; - //How far this extends in the monotonic direction, to make sure we only go up to max_adjacent_distance in that direction. - const coord_t start_monotonic = dot((*polyline_it)->converted_->front(), monotonic_vector); - const coord_t end_monotonic = dot((*polyline_it)->converted_->back(), monotonic_vector); + const coord_t max_adjacent_projected_distance = max_adjacent_distance_ * monotonic_vector_resolution_; + // How far this extends in the monotonic direction, to make sure we only go up to max_adjacent_distance in that direction. + const coord_t start_monotonic = dot((*polyline_it)->converted_->front(), monotonic_vector_); + const coord_t end_monotonic = dot((*polyline_it)->converted_->back(), monotonic_vector_); const coord_t my_farthest_monotonic = std::max(start_monotonic, end_monotonic); - const coord_t my_closest_monotonic = std::min(start_monotonic, end_monotonic); + const coord_t my_closest_monotonic = std::min(start_monotonic, end_monotonic); const coord_t my_farthest_monotonic_padded = my_farthest_monotonic + max_adjacent_projected_distance; - const coord_t my_closest_monotonic_padded = my_closest_monotonic - max_adjacent_projected_distance; - //How far this line reaches in the perpendicular direction -- the range at which the line overlaps other lines. + const coord_t my_closest_monotonic_padded = my_closest_monotonic - max_adjacent_projected_distance; + // How far this line reaches in the perpendicular direction -- the range at which the line overlaps other lines. const coord_t my_start = dot((*polyline_it)->converted_->front(), perpendicular); - const coord_t my_end = dot((*polyline_it)->converted_->back(), perpendicular); + const coord_t my_end = dot((*polyline_it)->converted_->back(), perpendicular); const coord_t my_farthest = std::max(my_start, my_end); - const coord_t my_closest = std::min(my_start, my_end); + const coord_t my_closest = std::min(my_start, my_end); const coord_t my_farthest_padded = my_farthest + max_adjacent_projected_distance; - const coord_t my_closest_padded = my_closest - max_adjacent_projected_distance; + const coord_t my_closest_padded = my_closest - max_adjacent_projected_distance; std::vector overlapping_lines; - for(auto overlapping_line = polyline_it + 1; overlapping_line != polylines.end(); overlapping_line++) + for (auto overlapping_line = polyline_it + 1; overlapping_line != polylines.end(); overlapping_line++) { - //Don't go beyond the maximum adjacent distance. - const coord_t start_their_projection = dot((*overlapping_line)->converted_->front(), monotonic_vector); - const coord_t end_their_projection = dot((*overlapping_line)->converted_->back(), monotonic_vector); + // Don't go beyond the maximum adjacent distance. + const coord_t start_their_projection = dot((*overlapping_line)->converted_->front(), monotonic_vector_); + const coord_t end_their_projection = dot((*overlapping_line)->converted_->back(), monotonic_vector_); const coord_t their_farthest_projection = std::max(start_their_projection, end_their_projection); const coord_t their_closest_projection = std::min(start_their_projection, end_their_projection); // Multiply by the length of the vector since we need to compare actual distances here. - if(their_closest_projection > my_farthest_monotonic_padded || my_closest_monotonic_padded > their_farthest_projection) + if (their_closest_projection > my_farthest_monotonic_padded || my_closest_monotonic_padded > their_farthest_projection) { - break; //Too far. This line and all subsequent lines are not adjacent anymore, even though they might be side-by-side. + break; // Too far. This line and all subsequent lines are not adjacent anymore, even though they might be side-by-side. } - //Does this one overlap? + // Does this one overlap? const coord_t their_start = dot((*overlapping_line)->converted_->front(), perpendicular); const coord_t their_end = dot((*overlapping_line)->converted_->back(), perpendicular); const coord_t their_farthest = std::max(their_start, their_end); - const coord_t their_closest = std::min(their_start, their_end); + const coord_t their_closest = std::min(their_start, their_end); /*There are 5 possible cases of overlapping: - We are behind them, partially overlapping. my_start is between their_start and their_end. - We are in front of them, partially overlapping. my_end is between their_start and their_end. - We are a smaller line, they completely overlap us. Both my_start and my_end are between their_start and their_end. (Caught with the first 2 conditions already.) - We are a bigger line, and completely overlap them. Both their_start and their_end are between my_start and my_end. - Lines are exactly equal. Start and end are the same. (Caught with the previous condition too.)*/ - if( (my_closest_padded >= their_closest && my_closest_padded <= their_farthest) - || (my_farthest_padded >= their_closest && my_farthest_padded <= their_farthest) - || (their_closest >= my_closest_padded && their_farthest <= my_farthest_padded)) + if ((my_closest_padded >= their_closest && my_closest_padded <= their_farthest) || (my_farthest_padded >= their_closest && my_farthest_padded <= their_farthest) + || (their_closest >= my_closest_padded && their_farthest <= my_farthest_padded)) { overlapping_lines.push_back(*overlapping_line); } @@ -459,9 +489,9 @@ class PathOrderMonotonic : public PathOrder * ``coord_t`` data type, but not so long as to cause integer overflows if * the quadratic is multiplied by a projection length. */ - constexpr static coord_t monotonic_vector_resolution = 1000; + constexpr static coord_t monotonic_vector_resolution_ = 1000; - private: +private: /*! * Predicate to check if a nearby path is okay for polylines to connect * with. @@ -476,11 +506,11 @@ class PathOrderMonotonic : public PathOrder */ static bool canConnectToPolyline(const Point nearby_endpoint, SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { - return found_path.val->start_vertex_ == found_path.val->converted_->size() //Don't find any line already in the string. - && vSize2(found_path.point - nearby_endpoint) < coincident_point_distance * coincident_point_distance; //And only find close lines. + return found_path.val->start_vertex_ == found_path.val->converted_->size() // Don't find any line already in the string. + && vSize2(found_path.point - nearby_endpoint) < coincident_point_distance_ * coincident_point_distance_; // And only find close lines. } }; -} +} // namespace cura -#endif //PATHORDERMONOTONIC_H \ No newline at end of file +#endif // PATHORDERMONOTONIC_H diff --git a/include/TreeModelVolumes.h b/include/TreeModelVolumes.h index 4454dc3b6a..8418a9d2c4 100644 --- a/include/TreeModelVolumes.h +++ b/include/TreeModelVolumes.h @@ -372,59 +372,59 @@ class TreeModelVolumes /*! * \brief Whether the precalculate was called, meaning every required value should be cached. */ - bool precalculated = false; + bool precalculated_ = false; /*! * \brief Whether the precalculate was called and finished, meaning every required value should be cached. */ - bool precalculationFinished = false; + bool precalculation_finished_ = false; /*! * \brief The index to access the outline corresponding with the currently processing mesh */ - size_t current_outline_idx; + size_t current_outline_idx_; /*! * \brief The minimum required clearance between the model and the tree branches */ - coord_t current_min_xy_dist; + coord_t current_min_xy_dist_; /*! * \brief The difference between the minimum required clearance between the model and the tree branches and the regular one. */ - coord_t current_min_xy_dist_delta; + coord_t current_min_xy_dist_delta_; /*! * \brief The top most layer where there is no anti_overhang on any layer below */ - LayerIndex max_layer_idx_without_blocker; + LayerIndex max_layer_idx_without_blocker_; /*! * \brief Does at least one mesh allow support to rest on a model. */ - bool support_rests_on_model; + bool support_rests_on_model_; /*! * \brief The progress of the precalculate function for communicating it to the progress bar. */ - coord_t precalculation_progress = 0; + coord_t precalculation_progress_ = 0; /*! * \brief The progress multiplier of all values added progress bar. * Required for the progress bar the behave as expected when areas have to be calculated multiple times */ - double progress_multiplier; + double progress_multiplier_; /*! * \brief The progress offset added to all values communicated to the progress bar. * Required for the progress bar the behave as expected when areas have to be calculated multiple times */ - double progress_offset; + double progress_offset_; /*! * \brief Increase radius in the resulting drawn branches, even if the avoidance does not allow it. Will be cut later to still fit. */ - coord_t increase_until_radius; + coord_t increase_until_radius_; /*! * \brief Polygons representing the limits of the printable area of the @@ -455,12 +455,12 @@ class TreeModelVolumes /*! * \brief Smallest radius a branch can have. This is the radius of a SupportElement with DTT=0. */ - coord_t radius_0; + coord_t radius_0_; /*! * \brief Does the main model require regular avoidance, or only avoidance to model. */ - RestPreference support_rest_preference; + RestPreference support_rest_preference_; /*! * \brief Caches for the collision, avoidance and areas on the model where support can be placed safely @@ -517,9 +517,9 @@ class TreeModelVolumes mutable std::unordered_map wall_restrictions_cache_min_; std::unique_ptr critical_wall_restrictions_cache_min_ = std::make_unique(); - std::unique_ptr critical_progress = std::make_unique(); + std::unique_ptr critical_progress_ = std::make_unique(); - Simplify simplifier = Simplify(0, 0, 0); // a simplifier to simplify polygons. Will be properly initialised in the constructor. + Simplify simplifier_ = Simplify(0, 0, 0); // a simplifier to simplify polygons. Will be properly initialised in the constructor. }; } diff --git a/include/WallToolPaths.h b/include/WallToolPaths.h index 810357a7a6..22e1f13a3d 100644 --- a/include/WallToolPaths.h +++ b/include/WallToolPaths.h @@ -107,22 +107,22 @@ class WallToolPaths static void simplifyToolPaths(std::vector& toolpaths, const Settings& settings); private: - const Polygons& outline; // toolpaths; // toolpaths_; // unsupported_points; + std::list unsupported_points_; /*! * Links the unsupported points to a grid point, so that we can quickly look * up the cell belonging to a certain position in the grid. */ - std::unordered_map::iterator> unsupported_points_grid; + std::unordered_map::iterator> unsupported_points_grid_; }; -} +} // namespace cura -#endif //LIGHTNING_DISTANCE_FIELD_H \ No newline at end of file +#endif // LIGHTNING_DISTANCE_FIELD_H diff --git a/src/BeadingStrategy/BeadingStrategy.cpp b/src/BeadingStrategy/BeadingStrategy.cpp index 17cc6a5e1f..5b3f81583f 100644 --- a/src/BeadingStrategy/BeadingStrategy.cpp +++ b/src/BeadingStrategy/BeadingStrategy.cpp @@ -14,22 +14,22 @@ BeadingStrategy::BeadingStrategy( Ratio wall_add_middle_threshold, coord_t default_transition_length, double transitioning_angle) - : optimal_width(optimal_width) - , wall_split_middle_threshold(wall_split_middle_threshold) - , wall_add_middle_threshold(wall_add_middle_threshold) - , default_transition_length(default_transition_length) - , transitioning_angle(transitioning_angle) + : optimal_width_(optimal_width) + , wall_split_middle_threshold_(wall_split_middle_threshold) + , wall_add_middle_threshold_(wall_add_middle_threshold) + , default_transition_length_(default_transition_length) + , transitioning_angle_(transitioning_angle) { - name = "Unknown"; + name_ = "Unknown"; } BeadingStrategy::BeadingStrategy(const BeadingStrategy& other) - : optimal_width(other.optimal_width) - , wall_split_middle_threshold(other.wall_split_middle_threshold) - , wall_add_middle_threshold(other.wall_add_middle_threshold) - , default_transition_length(other.default_transition_length) - , transitioning_angle(other.transitioning_angle) - , name(other.name) + : optimal_width_(other.optimal_width_) + , wall_split_middle_threshold_(other.wall_split_middle_threshold_) + , wall_add_middle_threshold_(other.wall_add_middle_threshold_) + , default_transition_length_(other.default_transition_length_) + , transitioning_angle_(other.transitioning_angle_) + , name_(other.name_) { } @@ -39,7 +39,7 @@ coord_t BeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { return 10; } - return default_transition_length; + return default_transition_length_; } double BeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const @@ -57,44 +57,44 @@ std::vector BeadingStrategy::getNonlinearThicknesses(coord_t lower_bead std::string BeadingStrategy::toString() const { - return name; + return name_; } coord_t BeadingStrategy::getDefaultTransitionLength() const { - return default_transition_length; + return default_transition_length_; } coord_t BeadingStrategy::getOptimalWidth() const { - return optimal_width; + return optimal_width_; } Ratio BeadingStrategy::getSplitMiddleThreshold() const { - return wall_split_middle_threshold; + return wall_split_middle_threshold_; } Ratio BeadingStrategy::getAddMiddleThreshold() const { - return wall_add_middle_threshold; + return wall_add_middle_threshold_; } AngleRadians BeadingStrategy::getTransitioningAngle() const { - return transitioning_angle; + return transitioning_angle_; } coord_t BeadingStrategy::getOptimalThickness(coord_t bead_count) const { - return optimal_width * bead_count; + return optimal_width_ * bead_count; } coord_t BeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const { const coord_t lower_ideal_width = getOptimalThickness(lower_bead_count); const coord_t higher_ideal_width = getOptimalThickness(lower_bead_count + 1); - const Ratio threshold = lower_bead_count % 2 == 1 ? wall_split_middle_threshold : wall_add_middle_threshold; + const Ratio threshold = lower_bead_count % 2 == 1 ? wall_split_middle_threshold_ : wall_add_middle_threshold_; return lower_ideal_width + threshold * (higher_ideal_width - lower_ideal_width); } diff --git a/src/BeadingStrategy/DistributedBeadingStrategy.cpp b/src/BeadingStrategy/DistributedBeadingStrategy.cpp index 7480d94e6e..84dd612c9b 100644 --- a/src/BeadingStrategy/DistributedBeadingStrategy.cpp +++ b/src/BeadingStrategy/DistributedBeadingStrategy.cpp @@ -18,13 +18,13 @@ DistributedBeadingStrategy::DistributedBeadingStrategy( { if (distribution_radius >= 2) { - one_over_distribution_radius_squared = 1.0f / (distribution_radius - 1) * 1.0f / (distribution_radius - 1); + one_over_distribution_radius_squared_ = 1.0f / (distribution_radius - 1) * 1.0f / (distribution_radius - 1); } else { - one_over_distribution_radius_squared = 1.0f / 1 * 1.0f / 1; + one_over_distribution_radius_squared_ = 1.0f / 1 * 1.0f / 1; } - name = "DistributedBeadingStrategy"; + name_ = "DistributedBeadingStrategy"; } DistributedBeadingStrategy::Beading DistributedBeadingStrategy::compute(coord_t thickness, coord_t bead_count) const @@ -34,13 +34,13 @@ DistributedBeadingStrategy::Beading DistributedBeadingStrategy::compute(coord_t ret.total_thickness = thickness; if (bead_count > 2) { - const coord_t to_be_divided = thickness - bead_count * optimal_width; + const coord_t to_be_divided = thickness - bead_count * optimal_width_; const double middle = static_cast(bead_count - 1) / 2; const auto getWeight = [middle, this](coord_t bead_idx) { const double dev_from_middle = bead_idx - middle; - return std::max(0.0, 1.0 - one_over_distribution_radius_squared * dev_from_middle * dev_from_middle); + return std::max(0.0, 1.0 - one_over_distribution_radius_squared_ * dev_from_middle * dev_from_middle); }; std::vector weights; @@ -55,7 +55,7 @@ DistributedBeadingStrategy::Beading DistributedBeadingStrategy::compute(coord_t { const double weight_fraction = weights[bead_idx] / total_weight; const coord_t splitup_left_over_weight = to_be_divided * weight_fraction; - const coord_t width = optimal_width + splitup_left_over_weight; + const coord_t width = optimal_width_ + splitup_left_over_weight; if (bead_idx == 0) { ret.toolpath_locations.emplace_back(width / 2); @@ -94,9 +94,9 @@ DistributedBeadingStrategy::Beading DistributedBeadingStrategy::compute(coord_t coord_t DistributedBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - const coord_t naive_count = thickness / optimal_width; // How many lines we can fit in for sure. - const coord_t remainder = thickness - naive_count * optimal_width; // Space left after fitting that many lines. - const coord_t minimum_line_width = optimal_width * (naive_count % 2 == 1 ? wall_split_middle_threshold : wall_add_middle_threshold); + const coord_t naive_count = thickness / optimal_width_; // How many lines we can fit in for sure. + const coord_t remainder = thickness - naive_count * optimal_width_; // Space left after fitting that many lines. + const coord_t minimum_line_width = optimal_width_ * (naive_count % 2 == 1 ? wall_split_middle_threshold_ : wall_add_middle_threshold_); return naive_count + (remainder >= minimum_line_width); // If there's enough space, fit an extra one. } diff --git a/src/BeadingStrategy/LimitedBeadingStrategy.cpp b/src/BeadingStrategy/LimitedBeadingStrategy.cpp index 8b612ce419..8327cd55b7 100644 --- a/src/BeadingStrategy/LimitedBeadingStrategy.cpp +++ b/src/BeadingStrategy/LimitedBeadingStrategy.cpp @@ -12,23 +12,23 @@ namespace cura std::string LimitedBeadingStrategy::toString() const { - return std::string("LimitedBeadingStrategy+") + parent->toString(); + return std::string("LimitedBeadingStrategy+") + parent_->toString(); } coord_t LimitedBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { - return parent->getTransitioningLength(lower_bead_count); + return parent_->getTransitioningLength(lower_bead_count); } double LimitedBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { - return parent->getTransitionAnchorPos(lower_bead_count); + return parent_->getTransitionAnchorPos(lower_bead_count); } LimitedBeadingStrategy::LimitedBeadingStrategy(const coord_t max_bead_count, BeadingStrategyPtr parent) : BeadingStrategy(*parent) - , max_bead_count(max_bead_count) - , parent(std::move(parent)) + , max_bead_count_(max_bead_count) + , parent_(std::move(parent)) { if (max_bead_count % 2 == 1) { @@ -38,28 +38,28 @@ LimitedBeadingStrategy::LimitedBeadingStrategy(const coord_t max_bead_count, Bea LimitedBeadingStrategy::Beading LimitedBeadingStrategy::compute(coord_t thickness, coord_t bead_count) const { - if (bead_count <= max_bead_count) + if (bead_count <= max_bead_count_) { - Beading ret = parent->compute(thickness, bead_count); + Beading ret = parent_->compute(thickness, bead_count); bead_count = ret.toolpath_locations.size(); - if (bead_count % 2 == 0 && bead_count == max_bead_count) + if (bead_count % 2 == 0 && bead_count == max_bead_count_) { - const coord_t innermost_toolpath_location = ret.toolpath_locations[max_bead_count / 2 - 1]; - const coord_t innermost_toolpath_width = ret.bead_widths[max_bead_count / 2 - 1]; - ret.toolpath_locations.insert(ret.toolpath_locations.begin() + max_bead_count / 2, innermost_toolpath_location + innermost_toolpath_width / 2); - ret.bead_widths.insert(ret.bead_widths.begin() + max_bead_count / 2, 0); + const coord_t innermost_toolpath_location = ret.toolpath_locations[max_bead_count_ / 2 - 1]; + const coord_t innermost_toolpath_width = ret.bead_widths[max_bead_count_ / 2 - 1]; + ret.toolpath_locations.insert(ret.toolpath_locations.begin() + max_bead_count_ / 2, innermost_toolpath_location + innermost_toolpath_width / 2); + ret.bead_widths.insert(ret.bead_widths.begin() + max_bead_count_ / 2, 0); } return ret; } - assert(bead_count == max_bead_count + 1); - if (bead_count != max_bead_count + 1) + assert(bead_count == max_bead_count_ + 1); + if (bead_count != max_bead_count_ + 1) { - RUN_ONCE(spdlog::warn("Too many beads! {} != {}", bead_count, max_bead_count + 1)); + RUN_ONCE(spdlog::warn("Too many beads! {} != {}", bead_count, max_bead_count_ + 1)); } - coord_t optimal_thickness = parent->getOptimalThickness(max_bead_count); - Beading ret = parent->compute(optimal_thickness, max_bead_count); + coord_t optimal_thickness = parent_->getOptimalThickness(max_bead_count_); + Beading ret = parent_->compute(optimal_thickness, max_bead_count_); bead_count = ret.toolpath_locations.size(); ret.left_over += thickness - ret.total_thickness; ret.total_thickness = thickness; @@ -77,13 +77,13 @@ LimitedBeadingStrategy::Beading LimitedBeadingStrategy::compute(coord_t thicknes // Create a "fake" inner wall with 0 width to indicate the edge of the walled area. // This wall can then be used by other structures to e.g. fill the infill area adjacent to the variable-width walls. - coord_t innermost_toolpath_location = ret.toolpath_locations[max_bead_count / 2 - 1]; - coord_t innermost_toolpath_width = ret.bead_widths[max_bead_count / 2 - 1]; - ret.toolpath_locations.insert(ret.toolpath_locations.begin() + max_bead_count / 2, innermost_toolpath_location + innermost_toolpath_width / 2); - ret.bead_widths.insert(ret.bead_widths.begin() + max_bead_count / 2, 0); + coord_t innermost_toolpath_location = ret.toolpath_locations[max_bead_count_ / 2 - 1]; + coord_t innermost_toolpath_width = ret.bead_widths[max_bead_count_ / 2 - 1]; + ret.toolpath_locations.insert(ret.toolpath_locations.begin() + max_bead_count_ / 2, innermost_toolpath_location + innermost_toolpath_width / 2); + ret.bead_widths.insert(ret.bead_widths.begin() + max_bead_count_ / 2, 0); // Symmetry on both sides. Symmetry is guaranteed since this code is stopped early if the bead_count <= max_bead_count, and never reaches this point then. - const size_t opposite_bead = bead_count - (max_bead_count / 2 - 1); + const size_t opposite_bead = bead_count - (max_bead_count_ / 2 - 1); innermost_toolpath_location = ret.toolpath_locations[opposite_bead]; innermost_toolpath_width = ret.bead_widths[opposite_bead]; ret.toolpath_locations.insert(ret.toolpath_locations.begin() + opposite_bead, innermost_toolpath_location - innermost_toolpath_width / 2); @@ -94,42 +94,42 @@ LimitedBeadingStrategy::Beading LimitedBeadingStrategy::compute(coord_t thicknes coord_t LimitedBeadingStrategy::getOptimalThickness(coord_t bead_count) const { - if (bead_count <= max_bead_count) + if (bead_count <= max_bead_count_) { - return parent->getOptimalThickness(bead_count); + return parent_->getOptimalThickness(bead_count); } return 10000000; // 10 meter } coord_t LimitedBeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const { - if (lower_bead_count < max_bead_count) + if (lower_bead_count < max_bead_count_) { - return parent->getTransitionThickness(lower_bead_count); + return parent_->getTransitionThickness(lower_bead_count); } - if (lower_bead_count == max_bead_count) + if (lower_bead_count == max_bead_count_) { - return parent->getOptimalThickness(lower_bead_count + 1) - 10; + return parent_->getOptimalThickness(lower_bead_count + 1) - 10; } return 9000000; // 9 meter } coord_t LimitedBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - coord_t parent_bead_count = parent->getOptimalBeadCount(thickness); - if (parent_bead_count <= max_bead_count) + coord_t parent_bead_count = parent_->getOptimalBeadCount(thickness); + if (parent_bead_count <= max_bead_count_) { - return parent->getOptimalBeadCount(thickness); + return parent_->getOptimalBeadCount(thickness); } - else if (parent_bead_count == max_bead_count + 1) + else if (parent_bead_count == max_bead_count_ + 1) { - if (thickness < parent->getOptimalThickness(max_bead_count + 1) - 10) - return max_bead_count; + if (thickness < parent_->getOptimalThickness(max_bead_count_ + 1) - 10) + return max_bead_count_; else - return max_bead_count + 1; + return max_bead_count_ + 1; } else - return max_bead_count + 1; + return max_bead_count_ + 1; } } // namespace cura diff --git a/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp b/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp index bae2cf6649..c7d81cd798 100644 --- a/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp +++ b/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp @@ -9,41 +9,41 @@ namespace cura { OuterWallInsetBeadingStrategy::OuterWallInsetBeadingStrategy(coord_t outer_wall_offset, BeadingStrategyPtr parent) : BeadingStrategy(*parent), - parent(std::move(parent)), - outer_wall_offset(outer_wall_offset) + parent_(std::move(parent)), + outer_wall_offset_(outer_wall_offset) { - name = "OuterWallOfsetBeadingStrategy"; + name_ = "OuterWallOfsetBeadingStrategy"; } coord_t OuterWallInsetBeadingStrategy::getOptimalThickness(coord_t bead_count) const { - return parent->getOptimalThickness(bead_count); + return parent_->getOptimalThickness(bead_count); } coord_t OuterWallInsetBeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const { - return parent->getTransitionThickness(lower_bead_count); + return parent_->getTransitionThickness(lower_bead_count); } coord_t OuterWallInsetBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - return parent->getOptimalBeadCount(thickness); + return parent_->getOptimalBeadCount(thickness); } coord_t OuterWallInsetBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { - return parent->getTransitioningLength(lower_bead_count); + return parent_->getTransitioningLength(lower_bead_count); } std::string OuterWallInsetBeadingStrategy::toString() const { - return std::string("OuterWallOfsetBeadingStrategy+") + parent->toString(); + return std::string("OuterWallOfsetBeadingStrategy+") + parent_->toString(); } BeadingStrategy::Beading OuterWallInsetBeadingStrategy::compute(coord_t thickness, coord_t bead_count) const { - Beading ret = parent->compute(thickness, bead_count); + Beading ret = parent_->compute(thickness, bead_count); // Actual count and thickness as represented by extant walls. Don't count any potential zero-width 'signaling' walls. bead_count = std::count_if(ret.bead_widths.begin(), ret.bead_widths.end(), [](const coord_t width) { return width > 0; }); @@ -55,7 +55,7 @@ BeadingStrategy::Beading OuterWallInsetBeadingStrategy::compute(coord_t thicknes } // Actually move the outer wall inside. Ensure that the outer wall never goes beyond the middle line. - ret.toolpath_locations[0] = std::min(ret.toolpath_locations[0] + outer_wall_offset, thickness / 2); + ret.toolpath_locations[0] = std::min(ret.toolpath_locations[0] + outer_wall_offset_, thickness / 2); return ret; } diff --git a/src/BeadingStrategy/RedistributeBeadingStrategy.cpp b/src/BeadingStrategy/RedistributeBeadingStrategy.cpp index c2109bed83..ebceddf6e7 100644 --- a/src/BeadingStrategy/RedistributeBeadingStrategy.cpp +++ b/src/BeadingStrategy/RedistributeBeadingStrategy.cpp @@ -11,18 +11,18 @@ namespace cura RedistributeBeadingStrategy::RedistributeBeadingStrategy(const coord_t optimal_width_outer, const Ratio minimum_variable_line_ratio, BeadingStrategyPtr parent) : BeadingStrategy(*parent) - , parent(std::move(parent)) - , optimal_width_outer(optimal_width_outer) - , minimum_variable_line_ratio(minimum_variable_line_ratio) + , parent_(std::move(parent)) + , optimal_width_outer_(optimal_width_outer) + , minimum_variable_line_ratio_(minimum_variable_line_ratio) { - name = "RedistributeBeadingStrategy"; + name_ = "RedistributeBeadingStrategy"; } coord_t RedistributeBeadingStrategy::getOptimalThickness(coord_t bead_count) const { const coord_t inner_bead_count = std::max(static_cast(0), bead_count - 2); const coord_t outer_bead_count = bead_count - inner_bead_count; - return parent->getOptimalThickness(inner_bead_count) + optimal_width_outer * outer_bead_count; + return parent_->getOptimalThickness(inner_bead_count) + optimal_width_outer_ * outer_bead_count; } coord_t RedistributeBeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const @@ -30,40 +30,40 @@ coord_t RedistributeBeadingStrategy::getTransitionThickness(coord_t lower_bead_c switch (lower_bead_count) { case 0: - return minimum_variable_line_ratio * optimal_width_outer; + return minimum_variable_line_ratio_ * optimal_width_outer_; case 1: - return (1.0 + parent->getSplitMiddleThreshold()) * optimal_width_outer; + return (1.0 + parent_->getSplitMiddleThreshold()) * optimal_width_outer_; default: - return parent->getTransitionThickness(lower_bead_count - 2) + 2 * optimal_width_outer; + return parent_->getTransitionThickness(lower_bead_count - 2) + 2 * optimal_width_outer_; } } coord_t RedistributeBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - if (thickness < minimum_variable_line_ratio * optimal_width_outer) + if (thickness < minimum_variable_line_ratio_ * optimal_width_outer_) { return 0; } - if (thickness <= 2 * optimal_width_outer) + if (thickness <= 2 * optimal_width_outer_) { - return thickness > (1.0 + parent->getSplitMiddleThreshold()) * optimal_width_outer ? 2 : 1; + return thickness > (1.0 + parent_->getSplitMiddleThreshold()) * optimal_width_outer_ ? 2 : 1; } - return parent->getOptimalBeadCount(thickness - 2 * optimal_width_outer) + 2; + return parent_->getOptimalBeadCount(thickness - 2 * optimal_width_outer_) + 2; } coord_t RedistributeBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { - return parent->getTransitioningLength(lower_bead_count); + return parent_->getTransitioningLength(lower_bead_count); } double RedistributeBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { - return parent->getTransitionAnchorPos(lower_bead_count); + return parent_->getTransitionAnchorPos(lower_bead_count); } std::string RedistributeBeadingStrategy::toString() const { - return toString() + parent->toString(); + return toString() + parent_->toString(); } BeadingStrategy::Beading RedistributeBeadingStrategy::compute(coord_t thickness, coord_t bead_count) const @@ -71,7 +71,7 @@ BeadingStrategy::Beading RedistributeBeadingStrategy::compute(coord_t thickness, Beading ret; // Take care of all situations in which no lines are actually produced: - if (bead_count == 0 || thickness < minimum_variable_line_ratio * optimal_width_outer) + if (bead_count == 0 || thickness < minimum_variable_line_ratio_ * optimal_width_outer_) { ret.left_over = thickness; ret.total_thickness = thickness; @@ -80,18 +80,18 @@ BeadingStrategy::Beading RedistributeBeadingStrategy::compute(coord_t thickness, // Compute the beadings of the inner walls, if any: const coord_t inner_bead_count = bead_count - 2; - const coord_t inner_thickness = thickness - 2 * optimal_width_outer; + const coord_t inner_thickness = thickness - 2 * optimal_width_outer_; if (inner_bead_count > 0 && inner_thickness > 0) { - ret = parent->compute(inner_thickness, inner_bead_count); + ret = parent_->compute(inner_thickness, inner_bead_count); for (auto& toolpath_location : ret.toolpath_locations) { - toolpath_location += optimal_width_outer; + toolpath_location += optimal_width_outer_; } } // Insert the outer wall(s) around the previously computed inner wall(s), which may be empty: - const coord_t actual_outer_thickness = bead_count > 2 ? std::min(thickness / 2, optimal_width_outer) : thickness / bead_count; + const coord_t actual_outer_thickness = bead_count > 2 ? std::min(thickness / 2, optimal_width_outer_) : thickness / bead_count; ret.bead_widths.insert(ret.bead_widths.begin(), actual_outer_thickness); ret.toolpath_locations.insert(ret.toolpath_locations.begin(), actual_outer_thickness / 2); if (bead_count > 1) diff --git a/src/BeadingStrategy/WideningBeadingStrategy.cpp b/src/BeadingStrategy/WideningBeadingStrategy.cpp index 368eaaed87..fbabea586e 100644 --- a/src/BeadingStrategy/WideningBeadingStrategy.cpp +++ b/src/BeadingStrategy/WideningBeadingStrategy.cpp @@ -8,26 +8,26 @@ namespace cura WideningBeadingStrategy::WideningBeadingStrategy(BeadingStrategyPtr parent, const coord_t min_input_width, const coord_t min_output_width) : BeadingStrategy(*parent) - , parent(std::move(parent)) - , min_input_width(min_input_width) - , min_output_width(min_output_width) + , parent_(std::move(parent)) + , min_input_width_(min_input_width) + , min_output_width_(min_output_width) { } std::string WideningBeadingStrategy::toString() const { - return std::string("Widening+") + parent->toString(); + return std::string("Widening+") + parent_->toString(); } WideningBeadingStrategy::Beading WideningBeadingStrategy::compute(coord_t thickness, coord_t bead_count) const { - if (thickness < optimal_width) + if (thickness < optimal_width_) { Beading ret; ret.total_thickness = thickness; - if (thickness >= min_input_width) + if (thickness >= min_input_width_) { - ret.bead_widths.emplace_back(std::max(thickness, min_output_width)); + ret.bead_widths.emplace_back(std::max(thickness, min_output_width_)); ret.toolpath_locations.emplace_back(thickness / 2); } else @@ -38,52 +38,52 @@ WideningBeadingStrategy::Beading WideningBeadingStrategy::compute(coord_t thickn } else { - return parent->compute(thickness, bead_count); + return parent_->compute(thickness, bead_count); } } coord_t WideningBeadingStrategy::getOptimalThickness(coord_t bead_count) const { - return parent->getOptimalThickness(bead_count); + return parent_->getOptimalThickness(bead_count); } coord_t WideningBeadingStrategy::getTransitionThickness(coord_t lower_bead_count) const { if (lower_bead_count == 0) { - return min_input_width; + return min_input_width_; } else { - return parent->getTransitionThickness(lower_bead_count); + return parent_->getTransitionThickness(lower_bead_count); } } coord_t WideningBeadingStrategy::getOptimalBeadCount(coord_t thickness) const { - if (thickness < min_input_width) + if (thickness < min_input_width_) return 0; - coord_t ret = parent->getOptimalBeadCount(thickness); - if (thickness >= min_input_width && ret < 1) + coord_t ret = parent_->getOptimalBeadCount(thickness); + if (thickness >= min_input_width_ && ret < 1) return 1; return ret; } coord_t WideningBeadingStrategy::getTransitioningLength(coord_t lower_bead_count) const { - return parent->getTransitioningLength(lower_bead_count); + return parent_->getTransitioningLength(lower_bead_count); } double WideningBeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const { - return parent->getTransitionAnchorPos(lower_bead_count); + return parent_->getTransitionAnchorPos(lower_bead_count); } std::vector WideningBeadingStrategy::getNonlinearThicknesses(coord_t lower_bead_count) const { std::vector ret; - ret.emplace_back(min_output_width); - std::vector pret = parent->getNonlinearThicknesses(lower_bead_count); + ret.emplace_back(min_output_width_); + std::vector pret = parent_->getNonlinearThicknesses(lower_bead_count); ret.insert(ret.end(), pret.begin(), pret.end()); return ret; } diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 119ddfbd31..3e2831f857 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -654,7 +654,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) zig_zaggify_infill, connect_polygons, raft_outline_path.outline, - gcode_layer.configs_storage.raft_base_config.getLineWidth(), + gcode_layer.configs_storage_.raft_base_config.getLineWidth(), raft_outline_path.line_spacing, fill_overlap, infill_multiplier, @@ -677,7 +677,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) infill_comp.generate(raft_paths, raft_polygons, raftLines, base_settings, layer_nr, SectionType::ADHESION); if (! raft_paths.empty()) { - const GCodePathConfig& config = gcode_layer.configs_storage.raft_base_config; + const GCodePathConfig& config = gcode_layer.configs_storage_.raft_base_config; const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); InsetOrderOptimizer wall_orderer( *this, @@ -698,7 +698,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) raft_paths); wall_orderer.addToLayer(); } - gcode_layer.addLinesByOptimizer(raftLines, gcode_layer.configs_storage.raft_base_config, SpaceFillType::Lines); + gcode_layer.addLinesByOptimizer(raftLines, gcode_layer.configs_storage_.raft_base_config, SpaceFillType::Lines); raft_polygons.clear(); raftLines.clear(); @@ -759,11 +759,11 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) Application::getInstance().communication_->sendLayerComplete(layer_nr, z, interface_layer_height); Polygons raft_outline_path; - const coord_t small_offset = gcode_layer.configs_storage.raft_interface_config.getLineWidth() + const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. raft_outline_path = storage.raftOutline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. - const coord_t infill_outline_width = gcode_layer.configs_storage.raft_interface_config.getLineWidth(); + const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); Polygons raft_lines; AngleDegrees fill_angle = (num_surface_layers + num_interface_layers - raft_interface_layer) % 2 ? 45 : 135; // 90 degrees rotated from the first top layer. constexpr bool zig_zaggify_infill = true; @@ -811,7 +811,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) pocket_size); std::vector raft_paths; // Should remain empty, since we have no walls. infill_comp.generate(raft_paths, raft_polygons, raft_lines, interface_settings, layer_nr, SectionType::ADHESION); - gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage.raft_interface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); + gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage_.raft_interface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); raft_polygons.clear(); raft_lines.clear(); @@ -878,11 +878,11 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) Application::getInstance().communication_->sendLayerComplete(layer_nr, z, surface_layer_height); Polygons raft_outline_path; - const coord_t small_offset = gcode_layer.configs_storage.raft_interface_config.getLineWidth() + const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. raft_outline_path = storage.raftOutline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. - const coord_t infill_outline_width = gcode_layer.configs_storage.raft_interface_config.getLineWidth(); + const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); Polygons raft_lines; AngleDegrees fill_angle = (num_surface_layers - raft_surface_layer) % 2 ? 45 : 135; // Alternate between -45 and +45 degrees, ending up 90 degrees rotated from the default skin angle. @@ -931,7 +931,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) pocket_size); std::vector raft_paths; // Should remain empty, since we have no walls. infill_comp.generate(raft_paths, raft_polygons, raft_lines, surface_settings, layer_nr, SectionType::ADHESION); - gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage.raft_surface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); + gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage_.raft_surface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); raft_polygons.clear(); raft_lines.clear(); @@ -1086,7 +1086,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS for (size_t mesh_idx : mesh_order) { const std::shared_ptr& mesh = storage.meshes[mesh_idx]; - const MeshPathConfigs& mesh_config = gcode_layer.configs_storage.mesh_configs[mesh_idx]; + const MeshPathConfigs& mesh_config = gcode_layer.configs_storage_.mesh_configs[mesh_idx]; if (mesh->settings.get("magic_mesh_surface_mode") == ESurfaceMode::SURFACE && extruder_nr == mesh->settings.get("wall_0_extruder_nr").extruder_nr_ // mesh surface mode should always only be printed with the outer wall extruder! @@ -1285,7 +1285,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan gcode_layer.addLinesByOptimizer( layer_nr == 0 ? all_brim_lines : inner_brim_line, - gcode_layer.configs_storage.skirt_brim_config_per_extruder[extruder_nr], + gcode_layer.configs_storage_.skirt_brim_config_per_extruder[extruder_nr], SpaceFillType::PolyLines, enable_travel_optimization, wipe_dist, @@ -1308,7 +1308,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan support_brim_lines.toPolylines(); gcode_layer.addLinesByOptimizer( support_brim_lines, - gcode_layer.configs_storage.skirt_brim_config_per_extruder[extruder_nr], + gcode_layer.configs_storage_.skirt_brim_config_per_extruder[extruder_nr], SpaceFillType::PolyLines, enable_travel_optimization, wipe_dist, @@ -1329,7 +1329,7 @@ void FffGcodeWriter::processOozeShield(const SliceDataStorage& storage, LayerPla } if (storage.oozeShield.size() > 0 && layer_nr < storage.oozeShield.size()) { - gcode_layer.addPolygonsByOptimizer(storage.oozeShield[layer_nr], gcode_layer.configs_storage.skirt_brim_config_per_extruder[0]); + gcode_layer.addPolygonsByOptimizer(storage.oozeShield[layer_nr], gcode_layer.configs_storage_.skirt_brim_config_per_extruder[0]); } } @@ -1362,7 +1362,7 @@ void FffGcodeWriter::processDraftShield(const SliceDataStorage& storage, LayerPl } } - gcode_layer.addPolygonsByOptimizer(storage.draft_protection_shield, gcode_layer.configs_storage.skirt_brim_config_per_extruder[0]); + gcode_layer.addPolygonsByOptimizer(storage.draft_protection_shield, gcode_layer.configs_storage_.skirt_brim_config_per_extruder[0]); } void FffGcodeWriter::calculateExtruderOrderPerLayer(const SliceDataStorage& storage) @@ -1711,7 +1711,7 @@ bool FffGcodeWriter::processMultiLayerInfill( infill_overlap, infill_multiplier, infill_angle, - gcode_layer.z, + gcode_layer.z_, infill_shift, max_resolution, max_deviation, @@ -1917,7 +1917,7 @@ bool FffGcodeWriter::processSingleLayerInfill( overlap, infill_multiplier, infill_angle, - gcode_layer.z, + gcode_layer.z_, infill_shift, max_resolution, max_deviation, @@ -1982,7 +1982,7 @@ bool FffGcodeWriter::processSingleLayerInfill( overlap, infill_multiplier, infill_angle, - gcode_layer.z, + gcode_layer.z_, infill_shift, max_resolution, max_deviation, @@ -2660,12 +2660,12 @@ bool FffGcodeWriter::processSkinPart( { bool added_something = false; - gcode_layer.mode_skip_agressive_merge = true; + gcode_layer.mode_skip_agressive_merge_ = true; processRoofing(storage, gcode_layer, mesh, extruder_nr, mesh_config, skin_part, added_something); processTopBottom(storage, gcode_layer, mesh, extruder_nr, mesh_config, skin_part, added_something); - gcode_layer.mode_skip_agressive_merge = false; + gcode_layer.mode_skip_agressive_merge_ = false; return added_something; } @@ -2942,7 +2942,7 @@ void FffGcodeWriter::processSkinPrintFeature( skin_overlap, infill_multiplier, skin_angle, - gcode_layer.z, + gcode_layer.z_, extra_infill_shift, max_resolution, max_deviation, @@ -3125,7 +3125,7 @@ bool FffGcodeWriter::addSupportToGCode(const SliceDataStorage& storage, LayerPla if (extruder_nr == support_roof_extruder_nr) { - support_added |= addSupportRoofsToGCode(storage, support_layer.support_fractional_roof, gcode_layer.configs_storage.support_fractional_roof_config, gcode_layer); + support_added |= addSupportRoofsToGCode(storage, support_layer.support_fractional_roof, gcode_layer.configs_storage_.support_fractional_roof_config, gcode_layer); } if (extruder_nr == support_infill_extruder_nr) { @@ -3136,7 +3136,7 @@ bool FffGcodeWriter::addSupportToGCode(const SliceDataStorage& storage, LayerPla support_added |= addSupportRoofsToGCode( storage, support_layer.support_roof.difference(support_layer.support_fractional_roof), - gcode_layer.configs_storage.support_roof_config, + gcode_layer.configs_storage_.support_roof_config, gcode_layer); } if (extruder_nr == support_bottom_extruder_nr) @@ -3235,7 +3235,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer for (const PathOrdering& path : ranges::views::concat(island_order_optimizer_initial.paths_, island_order_optimizer.paths_)) { const SupportInfillPart& part = *path.vertices_; - const auto& configs = part.use_fractional_config_ ? gcode_layer.configs_storage.support_fractional_infill_config : gcode_layer.configs_storage.support_infill_config; + const auto& configs = part.use_fractional_config_ ? gcode_layer.configs_storage_.support_fractional_infill_config : gcode_layer.configs_storage_.support_infill_config; // always process the wall overlap if walls are generated const int current_support_infill_overlap = (part.inset_count_to_generate_ > 0) ? default_support_infill_overlap : 0; @@ -3315,7 +3315,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer current_support_infill_overlap - (density_idx == max_density_idx ? 0 : wall_line_count * support_line_width), infill_multiplier, support_infill_angle, - gcode_layer.z + configs[combine_idx].z_offset, + gcode_layer.z_ + configs[combine_idx].z_offset, support_shift, max_resolution, max_deviation, @@ -3521,7 +3521,7 @@ bool FffGcodeWriter::addSupportRoofsToGCode( support_roof_overlap, infill_multiplier, fill_angle, - gcode_layer.z + current_roof_config.z_offset, + gcode_layer.z_ + current_roof_config.z_offset, extra_infill_shift, max_resolution, max_deviation, @@ -3631,12 +3631,12 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L zig_zaggify_infill, connect_polygons, support_layer.support_bottom, - gcode_layer.configs_storage.support_bottom_config.getLineWidth(), + gcode_layer.configs_storage_.support_bottom_config.getLineWidth(), support_bottom_line_distance, support_bottom_overlap, infill_multiplier, fill_angle, - gcode_layer.z, + gcode_layer.z_, extra_infill_shift, max_resolution, max_deviation, @@ -3663,11 +3663,11 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L { constexpr bool force_comb_retract = false; gcode_layer.addTravel(bottom_polygons[0][0], force_comb_retract); - gcode_layer.addPolygonsByOptimizer(bottom_polygons, gcode_layer.configs_storage.support_bottom_config); + gcode_layer.addPolygonsByOptimizer(bottom_polygons, gcode_layer.configs_storage_.support_bottom_config); } if (! bottom_paths.empty()) { - const GCodePathConfig& config = gcode_layer.configs_storage.support_bottom_config; + const GCodePathConfig& config = gcode_layer.configs_storage_.support_bottom_config; constexpr bool retract_before_outer_wall = false; constexpr coord_t wipe_dist = 0; const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); @@ -3693,7 +3693,7 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L } gcode_layer.addLinesByOptimizer( bottom_lines, - gcode_layer.configs_storage.support_bottom_config, + gcode_layer.configs_storage_.support_bottom_config, (pattern == EFillMethod::ZIG_ZAG) ? SpaceFillType::PolyLines : SpaceFillType::Lines); return true; } diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 6641a321b5..5e8b6a1b2d 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -45,16 +45,16 @@ GCodePath* LayerPlan::getLatestPathWithConfig( const bool spiralize, const Ratio speed_factor) { - std::vector& paths = extruder_plans.back().paths_; + std::vector& paths = extruder_plans_.back().paths_; if (paths.size() > 0 && paths.back().config == config && ! paths.back().done && paths.back().flow == flow && paths.back().width_factor == width_factor && paths.back().speed_factor == speed_factor && paths.back().z_offset == z_offset - && paths.back().mesh == current_mesh) // spiralize can only change when a travel path is in between + && paths.back().mesh == current_mesh_) // spiralize can only change when a travel path is in between { return &paths.back(); } paths.emplace_back(GCodePath{ .z_offset = z_offset, .config = config, - .mesh = current_mesh, + .mesh = current_mesh_, .space_fill_type = space_fill_type, .flow = flow, .width_factor = width_factor, @@ -62,18 +62,18 @@ GCodePath* LayerPlan::getLatestPathWithConfig( .speed_factor = speed_factor }); GCodePath* ret = &paths.back(); - ret->skip_agressive_merge_hint = mode_skip_agressive_merge; + ret->skip_agressive_merge_hint = mode_skip_agressive_merge_; return ret; } const Polygons* LayerPlan::getCombBoundaryInside() const { - return &comb_boundary_preferred; + return &comb_boundary_preferred_; } void LayerPlan::forceNewPathStart() { - std::vector& paths = extruder_plans.back().paths_; + std::vector& paths = extruder_plans_.back().paths_; if (paths.size() > 0) paths[paths.size() - 1].done = true; } @@ -88,84 +88,84 @@ LayerPlan::LayerPlan( coord_t comb_boundary_offset, coord_t comb_move_inside_distance, coord_t travel_avoid_distance) - : configs_storage(storage, layer_nr, layer_thickness) - , z(z) - , final_travel_z(z) - , mode_skip_agressive_merge(false) - , storage(storage) - , layer_nr(layer_nr) - , is_initial_layer(layer_nr == 0 - static_cast(Raft::getTotalExtraLayers())) - , is_raft_layer(layer_nr < 0 - static_cast(Raft::getFillerLayerCount())) - , layer_thickness(layer_thickness) - , has_prime_tower_planned_per_extruder(Application::getInstance().current_slice_->scene.extruders.size(), false) - , current_mesh(nullptr) - , last_extruder_previous_layer(start_extruder) - , last_planned_extruder(&Application::getInstance().current_slice_->scene.extruders[start_extruder]) - , first_travel_destination_is_inside(false) + : configs_storage_(storage, layer_nr, layer_thickness) + , z_(z) + , final_travel_z_(z) + , mode_skip_agressive_merge_(false) + , storage_(storage) + , layer_nr_(layer_nr) + , is_initial_layer_(layer_nr == 0 - static_cast(Raft::getTotalExtraLayers())) + , is_raft_layer_(layer_nr < 0 - static_cast(Raft::getFillerLayerCount())) + , layer_thickness_(layer_thickness) + , has_prime_tower_planned_per_extruder_(Application::getInstance().current_slice_->scene.extruders.size(), false) + , current_mesh_(nullptr) + , last_extruder_previous_layer_(start_extruder) + , last_planned_extruder_(&Application::getInstance().current_slice_->scene.extruders[start_extruder]) + , first_travel_destination_is_inside_(false) , // set properly when addTravel is called for the first time (otherwise not set properly) - comb_boundary_minimum(computeCombBoundary(CombBoundary::MINIMUM)) - , comb_boundary_preferred(computeCombBoundary(CombBoundary::PREFERRED)) - , comb_move_inside_distance(comb_move_inside_distance) - , fan_speed_layer_time_settings_per_extruder(fan_speed_layer_time_settings_per_extruder) + comb_boundary_minimum_(computeCombBoundary(CombBoundary::MINIMUM)) + , comb_boundary_preferred_(computeCombBoundary(CombBoundary::PREFERRED)) + , comb_move_inside_distance_(comb_move_inside_distance) + , fan_speed_layer_time_settings_per_extruder_(fan_speed_layer_time_settings_per_extruder) { size_t current_extruder = start_extruder; - was_inside = true; // not used, because the first travel move is bogus - is_inside = false; // assumes the next move will not be to inside a layer part (overwritten just before going into a layer part) + was_inside_ = true; // not used, because the first travel move is bogus + is_inside_ = false; // assumes the next move will not be to inside a layer part (overwritten just before going into a layer part) if (Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing") != CombingMode::OFF) { - comb = new Comb(storage, layer_nr, comb_boundary_minimum, comb_boundary_preferred, comb_boundary_offset, travel_avoid_distance, comb_move_inside_distance); + comb_ = new Comb(storage, layer_nr, comb_boundary_minimum_, comb_boundary_preferred_, comb_boundary_offset, travel_avoid_distance, comb_move_inside_distance); } else { - comb = nullptr; + comb_ = nullptr; } for (const ExtruderTrain& extruder : Application::getInstance().current_slice_->scene.extruders) { - layer_start_pos_per_extruder.emplace_back(extruder.settings_.get("layer_start_x"), extruder.settings_.get("layer_start_y")); + layer_start_pos_per_extruder_.emplace_back(extruder.settings_.get("layer_start_x"), extruder.settings_.get("layer_start_y")); } - extruder_plans.reserve(Application::getInstance().current_slice_->scene.extruders.size()); - extruder_plans.emplace_back( + extruder_plans_.reserve(Application::getInstance().current_slice_->scene.extruders.size()); + extruder_plans_.emplace_back( current_extruder, layer_nr, - is_initial_layer, - is_raft_layer, + is_initial_layer_, + is_raft_layer_, layer_thickness, fan_speed_layer_time_settings_per_extruder[current_extruder], storage.retraction_wipe_config_per_extruder[current_extruder].retraction_config); for (size_t extruder_nr = 0; extruder_nr < Application::getInstance().current_slice_->scene.extruders.size(); extruder_nr++) { // Skirt and brim. - skirt_brim_is_processed[extruder_nr] = false; + skirt_brim_is_processed_[extruder_nr] = false; } } LayerPlan::~LayerPlan() { - if (comb) - delete comb; + if (comb_) + delete comb_; } ExtruderTrain* LayerPlan::getLastPlannedExtruderTrain() { - return last_planned_extruder; + return last_planned_extruder_; } Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) { Polygons comb_boundary; const CombingMode mesh_combing_mode = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing"); - if (mesh_combing_mode != CombingMode::OFF && (layer_nr >= 0 || mesh_combing_mode != CombingMode::NO_SKIN)) + if (mesh_combing_mode != CombingMode::OFF && (layer_nr_ >= 0 || mesh_combing_mode != CombingMode::NO_SKIN)) { - if (layer_nr < 0) + if (layer_nr_ < 0) { - comb_boundary = storage.raftOutline.offset(MM2INT(0.1)); + comb_boundary = storage_.raftOutline.offset(MM2INT(0.1)); } else { - for (const std::shared_ptr& mesh_ptr : storage.meshes) + for (const std::shared_ptr& mesh_ptr : storage_.meshes) { const auto& mesh = *mesh_ptr; - const SliceLayer& layer = mesh.layers[static_cast(layer_nr)]; + const SliceLayer& layer = mesh.layers[static_cast(layer_nr_)]; // don't process infill_mesh or anti_overhang_mesh if (mesh.settings.get("infill_mesh") || mesh.settings.get("anti_overhang_mesh")) { @@ -200,9 +200,9 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) else if (combing_mode == CombingMode::NO_OUTER_SURFACES) { Polygons top_and_bottom_most_fill; - for (const SliceLayerPart& part : layer.parts) + for (const SliceLayerPart& outer_surface_part : layer.parts) { - for (const SkinPart& skin_part : part.skin_parts) + for (const SkinPart& skin_part : outer_surface_part.skin_parts) { top_and_bottom_most_fill.add(skin_part.top_most_surface_fill); top_and_bottom_most_fill.add(skin_part.bottom_most_surface_fill); @@ -223,7 +223,7 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) void LayerPlan::setIsInside(bool _is_inside) { - is_inside = _is_inside; + is_inside_ = _is_inside; } bool LayerPlan::setExtruder(const size_t extruder_nr) @@ -246,25 +246,25 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) const Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); end_pos += extruder_offset; // absolute end pos is given as a head position } - if (end_pos_absolute || last_planned_position) + if (end_pos_absolute || last_planned_position_) { addTravel(end_pos); // + extruder_offset cause it } } - if (extruder_plans.back().paths_.empty() && extruder_plans.back().inserts_.empty()) + if (extruder_plans_.back().paths_.empty() && extruder_plans_.back().inserts_.empty()) { // first extruder plan in a layer might be empty, cause it is made with the last extruder planned in the previous layer - extruder_plans.back().extruder_nr_ = extruder_nr; + extruder_plans_.back().extruder_nr_ = extruder_nr; } - extruder_plans.emplace_back( + extruder_plans_.emplace_back( extruder_nr, - layer_nr, - is_initial_layer, - is_raft_layer, - layer_thickness, - fan_speed_layer_time_settings_per_extruder[extruder_nr], - storage.retraction_wipe_config_per_extruder[extruder_nr].retraction_config); - assert(extruder_plans.size() <= Application::getInstance().current_slice_->scene.extruders.size() && "Never use the same extruder twice on one layer!"); - last_planned_extruder = &Application::getInstance().current_slice_->scene.extruders[extruder_nr]; + layer_nr_, + is_initial_layer_, + is_raft_layer_, + layer_thickness_, + fan_speed_layer_time_settings_per_extruder_[extruder_nr], + storage_.retraction_wipe_config_per_extruder[extruder_nr].retraction_config); + assert(extruder_plans_.size() <= Application::getInstance().current_slice_->scene.extruders.size() && "Never use the same extruder twice on one layer!"); + last_planned_extruder_ = &Application::getInstance().current_slice_->scene.extruders[extruder_nr]; { // handle starting pos of the new extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); @@ -279,16 +279,16 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); start_pos += extruder_offset; // absolute start pos is given as a head position } - if (start_pos_absolute || last_planned_position) + if (start_pos_absolute || last_planned_position_) { - last_planned_position = start_pos; + last_planned_position_ = start_pos; } } return true; } void LayerPlan::setMesh(const std::shared_ptr& mesh) { - current_mesh = mesh; + current_mesh_ = mesh; } void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::optional& part) @@ -296,11 +296,11 @@ void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::option constexpr coord_t max_dist2 = MM2INT(2.0) * MM2INT(2.0); // if we are further than this distance, we conclude we are not inside even though we thought we were. // this function is to be used to move from the boundary of a part to inside the part Point p = getLastPlannedPositionOrStartingPosition(); // copy, since we are going to move p - if (PolygonUtils::moveInside(comb_boundary_preferred, p, distance, max_dist2) != NO_INDEX) + if (PolygonUtils::moveInside(comb_boundary_preferred_, p, distance, max_dist2) != NO_INDEX) { // Move inside again, so we move out of tight 90deg corners - PolygonUtils::moveInside(comb_boundary_preferred, p, distance, max_dist2); - if (comb_boundary_preferred.inside(p) && (part == std::nullopt || part->outline.inside(p))) + PolygonUtils::moveInside(comb_boundary_preferred_, p, distance, max_dist2); + if (comb_boundary_preferred_.inside(p) && (part == std::nullopt || part->outline.inside(p))) { addTravel_simple(p); // Make sure the that any retraction happens after this move, not before it by starting a new move path. @@ -311,67 +311,68 @@ void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::option bool LayerPlan::getPrimeTowerIsPlanned(unsigned int extruder_nr) const { - return has_prime_tower_planned_per_extruder[extruder_nr]; + return has_prime_tower_planned_per_extruder_[extruder_nr]; } void LayerPlan::setPrimeTowerIsPlanned(unsigned int extruder_nr) { - has_prime_tower_planned_per_extruder[extruder_nr] = true; + has_prime_tower_planned_per_extruder_[extruder_nr] = true; } std::optional> LayerPlan::getFirstTravelDestinationState() const { std::optional> ret; - if (first_travel_destination) + if (first_travel_destination_) { - ret = std::make_pair(*first_travel_destination, first_travel_destination_is_inside); + ret = std::make_pair(*first_travel_destination_, first_travel_destination_is_inside_); } return ret; } GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const coord_t z_offset) { - const GCodePathConfig& travel_config = configs_storage.travel_config_per_extruder[getExtruder()]; + const GCodePathConfig& travel_config = configs_storage_.travel_config_per_extruder[getExtruder()]; const RetractionConfig& retraction_config - = current_mesh ? current_mesh->retraction_wipe_config.retraction_config : storage.retraction_wipe_config_per_extruder[getExtruder()].retraction_config; + = current_mesh_ ? current_mesh_->retraction_wipe_config.retraction_config : storage_.retraction_wipe_config_per_extruder[getExtruder()].retraction_config; GCodePath* path = getLatestPathWithConfig(travel_config, SpaceFillType::None, z_offset); bool combed = false; const ExtruderTrain* extruder = getLastPlannedExtruderTrain(); - const Settings& mesh_or_extruder_settings = current_mesh ? current_mesh->settings : extruder->settings_; + const Settings& mesh_or_extruder_settings = current_mesh_ ? current_mesh_->settings : extruder->settings_; - const bool is_first_travel_of_extruder_after_switch = extruder_plans.back().paths_.size() == 1 && (extruder_plans.size() > 1 || last_extruder_previous_layer != getExtruder()); + const bool is_first_travel_of_extruder_after_switch + = extruder_plans_.back().paths_.size() == 1 && (extruder_plans_.size() > 1 || last_extruder_previous_layer_ != getExtruder()); bool bypass_combing = is_first_travel_of_extruder_after_switch && mesh_or_extruder_settings.get("retraction_hop_after_extruder_switch"); - const bool is_first_travel_of_layer = ! static_cast(last_planned_position); + const bool is_first_travel_of_layer = ! static_cast(last_planned_position_); const bool retraction_enable = mesh_or_extruder_settings.get("retraction_enable"); if (is_first_travel_of_layer) { bypass_combing = true; // first travel move is bogus; it is added after this and the previous layer have been planned in LayerPlanBuffer::addConnectingTravelMove - first_travel_destination = p; - first_travel_destination_is_inside = is_inside; - if (layer_nr == 0 && retraction_enable && mesh_or_extruder_settings.get("retraction_hop_enabled")) + first_travel_destination_ = p; + first_travel_destination_is_inside_ = is_inside_; + if (layer_nr_ == 0 && retraction_enable && mesh_or_extruder_settings.get("retraction_hop_enabled")) { path->retract = true; path->perform_z_hop = true; } forceNewPathStart(); // force a new travel path after this first bogus move } - else if (force_retract && last_planned_position && ! shorterThen(*last_planned_position - p, retraction_config.retraction_min_travel_distance)) + else if (force_retract && last_planned_position_ && ! shorterThen(*last_planned_position_ - p, retraction_config.retraction_min_travel_distance)) { // path is not shorter than min travel distance, force a retraction path->retract = true; - if (comb == nullptr) + if (comb_ == nullptr) { path->perform_z_hop = mesh_or_extruder_settings.get("retraction_hop_enabled"); } } - if (comb != nullptr && ! bypass_combing) + if (comb_ != nullptr && ! bypass_combing) { CombPaths combPaths; @@ -382,15 +383,15 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const bool unretract_before_last_travel_move = false; // Decided when calculating the combing const bool perform_z_hops = mesh_or_extruder_settings.get("retraction_hop_enabled"); const bool perform_z_hops_only_when_collides = mesh_or_extruder_settings.get("retraction_hop_only_when_collides"); - combed = comb->calc( + combed = comb_->calc( perform_z_hops, perform_z_hops_only_when_collides, *extruder, - *last_planned_position, + *last_planned_position_, p, combPaths, - was_inside, - is_inside, + was_inside_, + is_inside_, max_distance_ignored, unretract_before_last_travel_move); if (combed) @@ -417,7 +418,7 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const const coord_t maximum_travel_resolution = mesh_or_extruder_settings.get("meshfix_maximum_travel_resolution"); coord_t distance = 0; - Point last_point((last_planned_position) ? *last_planned_position : Point(0, 0)); + Point last_point((last_planned_position_) ? *last_planned_position_ : Point(0, 0)); for (CombPath& combPath : combPaths) { // add all comb paths (don't do anything special for paths which are moving through air) if (combPath.empty()) @@ -449,21 +450,21 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const // CURA-6675: // Retraction Minimal Travel Distance should work for all travel moves. If the travel move is shorter than the // Retraction Minimal Travel Distance, retraction should be disabled. - if (! is_first_travel_of_layer && last_planned_position && shorterThen(*last_planned_position - p, retraction_config.retraction_min_travel_distance)) + if (! is_first_travel_of_layer && last_planned_position_ && shorterThen(*last_planned_position_ - p, retraction_config.retraction_min_travel_distance)) { path->retract = false; path->perform_z_hop = false; } // no combing? retract only when path is not shorter than minimum travel distance - if (! combed && ! is_first_travel_of_layer && last_planned_position && ! shorterThen(*last_planned_position - p, retraction_config.retraction_min_travel_distance)) + if (! combed && ! is_first_travel_of_layer && last_planned_position_ && ! shorterThen(*last_planned_position_ - p, retraction_config.retraction_min_travel_distance)) { - if (was_inside) // when the previous location was from printing something which is considered inside (not support or prime tower etc) + if (was_inside_) // when the previous location was from printing something which is considered inside (not support or prime tower etc) { // then move inside the printed part, so that we don't ooze on the outer wall while retraction, but on the inside of the print. assert(extruder != nullptr); coord_t innermost_wall_line_width = mesh_or_extruder_settings.get((mesh_or_extruder_settings.get("wall_line_count") > 1) ? "wall_line_width_x" : "wall_line_width_0"); - if (layer_nr == 0) + if (layer_nr_ == 0) { innermost_wall_line_width *= mesh_or_extruder_settings.get("initial_layer_line_width_factor"); } @@ -477,24 +478,24 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const forceNewPathStart(); GCodePath& ret = addTravel_simple(p, path); - was_inside = is_inside; + was_inside_ = is_inside_; return ret; } GCodePath& LayerPlan::addTravel_simple(const Point& p, GCodePath* path) { - bool is_first_travel_of_layer = ! static_cast(last_planned_position); + bool is_first_travel_of_layer = ! static_cast(last_planned_position_); if (is_first_travel_of_layer) { // spiralize calls addTravel_simple directly as the first travel move in a layer - first_travel_destination = p; - first_travel_destination_is_inside = is_inside; + first_travel_destination_ = p; + first_travel_destination_is_inside_ = is_inside_; } if (path == nullptr) { - path = getLatestPathWithConfig(configs_storage.travel_config_per_extruder[getExtruder()], SpaceFillType::None); + path = getLatestPathWithConfig(configs_storage_.travel_config_per_extruder[getExtruder()], SpaceFillType::None); } path->points.push_back(p); - last_planned_position = p; + last_planned_position_ = p; return *path; } @@ -521,11 +522,11 @@ void LayerPlan::addExtrusionMove( GCodePath* path = getLatestPathWithConfig(config, space_fill_type, config.z_offset, flow, width_factor, spiralize, speed_factor); path->points.push_back(p); path->setFanSpeed(fan_speed); - if (! static_cast(first_extrusion_acc_jerk)) + if (! static_cast(first_extrusion_acc_jerk_)) { - first_extrusion_acc_jerk = std::make_pair(path->config.getAcceleration(), path->config.getJerk()); + first_extrusion_acc_jerk_ = std::make_pair(path->config.getAcceleration(), path->config.getJerk()); } - last_planned_position = p; + last_planned_position_ = p; } void LayerPlan::addPolygon( @@ -550,8 +551,7 @@ void LayerPlan::addPolygon( } if (polygon.size() > 2) { - const Point& p1 = polygon[start_idx]; - addExtrusionMove(p1, config, SpaceFillType::Polygons, flow_ratio, width_ratio, spiralize); + addExtrusionMove(polygon[start_idx], config, SpaceFillType::Polygons, flow_ratio, width_ratio, spiralize); if (wall_0_wipe_dist > 0) { // apply outer wall wipe @@ -702,8 +702,8 @@ void LayerPlan::addWallLine( speed_factor); } // then coast to start of bridge segment - constexpr Ratio flow = 0.0_r; // Coasting has no flow rate. - addExtrusionMove(segment_end, non_bridge_config, SpaceFillType::Polygons, flow, width_factor, spiralize, speed_factor); + constexpr Ratio no_flow = 0.0_r; // Coasting has no flow rate. + addExtrusionMove(segment_end, non_bridge_config, SpaceFillType::Polygons, no_flow, width_factor, spiralize, speed_factor); } else { @@ -715,7 +715,7 @@ void LayerPlan::addWallLine( segment_flow, width_factor, spiralize, - (overhang_mask.empty() || (! overhang_mask.inside(p0, true) && ! overhang_mask.inside(p1, true))) ? speed_factor : overhang_speed_factor); + (overhang_mask_.empty() || (! overhang_mask_.inside(p0, true) && ! overhang_mask_.inside(p1, true))) ? speed_factor : overhang_speed_factor); } distance_to_bridge_start -= len; @@ -730,7 +730,7 @@ void LayerPlan::addWallLine( segment_flow, width_factor, spiralize, - (overhang_mask.empty() || (! overhang_mask.inside(p0, true) && ! overhang_mask.inside(p1, true))) ? speed_factor : overhang_speed_factor); + (overhang_mask_.empty() || (! overhang_mask_.inside(p0, true) && ! overhang_mask_.inside(p1, true))) ? speed_factor : overhang_speed_factor); } non_bridge_line_volume += vSize(cur_point - segment_end) * segment_flow * width_factor * speed_factor * non_bridge_config.getSpeed(); cur_point = segment_end; @@ -743,7 +743,7 @@ void LayerPlan::addWallLine( } }; - if (bridge_wall_mask.empty()) + if (bridge_wall_mask_.empty()) { // no bridges required addExtrusionMove( @@ -753,12 +753,12 @@ void LayerPlan::addWallLine( flow, width_factor, spiralize, - (overhang_mask.empty() || (! overhang_mask.inside(p0, true) && ! overhang_mask.inside(p1, true))) ? 1.0_r : overhang_speed_factor); + (overhang_mask_.empty() || (! overhang_mask_.inside(p0, true) && ! overhang_mask_.inside(p1, true))) ? 1.0_r : overhang_speed_factor); } else { // bridges may be required - if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask, p0, p1)) + if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask_, p0, p1)) { // the line crosses the boundary between supported and non-supported regions so one or more bridges are required @@ -767,7 +767,7 @@ void LayerPlan::addWallLine( Polygons line_polys; line_polys.addLine(p0, p1); constexpr bool restitch = false; // only a single line doesn't need stitching - line_polys = bridge_wall_mask.intersectionPolyLines(line_polys, restitch); + line_polys = bridge_wall_mask_.intersectionPolyLines(line_polys, restitch); // line_polys now contains the wall lines that need to be printed using bridge_config @@ -831,7 +831,7 @@ void LayerPlan::addWallLine( // if we haven't yet reached p1, fill the gap with non_bridge_config line addNonBridgeLine(p1); } - else if (bridge_wall_mask.inside(p0, true) && vSize(p0 - p1) >= min_bridge_line_len) + else if (bridge_wall_mask_.inside(p0, true) && vSize(p0 - p1) >= min_bridge_line_len) { // both p0 and p1 must be above air (the result will be ugly!) addExtrusionMove(p1, bridge_config, SpaceFillType::Polygons, flow, width_factor); @@ -920,7 +920,7 @@ void LayerPlan::addWall( { distance_to_bridge_start = 0; - if (! bridge_wall_mask.empty()) + if (! bridge_wall_mask_.empty()) { // there is air below the part so iterate through the lines that have not yet been output accumulating the total distance to the first bridge segment for (unsigned point_idx = current_index; point_idx < wall.size(); ++point_idx) @@ -928,7 +928,7 @@ void LayerPlan::addWall( const ExtrusionJunction& p0 = wall[point_idx]; const ExtrusionJunction& p1 = wall[(point_idx + 1) % wall.size()]; - if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask, p0.p, p1.p)) + if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask_, p0.p, p1.p)) { // the line crosses the boundary between supported and non-supported regions so it will contain one or more bridge segments @@ -937,7 +937,7 @@ void LayerPlan::addWall( Polygons line_polys; line_polys.addLine(p0.p, p1.p); constexpr bool restitch = false; // only a single line doesn't need stitching - line_polys = bridge_wall_mask.intersectionPolyLines(line_polys, restitch); + line_polys = bridge_wall_mask_.intersectionPolyLines(line_polys, restitch); while (line_polys.size() > 0) { @@ -982,7 +982,7 @@ void LayerPlan::addWall( line_polys.remove(nearest); } } - else if (! bridge_wall_mask.inside(p0.p, true)) + else if (! bridge_wall_mask_.inside(p0.p, true)) { // none of the line is over air distance_to_bridge_start += vSize(p1.p - p0.p); @@ -997,9 +997,9 @@ void LayerPlan::addWall( bool first_line = true; const coord_t small_feature_max_length = settings.get("small_feature_max_length"); - const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr == 0 || wall.inset_idx == 0) && cura::shorterThan(wall, small_feature_max_length); - Ratio small_feature_speed_factor = settings.get((layer_nr == 0) ? "small_feature_speed_factor_0" : "small_feature_speed_factor"); - const Velocity min_speed = fan_speed_layer_time_settings_per_extruder[getLastPlannedExtruderTrain()->extruder_nr_].cool_min_speed; + const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr_ == 0 || wall.inset_idx == 0) && cura::shorterThan(wall, small_feature_max_length); + Ratio small_feature_speed_factor = settings.get((layer_nr_ == 0) ? "small_feature_speed_factor_0" : "small_feature_speed_factor"); + const Velocity min_speed = fan_speed_layer_time_settings_per_extruder_[getLastPlannedExtruderTrain()->extruder_nr_].cool_min_speed; small_feature_speed_factor = std::max((double)small_feature_speed_factor, (double)(min_speed / non_bridge_config.getSpeed())); const coord_t max_area_deviation = std::max(settings.get("meshfix_maximum_extrusion_area_deviation"), 1); // Square micrometres! const coord_t max_resolution = std::max(settings.get("meshfix_maximum_resolution"), coord_t(1)); @@ -1012,7 +1012,7 @@ void LayerPlan::addWall( { const ExtrusionJunction& p1 = wall[(wall.size() + start_idx + point_idx * direction) % wall.size()]; - if (! bridge_wall_mask.empty()) + if (! bridge_wall_mask_.empty()) { computeDistanceToBridgeStart((wall.size() + start_idx + point_idx * direction - 1) % wall.size()); } @@ -1091,7 +1091,7 @@ void LayerPlan::addWall( if (wall.size() >= 2) { - if (! bridge_wall_mask.empty()) + if (! bridge_wall_mask_.empty()) { computeDistanceToBridgeStart((start_idx + wall.size() - 1) % wall.size()); } @@ -1184,14 +1184,14 @@ void LayerPlan::addLinesByOptimizer( const std::unordered_multimap& order_requirements) { Polygons boundary; - if (enable_travel_optimization && ! comb_boundary_minimum.empty()) + if (enable_travel_optimization && ! comb_boundary_minimum_.empty()) { // use the combing boundary inflated so that all infill lines are inside the boundary int dist = 0; - if (layer_nr >= 0) + if (layer_nr_ >= 0) { // determine how much the skin/infill lines overlap the combing boundary - for (const std::shared_ptr& mesh : storage.meshes) + for (const std::shared_ptr& mesh : storage_.meshes) { const coord_t overlap = std::max(mesh->settings.get("skin_overlap_mm"), mesh->settings.get("infill_overlap_mm")); if (overlap > dist) @@ -1201,7 +1201,7 @@ void LayerPlan::addLinesByOptimizer( } dist += 100; // ensure boundary is slightly outside all skin/infill lines } - boundary.add(comb_boundary_minimum.offset(dist)); + boundary.add(comb_boundary_minimum_.offset(dist)); // simplify boundary to cut down processing time boundary = Simplify(MM2INT(0.1), MM2INT(0.1), 0).polygon(boundary); } @@ -1377,7 +1377,7 @@ void LayerPlan::addLinesMonotonic( order.optimize(); // Read out and process the monotonically ordered lines. - addLinesInGivenOrder(order.paths, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); + addLinesInGivenOrder(order.paths_, config, space_fill_type, wipe_dist, flow_ratio, fan_speed); // Add all lines in the excluded areas the 'normal' way. addLinesByOptimizer(left_over, config, space_fill_type, true, wipe_dist, flow_ratio, getLastPlannedPositionOrStartingPosition(), fan_speed); @@ -1454,7 +1454,7 @@ void LayerPlan::spiralizeWallSlice( // normal slow down for quick layers mechanism can kick in and speed this layer up (because it is longer) but we prefer // the layer to be printed at a similar speed to the previous layer to avoid abrupt changes in extrusion rate so we slow it down - const FanSpeedLayerTimeSettings& layer_time_settings = extruder_plans.back().fan_speed_layer_time_settings_; + const FanSpeedLayerTimeSettings& layer_time_settings = extruder_plans_.back().fan_speed_layer_time_settings_; const double min_time = layer_time_settings.cool_min_layer_time; const double normal_layer_time = total_length / config.getSpeed(); @@ -1556,7 +1556,6 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ { const double minExtrudeTime = minTime - (totalTime - extrudeTime); - double factor = 0.0; double target_speed = 0.0; std::function slow_down_func{ [&target_speed](const GCodePath& path) { @@ -1592,11 +1591,11 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ { // Slowing down to the slowest_speed is sufficient to respect the minimum layer time. // Linear interpolate between extrudeTime and total_extrude_time_at_slowest_speed - factor = (1 / total_extrude_time_at_slowest_speed - 1 / minExtrudeTime) / (1 / total_extrude_time_at_slowest_speed - 1 / extrudeTime); + const double factor = (1 / total_extrude_time_at_slowest_speed - 1 / minExtrudeTime) / (1 / total_extrude_time_at_slowest_speed - 1 / extrudeTime); slow_down_func = [&slowest_path_speed = slowest_path_speed_, &factor](const GCodePath& path) { - const double target_speed = slowest_path_speed * (1.0 - factor) + (path.config.getSpeed() * path.speed_factor) * factor; - return std::min(target_speed / (path.config.getSpeed() * path.speed_factor), 1.0); + const double actual_target_speed = slowest_path_speed * (1.0 - factor) + (path.config.getSpeed() * path.speed_factor) * factor; + return std::min(actual_target_speed / (path.config.getSpeed() * path.speed_factor), 1.0); }; // Update stored naive time estimates @@ -1773,7 +1772,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) { // the minimum layer time behaviour is only applied to the last extruder. const size_t last_extruder_nr = ranges::max_element( - extruder_plans, + extruder_plans_, [](const ExtruderPlan& a, const ExtruderPlan& b) { return a.extruder_nr_ < b.extruder_nr_; @@ -1784,10 +1783,10 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) double other_extr_plan_time = 0.0; Duration maximum_cool_min_layer_time; - for (unsigned int extr_plan_idx = 0; extr_plan_idx < extruder_plans.size(); extr_plan_idx++) + for (unsigned int extr_plan_idx = 0; extr_plan_idx < extruder_plans_.size(); extr_plan_idx++) { { - ExtruderPlan& extruder_plan = extruder_plans[extr_plan_idx]; + ExtruderPlan& extruder_plan = extruder_plans_[extr_plan_idx]; // Precalculate the time estimates. Don't call this function twice, since it is works cumulative. extruder_plan.computeNaiveTimeEstimates(starting_position); @@ -1813,7 +1812,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) } // apply minimum layer time behaviour - ExtruderPlan& last_extruder_plan = extruder_plans[last_extruder_idx]; + ExtruderPlan& last_extruder_plan = extruder_plans_[last_extruder_idx]; last_extruder_plan.forceMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); last_extruder_plan.processFanSpeedForMinimalLayerTime(starting_position_last_extruder, maximum_cool_min_layer_time, other_extr_plan_time); } @@ -1822,11 +1821,11 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) void LayerPlan::writeGCode(GCodeExport& gcode) { Communication* communication = Application::getInstance().communication_; - communication->setLayerForSend(layer_nr); + communication->setLayerForSend(layer_nr_); communication->sendCurrentPosition(gcode.getPositionXY()); - gcode.setLayerNr(layer_nr); + gcode.setLayerNr(layer_nr_); - gcode.writeLayerComment(layer_nr); + gcode.writeLayerComment(layer_nr_); // flow-rate compensation const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; @@ -1835,13 +1834,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) mesh_group_settings.get("flow_rate_extrusion_offset_factor")); // Offset is in mm. static LayerIndex layer_1{ 1 - static_cast(Raft::getTotalExtraLayers()) }; - if (layer_nr == layer_1 && mesh_group_settings.get("machine_heated_bed")) + if (layer_nr_ == layer_1 && mesh_group_settings.get("machine_heated_bed")) { constexpr bool wait = false; gcode.writeBedTemperatureCommand(mesh_group_settings.get("material_bed_temperature"), wait); } - gcode.setZ(z); + gcode.setZ(z_); std::optional last_extrusion_config = std::nullopt; // used to check whether we need to insert a TYPE comment in the gcode. @@ -1852,12 +1851,12 @@ void LayerPlan::writeGCode(GCodeExport& gcode) const bool jerk_travel_enabled = mesh_group_settings.get("jerk_travel_enabled"); std::shared_ptr current_mesh; - for (size_t extruder_plan_idx = 0; extruder_plan_idx < extruder_plans.size(); extruder_plan_idx++) + for (size_t extruder_plan_idx = 0; extruder_plan_idx < extruder_plans_.size(); extruder_plan_idx++) { - ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; + ExtruderPlan& extruder_plan = extruder_plans_[extruder_plan_idx]; const RetractionAndWipeConfig* retraction_config - = current_mesh ? ¤t_mesh->retraction_wipe_config : &storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_]; + = current_mesh ? ¤t_mesh->retraction_wipe_config : &storage_.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_]; coord_t z_hop_height = retraction_config->retraction_config.zHop; if (extruder_nr != extruder_plan.extruder_nr_) @@ -1867,7 +1866,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.ResetLastEValueAfterWipe(prev_extruder); - const RetractionAndWipeConfig& prev_retraction_config = storage.retraction_wipe_config_per_extruder[prev_extruder]; + const RetractionAndWipeConfig& prev_retraction_config = storage_.retraction_wipe_config_per_extruder[prev_extruder]; if (prev_retraction_config.retraction_hop_after_extruder_switch) { z_hop_height = prev_retraction_config.extruder_switch_retraction_config.zHop; @@ -1887,8 +1886,8 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { // turn off previous extruder constexpr bool wait = false; Temperature prev_extruder_temp = *extruder_plan.prev_extruder_standby_temp_; - const LayerIndex prev_layer_nr = (extruder_plan_idx == 0) ? layer_nr - 1 : layer_nr; - if (prev_layer_nr == storage.max_print_height_per_extruder[prev_extruder]) + const LayerIndex prev_layer_nr = (extruder_plan_idx == 0) ? layer_nr_ - 1 : layer_nr_; + if (prev_layer_nr == storage_.max_print_height_per_extruder[prev_extruder]) { prev_extruder_temp = 0; // TODO ? should there be a setting for extruder_off_temperature ? } @@ -1905,13 +1904,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } else if (extruder_plan_idx == 0) { - const WipeScriptConfig& wipe_config = storage.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_].wipe_config; + const WipeScriptConfig& wipe_config = storage_.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_].wipe_config; if (wipe_config.clean_between_layers && gcode.getExtrudedVolumeAfterLastWipe(extruder_nr) > wipe_config.max_extrusion_mm3) { gcode.insertWipeScript(wipe_config); gcode.ResetLastEValueAfterWipe(extruder_nr); } - else if (layer_nr != 0 && Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_.get("retract_at_layer_change")) + else if (layer_nr_ != 0 && Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_.get("retract_at_layer_change")) { // only do the retract if the paths are not spiralized if (! mesh_group_settings.get("magic_spiralize")) @@ -1950,12 +1949,12 @@ void LayerPlan::writeGCode(GCodeExport& gcode) gcode.writeRetraction(retraction_config->retraction_config); } - if (z > 0) + if (z_ > 0) { - gcode.setZ(z + path.z_offset); + gcode.setZ(z_ + path.z_offset); } - if (! path.retract && path.config.isTravelPath() && path.points.size() == 1 && path.points[0] == gcode.getPositionXY() && (z + path.z_offset) == gcode.getPositionZ()) + if (! path.retract && path.config.isTravelPath() && path.points.size() == 1 && path.points[0] == gcode.getPositionXY() && (z_ + path.z_offset) == gcode.getPositionZ()) { // ignore travel moves to the current location to avoid needless change of acceleration/jerk continue; @@ -1984,9 +1983,9 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // Use the acceleration of the first non-travel move *after* the travel. if (next_extrusion_idx >= paths.size()) // Only travel moves for the remainder of the layer. { - if (static_cast(next_layer_acc_jerk)) + if (static_cast(next_layer_acc_jerk_)) { - gcode.writeTravelAcceleration(next_layer_acc_jerk->first); + gcode.writeTravelAcceleration(next_layer_acc_jerk_->first); } // If the next layer has no extruded move, just keep the old acceleration. Should be very rare to have an empty layer. } else @@ -2011,9 +2010,9 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // Use the jerk of the first non-travel move *after* the travel. if (next_extrusion_idx >= paths.size()) // Only travel moves for the remainder of the layer. { - if (static_cast(next_layer_acc_jerk)) + if (static_cast(next_layer_acc_jerk_)) { - gcode.writeJerk(next_layer_acc_jerk->second); + gcode.writeJerk(next_layer_acc_jerk_->second); } // If the next layer has no extruded move, just keep the old jerk. Should be very rare to have an empty layer. } else @@ -2069,21 +2068,21 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } if (path.config.isTravelPath()) { // early comp for travel paths, which are handled more simply - if (! path.perform_z_hop && final_travel_z != z && extruder_plan_idx == (extruder_plans.size() - 1) && path_idx == (paths.size() - 1)) + if (! path.perform_z_hop && final_travel_z_ != z_ && extruder_plan_idx == (extruder_plans_.size() - 1) && path_idx == (paths.size() - 1)) { // Before the final travel, move up to the next layer height, on the current spot, with a sensible speed. Point3 current_position = gcode.getPosition(); - current_position.z_ = final_travel_z; + current_position.z_ = final_travel_z_; gcode.writeTravel(current_position, extruder.settings_.get("speed_z_hop")); // Prevent the final travel(s) from resetting to the 'previous' layer height. - gcode.setZ(final_travel_z); + gcode.setZ(final_travel_z_); } for (size_t point_idx = 0; point_idx + 1 < path.points.size(); point_idx++) { gcode.writeTravel(path.points[point_idx], speed); } - if (path.unretract_before_last_travel_move && final_travel_z == z) + if (path.unretract_before_last_travel_move && final_travel_z_ == z_) { // We need to unretract before the last travel move of the path if the next path is an outer wall. gcode.writeUnretractionAndPrime(); @@ -2102,7 +2101,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) bool coasting = extruder.settings_.get("coasting_enable"); if (coasting) { - coasting = writePathWithCoasting(gcode, extruder_plan_idx, path_idx, layer_thickness, insertTempOnTime); + coasting = writePathWithCoasting(gcode, extruder_plan_idx, path_idx, layer_thickness_, insertTempOnTime); } if (! coasting) // not same as 'else', cause we might have changed [coasting] in the line above... { // normal path to gcode algorithm @@ -2140,18 +2139,23 @@ void LayerPlan::writeGCode(GCodeExport& gcode) p0 = gcode.getPositionXY(); for (; path_idx < paths.size() && paths[path_idx].spiralize; path_idx++) { // handle all consecutive spiralized paths > CHANGES path_idx! - GCodePath& path = paths[path_idx]; + GCodePath& spiral_path = paths[path_idx]; - for (unsigned int point_idx = 0; point_idx < path.points.size(); point_idx++) + for (unsigned int point_idx = 0; point_idx < spiral_path.points.size(); point_idx++) { - const Point p1 = path.points[point_idx]; + const Point p1 = spiral_path.points[point_idx]; length += vSizeMM(p0 - p1); p0 = p1; - gcode.setZ(std::round(z + layer_thickness * length / totalLength)); - - const double extrude_speed = speed * path.speed_back_pressure_factor; - communication->sendLineTo(path.config.type, path.points[point_idx], path.getLineWidthForLayerView(), path.config.getLayerThickness(), extrude_speed); - gcode.writeExtrusion(path.points[point_idx], extrude_speed, path.getExtrusionMM3perMM(), path.config.type, update_extrusion_offset); + gcode.setZ(std::round(z_ + layer_thickness_ * length / totalLength)); + + const double extrude_speed = speed * spiral_path.speed_back_pressure_factor; + communication->sendLineTo( + spiral_path.config.type, + spiral_path.points[point_idx], + spiral_path.getLineWidthForLayerView(), + spiral_path.config.getLayerThickness(), + extrude_speed); + gcode.writeExtrusion(spiral_path.points[point_idx], extrude_speed, spiral_path.getExtrusionMM3perMM(), spiral_path.config.type, update_extrusion_offset); } // for layer display only - the loop finished at the seam vertex but as we started from // the location of the previous layer's seam vertex the loop may have a gap if this layer's @@ -2162,7 +2166,8 @@ void LayerPlan::writeGCode(GCodeExport& gcode) // vertex would not be shifted (as it's the last vertex in the sequence). The smoother the model, // the less the vertices are shifted and the less obvious is the ridge. If the layer display // really displayed a spiral rather than slices of a spiral, this would not be required. - communication->sendLineTo(path.config.type, path.points[0], path.getLineWidthForLayerView(), path.config.getLayerThickness(), speed); + communication + ->sendLineTo(spiral_path.config.type, spiral_path.points[0], spiral_path.getLineWidthForLayerView(), spiral_path.config.getLayerThickness(), speed); } path_idx--; // the last path_idx didnt spiralize, so it's not part of the current spiralize path } @@ -2172,9 +2177,9 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { gcode.writeComment("Small layer, adding delay"); const RetractionAndWipeConfig& retraction_config - = current_mesh ? current_mesh->retraction_wipe_config : storage.retraction_wipe_config_per_extruder[gcode.getExtruderNr()]; + = current_mesh ? current_mesh->retraction_wipe_config : storage_.retraction_wipe_config_per_extruder[gcode.getExtruderNr()]; gcode.writeRetraction(retraction_config.retraction_config); - if (extruder_plan_idx == extruder_plans.size() - 1 || ! extruder.settings_.get("machine_extruder_end_pos_abs")) + if (extruder_plan_idx == extruder_plans_.size() - 1 || ! extruder.settings_.get("machine_extruder_end_pos_abs")) { // only do the z-hop if it's the last extruder plan; otherwise it's already at the switching bay area // or do it anyway when we switch extruder in-place gcode.writeZhopStart(MM2INT(3.0)); @@ -2187,7 +2192,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) "extruder_plan_2", extruder_plan.paths_, SectionType::NA, - layer_nr, + layer_nr_, scripta::CellVDI{ "flow", &GCodePath::flow }, scripta::CellVDI{ "width_factor", &GCodePath::width_factor }, scripta::CellVDI{ "spiralize", &GCodePath::spiralize }, @@ -2202,13 +2207,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) scripta::CellVDI{ "extrusion_mm3_per_mm", &GCodePath::getExtrusionMM3perMM }); } // extruder plans /\ . - communication->sendLayerComplete(layer_nr, z, layer_thickness); + communication->sendLayerComplete(layer_nr_, z_, layer_thickness_); gcode.updateTotalPrintTime(); } void LayerPlan::overrideFanSpeeds(double speed) { - for (ExtruderPlan& extruder_plan : extruder_plans) + for (ExtruderPlan& extruder_plan : extruder_plans_) { extruder_plan.setFanSpeed(speed); } @@ -2217,7 +2222,7 @@ void LayerPlan::overrideFanSpeeds(double speed) bool LayerPlan::makeRetractSwitchRetract(unsigned int extruder_plan_idx, unsigned int path_idx) { - std::vector& paths = extruder_plans[extruder_plan_idx].paths_; + std::vector& paths = extruder_plans_[extruder_plan_idx].paths_; for (unsigned int path_idx2 = path_idx + 1; path_idx2 < paths.size(); path_idx2++) { if (paths[path_idx2].getExtrusionMM3perMM() > 0) @@ -2226,12 +2231,12 @@ bool LayerPlan::makeRetractSwitchRetract(unsigned int extruder_plan_idx, unsigne } } - if (extruder_plans.size() <= extruder_plan_idx + 1) + if (extruder_plans_.size() <= extruder_plan_idx + 1) { return false; // TODO: check first extruder of the next layer! (generally only on the last layer of the second extruder) } - if (extruder_plans[extruder_plan_idx + 1].extruder_nr_ != extruder_plans[extruder_plan_idx].extruder_nr_) + if (extruder_plans_[extruder_plan_idx + 1].extruder_nr_ != extruder_plans_[extruder_plan_idx].extruder_nr_) { return true; } @@ -2248,7 +2253,7 @@ bool LayerPlan::writePathWithCoasting( const coord_t layer_thickness, const std::function insertTempOnTime) { - ExtruderPlan& extruder_plan = extruder_plans[extruder_plan_idx]; + ExtruderPlan& extruder_plan = extruder_plans_[extruder_plan_idx]; const ExtruderTrain& extruder = Application::getInstance().current_slice_->scene.extruders[extruder_plan.extruder_nr_]; const double coasting_volume = extruder.settings_.get("coasting_volume"); if (coasting_volume <= 0) @@ -2373,13 +2378,13 @@ bool LayerPlan::writePathWithCoasting( void LayerPlan::applyModifyPlugin() { - for (auto& extruder_plan : extruder_plans) + for (auto& extruder_plan : extruder_plans_) { scripta::log( "extruder_plan_0", extruder_plan.paths_, SectionType::NA, - layer_nr, + layer_nr_, scripta::CellVDI{ "flow", &GCodePath::flow }, scripta::CellVDI{ "width_factor", &GCodePath::width_factor }, scripta::CellVDI{ "spiralize", &GCodePath::spiralize }, @@ -2393,13 +2398,13 @@ void LayerPlan::applyModifyPlugin() scripta::CellVDI{ "is_travel_path", &GCodePath::isTravelPath }, scripta::CellVDI{ "extrusion_mm3_per_mm", &GCodePath::getExtrusionMM3perMM }); - extruder_plan.paths_ = slots::instance().modify(extruder_plan.paths_, extruder_plan.extruder_nr_, layer_nr); + extruder_plan.paths_ = slots::instance().modify(extruder_plan.paths_, extruder_plan.extruder_nr_, layer_nr_); scripta::log( "extruder_plan_1", extruder_plan.paths_, SectionType::NA, - layer_nr, + layer_nr_, scripta::CellVDI{ "flow", &GCodePath::flow }, scripta::CellVDI{ "width_factor", &GCodePath::width_factor }, scripta::CellVDI{ "spiralize", &GCodePath::spiralize }, @@ -2417,7 +2422,7 @@ void LayerPlan::applyModifyPlugin() void LayerPlan::applyBackPressureCompensation() { - for (auto& extruder_plan : extruder_plans) + for (auto& extruder_plan : extruder_plans_) { const Ratio back_pressure_compensation = Application::getInstance().current_slice_->scene.extruders[extruder_plan.extruder_nr_].settings_.get("speed_equalize_flow_width_factor"); @@ -2430,42 +2435,42 @@ void LayerPlan::applyBackPressureCompensation() LayerIndex LayerPlan::getLayerNr() const { - return layer_nr; + return layer_nr_; } Point LayerPlan::getLastPlannedPositionOrStartingPosition() const { - return last_planned_position.value_or(layer_start_pos_per_extruder[getExtruder()]); + return last_planned_position_.value_or(layer_start_pos_per_extruder_[getExtruder()]); } bool LayerPlan::getIsInsideMesh() const { - return was_inside; + return was_inside_; } bool LayerPlan::getSkirtBrimIsPlanned(unsigned int extruder_nr) const { - return skirt_brim_is_processed[extruder_nr]; + return skirt_brim_is_processed_[extruder_nr]; } void LayerPlan::setSkirtBrimIsPlanned(unsigned int extruder_nr) { - skirt_brim_is_processed[extruder_nr] = true; + skirt_brim_is_processed_[extruder_nr] = true; } size_t LayerPlan::getExtruder() const { - return extruder_plans.back().extruder_nr_; + return extruder_plans_.back().extruder_nr_; } void LayerPlan::setBridgeWallMask(const Polygons& polys) { - bridge_wall_mask = polys; + bridge_wall_mask_ = polys; } void LayerPlan::setOverhangMask(const Polygons& polys) { - overhang_mask = polys; + overhang_mask_ = polys; } } // namespace cura diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index 699f6ee54d..c2c85d9b8c 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -63,7 +63,8 @@ LayerPlan* LayerPlanBuffer::processBuffer() void LayerPlanBuffer::flush() { - Application::getInstance().communication_->flushGCode(); // If there was still g-code in a layer, flush that as a separate layer. Don't want to group them together accidentally. + Application::getInstance() + .communication_->flushGCode(); // If there was still g-code in a layer, flush that as a separate layer. Don't want to group them together accidentally. if (buffer_.size() > 0) { insertTempCommands(); // insert preheat commands of the very last layer @@ -83,26 +84,26 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer if (! new_layer_destination_state) { - spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", newest_layer->layer_nr); + spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", newest_layer->layer_nr_); return; } Point first_location_new_layer = new_layer_destination_state->first; - assert(newest_layer->extruder_plans.front().paths_[0].points.size() == 1); - assert(newest_layer->extruder_plans.front().paths_[0].points[0] == first_location_new_layer); + assert(newest_layer->extruder_plans_.front().paths_[0].points.size() == 1); + assert(newest_layer->extruder_plans_.front().paths_[0].points[0] == first_location_new_layer); // if the last planned position in the previous layer isn't the same as the first location of the new layer, travel to the new location - if (! prev_layer->last_planned_position || *prev_layer->last_planned_position != first_location_new_layer) + if (! prev_layer->last_planned_position_ || *prev_layer->last_planned_position_ != first_location_new_layer) { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[prev_layer->extruder_plans.back().extruder_nr_].settings_; + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[prev_layer->extruder_plans_.back().extruder_nr_].settings_; prev_layer->setIsInside(new_layer_destination_state->second); const bool force_retract = extruder_settings.get("retract_at_layer_change") || (mesh_group_settings.get("travel_retract_before_outer_wall") && (mesh_group_settings.get("inset_direction") == InsetDirection::OUTSIDE_IN || mesh_group_settings.get("wall_line_count") == 1)); // Moving towards an outer wall. - prev_layer->final_travel_z = newest_layer->z; + prev_layer->final_travel_z_ = newest_layer->z_; GCodePath& path = prev_layer->addTravel(first_location_new_layer, force_retract); if (force_retract && ! path.retract) { @@ -114,7 +115,7 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer } // If not using travel-specific jerk and acceleration, the layer plan needs to know the jerk/acc of the first extrusion move of the next layer. - prev_layer->next_layer_acc_jerk = newest_layer->first_extrusion_acc_jerk; + prev_layer->next_layer_acc_jerk_ = newest_layer->first_extrusion_acc_jerk_; } void LayerPlanBuffer::processFanSpeedLayerTime() @@ -492,7 +493,7 @@ void LayerPlanBuffer::insertFinalPrintTempCommand(std::vector& ex void LayerPlanBuffer::insertTempCommands() { - if (buffer_.back()->extruder_plans.size() == 0 || (buffer_.back()->extruder_plans.size() == 1 && buffer_.back()->extruder_plans[0].paths_.size() == 0)) + if (buffer_.back()->extruder_plans_.size() == 0 || (buffer_.back()->extruder_plans_.size() == 1 && buffer_.back()->extruder_plans_[0].paths_.size() == 0)) { // disregard empty layer buffer_.pop_back(); return; @@ -502,7 +503,7 @@ void LayerPlanBuffer::insertTempCommands() extruder_plans.reserve(buffer_.size() * 2); for (LayerPlan* layer_plan : buffer_) { - for (ExtruderPlan& extr_plan : layer_plan->extruder_plans) + for (ExtruderPlan& extr_plan : layer_plan->extruder_plans_) { extruder_plans.push_back(&extr_plan); } @@ -511,10 +512,10 @@ void LayerPlanBuffer::insertTempCommands() // insert commands for all extruder plans on this layer Scene& scene = Application::getInstance().current_slice_->scene; LayerPlan& layer_plan = *buffer_.back(); - for (size_t extruder_plan_idx = 0; extruder_plan_idx < layer_plan.extruder_plans.size(); extruder_plan_idx++) + for (size_t extruder_plan_idx = 0; extruder_plan_idx < layer_plan.extruder_plans_.size(); extruder_plan_idx++) { - const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans.size() + extruder_plan_idx; - ExtruderPlan& extruder_plan = layer_plan.extruder_plans[extruder_plan_idx]; + const size_t overall_extruder_plan_idx = extruder_plans.size() - layer_plan.extruder_plans_.size() + extruder_plan_idx; + ExtruderPlan& extruder_plan = layer_plan.extruder_plans_[extruder_plan_idx]; size_t extruder = extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Duration time = extruder_plan.estimates_.getTotalUnretractedTime(); @@ -557,7 +558,6 @@ void LayerPlanBuffer::insertTempCommands() if (buffer_.size() == 1 && extruder_plan_idx == 0) { // the very first extruder plan of the current meshgroup - size_t extruder = extruder_plan.extruder_nr_; for (size_t extruder_idx = 0; extruder_idx < scene.extruders.size(); extruder_idx++) { // set temperature of the first nozzle, turn other nozzles down const Settings& other_extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_idx].settings_; diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index bfcaed4bdb..761103ee1c 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -248,7 +248,7 @@ void PrimeTower::addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t ext if (! adhesion_raft || absolute_layer_number > 0) { // Actual prime pattern - const GCodePathConfig& config = gcode_layer.configs_storage.prime_tower_config_per_extruder[extruder_nr]; + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; const Polygons& pattern = prime_moves_[extruder_nr]; gcode_layer.addPolygonsByOptimizer(pattern, config); } @@ -257,7 +257,7 @@ void PrimeTower::addToGcode_denseInfill(LayerPlan& gcode_layer, const size_t ext if (absolute_layer_number < pattern_extra_brim.size()) { // Extra rings for stronger base - const GCodePathConfig& config = gcode_layer.configs_storage.prime_tower_config_per_extruder[extruder_nr]; + const GCodePathConfig& config = gcode_layer.configs_storage_.prime_tower_config_per_extruder[extruder_nr]; const Polygons& pattern = pattern_extra_brim[absolute_layer_number]; gcode_layer.addPolygonsByOptimizer(pattern, config); } diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index ba3915748d..b27abb3a54 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -98,7 +98,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage infill_overlap, infill_multiplier, direction, - layer.z - 10, + layer.z_ - 10, shift, max_resolution, max_deviation, @@ -116,7 +116,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage return false; // Nothing to do. } - layer.mode_skip_agressive_merge = true; + layer.mode_skip_agressive_merge_ = true; bool added = false; if (! ironing_polygons.empty()) @@ -187,7 +187,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage added = true; } - layer.mode_skip_agressive_merge = false; + layer.mode_skip_agressive_merge_ = false; return added; } diff --git a/src/TreeModelVolumes.cpp b/src/TreeModelVolumes.cpp index 750020cc1d..948ef86ec0 100644 --- a/src/TreeModelVolumes.cpp +++ b/src/TreeModelVolumes.cpp @@ -32,8 +32,8 @@ TreeModelVolumes::TreeModelVolumes( max_move_slow_{ std::max(max_move_slow - 2, coord_t(0)) } , // -2 to avoid rounding errors min_offset_per_step_{ min_offset_per_step } - , progress_multiplier{ progress_multiplier } - , progress_offset{ progress_offset } + , progress_multiplier_{ progress_multiplier } + , progress_offset_{ progress_offset } , machine_border_{ calculateMachineBorderCollision(storage.getMachineBorder()) } , machine_area_{ storage.getMachineBorder() } { @@ -48,7 +48,7 @@ TreeModelVolumes::TreeModelVolumes( coord_t min_maximum_deviation = std::numeric_limits::max(); coord_t min_maximum_area_deviation = std::numeric_limits::max(); - support_rests_on_model = false; + support_rests_on_model_ = false; for (auto [mesh_idx, mesh_ptr] : storage.meshes | ranges::views::enumerate) { auto& mesh = *mesh_ptr; @@ -70,33 +70,33 @@ TreeModelVolumes::TreeModelVolumes( for (const auto data_pair : layer_outlines_) { - support_rests_on_model |= data_pair.first.get("support_type") == ESupportType::EVERYWHERE; + support_rests_on_model_ |= data_pair.first.get("support_type") == ESupportType::EVERYWHERE; min_maximum_deviation = std::min(min_maximum_deviation, data_pair.first.get("meshfix_maximum_deviation")); min_maximum_resolution = std::min(min_maximum_resolution, data_pair.first.get("meshfix_maximum_resolution")); min_maximum_area_deviation = std::min(min_maximum_area_deviation, data_pair.first.get("meshfix_maximum_extrusion_area_deviation")); } // Figure out the rest of the setting(-like variable)s relevant to the class a whole. - current_outline_idx = mesh_to_layeroutline_idx[current_mesh_idx]; - const TreeSupportSettings config(layer_outlines_[current_outline_idx].first); + current_outline_idx_ = mesh_to_layeroutline_idx[current_mesh_idx]; + const TreeSupportSettings config(layer_outlines_[current_outline_idx_].first); if (config.support_overrides == SupportDistPriority::Z_OVERRIDES_XY) { - current_min_xy_dist = config.xy_min_distance; + current_min_xy_dist_ = config.xy_min_distance; if (TreeSupportSettings::has_to_rely_on_min_xy_dist_only) { - current_min_xy_dist = std::max(current_min_xy_dist, coord_t(FUDGE_LENGTH * 2)); + current_min_xy_dist_ = std::max(current_min_xy_dist_, coord_t(FUDGE_LENGTH * 2)); } - current_min_xy_dist_delta = std::max(config.xy_distance - current_min_xy_dist, coord_t(0)); + current_min_xy_dist_delta_ = std::max(config.xy_distance - current_min_xy_dist_, coord_t(0)); } else { - current_min_xy_dist = config.xy_distance; - current_min_xy_dist_delta = 0; + current_min_xy_dist_ = config.xy_distance; + current_min_xy_dist_delta_ = 0; } - increase_until_radius = config.increase_radius_until_radius; + increase_until_radius_ = config.increase_radius_until_radius; // Retrieve all layer outlines. Done in this way because normally we don't do this per mesh, but for the whole buildplate. // (So we can handle some settings on a per-mesh basis.) @@ -155,35 +155,35 @@ TreeModelVolumes::TreeModelVolumes( anti_overhang_[layer_idx] = anti_overhang_[layer_idx].unionPolygons(); }); - for (max_layer_idx_without_blocker = 0; max_layer_idx_without_blocker + 1 < anti_overhang_.size(); max_layer_idx_without_blocker++) + for (max_layer_idx_without_blocker_ = 0; max_layer_idx_without_blocker_ + 1 < anti_overhang_.size(); max_layer_idx_without_blocker_++) { - if (! anti_overhang_[max_layer_idx_without_blocker + 1].empty()) + if (! anti_overhang_[max_layer_idx_without_blocker_ + 1].empty()) { break; } } // Cache some handy settings in the object itself. - radius_0 = config.getRadius(0); - support_rest_preference = config.support_rest_preference; - simplifier = Simplify(min_maximum_resolution, min_maximum_deviation, min_maximum_area_deviation); + radius_0_ = config.getRadius(0); + support_rest_preference_ = config.support_rest_preference; + simplifier_ = Simplify(min_maximum_resolution, min_maximum_deviation, min_maximum_area_deviation); } void TreeModelVolumes::precalculate(coord_t max_layer) { const auto t_start = std::chrono::high_resolution_clock::now(); - precalculated = true; + precalculated_ = true; // Get the config corresponding to one mesh that is in the current group. Which one has to be irrelevant. // Not the prettiest way to do this, but it ensures some calculations that may be a bit more complex like initial layer diameter are only done in once. - const TreeSupportSettings config(layer_outlines_[current_outline_idx].first); + const TreeSupportSettings config(layer_outlines_[current_outline_idx_].first); // Calculate which radius each layer in the tip may have. std::unordered_set possible_tip_radiis; for (const auto dtt : ranges::views::iota(0UL, config.tip_layers + 1)) { possible_tip_radiis.emplace(ceilRadius(config.getRadius(dtt))); - possible_tip_radiis.emplace(ceilRadius(config.getRadius(dtt) + current_min_xy_dist_delta)); + possible_tip_radiis.emplace(ceilRadius(config.getRadius(dtt) + current_min_xy_dist_delta_)); } // It theoretically may happen in the tip, that the radius can change so much in-between 2 layers, that a ceil step is skipped (as in there is a radius r so that // ceilRadius(radius(dtt)) relevant_collision_radiis; @@ -256,7 +256,7 @@ void TreeModelVolumes::precalculate(coord_t max_layer) for (RadiusLayerPair key : relevant_avoidance_radiis) { spdlog::debug("Calculating avoidance of radius {} up to layer {}", key.first, key.second); - if (key.first < increase_until_radius + current_min_xy_dist_delta) + if (key.first < increase_until_radius_ + current_min_xy_dist_delta_) { relevant_hole_collision_radiis.emplace_back(key); } @@ -269,7 +269,7 @@ void TreeModelVolumes::precalculate(coord_t max_layer) auto t_acc = std::chrono::high_resolution_clock::now(); - if (max_layer_idx_without_blocker < max_layer && support_rests_on_model) + if (max_layer_idx_without_blocker_ < max_layer && support_rests_on_model_) { calculateAccumulatedPlaceable0(max_layer); t_acc = std::chrono::high_resolution_clock::now(); @@ -280,23 +280,23 @@ void TreeModelVolumes::precalculate(coord_t max_layer) std::future placeable_waiter; std::future avoidance_waiter; - if (support_rests_on_model) + if (support_rests_on_model_) { calculatePlaceables(relevant_avoidance_radiis_to_model); } - if (support_rest_preference == RestPreference::BUILDPLATE) + if (support_rest_preference_ == RestPreference::BUILDPLATE) { calculateAvoidance(relevant_avoidance_radiis); } calculateWallRestrictions(relevant_avoidance_radiis); - if (support_rests_on_model) + if (support_rests_on_model_) { // FIXME: When nowait (parellel-for) is implemented, ensure here the following is calculated: calculatePlaceables. calculateAvoidanceToModel(relevant_avoidance_radiis_to_model); // FIXME: When nowait (parellel-for) is implemented, ensure here the following is calculated: calculateAvoidanceToModel. } - if (support_rest_preference == RestPreference::BUILDPLATE) + if (support_rest_preference_ == RestPreference::BUILDPLATE) { // FIXME: When nowait (parellel-for) is implemented, ensure here the following is calculated: calculateAvoidance. } @@ -305,14 +305,14 @@ void TreeModelVolumes::precalculate(coord_t max_layer) const auto t_avo = std::chrono::high_resolution_clock::now(); auto t_colAvo = std::chrono::high_resolution_clock::now(); - if (max_layer_idx_without_blocker < max_layer && support_rests_on_model) + if (max_layer_idx_without_blocker_ < max_layer && support_rests_on_model_) { // FIXME: When nowait (parellel-for) is implemented, ensure here the following is calculated: calculateAccumulatedPlaceable0. calculateCollisionAvoidance(relevant_avoidance_radiis); t_colAvo = std::chrono::high_resolution_clock::now(); } - precalculationFinished = true; + precalculation_finished_ = true; const auto dur_col = 0.001 * std::chrono::duration_cast(t_coll - t_start).count(); const auto dur_acc = 0.001 * std::chrono::duration_cast(t_acc - t_coll).count(); const auto dur_avo = 0.001 * std::chrono::duration_cast(t_avo - t_acc).count(); @@ -334,7 +334,7 @@ const Polygons& TreeModelVolumes::getCollision(coord_t radius, LayerIndex layer_ std::optional> result; if (! min_xy_dist) { - radius += current_min_xy_dist_delta; + radius += current_min_xy_dist_delta_; } // special case as if a radius 0 is requested it could be to ensure correct xy distance. As such it is beneficial if the collision is as close to the configured values as @@ -353,7 +353,7 @@ const Polygons& TreeModelVolumes::getCollision(coord_t radius, LayerIndex layer_ { return result.value().get(); } - if (precalculated) + if (precalculated_) { spdlog::warn("Had to calculate collision at radius {} and layer {}, but precalculate was called. Performance may suffer!", key.first, key.second); } @@ -367,9 +367,9 @@ const Polygons& TreeModelVolumes::getCollisionHolefree(coord_t radius, LayerInde std::optional> result; if (! min_xy_dist) { - radius += current_min_xy_dist_delta; + radius += current_min_xy_dist_delta_; } - if (radius >= increase_until_radius + current_min_xy_dist_delta) + if (radius >= increase_until_radius_ + current_min_xy_dist_delta_) { return getCollision(orig_radius, layer_idx, min_xy_dist); } @@ -383,7 +383,7 @@ const Polygons& TreeModelVolumes::getCollisionHolefree(coord_t radius, LayerInde { return result.value().get(); } - if (precalculated) + if (precalculated_) { spdlog::warn("Had to calculate collision holefree at radius {} and layer {}, but precalculate was called. Performance may suffer!", key.first, key.second); } @@ -415,10 +415,10 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ std::optional> result; - radius += (min_xy_dist ? 0 : current_min_xy_dist_delta); + radius += (min_xy_dist ? 0 : current_min_xy_dist_delta_); radius = ceilRadius(radius); - if (radius >= increase_until_radius + current_min_xy_dist_delta && type == AvoidanceType::FAST_SAFE) // no holes anymore by definition at this request + if (radius >= increase_until_radius_ + current_min_xy_dist_delta_ && type == AvoidanceType::FAST_SAFE) // no holes anymore by definition at this request { type = AvoidanceType::FAST; } @@ -442,7 +442,7 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ mutex_ptr = to_model ? critical_avoidance_cache_holefree_to_model_.get() : critical_avoidance_cache_holefree_.get(); break; case AvoidanceType::COLLISION: - if (layer_idx <= max_layer_idx_without_blocker) + if (layer_idx <= max_layer_idx_without_blocker_) { return getCollision(radius, layer_idx, true); } @@ -465,7 +465,7 @@ const Polygons& TreeModelVolumes::getAvoidance(coord_t radius, LayerIndex layer_ { return result.value().get(); } - if (precalculated) + if (precalculated_) { spdlog::warn( "Had to calculate Avoidance (to model-bool: {}) at radius {} and layer {} and type {}, but precalculate was called. Performance may suffer!", @@ -504,7 +504,7 @@ const Polygons& TreeModelVolumes::getPlaceableAreas(coord_t radius, LayerIndex l { return result.value().get(); } - if (precalculated) + if (precalculated_) { spdlog::warn("Had to calculate Placeable Areas at radius {} and layer {}, but precalculate was called. Performance may suffer!", radius, layer_idx); } @@ -528,7 +528,7 @@ const Polygons& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex } const coord_t orig_radius = radius; - min_xy_dist = min_xy_dist && current_min_xy_dist_delta > 0; + min_xy_dist = min_xy_dist && current_min_xy_dist_delta_ > 0; std::optional> result; @@ -544,7 +544,7 @@ const Polygons& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex { return result.value().get(); } - if (precalculated) + if (precalculated_) { spdlog::warn("Had to calculate Wall restrictions at radius {} and layer {}, but precalculate was called. Performance may suffer!", key.first, key.second); } @@ -555,12 +555,12 @@ const Polygons& TreeModelVolumes::getWallRestriction(coord_t radius, LayerIndex coord_t TreeModelVolumes::ceilRadius(coord_t radius, bool min_xy_dist) const { - return ceilRadius(radius + (min_xy_dist ? 0 : current_min_xy_dist_delta)); + return ceilRadius(radius + (min_xy_dist ? 0 : current_min_xy_dist_delta_)); } coord_t TreeModelVolumes::getRadiusNextCeil(coord_t radius, bool min_xy_dist) const { - return ceilRadius(radius, min_xy_dist) - (min_xy_dist ? 0 : current_min_xy_dist_delta); + return ceilRadius(radius, min_xy_dist) - (min_xy_dist ? 0 : current_min_xy_dist_delta_); } bool TreeModelVolumes::checkSettingsEquality(const Settings& me, const Settings& other) const @@ -634,7 +634,7 @@ void TreeModelVolumes::calculateCollision(const std::deque& key const coord_t z_distance_top_layers = round_up_divide(layer_outlines_[outline_idx].first.get("support_top_distance"), layer_height); const LayerIndex max_anti_overhang_layer = anti_overhang_.size() - 1; const LayerIndex max_required_layer = keys[i].second + std::max(coord_t(1), z_distance_top_layers); - const coord_t xy_distance = outline_idx == current_outline_idx ? current_min_xy_dist : layer_outlines_[outline_idx].first.get("support_xy_distance"); + const coord_t xy_distance = outline_idx == current_outline_idx_ ? current_min_xy_dist_ : layer_outlines_[outline_idx].first.get("support_xy_distance"); // Technically this causes collision for the normal xy_distance to be larger by current_min_xy_dist_delta for all not currently processing meshes as this delta will // be added at request time. Avoiding this would require saving each collision for each outline_idx separately, // and later for each avoidance... But avoidance calculation has to be for the whole scene and can NOT be done for each outline_idx separately and combined later. @@ -673,7 +673,7 @@ void TreeModelVolumes::calculateCollision(const std::deque& key } // Placeable areas also have to be calculated when a collision has to be calculated if called outside of precalculate to prevent an infinite loop when they are // invalidly requested... - if ((support_rests_on_this_model || precalculationFinished || ! precalculated) && radius == 0 && layer_idx < coord_t(1 + keys[i].second)) + if ((support_rests_on_this_model || precalculation_finished_ || ! precalculated_) && radius == 0 && layer_idx < coord_t(1 + keys[i].second)) { data[key] = data[key].unionPolygons(); Polygons above = data[RadiusLayerPair(radius, layer_idx + 1)]; @@ -731,26 +731,26 @@ void TreeModelVolumes::calculateCollision(const std::deque& key for (auto pair : data) { - pair.second = simplifier.polygon(pair.second); + pair.second = simplifier_.polygon(pair.second); data_outer[pair.first] = data_outer[pair.first].unionPolygons(pair.second); } if (radius == 0) { for (auto pair : data_placeable) { - pair.second = simplifier.polygon(pair.second); + pair.second = simplifier_.polygon(pair.second); data_placeable_outer[pair.first] = data_placeable_outer[pair.first].unionPolygons(pair.second); } } } { - std::lock_guard critical_section(*critical_progress); + std::lock_guard critical_section(*critical_progress_); - if (precalculated && precalculation_progress < TREE_PROGRESS_PRECALC_COLL) + if (precalculated_ && precalculation_progress_ < TREE_PROGRESS_PRECALC_COLL) { - precalculation_progress += TREE_PROGRESS_PRECALC_COLL / keys.size(); - Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress * progress_multiplier + progress_offset, TREE_PROGRESS_TOTAL); + precalculation_progress_ += TREE_PROGRESS_PRECALC_COLL / keys.size(); + Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress_ * progress_multiplier_ + progress_offset_, TREE_PROGRESS_TOTAL); } } @@ -786,10 +786,10 @@ void TreeModelVolumes::calculateCollisionHolefree(const std::deque critical_section(*critical_accumulated_placeables_cache_radius_0_); - accumulated_placeable_0 = simplifier.polygon(accumulated_placeable_0); + accumulated_placeable_0 = simplifier_.polygon(accumulated_placeable_0); data[layer] = std::pair(layer, accumulated_placeable_0); } cura::parallel_for( @@ -837,7 +837,7 @@ void TreeModelVolumes::calculateAccumulatedPlaceable0(const LayerIndex max_layer data.size(), [&](const coord_t layer_idx) { - data[layer_idx].second = data[layer_idx].second.offset(-(current_min_xy_dist + current_min_xy_dist_delta)); + data[layer_idx].second = data[layer_idx].second.offset(-(current_min_xy_dist_ + current_min_xy_dist_delta_)); }); { std::lock_guard critical_section(*critical_accumulated_placeables_cache_radius_0_); @@ -855,11 +855,11 @@ void TreeModelVolumes::calculateCollisionAvoidance(const std::deque critical_section(*critical_avoidance_cache_collision_); - start_layer = 1 + std::max(getMaxCalculatedLayer(radius, avoidance_cache_collision_), max_layer_idx_without_blocker); + start_layer = 1 + std::max(getMaxCalculatedLayer(radius, avoidance_cache_collision_), max_layer_idx_without_blocker_); } if (start_layer > max_required_layer) @@ -877,10 +877,10 @@ void TreeModelVolumes::calculateCollisionAvoidance(const std::deque& key const LayerIndex max_required_layer = keys[key_idx].second; // do not calculate not needed safe avoidances - if (holefree && radius >= increase_until_radius + current_min_xy_dist_delta) + if (holefree && radius >= increase_until_radius_ + current_min_xy_dist_delta_) { return; } const coord_t offset_speed = slow ? max_move_slow_ : max_move_; - const coord_t max_step_move = std::max(1.9 * radius, current_min_xy_dist * 1.9); + const coord_t max_step_move = std::max(1.9 * radius, current_min_xy_dist_ * 1.9); RadiusLayerPair key(radius, 0); Polygons latest_avoidance; LayerIndex start_layer; @@ -966,7 +966,7 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key { key.second = layer; Polygons col; - if ((slow && radius < increase_until_radius + current_min_xy_dist_delta) || holefree) + if ((slow && radius < increase_until_radius_ + current_min_xy_dist_delta_) || holefree) { col = getCollisionHolefree(radius, layer, true); } @@ -976,7 +976,7 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key } latest_avoidance = safeOffset(latest_avoidance, -offset_speed, ClipperLib::jtRound, -max_step_move, col); - Polygons next_latest_avoidance = simplifier.polygon(latest_avoidance); + Polygons next_latest_avoidance = simplifier_.polygon(latest_avoidance); latest_avoidance = next_latest_avoidance.unionPolygons(latest_avoidance); // ^^^ Ensure the simplification only causes the avoidance to become larger. // If the deviation of the simplification causes the avoidance to become smaller than it should be it can cause issues, if it is larger the worst case is that the @@ -986,12 +986,12 @@ void TreeModelVolumes::calculateAvoidance(const std::deque& key } { - std::lock_guard critical_section(*critical_progress); + std::lock_guard critical_section(*critical_progress_); - if (precalculated && precalculation_progress < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) + if (precalculated_ && precalculation_progress_ < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) { - precalculation_progress += support_rests_on_model ? 0.4 : 1 * TREE_PROGRESS_PRECALC_AVO / (keys.size() * 3); - Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress * progress_multiplier + progress_offset, TREE_PROGRESS_TOTAL); + precalculation_progress_ += support_rests_on_model_ ? 0.4 : 1 * TREE_PROGRESS_PRECALC_AVO / (keys.size() * 3); + Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress_ * progress_multiplier_ + progress_offset_, TREE_PROGRESS_TOTAL); } } @@ -1037,18 +1037,18 @@ void TreeModelVolumes::calculatePlaceables(const std::deque& ke { key.second = layer; Polygons placeable = getPlaceableAreas(0, layer); - placeable = simplifier.polygon(placeable); // it is faster to do this here in each thread than once in calculateCollision. - placeable = placeable.offset(-(radius + (current_min_xy_dist + current_min_xy_dist_delta))).unionPolygons(); + placeable = simplifier_.polygon(placeable); // it is faster to do this here in each thread than once in calculateCollision. + placeable = placeable.offset(-(radius + (current_min_xy_dist_ + current_min_xy_dist_delta_))).unionPolygons(); data[layer] = std::pair(key, placeable); } { - std::lock_guard critical_section(*critical_progress); + std::lock_guard critical_section(*critical_progress_); - if (precalculated && precalculation_progress < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) + if (precalculated_ && precalculation_progress_ < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) { - precalculation_progress += 0.2 * TREE_PROGRESS_PRECALC_AVO / (keys.size()); - Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress * progress_multiplier + progress_offset, TREE_PROGRESS_TOTAL); + precalculation_progress_ += 0.2 * TREE_PROGRESS_PRECALC_AVO / (keys.size()); + Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress_ * progress_multiplier_ + progress_offset_, TREE_PROGRESS_TOTAL); } } @@ -1080,13 +1080,13 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque= increase_until_radius + current_min_xy_dist_delta) + if (holefree && radius >= increase_until_radius_ + current_min_xy_dist_delta_) { return; } getPlaceableAreas(radius, max_required_layer); // ensuring Placeableareas are calculated const coord_t offset_speed = slow ? max_move_slow_ : max_move_; - const coord_t max_step_move = std::max(1.9 * radius, current_min_xy_dist * 1.9); + const coord_t max_step_move = std::max(1.9 * radius, current_min_xy_dist_ * 1.9); Polygons latest_avoidance; std::vector> data(max_required_layer + 1, std::pair(RadiusLayerPair(radius, -1), Polygons())); RadiusLayerPair key(radius, 0); @@ -1115,7 +1115,7 @@ void TreeModelVolumes::calculateAvoidanceToModel(const std::deque critical_section(*critical_progress); + std::lock_guard critical_section(*critical_progress_); - if (precalculated && precalculation_progress < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) + if (precalculated_ && precalculation_progress_ < TREE_PROGRESS_PRECALC_COLL + TREE_PROGRESS_PRECALC_AVO) { - precalculation_progress += 0.4 * TREE_PROGRESS_PRECALC_AVO / (keys.size() * 3); - Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress * progress_multiplier + progress_offset, TREE_PROGRESS_TOTAL); + precalculation_progress_ += 0.4 * TREE_PROGRESS_PRECALC_AVO / (keys.size() * 3); + Progress::messageProgress(Progress::Stage::SUPPORT, precalculation_progress_ * progress_multiplier_ + progress_offset_, TREE_PROGRESS_TOTAL); } } @@ -1218,12 +1218,12 @@ void TreeModelVolumes::calculateWallRestrictions(const std::deque 0) + if (current_min_xy_dist_delta_ > 0) { - Polygons wall_restriction_min = simplifier.polygon(getCollision(0, layer_idx, true).intersection(getCollision(radius, layer_idx_below, true))); + Polygons wall_restriction_min = simplifier_.polygon(getCollision(0, layer_idx, true).intersection(getCollision(radius, layer_idx_below, true))); data_min.emplace(key, wall_restriction_min); } } @@ -1246,14 +1246,14 @@ coord_t TreeModelVolumes::ceilRadius(coord_t radius) const { return 0; } - if (radius <= radius_0) + if (radius <= radius_0_) { - return radius_0; + return radius_0_; } coord_t exponential_result = SUPPORT_TREE_EXPONENTIAL_THRESHOLD * SUPPORT_TREE_EXPONENTIAL_FACTOR; - const coord_t stepsize = (exponential_result - radius_0) / (SUPPORT_TREE_PRE_EXPONENTIAL_STEPS + 1); - coord_t result = radius_0; + const coord_t stepsize = (exponential_result - radius_0_) / (SUPPORT_TREE_PRE_EXPONENTIAL_STEPS + 1); + coord_t result = radius_0_; for (const auto step : ranges::views::iota(0UL, SUPPORT_TREE_PRE_EXPONENTIAL_STEPS)) { result += stepsize; diff --git a/src/WallToolPaths.cpp b/src/WallToolPaths.cpp index c46d4afbf5..edf90d751a 100644 --- a/src/WallToolPaths.cpp +++ b/src/WallToolPaths.cpp @@ -30,19 +30,19 @@ WallToolPaths::WallToolPaths( const Settings& settings, const int layer_idx, SectionType section_type) - : outline(outline) - , bead_width_0(nominal_bead_width) - , bead_width_x(nominal_bead_width) - , inset_count(inset_count) - , wall_0_inset(wall_0_inset) - , print_thin_walls(settings.get("fill_outline_gaps")) - , min_feature_size(settings.get("min_feature_size")) - , min_bead_width(settings.get("min_bead_width")) - , small_area_length(INT2MM(static_cast(nominal_bead_width) / 2)) - , toolpaths_generated(false) - , settings(settings) - , layer_idx(layer_idx) - , section_type(section_type) + : outline_(outline) + , bead_width_0_(nominal_bead_width) + , bead_width_x_(nominal_bead_width) + , inset_count_(inset_count) + , wall_0_inset_(wall_0_inset) + , print_thin_walls_(settings.get("fill_outline_gaps")) + , min_feature_size_(settings.get("min_feature_size")) + , min_bead_width_(settings.get("min_bead_width")) + , small_area_length_(INT2MM(static_cast(nominal_bead_width) / 2)) + , toolpaths_generated_(false) + , settings_(settings) + , layer_idx_(layer_idx) + , section_type_(section_type) { } @@ -55,46 +55,46 @@ WallToolPaths::WallToolPaths( const Settings& settings, const int layer_idx, SectionType section_type) - : outline(outline) - , bead_width_0(bead_width_0) - , bead_width_x(bead_width_x) - , inset_count(inset_count) - , wall_0_inset(wall_0_inset) - , print_thin_walls(settings.get("fill_outline_gaps")) - , min_feature_size(settings.get("min_feature_size")) - , min_bead_width(settings.get("min_bead_width")) - , small_area_length(INT2MM(static_cast(bead_width_0) / 2)) - , toolpaths_generated(false) - , settings(settings) - , layer_idx(layer_idx) - , section_type(section_type) + : outline_(outline) + , bead_width_0_(bead_width_0) + , bead_width_x_(bead_width_x) + , inset_count_(inset_count) + , wall_0_inset_(wall_0_inset) + , print_thin_walls_(settings.get("fill_outline_gaps")) + , min_feature_size_(settings.get("min_feature_size")) + , min_bead_width_(settings.get("min_bead_width")) + , small_area_length_(INT2MM(static_cast(bead_width_0) / 2)) + , toolpaths_generated_(false) + , settings_(settings) + , layer_idx_(layer_idx) + , section_type_(section_type) { } const std::vector& WallToolPaths::generate() { - const coord_t allowed_distance = settings.get("meshfix_maximum_deviation"); + const coord_t allowed_distance = settings_.get("meshfix_maximum_deviation"); // Sometimes small slivers of polygons mess up the prepared_outline. By performing an open-close operation // with half the minimum printable feature size or minimum line width, these slivers are removed, while still // keeping enough information to not degrade the print quality; // These features can't be printed anyhow. See PR CuraEngine#1811 for some screenshots const coord_t open_close_distance - = settings.get("fill_outline_gaps") ? settings.get("min_feature_size") / 2 - 5 : settings.get("min_wall_line_width") / 2 - 5; + = settings_.get("fill_outline_gaps") ? settings_.get("min_feature_size") / 2 - 5 : settings_.get("min_wall_line_width") / 2 - 5; const coord_t epsilon_offset = (allowed_distance / 2) - 1; - const auto transitioning_angle = settings.get("wall_transition_angle"); + const auto transitioning_angle = settings_.get("wall_transition_angle"); constexpr coord_t discretization_step_size = MM2INT(0.8); // Simplify outline for boost::voronoi consumption. Absolutely no self intersections or near-self intersections allowed: // TODO: Open question: Does this indeed fix all (or all-but-one-in-a-million) cases for manifold but otherwise possibly complex polygons? - Polygons prepared_outline = outline.offset(-open_close_distance).offset(open_close_distance * 2).offset(-open_close_distance); - scripta::log("prepared_outline_0", prepared_outline, section_type, layer_idx); - prepared_outline.removeSmallAreas(small_area_length * small_area_length, false); - prepared_outline = Simplify(settings).polygon(prepared_outline); - if (settings.get("meshfix_fluid_motion_enabled") && section_type != SectionType::SUPPORT) + Polygons prepared_outline = outline_.offset(-open_close_distance).offset(open_close_distance * 2).offset(-open_close_distance); + scripta::log("prepared_outline_0", prepared_outline, section_type_, layer_idx_); + prepared_outline.removeSmallAreas(small_area_length_ * small_area_length_, false); + prepared_outline = Simplify(settings_).polygon(prepared_outline); + if (settings_.get("meshfix_fluid_motion_enabled") && section_type_ != SectionType::SUPPORT) { // No need to smooth support walls - auto smoother = actions::smooth(settings); + auto smoother = actions::smooth(settings_); for (auto& polygon : prepared_outline) { polygon = smoother(polygon); @@ -108,43 +108,43 @@ const std::vector& WallToolPaths::generate() PolygonUtils::fixSelfIntersections(epsilon_offset, prepared_outline); prepared_outline.removeDegenerateVerts(); prepared_outline = prepared_outline.unionPolygons(); - prepared_outline = Simplify(settings).polygon(prepared_outline); + prepared_outline = Simplify(settings_).polygon(prepared_outline); if (prepared_outline.area() <= 0) { - assert(toolpaths.empty()); - return toolpaths; + assert(toolpaths_.empty()); + return toolpaths_; } - const coord_t wall_transition_length = settings.get("wall_transition_length"); + const coord_t wall_transition_length = settings_.get("wall_transition_length"); // When to split the middle wall into two: - const double min_even_wall_line_width = settings.get("min_even_wall_line_width"); - const double wall_line_width_0 = settings.get("wall_line_width_0"); + const double min_even_wall_line_width = settings_.get("min_even_wall_line_width"); + const double wall_line_width_0 = settings_.get("wall_line_width_0"); const Ratio wall_split_middle_threshold = std::max(1.0, std::min(99.0, 100.0 * (2.0 * min_even_wall_line_width - wall_line_width_0) / wall_line_width_0)) / 100.0; // When to add a new middle in between the innermost two walls: - const double min_odd_wall_line_width = settings.get("min_odd_wall_line_width"); - const double wall_line_width_x = settings.get("wall_line_width_x"); + const double min_odd_wall_line_width = settings_.get("min_odd_wall_line_width"); + const double wall_line_width_x = settings_.get("wall_line_width_x"); const Ratio wall_add_middle_threshold = std::max(1.0, std::min(99.0, 100.0 * min_odd_wall_line_width / wall_line_width_x)) / 100.0; - const int wall_distribution_count = settings.get("wall_distribution_count"); - const size_t max_bead_count = (inset_count < std::numeric_limits::max() / 2) ? 2 * inset_count : std::numeric_limits::max(); + const int wall_distribution_count = settings_.get("wall_distribution_count"); + const size_t max_bead_count = (inset_count_ < std::numeric_limits::max() / 2) ? 2 * inset_count_ : std::numeric_limits::max(); const auto beading_strat = BeadingStrategyFactory::makeStrategy( - bead_width_0, - bead_width_x, + bead_width_0_, + bead_width_x_, wall_transition_length, transitioning_angle, - print_thin_walls, - min_bead_width, - min_feature_size, + print_thin_walls_, + min_bead_width_, + min_feature_size_, wall_split_middle_threshold, wall_add_middle_threshold, max_bead_count, - wall_0_inset, + wall_0_inset_, wall_distribution_count); - const auto transition_filter_dist = settings.get("wall_transition_filter_distance"); - const auto allowed_filter_deviation = settings.get("wall_transition_filter_deviation"); + const auto transition_filter_dist = settings_.get("wall_transition_filter_distance"); + const auto allowed_filter_deviation = settings_.get("wall_transition_filter_deviation"); SkeletalTrapezoidation wall_maker( prepared_outline, *beading_strat, @@ -153,50 +153,50 @@ const std::vector& WallToolPaths::generate() transition_filter_dist, allowed_filter_deviation, wall_transition_length, - layer_idx, - section_type); - wall_maker.generateToolpaths(toolpaths); + layer_idx_, + section_type_); + wall_maker.generateToolpaths(toolpaths_); scripta::log( "toolpaths_0", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, scripta::PointVDI{ "width", &ExtrusionJunction::w }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); - stitchToolPaths(toolpaths, settings); + stitchToolPaths(toolpaths_, settings_); scripta::log( "toolpaths_1", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, scripta::PointVDI{ "width", &ExtrusionJunction::w }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); - removeSmallLines(toolpaths); + removeSmallLines(toolpaths_); scripta::log( "toolpaths_2", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, scripta::PointVDI{ "width", &ExtrusionJunction::w }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); - simplifyToolPaths(toolpaths, settings); + simplifyToolPaths(toolpaths_, settings_); scripta::log( "toolpaths_3", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, @@ -205,12 +205,12 @@ const std::vector& WallToolPaths::generate() separateOutInnerContour(); - removeEmptyToolPaths(toolpaths); + removeEmptyToolPaths(toolpaths_); scripta::log( "toolpaths_4", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, @@ -218,25 +218,25 @@ const std::vector& WallToolPaths::generate() scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); assert( std::is_sorted( - toolpaths.cbegin(), - toolpaths.cend(), + toolpaths_.cbegin(), + toolpaths_.cend(), [](const VariableWidthLines& l, const VariableWidthLines& r) { return l.front().inset_idx < r.front().inset_idx; }) && "WallToolPaths should be sorted from the outer 0th to inner_walls"); - toolpaths_generated = true; + toolpaths_generated_ = true; scripta::log( "toolpaths_5", - toolpaths, - section_type, - layer_idx, + toolpaths_, + section_type_, + layer_idx_, scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, scripta::PointVDI{ "width", &ExtrusionJunction::w }, scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); - return toolpaths; + return toolpaths_; } @@ -322,31 +322,31 @@ void WallToolPaths::simplifyToolPaths(std::vector& toolpaths const std::vector& WallToolPaths::getToolPaths() { - if (! toolpaths_generated) + if (! toolpaths_generated_) { return generate(); } - return toolpaths; + return toolpaths_; } void WallToolPaths::pushToolPaths(std::vector& paths) { - if (! toolpaths_generated) + if (! toolpaths_generated_) { generate(); } - paths.insert(paths.end(), toolpaths.begin(), toolpaths.end()); + paths.insert(paths.end(), toolpaths_.begin(), toolpaths_.end()); } void WallToolPaths::separateOutInnerContour() { // We'll remove all 0-width paths from the original toolpaths and store them separately as polygons. std::vector actual_toolpaths; - actual_toolpaths.reserve(toolpaths.size()); // A bit too much, but the correct order of magnitude. + actual_toolpaths.reserve(toolpaths_.size()); // A bit too much, but the correct order of magnitude. std::vector contour_paths; - contour_paths.reserve(toolpaths.size() / inset_count); - inner_contour.clear(); - for (const VariableWidthLines& inset : toolpaths) + contour_paths.reserve(toolpaths_.size() / inset_count_); + inner_contour_.clear(); + for (const VariableWidthLines& inset : toolpaths_) { if (inset.empty()) { @@ -389,7 +389,7 @@ void WallToolPaths::separateOutInnerContour() } else if (line.is_closed) // sometimes an very small even polygonal wall is not stitched into a polygon { - inner_contour.emplace_back(line.toPolygon()); + inner_contour_.emplace_back(line.toPolygon()); } } } @@ -400,11 +400,11 @@ void WallToolPaths::separateOutInnerContour() } if (! actual_toolpaths.empty()) { - toolpaths = std::move(actual_toolpaths); // Filtered out the 0-width paths. + toolpaths_ = std::move(actual_toolpaths); // Filtered out the 0-width paths. } else { - toolpaths.clear(); + toolpaths_.clear(); } // The output walls from the skeletal trapezoidation have no known winding order, especially if they are joined together from polylines. @@ -412,20 +412,20 @@ void WallToolPaths::separateOutInnerContour() // To get a correct shape, we need to make the outside contour positive and any holes inside negative. // This can be done by applying the even-odd rule to the shape. This rule is not sensitive to the winding order of the polygon. // The even-odd rule would be incorrect if the polygon self-intersects, but that should never be generated by the skeletal trapezoidation. - inner_contour = inner_contour.processEvenOdd(); + inner_contour_ = inner_contour_.processEvenOdd(); } const Polygons& WallToolPaths::getInnerContour() { - if (! toolpaths_generated && inset_count > 0) + if (! toolpaths_generated_ && inset_count_ > 0) { generate(); } - else if (inset_count == 0) + else if (inset_count_ == 0) { - return outline; + return outline_; } - return inner_contour; + return inner_contour_; } bool WallToolPaths::removeEmptyToolPaths(std::vector& toolpaths) diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index f0415ce0d1..594d439e1b 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -15,8 +15,8 @@ namespace cura { WallsComputation::WallsComputation(const Settings& settings, const LayerIndex layer_nr) - : settings(settings) - , layer_nr(layer_nr) + : settings_(settings) + , layer_nr_(layer_nr) { } @@ -28,7 +28,7 @@ WallsComputation::WallsComputation(const Settings& settings, const LayerIndex la */ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_type) { - size_t wall_count = settings.get("wall_line_count"); + size_t wall_count = settings_.get("wall_line_count"); if (wall_count == 0) // Early out if no walls are to be generated { part->print_outline = part->outline; @@ -36,46 +36,46 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t return; } - const bool spiralize = settings.get("magic_spiralize"); - const size_t alternate = ((layer_nr % 2) + 2) % 2; - if (spiralize && layer_nr < LayerIndex(settings.get("initial_bottom_layers")) + const bool spiralize = settings_.get("magic_spiralize"); + const size_t alternate = ((layer_nr_ % 2) + 2) % 2; + if (spiralize && layer_nr_ < LayerIndex(settings_.get("initial_bottom_layers")) && alternate == 1) // Add extra insets every 2 layers when spiralizing. This makes bottoms of cups watertight. { wall_count += 5; } - if (settings.get("alternate_extra_perimeter")) + if (settings_.get("alternate_extra_perimeter")) { wall_count += alternate; } - const bool first_layer = layer_nr == 0; - const Ratio line_width_0_factor = first_layer ? settings.get("wall_0_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; - const coord_t line_width_0 = settings.get("wall_line_width_0") * line_width_0_factor; - const coord_t wall_0_inset = settings.get("wall_0_inset"); + const bool first_layer = layer_nr_ == 0; + const Ratio line_width_0_factor = first_layer ? settings_.get("wall_0_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; + const coord_t line_width_0 = settings_.get("wall_line_width_0") * line_width_0_factor; + const coord_t wall_0_inset = settings_.get("wall_0_inset"); - const Ratio line_width_x_factor = first_layer ? settings.get("wall_x_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; - const coord_t line_width_x = settings.get("wall_line_width_x") * line_width_x_factor; + const Ratio line_width_x_factor = first_layer ? settings_.get("wall_x_extruder_nr").settings_.get("initial_layer_line_width_factor") : 1.0_r; + const coord_t line_width_x = settings_.get("wall_line_width_x") * line_width_x_factor; // When spiralizing, generate the spiral insets using simple offsets instead of generating toolpaths if (spiralize) { - const bool recompute_outline_based_on_outer_wall = settings.get("support_enable") && ! settings.get("fill_outline_gaps"); + const bool recompute_outline_based_on_outer_wall = settings_.get("support_enable") && ! settings_.get("fill_outline_gaps"); generateSpiralInsets(part, line_width_0, wall_0_inset, recompute_outline_based_on_outer_wall); - if (layer_nr <= static_cast(settings.get("initial_bottom_layers"))) + if (layer_nr_ <= static_cast(settings_.get("initial_bottom_layers"))) { - WallToolPaths wall_tool_paths(part->outline, line_width_0, line_width_x, wall_count, wall_0_inset, settings, layer_nr, section_type); + WallToolPaths wall_tool_paths(part->outline, line_width_0, line_width_x, wall_count, wall_0_inset, settings_, layer_nr_, section_type); part->wall_toolpaths = wall_tool_paths.getToolPaths(); part->inner_area = wall_tool_paths.getInnerContour(); } } else { - WallToolPaths wall_tool_paths(part->outline, line_width_0, line_width_x, wall_count, wall_0_inset, settings, layer_nr, section_type); + WallToolPaths wall_tool_paths(part->outline, line_width_0, line_width_x, wall_count, wall_0_inset, settings_, layer_nr_, section_type); part->wall_toolpaths = wall_tool_paths.getToolPaths(); part->inner_area = wall_tool_paths.getInnerContour(); } - part->outline = PolygonsPart{ Simplify(settings).polygon(part->outline) }; + part->outline = PolygonsPart{ Simplify(settings_).polygon(part->outline) }; part->print_outline = part->outline; } @@ -94,7 +94,7 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) // Remove the parts which did not generate a wall. As these parts are too small to print, // and later code can now assume that there is always minimal 1 wall line. - if (settings.get("wall_line_count") >= 1 && ! settings.get("fill_outline_gaps")) + if (settings_.get("wall_line_count") >= 1 && ! settings_.get("fill_outline_gaps")) { for (size_t part_idx = 0; part_idx < layer->parts.size(); part_idx++) { @@ -116,7 +116,7 @@ void WallsComputation::generateSpiralInsets(SliceLayerPart* part, coord_t line_w part->spiral_wall = part->outline.offset(-line_width_0 / 2 - wall_0_inset); // Optimize the wall. This prevents buffer underruns in the printer firmware, and reduces processing time in CuraEngine. - const ExtruderTrain& train_wall = settings.get("wall_0_extruder_nr"); + const ExtruderTrain& train_wall = settings_.get("wall_0_extruder_nr"); part->spiral_wall = Simplify(train_wall.settings_).polygon(part->spiral_wall); part->spiral_wall.removeDegenerateVerts(); if (recompute_outline_based_on_outer_wall) diff --git a/src/infill/LightningDistanceField.cpp b/src/infill/LightningDistanceField.cpp index 698e31b365..d0d0b5f2a3 100644 --- a/src/infill/LightningDistanceField.cpp +++ b/src/infill/LightningDistanceField.cpp @@ -15,44 +15,44 @@ LightningDistanceField::LightningDistanceField const Polygons& current_outline, const Polygons& current_overhang ) -: cell_size(radius / radius_per_cell_size) -, grid(cell_size) -, supporting_radius(radius) -, current_outline(current_outline) -, current_overhang(current_overhang) +: cell_size_(radius / radius_per_cell_size) +, grid_(cell_size_) +, supporting_radius_(radius) +, current_outline_(current_outline) +, current_overhang_(current_overhang) { - std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size); + std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size_); for (const auto& p : regular_dots) { const ClosestPolygonPoint cpp = PolygonUtils::findClosest(p, current_outline); const coord_t dist_to_boundary = vSize(p - cpp.p()); - unsupported_points.emplace_back(p, dist_to_boundary); + unsupported_points_.emplace_back(p, dist_to_boundary); } - unsupported_points.sort + unsupported_points_.sort ( [&radius](const UnsupCell& a, const UnsupCell& b) { constexpr coord_t prime_for_hash = 191; return - std::abs(b.dist_to_boundary - a.dist_to_boundary) > radius ? - a.dist_to_boundary < b.dist_to_boundary : - (std::hash{}(a.loc) % prime_for_hash) < (std::hash{}(b.loc) % prime_for_hash); + std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius ? + a.dist_to_boundary_ < b.dist_to_boundary_ : + (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); } ); - for (auto it = unsupported_points.begin(); it != unsupported_points.end(); ++it) + for (auto it = unsupported_points_.begin(); it != unsupported_points_.end(); ++it) { UnsupCell& cell = *it; - unsupported_points_grid.emplace(grid.toGridPoint(cell.loc), it); + unsupported_points_grid_.emplace(grid_.toGridPoint(cell.loc_), it); } } bool LightningDistanceField::tryGetNextPoint(Point* p) const { - if (unsupported_points.empty()) + if (unsupported_points_.empty()) { return false; } - *p = unsupported_points.front().loc; + *p = unsupported_points_.front().loc_; return true; } @@ -61,15 +61,15 @@ void LightningDistanceField::update(const Point& to_node, const Point& added_lea auto process_func = [added_leaf, this](const SquareGrid::GridPoint& grid_loc) { - auto it = unsupported_points_grid.find(grid_loc); - if (it != unsupported_points_grid.end()) + auto it = unsupported_points_grid_.find(grid_loc); + if (it != unsupported_points_grid_.end()) { std::list::iterator& list_it = it->second; UnsupCell& cell = *list_it; - if (shorterThen(cell.loc - added_leaf, supporting_radius)) + if (shorterThen(cell.loc_ - added_leaf, supporting_radius_)) { - unsupported_points.erase(list_it); - unsupported_points_grid.erase(it); + unsupported_points_.erase(list_it); + unsupported_points_grid_.erase(it); } } return true; @@ -78,16 +78,16 @@ void LightningDistanceField::update(const Point& to_node, const Point& added_lea const Point b = added_leaf; Point ab = b - a; Point ab_T = turn90CCW(ab); - Point extent = normal(ab_T, supporting_radius); + Point extent = normal(ab_T, supporting_radius_); // TODO: process cells only once; make use of PolygonUtils::spreadDotsArea - grid.processLineCells(std::make_pair(a + extent, a - extent), + grid_.processLineCells(std::make_pair(a + extent, a - extent), [this, ab, extent, &process_func] (const SquareGrid::GridPoint& p) { - grid.processLineCells(std::make_pair(p, p + ab), process_func); + grid_.processLineCells(std::make_pair(p, p + ab), process_func); return true; } ); - grid.processNearby(added_leaf, supporting_radius, process_func); + grid_.processNearby(added_leaf, supporting_radius_, process_func); } } \ No newline at end of file diff --git a/src/support.cpp b/src/support.cpp index 4fcc69630e..810d78cd9c 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -237,10 +237,10 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) Polygons less_dense_support = infill_area; // one step less dense with each density_step for (unsigned int density_step = 0; density_step < max_density_steps; ++density_step) { - LayerIndex min_layer{ layer_nr + density_step * gradual_support_step_layer_count + static_cast(layer_skip_count) }; - LayerIndex max_layer{ layer_nr + (density_step + 1) * gradual_support_step_layer_count }; + LayerIndex actual_min_layer{ layer_nr + density_step * gradual_support_step_layer_count + static_cast(layer_skip_count) }; + LayerIndex actual_max_layer{ layer_nr + (density_step + 1) * gradual_support_step_layer_count }; - for (double upper_layer_idx = min_layer; upper_layer_idx <= max_layer; upper_layer_idx += layer_skip_count) + for (double upper_layer_idx = actual_min_layer; upper_layer_idx <= actual_max_layer; upper_layer_idx += layer_skip_count) { if (static_cast(upper_layer_idx) >= total_layer_count) { @@ -573,8 +573,6 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp // first offset the layer a little inwards; this way tiny area's will not be joined // (narrow areas; ergo small areas will be removed in a later step using this same offset) // this inwards offset is later reversed by increasing the outwards offset - const coord_t join_distance = infill_settings.get("support_join_distance"); - const coord_t support_line_width = infill_settings.get("support_line_width"); const coord_t min_even_wall_line_width = infill_settings.get("min_even_wall_line_width"); auto half_min_feature_width = min_even_wall_line_width + 10; @@ -1360,9 +1358,10 @@ void AreaSupport::generateSupportAreasForMesh( max_checking_layer_idx, [&](const size_t layer_idx) { - constexpr bool no_support = false; - constexpr bool no_prime_tower = false; - support_areas[layer_idx] = support_areas[layer_idx].difference(storage.getLayerOutlines(layer_idx + layer_z_distance_top - 1, no_support, no_prime_tower)); + constexpr bool no_support_here = false; + constexpr bool no_prime_tower_here = false; + support_areas[layer_idx] + = support_areas[layer_idx].difference(storage.getLayerOutlines(layer_idx + layer_z_distance_top - 1, no_support_here, no_prime_tower_here)); }); } @@ -1700,7 +1699,6 @@ void AreaSupport::handleWallStruts(const Settings& settings, Polygons& supportLa PolygonRef poly = supportLayer_this[p]; if (poly.size() < 6) // might be a single wall { - PolygonRef poly = supportLayer_this[p]; int best = -1; int best_length2 = -1; for (unsigned int i = 0; i < poly.size(); i++) diff --git a/tests/LayerPlanTest.cpp b/tests/LayerPlanTest.cpp index 0cfecdec15..f04a22e605 100644 --- a/tests/LayerPlanTest.cpp +++ b/tests/LayerPlanTest.cpp @@ -357,40 +357,40 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterface>> sections; sections.emplace_back(); - coord_t last_path_mono_projection = projectPathAlongAxis(object_under_test.paths.front(), monotonic_axis); - for (const auto& path : object_under_test.paths) + coord_t last_path_mono_projection = projectPathAlongAxis(object_under_test.paths_.front(), monotonic_axis); + for (const auto& path : object_under_test.paths_) { const coord_t path_mono_projection{ projectPathAlongAxis(path, monotonic_axis) }; if (path_mono_projection < last_path_mono_projection && ! sections.back().empty()) From 5ef89b543ee7926afe9f2d5ce919c7776baaf120 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 21 Nov 2023 16:58:19 +0100 Subject: [PATCH 083/218] Set sentry environment based on version Contributes to CURA-11364 --- conanfile.py | 6 ++++-- src/main.cpp | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/conanfile.py b/conanfile.py index 9019773558..287e93897c 100644 --- a/conanfile.py +++ b/conanfile.py @@ -8,7 +8,8 @@ from conan.tools.files import copy, mkdir from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake, cmake_layout from conan.tools.build import check_min_cppstd -from conan.tools.scm import Version +from conan.tools.scm import Version, Git + required_conan_version = ">=1.58.0 <2.0.0" @@ -42,7 +43,8 @@ class CuraEngineConan(ConanFile): def set_version(self): if not self.version: - self.version = "5.7.0-alpha" + git = Git(self) + self.version = f"5.7.0-alpha+{git.get_commit()[:6]}" def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) diff --git a/src/main.cpp b/src/main.cpp index fc11a1a611..4f4798a175 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,10 +9,13 @@ #ifdef SENTRY_URL #include +#include #include #include -#include +#include +#include +#include #include "utils/format/filesystem_path.h" #endif @@ -72,11 +75,39 @@ int main(int argc, char** argv) #elif defined(__APPLE__) && defined(__MACH__) const auto config_path = std::filesystem::path(fmt::format("{}/Library/Application Support/cura/.sentry-native", std::getenv("HOME"))); #elif defined(_WIN64) - const auto config_path = std::filesystem::path(fmt::format("{}/cura/.sentry-native", std::getenv("APPDATA"))); + const auto config_path = std::filesystem::path(fmt::format("{}\\cura\\.sentry-native", std::getenv("APPDATA"))); #endif spdlog::info("Sentry config path: {}", config_path); - sentry_options_set_database_path(options, config_path.native().c_str()); - sentry_options_set_release(options, fmt::format("curaengine@{}", CURA_ENGINE_VERSION).c_str()); + sentry_options_set_database_path(options, static_cast(std::filesystem::absolute(config_path).native().c_str())); + constexpr std::string_view cura_engine_version{ CURA_ENGINE_VERSION }; + const auto version = semver::from_string( + cura_engine_version + | ranges::views::take_while( + [](const auto& c) + { + return c != '+'; + }) + | ranges::to); + if (ranges::contains(cura_engine_version, '+') || version.prerelease_type == semver::prerelease::alpha) + { + // Not a production build + sentry_options_set_environment(options, "development"); + sentry_options_set_release( + options, + fmt::format( + "curaengine@{}.{}.{}-{}.{}", + version.major, + version.minor, + version.patch, + version.prerelease_type == semver::prerelease::alpha ? "alpha" : "beta", + version.prerelease_number) + .c_str()); + } + else + { + sentry_options_set_environment(options, "production"); + sentry_options_set_release(options, fmt::format("curaengine@{}", version.to_string()).c_str()); + } sentry_init(options); } #endif From c56e75561084a667de40ea6a263dc775eacc06a2 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 09:32:24 +0100 Subject: [PATCH 084/218] Fixed last variable shadowing warnings --- CMakeLists.txt | 3 +- include/PathOrderOptimizer.h | 14 +- include/TreeSupportUtils.h | 6 +- include/communication/CommandLine.h | 4 +- include/infill/LightningTreeNode.h | 12 +- include/infill/SierpinskiFill.h | 18 +- include/infill/SubDivCube.h | 16 +- include/pathPlanning/Comb.h | 64 +++--- include/settings/AdaptiveLayerHeights.h | 26 +-- include/settings/ZSeamConfig.h | 10 +- include/utils/AABB.h | 2 +- include/utils/AABB3D.h | 4 +- include/utils/Date.h | 12 +- include/utils/ExtrusionJunction.h | 10 +- include/utils/ExtrusionLine.h | 129 ++++++------ include/utils/ListPolyIt.h | 100 ++++++---- include/utils/ProximityPointLink.h | 61 ------ include/utils/Simplify.h | 119 ++++++------ include/utils/SparseGrid.h | 16 +- include/utils/SparseLineGrid.h | 14 +- include/utils/SparsePointGrid.h | 2 +- include/utils/VoxelUtils.h | 7 +- src/FffGcodeWriter.cpp | 8 +- src/FffPolygonGenerator.cpp | 40 ++-- src/InsetOrderOptimizer.cpp | 40 ++-- src/LayerPlan.cpp | 46 ++--- src/SkeletalTrapezoidation.cpp | 40 ++-- src/TopSurface.cpp | 2 +- src/TreeSupportTipGenerator.cpp | 13 +- src/WallToolPaths.cpp | 100 +++++----- src/bridge.cpp | 2 +- src/communication/CommandLine.cpp | 38 ++-- src/gcodeExport.cpp | 30 +-- src/infill.cpp | 40 ++-- src/infill/GyroidInfill.cpp | 8 +- src/infill/ImageBasedDensityProvider.cpp | 8 +- src/infill/LightningTreeNode.cpp | 162 +++++++-------- src/infill/SierpinskiFill.cpp | 110 +++++------ src/infill/SierpinskiFillProvider.cpp | 2 +- src/infill/SubDivCube.cpp | 59 +++--- src/mesh.cpp | 8 +- src/pathPlanning/Comb.cpp | 238 +++++++++++------------ src/settings/AdaptiveLayerHeights.cpp | 70 +++---- src/settings/ZSeamConfig.cpp | 10 +- src/sliceDataStorage.cpp | 8 +- src/slicer.cpp | 4 +- src/support.cpp | 8 +- src/utils/AABB.cpp | 90 ++++----- src/utils/AABB3D.cpp | 62 +++--- src/utils/Date.cpp | 26 +-- src/utils/ExtrusionJunction.cpp | 12 +- src/utils/ExtrusionLine.cpp | 45 +++-- src/utils/ExtrusionSegment.cpp | 30 +-- src/utils/ListPolyIt.cpp | 4 +- src/utils/PolygonConnector.cpp | 6 +- src/utils/PolylineStitcher.cpp | 6 +- src/utils/ProximityPointLink.cpp | 28 --- src/utils/SVG.cpp | 50 ++--- src/utils/Simplify.cpp | 30 +-- src/utils/ToolpathVisualizer.cpp | 36 ++-- src/utils/VoxelUtils.cpp | 14 +- src/utils/channel.cpp | 14 +- src/utils/polygonUtils.cpp | 28 +-- tests/integration/SlicePhaseTest.cpp | 4 +- tests/utils/AABB3DTest.cpp | 4 +- tests/utils/AABBTest.cpp | 6 +- 66 files changed, 1091 insertions(+), 1147 deletions(-) delete mode 100644 include/utils/ProximityPointLink.h delete mode 100644 src/utils/ProximityPointLink.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 27fcdf5bd8..3189c3c8ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,6 @@ set(engine_SRCS # Except main.cpp. src/utils/polygonUtils.cpp src/utils/polygon.cpp src/utils/PolylineStitcher.cpp - src/utils/ProximityPointLink.cpp src/utils/Simplify.cpp src/utils/SVG.cpp src/utils/socket.cpp @@ -278,4 +277,4 @@ endif () if (ENABLE_BENCHMARKS) add_subdirectory(benchmark) -endif () \ No newline at end of file +endif () diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 8a46854aed..71c6e92891 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -199,7 +199,7 @@ class PathOrderOptimizer // For some Z seam types the start position can be pre-computed. // This is faster since we don't need to re-compute the start position at each step then. - precompute_start &= seam_config_.type == EZSeamType::RANDOM || seam_config_.type == EZSeamType::USER_SPECIFIED || seam_config_.type == EZSeamType::SHARPEST_CORNER; + precompute_start &= seam_config_.type_ == EZSeamType::RANDOM || seam_config_.type_ == EZSeamType::USER_SPECIFIED || seam_config_.type_ == EZSeamType::SHARPEST_CORNER; if (precompute_start) { for (auto& path : paths_) @@ -208,7 +208,7 @@ class PathOrderOptimizer { continue; // Can't pre-compute the seam for open polylines since they're at the endpoint nearest to the current position. } - path.start_vertex_ = findStartLocation(path, seam_config_.pos); + path.start_vertex_ = findStartLocation(path, seam_config_.pos_); } } @@ -566,7 +566,7 @@ class PathOrderOptimizer } const bool precompute_start - = seam_config_.type == EZSeamType::RANDOM || seam_config_.type == EZSeamType::USER_SPECIFIED || seam_config_.type == EZSeamType::SHARPEST_CORNER; + = seam_config_.type_ == EZSeamType::RANDOM || seam_config_.type_ == EZSeamType::USER_SPECIFIED || seam_config_.type_ == EZSeamType::SHARPEST_CORNER; if (! path->is_closed_ || ! precompute_start) // Find the start location unless we've already precomputed it. { path->start_vertex_ = findStartLocation(*path, start_position); @@ -629,7 +629,7 @@ class PathOrderOptimizer // Rest of the function only deals with (closed) polygons. We need to be able to find the seam location of those polygons. - if (seam_config_.type == EZSeamType::RANDOM) + if (seam_config_.type_ == EZSeamType::RANDOM) { size_t vert = getRandomPointInPolygon(*path.converted_); return vert; @@ -653,7 +653,7 @@ class PathOrderOptimizer // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. const coord_t distance = (combing_boundary_ == nullptr) ? getDirectDistance(here, target_pos) : getCombingDistance(here, target_pos); - const double score_distance = (seam_config_.type == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) + const double score_distance = (seam_config_.type_ == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref_ != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) ? MM2INT(10) : vSize2(here - target_pos); @@ -662,7 +662,7 @@ class PathOrderOptimizer // angles > 0 are convex (right turning) double corner_shift; - if (seam_config_.type == EZSeamType::SHORTEST) + if (seam_config_.type_ == EZSeamType::SHORTEST) { // the more a corner satisfies our criteria, the closer it appears to be // shift 10mm for a very acute corner @@ -678,7 +678,7 @@ class PathOrderOptimizer } double score = score_distance; - switch (seam_config_.corner_pref) + switch (seam_config_.corner_pref_) { default: case EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_INNER: diff --git a/include/TreeSupportUtils.h b/include/TreeSupportUtils.h index fd6ab60526..7782fef79e 100644 --- a/include/TreeSupportUtils.h +++ b/include/TreeSupportUtils.h @@ -68,12 +68,12 @@ class TreeSupportUtils Polygon result_line; for (ExtrusionJunction junction : line) { - result_line.add(junction.p); + result_line.add(junction.p_); } - if (line.is_closed) + if (line.is_closed_) { - result_line.add(line[0].p); + result_line.add(line[0].p_); } result.add(result_line); diff --git a/include/communication/CommandLine.h b/include/communication/CommandLine.h index fbae3e3010..6190a30df4 100644 --- a/include/communication/CommandLine.h +++ b/include/communication/CommandLine.h @@ -154,12 +154,12 @@ class CommandLine : public Communication /* * \brief The command line arguments that the application was called with. */ - std::vector arguments; + std::vector arguments_; /* * The last progress update that we output to stdcerr. */ - unsigned int last_shown_progress; + unsigned int last_shown_progress_; /* * \brief Get the default search directories to search for definition files. diff --git a/include/infill/LightningTreeNode.h b/include/infill/LightningTreeNode.h index 21c63bde3b..e4b4fec264 100644 --- a/include/infill/LightningTreeNode.h +++ b/include/infill/LightningTreeNode.h @@ -149,7 +149,7 @@ class LightningTreeNode : public std::enable_shared_from_this */ bool isRoot() const { - return is_root; + return is_root_; } /*! @@ -262,12 +262,12 @@ class LightningTreeNode : public std::enable_shared_from_this void removeJunctionOverlap(Polygons& polylines, const coord_t line_width) const; - bool is_root; - Point p; - std::weak_ptr parent; - std::vector children; + bool is_root_; + Point p_; + std::weak_ptr parent_; + std::vector children_; - std::optional last_grounding_location; // last_grounding_location_; // sequence; + std::list sequence_; /*! diff --git a/include/infill/SubDivCube.h b/include/infill/SubDivCube.h index d2c7d60f16..26fdb2d6da 100644 --- a/include/infill/SubDivCube.h +++ b/include/infill/SubDivCube.h @@ -94,14 +94,14 @@ class SubDivCube */ void addLineAndCombine(Polygons& group, Point from, Point to); - size_t depth; //!< the recursion depth of the cube (0 is most recursed) - Point3 center; //!< center location of the cube in absolute coordinates - std::array, 8> children; //!< pointers to this cube's eight octree children - static std::vector cube_properties_per_recursion_step; //!< precomputed array of basic properties of cubes based on recursion depth. - static Ratio radius_multiplier; //!< multiplier for the bounding radius when determining if a cube should be subdivided - static Point3Matrix rotation_matrix; //!< The rotation matrix to get from axis aligned cubes to cubes standing on a corner point aligned with the infill_angle - static PointMatrix infill_rotation_matrix; //!< Horizontal rotation applied to infill - static coord_t radius_addition; //!< addition to the bounding radius when determining if a cube should be subdivided + size_t depth_; //!< the recursion depth of the cube (0 is most recursed) + Point3 center_; //!< center location of the cube in absolute coordinates + std::array, 8> children_; //!< pointers to this cube's eight octree children + static std::vector cube_properties_per_recursion_step_; //!< precomputed array of basic properties of cubes based on recursion depth. + static Ratio radius_multiplier_; //!< multiplier for the bounding radius when determining if a cube should be subdivided + static Point3Matrix rotation_matrix_; //!< The rotation matrix to get from axis aligned cubes to cubes standing on a corner point aligned with the infill_angle + static PointMatrix infill_rotation_matrix_; //!< Horizontal rotation applied to infill + static coord_t radius_addition_; //!< addition to the bounding radius when determining if a cube should be subdivided }; } // namespace cura diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index aff135d416..93bff84b30 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -52,13 +52,13 @@ class Comb class Crossing { public: - bool dest_is_inside; //!< Whether the startPoint or endPoint is inside the inside boundary - Point in_or_mid; //!< The point on the inside boundary, or in between the inside and outside boundary if the start/end point isn't inside the inside boudary - Point out; //!< The point on the outside boundary - PolygonsPart dest_part; //!< The assembled inside-boundary PolygonsPart in which the dest_point lies. (will only be initialized when Crossing::dest_is_inside holds) - std::optional dest_crossing_poly; //!< The polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon) - const Polygons& boundary_inside; //!< The inside boundary as in \ref Comb::boundary_inside - const LocToLineGrid& inside_loc_to_line; //!< The loc to line grid \ref Comb::inside_loc_to_line + bool dest_is_inside_; //!< Whether the startPoint or endPoint is inside the inside boundary + Point in_or_mid_; //!< The point on the inside boundary, or in between the inside and outside boundary if the start/end point isn't inside the inside boudary + Point out_; //!< The point on the outside boundary + PolygonsPart dest_part_; //!< The assembled inside-boundary PolygonsPart in which the dest_point lies. (will only be initialized when Crossing::dest_is_inside holds) + std::optional dest_crossing_poly_; //!< The polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon) + const Polygons& boundary_inside_; //!< The inside boundary as in \ref Comb::boundary_inside + const LocToLineGrid& inside_loc_to_line_; //!< The loc to line grid \ref Comb::inside_loc_to_line /*! * Simple constructor @@ -94,8 +94,8 @@ class Comb bool findOutside(const ExtruderTrain& train, const Polygons& outside, const Point close_to, const bool fail_on_unavoidable_obstacles, Comb& comber); private: - const Point dest_point; //!< Either the eventual startPoint or the eventual endPoint of this combing move - unsigned int dest_part_idx; //!< The index into Comb:partsView_inside of the part in which the \p dest_point is. + const Point dest_point_; //!< Either the eventual startPoint or the eventual endPoint of this combing move + unsigned int dest_part_idx_; //!< The index into Comb:partsView_inside of the part in which the \p dest_point is. /*! * Find the best crossing from some inside polygon to the outside boundary. @@ -113,29 +113,29 @@ class Comb }; - const SliceDataStorage& storage; //!< The storage from which to compute the outside boundary, when needed. - const LayerIndex layer_nr; //!< The layer number for the layer for which to compute the outside boundary, when needed. - - const coord_t travel_avoid_distance; //!< - const coord_t offset_from_outlines; //!< Offset from the boundary of a part to the comb path. (nozzle width / 2) - const coord_t max_moveInside_distance2; //!< Maximal distance of a point to the Comb::boundary_inside which is still to be considered inside. (very sharp corners not allowed :S) - const coord_t offset_from_inside_to_outside; //!< The sum of the offsets for the inside and outside boundary Comb::offset_from_outlines and Comb::offset_from_outlines_outside - const coord_t max_crossing_dist2; //!< The maximal distance by which to cross the in_between area between inside and outside - static const coord_t max_moveOutside_distance2 = std::numeric_limits::max(); //!< Any point which is not inside should be considered outside. - static constexpr coord_t offset_dist_to_get_from_on_the_polygon_to_outside = 40; //!< in order to prevent on-boundary vs crossing boundary confusions (precision thing) - static constexpr coord_t offset_extra_start_end = 100; //!< Distance to move start point and end point toward eachother to extra avoid collision with the boundaries. - - Polygons boundary_inside_minimum; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_minimum) - Polygons boundary_inside_optimal; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_optimal) - const PartsView partsView_inside_minimum; //!< Structured indices onto boundary_inside_minimum which shows which polygons belong to which part. - const PartsView partsView_inside_optimal; //!< Structured indices onto boundary_inside_optimal which shows which polygons belong to which part. - std::unique_ptr inside_loc_to_line_minimum; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. - std::unique_ptr inside_loc_to_line_optimal; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. - std::unordered_map boundary_outside; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only compute it when we move outside the boundary (so not when there is only a single part in the layer) - std::unordered_map model_boundary; //!< The boundary of the model itself - std::unordered_map> outside_loc_to_line; //!< The SparsePointGridInclusive mapping locations to line segments of the outside boundary. - std::unordered_map> model_boundary_loc_to_line; //!< The SparsePointGridInclusive mapping locations to line segments of the model boundary - coord_t move_inside_distance; //!< When using comb_boundary_inside_minimum for combing it tries to move points inside by this amount after calculating the path to move it from the border a bit. + const SliceDataStorage& storage_; //!< The storage from which to compute the outside boundary, when needed. + const LayerIndex layer_nr_; //!< The layer number for the layer for which to compute the outside boundary, when needed. + + const coord_t travel_avoid_distance_; //!< + const coord_t offset_from_outlines_; //!< Offset from the boundary of a part to the comb path. (nozzle width / 2) + const coord_t max_moveInside_distance2_; //!< Maximal distance of a point to the Comb::boundary_inside which is still to be considered inside. (very sharp corners not allowed :S) + const coord_t offset_from_inside_to_outside_; //!< The sum of the offsets for the inside and outside boundary Comb::offset_from_outlines and Comb::offset_from_outlines_outside + const coord_t max_crossing_dist2_; //!< The maximal distance by which to cross the in_between area between inside and outside + static const coord_t max_moveOutside_distance2_ = std::numeric_limits::max(); //!< Any point which is not inside should be considered outside. + static constexpr coord_t offset_dist_to_get_from_on_the_polygon_to_outside_ = 40; //!< in order to prevent on-boundary vs crossing boundary confusions (precision thing) + static constexpr coord_t offset_extra_start_end_ = 100; //!< Distance to move start point and end point toward eachother to extra avoid collision with the boundaries. + + Polygons boundary_inside_minimum_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_minimum) + Polygons boundary_inside_optimal_; //!< The boundary within which to comb. (Will be reordered by the partsView_inside_optimal) + const PartsView parts_view_inside_minimum_; //!< Structured indices onto boundary_inside_minimum which shows which polygons belong to which part. + const PartsView parts_view_inside_optimal_; //!< Structured indices onto boundary_inside_optimal which shows which polygons belong to which part. + std::unique_ptr inside_loc_to_line_minimum_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. + std::unique_ptr inside_loc_to_line_optimal_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. + std::unordered_map boundary_outside_; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only compute it when we move outside the boundary (so not when there is only a single part in the layer) + std::unordered_map model_boundary_; //!< The boundary of the model itself + std::unordered_map> outside_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the outside boundary. + std::unordered_map> model_boundary_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the model boundary + coord_t move_inside_distance_; //!< When using comb_boundary_inside_minimum for combing it tries to move points inside by this amount after calculating the path to move it from the border a bit. /*! * Get the SparsePointGridInclusive mapping locations to line segments of the outside boundary. Calculate it when it hasn't been calculated yet. diff --git a/include/settings/AdaptiveLayerHeights.h b/include/settings/AdaptiveLayerHeights.h index 218d2ba58e..94ff6845d5 100644 --- a/include/settings/AdaptiveLayerHeights.h +++ b/include/settings/AdaptiveLayerHeights.h @@ -16,17 +16,17 @@ class AdaptiveLayer /*! * Height of the layer in microns. */ - coord_t layer_height; + coord_t layer_height_; /*! * The absolute z position of the layer. */ - coord_t z_position; + coord_t z_position_; /*! * Temperature to use for this layer. */ - int temperature; + int temperature_; explicit AdaptiveLayer(const coord_t layer_height); }; @@ -65,41 +65,41 @@ class AdaptiveLayerHeights /*! * Stores the found layer heights */ - std::vector layers; + std::vector layers_; /*! * Stores the allowed layer heights in microns. */ - std::vector allowed_layer_heights; + std::vector allowed_layer_heights_; /** * The base layer height. */ - coord_t base_layer_height; + coord_t base_layer_height_; /** * The maximum deviation from the base layer height. */ - coord_t max_variation; + coord_t max_variation_; /** * The layer height change per step to try between min and max deviation from the base layer height. */ - coord_t step_size; + coord_t step_size_; /*! * Target topography size. Adaptive layers will try to keep the horizontal * distance the same. */ - coord_t threshold; + coord_t threshold_; /*! * Stores the found slopes of each face using the same index. */ - std::vector face_slopes; - std::vector face_min_z_values; - std::vector face_max_z_values; - const MeshGroup* meshgroup; + std::vector face_slopes_; + std::vector face_min_z_values_; + std::vector face_max_z_values_; + const MeshGroup* meshgroup_; /*! * Calculate the allowed layer heights depending on variation and step input diff --git a/include/settings/ZSeamConfig.h b/include/settings/ZSeamConfig.h index 7d301e6f00..c82090de5c 100644 --- a/include/settings/ZSeamConfig.h +++ b/include/settings/ZSeamConfig.h @@ -22,25 +22,25 @@ struct ZSeamConfig * Strategy to place the seam (user-specified, shortest distance, sharpest * corner, etc.). */ - EZSeamType type; + EZSeamType type_; /*! * When using a user-specified position for the seam, this is the position * that the user specified. */ - Point pos; + Point pos_; /*! * Corner preference type, if using the sharpest corner strategy. */ - EZSeamCornerPrefType corner_pref; + EZSeamCornerPrefType corner_pref_; /*! * Prevent 'smoothed out' corners (corners that are spread over multiple, very close together vertices), * by simplifying the polygon that the corners are detected on by this ammount. * This does _not_ influence the path, the simplified polygon is a temporary constructed within the algorithm. */ - coord_t simplify_curvature; + coord_t simplify_curvature_; /*! * Create a seam configuration with a custom configuration. @@ -60,4 +60,4 @@ struct ZSeamConfig } //Cura namespace. -#endif //ZSEAMCONFIG_H \ No newline at end of file +#endif //ZSEAMCONFIG_H diff --git a/include/utils/AABB.h b/include/utils/AABB.h index 160e5ac217..eded125621 100644 --- a/include/utils/AABB.h +++ b/include/utils/AABB.h @@ -17,7 +17,7 @@ class Polygons; class AABB { public: - Point min, max; + Point min_, max_; AABB(); //!< initializes with invalid min and max AABB(const Point& min, const Point& max); //!< initializes with given min and max diff --git a/include/utils/AABB3D.h b/include/utils/AABB3D.h index c7fca9c486..68911b2f87 100644 --- a/include/utils/AABB3D.h +++ b/include/utils/AABB3D.h @@ -15,8 +15,8 @@ An Axis Aligned Bounding Box. Has a min and max vector, representing minimal and */ struct AABB3D { - Point3 min; //!< The minimal coordinates in x, y and z direction - Point3 max; //!< The maximal coordinates in x, y and z direction + Point3 min_; //!< The minimal coordinates in x, y and z direction + Point3 max_; //!< The maximal coordinates in x, y and z direction /*! * Create an AABB3D with coordinates at the numeric limits. diff --git a/include/utils/Date.h b/include/utils/Date.h index a89ba2df3d..7d0e44e6a0 100644 --- a/include/utils/Date.h +++ b/include/utils/Date.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_DATE_H #define UTILS_DATE_H @@ -18,10 +18,12 @@ class Date Date(int year, int month, int day); //!< Simple constructor static Date getDate(); //!< Get the current date (compile time) std::string toStringDashed(); //!< Get a formatted string: yyyy-mm-dd + protected: - int year; //!< Year, e.g. 2016 - int month; //!< Month, e.g. 12, i.e. starting at 1 - int day; //!< Day, e.g. 31, i.e. starting at 1 + int year_; //!< Year, e.g. 2016 + int month_; //!< Month, e.g. 12, i.e. starting at 1 + int day_; //!< Day, e.g. 31, i.e. starting at 1 + private: Date(); //!< Simple constructor initializing all to -1 }; diff --git a/include/utils/ExtrusionJunction.h b/include/utils/ExtrusionJunction.h index 2fc40e64c0..ce38e1900b 100644 --- a/include/utils/ExtrusionJunction.h +++ b/include/utils/ExtrusionJunction.h @@ -22,12 +22,12 @@ struct ExtrusionJunction * The position of the centreline of the path when it reaches this junction. * This is the position that should end up in the g-code eventually. */ - Point p; + Point p_; /*! * The width of the extruded path at this junction. */ - coord_t w; + coord_t w_; /*! * Which perimeter this junction is part of. @@ -35,7 +35,7 @@ struct ExtrusionJunction * Perimeters are counted from the outside inwards. The outer wall has index * 0. */ - size_t perimeter_index; + size_t perimeter_index_; ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index); @@ -44,13 +44,13 @@ struct ExtrusionJunction inline Point operator-(const ExtrusionJunction& a, const ExtrusionJunction& b) { - return a.p - b.p; + return a.p_ - b.p_; } // Identity function, used to be able to make templated algorithms that do their operations on 'point-like' input. inline const Point& make_point(const ExtrusionJunction& ej) { - return ej.p; + return ej.p_; } using LineJunctions = std::vector; // junctions_; /*! * Gets the number of vertices in this polygon. @@ -47,7 +54,7 @@ struct ExtrusionLine */ size_t size() const { - return junctions.size(); + return junctions_.size(); } /*! @@ -55,160 +62,158 @@ struct ExtrusionLine */ bool empty() const { - return junctions.empty(); + return junctions_.empty(); } - /*! - * The list of vertices along which this path runs. - * - * Each junction has a width, making this path a variable-width path. - */ - std::vector junctions; - ExtrusionLine(const size_t inset_idx, const bool is_odd); ExtrusionLine() - : inset_idx(-1) - , is_odd(true) - , is_closed(false) - {} + : inset_idx_(-1) + , is_odd_(true) + , is_closed_(false) + { + } ExtrusionLine(const ExtrusionLine& other) - : inset_idx(other.inset_idx) - , is_odd(other.is_odd) - , is_closed(other.is_closed) - , junctions(other.junctions) - {} - + : inset_idx_(other.inset_idx_) + , is_odd_(other.is_odd_) + , is_closed_(other.is_closed_) + , junctions_(other.junctions_) + { + } + ExtrusionLine& operator=(ExtrusionLine&& other) { - junctions = std::move(other.junctions); - inset_idx = other.inset_idx; - is_odd = other.is_odd; - is_closed = other.is_closed; + junctions_ = std::move(other.junctions_); + inset_idx_ = other.inset_idx_; + is_odd_ = other.is_odd_; + is_closed_ = other.is_closed_; return *this; } ExtrusionLine& operator=(const ExtrusionLine& other) { - junctions = other.junctions; - inset_idx = other.inset_idx; - is_odd = other.is_odd; - is_closed = other.is_closed; + junctions_ = other.junctions_; + inset_idx_ = other.inset_idx_; + is_odd_ = other.is_odd_; + is_closed_ = other.is_closed_; return *this; } - + std::vector::const_iterator begin() const { - return junctions.begin(); + return junctions_.begin(); } std::vector::const_iterator end() const { - return junctions.end(); + return junctions_.end(); } std::vector::const_reverse_iterator rbegin() const { - return junctions.rbegin(); + return junctions_.rbegin(); } std::vector::const_reverse_iterator rend() const { - return junctions.rend(); + return junctions_.rend(); } std::vector::const_reference front() const { - return junctions.front(); + return junctions_.front(); } std::vector::const_reference back() const { - return junctions.back(); + return junctions_.back(); } - const ExtrusionJunction& operator[] (unsigned int index) const + const ExtrusionJunction& operator[](unsigned int index) const { - return junctions[index]; + return junctions_[index]; } - ExtrusionJunction& operator[] (unsigned int index) + ExtrusionJunction& operator[](unsigned int index) { - return junctions[index]; + return junctions_[index]; } std::vector::iterator begin() { - return junctions.begin(); + return junctions_.begin(); } std::vector::iterator end() { - return junctions.end(); + return junctions_.end(); } std::vector::reference front() { - return junctions.front(); + return junctions_.front(); } std::vector::reference back() { - return junctions.back(); + return junctions_.back(); } - template + template void emplace_back(Args&&... args) { - junctions.emplace_back(args...); + junctions_.emplace_back(args...); } void remove(unsigned int index) { - junctions.erase(junctions.begin() + index); + junctions_.erase(junctions_.begin() + index); } void insert(size_t index, const ExtrusionJunction& p) { - junctions.insert(junctions.begin() + index, p); + junctions_.insert(junctions_.begin() + index, p); } - template + template std::vector::iterator insert(std::vector::const_iterator pos, iterator first, iterator last) { - return junctions.insert(pos, first, last); + return junctions_.insert(pos, first, last); } void clear() { - junctions.clear(); + junctions_.clear(); } void reverse() { - std::reverse(junctions.begin(), junctions.end()); + std::reverse(junctions_.begin(), junctions_.end()); } - + /*! * Sum the total length of this path. */ coord_t getLength() const; - coord_t polylineLength() const { return getLength(); } + coord_t polylineLength() const + { + return getLength(); + } /*! * Put all junction locations into a polygon object. - * + * * When this path is not closed the returned Polygon should be handled as a polyline, rather than a polygon. */ Polygon toPolygon() const { Polygon ret; - - for (const ExtrusionJunction& j : junctions) - ret.add(j.p); - + + for (const ExtrusionJunction& j : junctions_) + ret.add(j.p_); + return ret; } diff --git a/include/utils/ListPolyIt.h b/include/utils/ListPolyIt.h index 2f6cf2ed02..0af99f0e7d 100644 --- a/include/utils/ListPolyIt.h +++ b/include/utils/ListPolyIt.h @@ -1,18 +1,17 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_LIST_POLY_IT_H #define UTILS_LIST_POLY_IT_H -#include #include - +#include #include "IntPoint.h" #include "polygon.h" -namespace cura +namespace cura { /*! @@ -21,99 +20,117 @@ namespace cura class ListPolyIt { public: - ListPolygon* poly; //!< The polygon - ListPolygon::iterator it; //!< The iterator into ListPolyIt::poly ListPolyIt(const ListPolyIt& other) - : poly(other.poly) - , it(other.it) + : poly_(other.poly_) + , it_(other.it_) { } + ListPolyIt(ListPolygon& poly, ListPolygon::iterator it) - : poly(&poly) - , it(it) + : poly_(&poly) + , it_(it) { } + Point& p() const { - return *it; + return *it_; } + /*! * Test whether two iterators refer to the same polygon in the same polygon list. - * + * * \param other The ListPolyIt to test for equality * \return Wether the right argument refers to the same polygon in the same ListPolygon as the left argument. */ bool operator==(const ListPolyIt& other) const { - return poly == other.poly && it == other.it; + return poly_ == other.poly_ && it_ == other.it_; } + bool operator!=(const ListPolyIt& other) const { - return !(*this == other); + return ! (*this == other); } + ListPolyIt& operator=(const ListPolyIt& other) { - poly = other.poly; - it = other.it; + poly_ = other.poly_; + it_ = other.it_; return *this; } + //! move the iterator forward (and wrap around at the end) - ListPolyIt& operator++() - { - ++it; - if (it == poly->end()) { it = poly->begin(); } - return *this; + ListPolyIt& operator++() + { + ++it_; + if (it_ == poly_->end()) + { + it_ = poly_->begin(); + } + return *this; } + //! move the iterator backward (and wrap around at the beginning) - ListPolyIt& operator--() - { - if (it == poly->begin()) { it = poly->end(); } - --it; - return *this; + ListPolyIt& operator--() + { + if (it_ == poly_->begin()) + { + it_ = poly_->end(); + } + --it_; + return *this; } + //! move the iterator forward (and wrap around at the end) - ListPolyIt next() const + ListPolyIt next() const { ListPolyIt ret(*this); ++ret; return ret; } + //! move the iterator backward (and wrap around at the beginning) - ListPolyIt prev() const + ListPolyIt prev() const { ListPolyIt ret(*this); --ret; return ret; } + //! Remove this point from the list polygon void remove() const { - poly->erase(it); + poly_->erase(it_); } + /*! * Convert Polygons to ListPolygons - * + * * \param polys The polygons to convert * \param result The converted polygons */ static void convertPolygonsToLists(const Polygons& polys, ListPolygons& result); + /*! * Convert Polygons to ListPolygons - * + * * \param polys The polygons to convert * \param result The converted polygons */ static void convertPolygonToList(ConstPolygonRef poly, ListPolygon& result); + /*! * Convert ListPolygons to Polygons - * + * * \param list_polygons The polygons to convert * \param polygons The converted polygons */ static void convertListPolygonsToPolygons(const ListPolygons& list_polygons, Polygons& polygons); + /*! * Convert ListPolygons to Polygons - * + * * \param list_polygons The polygons to convert * \param polygons The converted polygons */ @@ -121,24 +138,28 @@ class ListPolyIt /*! * Insert a point into a ListPolygon if it's not a duplicate of the point before or the point after. - * + * * \param before Iterator to the point before the point to insert * \param after Iterator to the point after the point to insert * \param to_insert The point to insert into the ListPolygon in between \p before and \p after * \return Iterator to the newly inserted point, or \p before or \p after in case to_insert was already in the polygon */ static ListPolyIt insertPointNonDuplicate(const ListPolyIt before, const ListPolyIt after, const Point to_insert); + +private: + ListPolygon* poly_; //!< The polygon + ListPolygon::iterator it_; //!< The iterator into ListPolyIt::poly }; -}//namespace cura +} // namespace cura namespace std { /*! * Hash function for \ref ListPolyIt */ -template <> +template<> struct hash { size_t operator()(const cura::ListPolyIt& lpi) const @@ -146,8 +167,7 @@ struct hash return std::hash()(lpi.p()); } }; -}//namespace std - +} // namespace std -#endif//UTILS_LIST_POLY_IT_H +#endif // UTILS_LIST_POLY_IT_H diff --git a/include/utils/ProximityPointLink.h b/include/utils/ProximityPointLink.h deleted file mode 100644 index be60e23ef0..0000000000 --- a/include/utils/ProximityPointLink.h +++ /dev/null @@ -1,61 +0,0 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#ifndef PROXIMITY_POINT_LINK_H -#define PROXIMITY_POINT_LINK_H - -#include // hash function object -#include -#include -#include -#include // pair -#include - -#include "ListPolyIt.h" - - -namespace cura -{ - -/*! - * Type of ProximityPointLink signifying why/how it was created - */ -enum class ProximityPointLinkType -{ - NORMAL, // Point is close to line segment or to another point - ENDING, // link where two line segments diverge and have the maximum proximity, i.e. where the overlap will be zero - ENDING_CORNER, // when an overlap area ends in a point - SHARP_CORNER // The corner in the polygon is so sharp that it will overlap with itself -}; - -/*! - * A class recording the amount of overlap implicitly by recording the distance between two points on two different polygons or one and the same polygon. - * The order of the two points doesn't matter. - */ -struct ProximityPointLink -{ - const ListPolyIt a; //!< the one point (invalidated after list_polygons have been cleared!) - const ListPolyIt b; //!< the other point (invalidated after list_polygons have been cleared!) - coord_t dist; //!< The distance between the two points - const ProximityPointLinkType type; //!< The type of link; why/how it was created - void setDist(coord_t dist) const; //!< Set the distance. This disregards cosntness, which is only relevant for the equality check and hash operation. - ProximityPointLink(const ListPolyIt a, const ListPolyIt b, int dist, const ProximityPointLinkType type); - bool operator==(const ProximityPointLink& other) const; -}; - -}//namespace cura - -namespace std -{ -template <> -struct hash -{ - size_t operator()(const cura::ProximityPointLink & pp) const - { // has to be symmetric wrt a and b! - return std::hash()(pp.a.p()) + std::hash()(pp.b.p()); - } -}; -}//namespace std - - -#endif//PROXIMITY_POINT_LINK_H diff --git a/include/utils/Simplify.h b/include/utils/Simplify.h index 6cad5fcaf5..e1cacd9a8f 100644 --- a/include/utils/Simplify.h +++ b/include/utils/Simplify.h @@ -1,13 +1,13 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SIMPLIFY_H #define UTILS_SIMPLIFY_H -#include "polygon.h" +#include "../settings/Settings.h" //To load the parameters from a Settings object. #include "ExtrusionLine.h" #include "linearAlg2D.h" //To calculate line deviations and intersecting lines. -#include "../settings/Settings.h" //To load the parameters from a Settings object. +#include "polygon.h" namespace cura { @@ -108,35 +108,18 @@ class Simplify */ ExtrusionLine polyline(const ExtrusionLine& polyline) const; - /*! - * Line segments shorter than this size should be considered for removal. - */ - coord_t max_resolution; - - /*! - * If removing a vertex causes a deviation further than this, it may not be - * removed. - */ - coord_t max_deviation; - - /*! - * If removing a vertex causes the covered area of the line segments to - * change by more than this, it may not be removed. - */ - coord_t max_area_deviation; - protected: /*! * Line segments smaller than this should not occur in the output. * If a vertex causes deviation of less than this, it should always be * removed. */ - constexpr static coord_t min_resolution = 5; //5 units, regardless of how big those are, to allow for rounding errors. + constexpr static coord_t min_resolution = 5; // 5 units, regardless of how big those are, to allow for rounding errors. template bool detectSmall(const Polygonal& polygon, const coord_t& min_size) const { - if (polygon.size() < min_size) //For polygon, 2 or fewer vertices is degenerate. Delete it. For polyline, 1 vertex is degenerate. + if (polygon.size() < min_size) // For polygon, 2 or fewer vertices is degenerate. Delete it. For polyline, 1 vertex is degenerate. { return true; } @@ -169,7 +152,7 @@ class Simplify { return createEmpty(polygon); } - if(polygon.size() == min_size) //For polygon, don't reduce below 3. For polyline, not below 2. + if (polygon.size() == min_size) // For polygon, don't reduce below 3. For polyline, not below 2. { return polygon; } @@ -181,12 +164,12 @@ class Simplify }; std::priority_queue, std::vector>, decltype(comparator)> by_importance(comparator); - Polygonal result = polygon; //Make a copy so that we can also shift vertices. + Polygonal result = polygon; // Make a copy so that we can also shift vertices. for (int64_t current_removed = -1; (polygon.size() - current_removed) > min_size && current_removed != 0;) { current_removed = 0; - //Add the initial points. + // Add the initial points. for (size_t i = 0; i < result.size(); ++i) { if (to_delete[i]) @@ -197,33 +180,33 @@ class Simplify by_importance.emplace(i, vertex_importance); } - //Iteratively remove the least important point until a threshold. + // Iteratively remove the least important point until a threshold. coord_t vertex_importance = 0; while (! by_importance.empty() && (polygon.size() - current_removed) > min_size) { std::pair vertex = by_importance.top(); by_importance.pop(); - //The importance may have changed since this vertex was inserted. Re-compute it now. - //If it doesn't change, it's safe to process. + // The importance may have changed since this vertex was inserted. Re-compute it now. + // If it doesn't change, it's safe to process. vertex_importance = importance(result, to_delete, vertex.first, is_closed); if (vertex_importance != vertex.second) { - by_importance.emplace(vertex.first, vertex_importance); //Re-insert with updated importance. + by_importance.emplace(vertex.first, vertex_importance); // Re-insert with updated importance. continue; } - if (vertex_importance <= max_deviation * max_deviation) + if (vertex_importance <= max_deviation_ * max_deviation_) { current_removed += remove(result, to_delete, vertex.first, vertex_importance, is_closed) ? 1 : 0; } } } - //Now remove the marked vertices in one sweep. + // Now remove the marked vertices in one sweep. Polygonal filtered = createEmpty(polygon); - for(size_t i = 0; i < result.size(); ++i) + for (size_t i = 0; i < result.size(); ++i) { - if(!to_delete[i]) + if (! to_delete[i]) { appendVertex(filtered, result[i]); } @@ -251,18 +234,18 @@ class Simplify coord_t importance(const Polygonal& polygon, const std::vector& to_delete, const size_t index, const bool is_closed) const { const size_t poly_size = polygon.size(); - if(!is_closed && (index == 0 || index == poly_size - 1)) + if (! is_closed && (index == 0 || index == poly_size - 1)) { - return std::numeric_limits::max(); //Endpoints of the polyline must always be retained. + return std::numeric_limits::max(); // Endpoints of the polyline must always be retained. } - //From here on out we can safely look at the vertex neighbors and assume it's a polygon. We won't go out of bounds of the polyline. + // From here on out we can safely look at the vertex neighbors and assume it's a polygon. We won't go out of bounds of the polyline. const Point& vertex = getPosition(polygon[index]); const size_t before_index = previousNotDeleted(index, to_delete); const size_t after_index = nextNotDeleted(index, to_delete); const coord_t area_deviation = getAreaDeviation(polygon[before_index], polygon[index], polygon[after_index]); - if(area_deviation > max_area_deviation) //Removing this line causes the variable line width to get flattened out too much. + if (area_deviation > max_area_deviation_) // Removing this line causes the variable line width to get flattened out too much. { return std::numeric_limits::max(); } @@ -270,13 +253,13 @@ class Simplify const Point& before = getPosition(polygon[before_index]); const Point& after = getPosition(polygon[after_index]); const coord_t deviation2 = LinearAlg2D::getDist2FromLine(vertex, before, after); - if(deviation2 <= min_resolution * min_resolution) //Deviation so small that it's always desired to remove them. + if (deviation2 <= min_resolution * min_resolution) // Deviation so small that it's always desired to remove them. { return deviation2; } - if(vSize2(before - vertex) > max_resolution * max_resolution && vSize2(after - vertex) > max_resolution * max_resolution) + if (vSize2(before - vertex) > max_resolution_ * max_resolution_ && vSize2(after - vertex) > max_resolution_ * max_resolution_) { - return std::numeric_limits::max(); //Long line segments, no need to remove this one. + return std::numeric_limits::max(); // Long line segments, no need to remove this one. } return deviation2; } @@ -300,10 +283,10 @@ class Simplify template bool remove(Polygonal& polygon, std::vector& to_delete, const size_t vertex, const coord_t deviation2, const bool is_closed) const { - if(deviation2 <= min_resolution * min_resolution) + if (deviation2 <= min_resolution * min_resolution) { - //At less than the minimum resolution we're always allowed to delete the vertex. - //Even if the adjacent line segments are very long. + // At less than the minimum resolution we're always allowed to delete the vertex. + // Even if the adjacent line segments are very long. to_delete[vertex] = true; return true; } @@ -316,22 +299,22 @@ class Simplify const coord_t length2_before = vSize2(vertex_position - before_position); const coord_t length2_after = vSize2(vertex_position - after_position); - if(length2_before <= max_resolution * max_resolution && length2_after <= max_resolution * max_resolution) //Both adjacent line segments are short. + if (length2_before <= max_resolution_ * max_resolution_ && length2_after <= max_resolution_ * max_resolution_) // Both adjacent line segments are short. { - //Removing this vertex does little harm. No long lines will be shifted. + // Removing this vertex does little harm. No long lines will be shifted. to_delete[vertex] = true; return true; } - //Otherwise, one edge next to this vertex is longer than max_resolution. The other is shorter. - //In this case we want to remove the short edge by replacing it with a vertex where the two surrounding edges intersect. - //Find the two line segments surrounding the short edge here ("before" and "after" edges). + // Otherwise, one edge next to this vertex is longer than max_resolution. The other is shorter. + // In this case we want to remove the short edge by replacing it with a vertex where the two surrounding edges intersect. + // Find the two line segments surrounding the short edge here ("before" and "after" edges). Point before_from, before_to, after_from, after_to; - if(length2_before <= length2_after) //Before is the shorter line. + if (length2_before <= length2_after) // Before is the shorter line. { - if(!is_closed && before == 0) //No edge before the short edge. + if (! is_closed && before == 0) // No edge before the short edge. { - return false; //Edge cannot be deleted without shifting a long edge. Don't remove anything. + return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. } const size_t before_before = previousNotDeleted(before, to_delete); before_from = getPosition(polygon[before_before]); @@ -341,9 +324,9 @@ class Simplify } else { - if(!is_closed && after == polygon.size() - 1) //No edge after the short edge. + if (! is_closed && after == polygon.size() - 1) // No edge after the short edge. { - return false; //Edge cannot be deleted without shifting a long edge. Don't remove anything. + return false; // Edge cannot be deleted without shifting a long edge. Don't remove anything. } const size_t after_after = nextNotDeleted(after, to_delete); before_from = getPosition(polygon[before]); @@ -353,12 +336,12 @@ class Simplify } Point intersection; const bool did_intersect = LinearAlg2D::lineLineIntersection(before_from, before_to, after_from, after_to, intersection); - if(!did_intersect) //Lines are parallel. + if (! did_intersect) // Lines are parallel. { - return false; //Cannot remove edge without shifting a long edge. Don't remove anything. + return false; // Cannot remove edge without shifting a long edge. Don't remove anything. } const coord_t intersection_deviation = LinearAlg2D::getDist2FromLineSegment(before_to, intersection, after_from); - if(intersection_deviation <= max_deviation * max_deviation) //Intersection point doesn't deviate too much. Use it! + if (intersection_deviation <= max_deviation_ * max_deviation_) // Intersection point doesn't deviate too much. Use it! { to_delete[vertex] = true; polygon[length2_before <= length2_after ? before : after] = createIntersection(polygon[before], intersection, polygon[after]); @@ -488,8 +471,26 @@ class Simplify * \return The area deviation that would be caused by removing the vertex. */ coord_t getAreaDeviation(const ExtrusionJunction& before, const ExtrusionJunction& vertex, const ExtrusionJunction& after) const; + +private: + /*! + * Line segments shorter than this size should be considered for removal. + */ + coord_t max_resolution_; + + /*! + * If removing a vertex causes a deviation further than this, it may not be + * removed. + */ + coord_t max_deviation_; + + /*! + * If removing a vertex causes the covered area of the line segments to + * change by more than this, it may not be removed. + */ + coord_t max_area_deviation_; }; -} //namespace cura +} // namespace cura -#endif //UTILS_SIMPLIFY_H +#endif // UTILS_SIMPLIFY_H diff --git a/include/utils/SparseGrid.h b/include/utils/SparseGrid.h index f31631c206..3e403a7266 100644 --- a/include/utils/SparseGrid.h +++ b/include/utils/SparseGrid.h @@ -47,22 +47,22 @@ class SparseGrid : public SquareGrid iterator begin() { - return m_grid.begin(); + return grid_.begin(); } iterator end() { - return m_grid.end(); + return grid_.end(); } const_iterator begin() const { - return m_grid.begin(); + return grid_.begin(); } const_iterator end() const { - return m_grid.end(); + return grid_.end(); } /*! \brief Returns all data within radius of query_pt. @@ -134,7 +134,7 @@ class SparseGrid : public SquareGrid bool processFromCell(const GridPoint& grid_pt, const std::function& process_func) const; /*! \brief Map from grid locations (GridPoint) to elements (Elem). */ - GridMap m_grid; + GridMap grid_; }; @@ -146,17 +146,17 @@ SGI_THIS::SparseGrid(coord_t cell_size, size_t elem_reserve, double max_load_fac : SquareGrid(cell_size) { // Must be before the reserve call. - m_grid.max_load_factor(max_load_factor); + grid_.max_load_factor(max_load_factor); if (elem_reserve != 0U) { - m_grid.reserve(elem_reserve); + grid_.reserve(elem_reserve); } } SGI_TEMPLATE bool SGI_THIS::processFromCell(const GridPoint& grid_pt, const std::function& process_func) const { - auto grid_range = m_grid.equal_range(grid_pt); + auto grid_range = grid_.equal_range(grid_pt); for (auto iter = grid_range.first; iter != grid_range.second; ++iter) { if (! process_func(iter->second)) diff --git a/include/utils/SparseLineGrid.h b/include/utils/SparseLineGrid.h index d851664aea..d5462414b1 100644 --- a/include/utils/SparseLineGrid.h +++ b/include/utils/SparseLineGrid.h @@ -29,6 +29,7 @@ class SparseLineGrid : public SparseGrid { public: using Elem = ElemT; + using typename SparseGrid::GridMap; /*! \brief Constructs a sparse grid with the specified cell size. * @@ -71,17 +72,16 @@ SGI_TEMPLATE void SGI_THIS::insert(const Elem& elem) { const std::pair line = m_locator(elem); - using GridMap = std::unordered_multimap; // below is a workaround for the fact that lambda functions cannot access private or protected members // first we define a lambda which works on any GridMap and then we bind it to the actual protected GridMap of the parent class - std::function process_cell_func_ = [&elem, this](GridMap* m_grid, const GridPoint grid_loc) + std::function process_cell_func_ = [&elem, this](GridMap* grid, const GridPoint grid_loc) { - m_grid->emplace(grid_loc, elem); + grid->emplace(grid_loc, elem); return true; }; using namespace std::placeholders; // for _1, _2, _3... - GridMap* m_grid = &(this->m_grid); - std::function process_cell_func(std::bind(process_cell_func_, m_grid, _1)); + GridMap* grid = &(this->grid_); + std::function process_cell_func(std::bind(process_cell_func_, grid, _1)); SparseGrid::processLineCells(line, process_cell_func); } @@ -90,13 +90,13 @@ SGI_TEMPLATE void SGI_THIS::debugHTML(std::string filename) { AABB aabb; - for (std::pair cell : SparseGrid::m_grid) + for (std::pair cell : SparseGrid::grid_) { aabb.include(SparseGrid::toLowerCorner(cell.first)); aabb.include(SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), SparseGrid::nonzero_sign(cell.first.Y)))); } SVG svg(filename.c_str(), aabb); - for (std::pair cell : SparseGrid::m_grid) + for (std::pair cell : SparseGrid::grid_) { // doesn't draw cells at x = 0 or y = 0 correctly (should be double size) Point lb = SparseGrid::toLowerCorner(cell.first); diff --git a/include/utils/SparsePointGrid.h b/include/utils/SparsePointGrid.h index 214fc1fdc1..748f79124e 100644 --- a/include/utils/SparsePointGrid.h +++ b/include/utils/SparsePointGrid.h @@ -76,7 +76,7 @@ void SGI_THIS::insert(const Elem& elem) Point loc = m_locator(elem); GridPoint grid_loc = SparseGrid::toGridPoint(loc); - SparseGrid::m_grid.emplace(grid_loc, elem); + SparseGrid::grid_.emplace(grid_loc, elem); } SGI_TEMPLATE diff --git a/include/utils/VoxelUtils.h b/include/utils/VoxelUtils.h index 30078b51b3..4cf4d97029 100644 --- a/include/utils/VoxelUtils.h +++ b/include/utils/VoxelUtils.h @@ -48,10 +48,11 @@ struct DilationKernel DIAMOND, PRISM }; + GridPoint3 kernel_size_; //!< Size of the kernel in number of voxel cells + Type type_; + std::vector relative_cells_; //!< All offset positions relative to some reference cell which is to be dilated + DilationKernel(GridPoint3 kernel_size, Type type); - GridPoint3 kernel_size; //!< Size of the kernel in number of voxel cells - Type type; - std::vector relative_cells; //!< All offset positions relative to some reference cell which is to be dilated }; /*! diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 3e2831f857..a43924362d 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -1457,7 +1457,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s if (mesh.getExtruderIsUsed(extruder_nr)) { const Mesh& mesh_data = mesh_group->meshes[mesh_idx]; - const Point3 middle = (mesh_data.getAABB().min + mesh_data.getAABB().max) / 2; + const Point3 middle = (mesh_data.getAABB().min_ + mesh_data.getAABB().max_) / 2; mesh_idx_order_optimizer.addItem(Point(middle.x_, middle.y_), mesh_idx); } } @@ -2057,7 +2057,7 @@ bool FffGcodeWriter::processSingleLayerInfill( { start_paths = &wall_tool_paths[rand() % wall_tool_paths.size()]; } - near_start_location = (*start_paths)[0][0].junctions[0].p; + near_start_location = (*start_paths)[0][0].junctions_[0].p_; } } if (walls_generated) @@ -2521,7 +2521,7 @@ bool FffGcodeWriter::processInsets( const auto point_view = ranges::views::transform( [](auto extrusion_junction) { - return extrusion_junction.p; + return extrusion_junction.p_; }); for (const auto& path : part.wall_toolpaths) @@ -2595,7 +2595,7 @@ std::optional FffGcodeWriter::getSeamAvoidingLocation(const Polygons& fil // create a vector from the middle of the BB whose length is such that it can be rotated // around the middle of the BB and the end will always be a long way outside of the part's outline // and rotate the vector so that it is normal to the skin angle - const Point vec = rot.apply(Point(0, vSize(skin_part_bb.max - bb_middle) * 100)); + const Point vec = rot.apply(Point(0, vSize(skin_part_bb.max_ - bb_middle) * 100)); // find the vertex in the outline that is closest to the end of the rotated vector const PolygonsPointIndex pa = PolygonUtils::findNearestVert(bb_middle + vec, filling_part); // and find another outline vertex, this time using the vector + 180 deg diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index cb4d60f6d4..ae79c909fc 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -304,8 +304,8 @@ bool FffPolygonGenerator::sliceModel(MeshGroup* meshgroup, TimeKeeper& timeKeepe if (use_variable_layer_heights) { - meshStorage.layers[layer_nr].printZ = adaptive_layer_heights->getLayers()->at(layer_nr).z_position; - meshStorage.layers[layer_nr].thickness = adaptive_layer_heights->getLayers()->at(layer_nr).layer_height; + meshStorage.layers[layer_nr].printZ = adaptive_layer_heights->getLayers()->at(layer_nr).z_position_; + meshStorage.layers[layer_nr].thickness = adaptive_layer_heights->getLayers()->at(layer_nr).layer_height_; } else { @@ -1103,7 +1103,7 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) std::vector result_paths; for (auto& toolpath : part.wall_toolpaths) { - if (toolpath.front().inset_idx != 0) + if (toolpath.front().inset_idx_ != 0) { result_paths.push_back(toolpath); continue; @@ -1116,7 +1116,7 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) hole_area = part.print_outline.getOutsidePolygons().offset(-line_width); accumulate_is_in_hole = [&hole_area](const bool& prev_result, const ExtrusionJunction& junction) { - return prev_result || hole_area.inside(junction.p); + return prev_result || hole_area.inside(junction.p_); }; } for (auto& line : toolpath) @@ -1128,9 +1128,9 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) } auto& result = result_lines.emplace_back(); - result.inset_idx = line.inset_idx; - result.is_odd = line.is_odd; - result.is_closed = line.is_closed; + result.inset_idx_ = line.inset_idx_; + result.is_odd_ = line.is_odd_; + result.is_closed_ = line.is_closed_; // generate points in between p0 and p1 int64_t dist_left_over @@ -1138,30 +1138,30 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) auto* p0 = &line.front(); for (auto& p1 : line) { - if (p0->p == p1.p) // avoid seams + if (p0->p_ == p1.p_) // avoid seams { - result.emplace_back(p1.p, p1.w, p1.perimeter_index); + result.emplace_back(p1.p_, p1.w_, p1.perimeter_index_); continue; } // 'a' is the (next) new point between p0 and p1 - const Point p0p1 = p1.p - p0->p; + const Point p0p1 = p1.p_ - p0->p_; const int64_t p0p1_size = vSize(p0p1); int64_t p0pa_dist = dist_left_over; if (p0pa_dist >= p0p1_size) { - const Point p = p1.p - (p0p1 / 2); - const double width = (p1.w * vSize(p1.p - p) + p0->w * vSize(p0->p - p)) / p0p1_size; - result.emplace_back(p, width, p1.perimeter_index); + const Point p = p1.p_ - (p0p1 / 2); + const double width = (p1.w_ * vSize(p1.p_ - p) + p0->w_ * vSize(p0->p_ - p)) / p0p1_size; + result.emplace_back(p, width, p1.perimeter_index_); } for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + rand() % range_random_point_dist) { const int r = rand() % (fuzziness * 2) - fuzziness; const Point perp_to_p0p1 = turn90CCW(p0p1); const Point fuzz = normal(perp_to_p0p1, r); - const Point pa = p0->p + normal(p0p1, p0pa_dist); - const double width = (p1.w * vSize(p1.p - pa) + p0->w * vSize(p0->p - pa)) / p0p1_size; - result.emplace_back(pa + fuzz, width, p1.perimeter_index); + const Point pa = p0->p_ + normal(p0p1, p0pa_dist); + const double width = (p1.w_ * vSize(p1.p_ - pa) + p0->w_ * vSize(p0->p_ - pa)) / p0p1_size; + result.emplace_back(pa + fuzz, width, p1.perimeter_index_); } // p0pa_dist > p0p1_size now because we broke out of the for-loop dist_left_over = p0pa_dist - p0p1_size; @@ -1171,7 +1171,7 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) while (result.size() < 3) { size_t point_idx = line.size() - 2; - result.emplace_back(line[point_idx].p, line[point_idx].w, line[point_idx].perimeter_index); + result.emplace_back(line[point_idx].p_, line[point_idx].w_, line[point_idx].perimeter_index_); if (point_idx == 0) { break; @@ -1183,12 +1183,12 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) result.clear(); for (auto& p : line) { - result.emplace_back(p.p, p.w, p.perimeter_index); + result.emplace_back(p.p_, p.w_, p.perimeter_index_); } } - if (line.back().p == line.front().p) // avoid seams + if (line.back().p_ == line.front().p_) // avoid seams { - result.back().p = result.front().p; + result.back().p_ = result.front().p_; } } } diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 9b2358aa62..63d8c4f82c 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -3,11 +3,8 @@ #include "InsetOrderOptimizer.h" -#include "ExtruderTrain.h" -#include "FffGcodeWriter.h" -#include "LayerPlan.h" -#include "utils/views/convert.h" -#include "utils/views/dfs.h" +#include +#include #include #include @@ -25,8 +22,11 @@ #include #include -#include -#include +#include "ExtruderTrain.h" +#include "FffGcodeWriter.h" +#include "LayerPlan.h" +#include "utils/views/convert.h" +#include "utils/views/dfs.h" namespace rg = ranges; namespace rv = ranges::views; @@ -101,7 +101,7 @@ bool InsetOrderOptimizer::addToLayer() for (const auto& line : walls_to_be_added) { - if (line.is_closed) + if (line.is_closed_) { order_optimizer.addPolygon(&line); } @@ -118,14 +118,14 @@ bool InsetOrderOptimizer::addToLayer() if (path.vertices_->empty()) continue; - const bool is_outer_wall = path.vertices_->inset_idx == 0; // or thin wall 'gap filler' - const bool is_gap_filler = path.vertices_->is_odd; + const bool is_outer_wall = path.vertices_->inset_idx_ == 0; // or thin wall 'gap filler' + const bool is_gap_filler = path.vertices_->is_odd_; const GCodePathConfig& non_bridge_config = is_outer_wall ? inset_0_non_bridge_config_ : inset_X_non_bridge_config_; const GCodePathConfig& bridge_config = is_outer_wall ? inset_0_bridge_config_ : inset_X_bridge_config_; const coord_t wipe_dist = is_outer_wall && ! is_gap_filler ? wall_0_wipe_dist_ : wall_x_wipe_dist_; const bool retract_before = is_outer_wall ? retract_before_outer_wall_ : false; - const bool revert_inset = alternate_walls && (path.vertices_->inset_idx % 2); + const bool revert_inset = alternate_walls && (path.vertices_->inset_idx_ % 2); const bool revert_layer = alternate_walls && (layer_nr_ % 2); const bool backwards = path.backwards_ != (revert_inset != revert_layer); const size_t start_index = (backwards != path.backwards_) ? path.vertices_->size() - (path.start_vertex_ + 1) : path.start_vertex_; @@ -163,7 +163,7 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& return LineLoc{ .line = line, .poly = poly, - .area = line->is_closed ? poly.area() : 0.0, + .area = line->is_closed_ ? poly.area() : 0.0, }; }) | rg::to_vector; @@ -226,7 +226,7 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& // find hole roots (defined by a positive area in clipper1), these are leaves of the tree structure // as odd walls are also leaves we filter them out by adding a non-zero area check - if (current_node != root && graph.count(current_node) == 1 && current_node->line->is_closed && current_node->area > 0) + if (current_node != root && graph.count(current_node) == 1 && current_node->line->is_closed_ && current_node->area > 0) { hole_roots.push_back(current_node); } @@ -297,21 +297,21 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getInsetOrder(const auto& i for (const auto& line : input) { - if (line.is_odd) + if (line.is_odd_) { - if (line.inset_idx >= fillers_by_inset.size()) + if (line.inset_idx_ >= fillers_by_inset.size()) { - fillers_by_inset.resize(line.inset_idx + 1); + fillers_by_inset.resize(line.inset_idx_ + 1); } - fillers_by_inset[line.inset_idx].emplace_back(&line); + fillers_by_inset[line.inset_idx_].emplace_back(&line); } else { - if (line.inset_idx >= walls_by_inset.size()) + if (line.inset_idx_ >= walls_by_inset.size()) { - walls_by_inset.resize(line.inset_idx + 1); + walls_by_inset.resize(line.inset_idx_ + 1); } - walls_by_inset[line.inset_idx].emplace_back(&line); + walls_by_inset[line.inset_idx_].emplace_back(&line); } } for (size_t inset_idx = 0; inset_idx + 1 < walls_by_inset.size(); inset_idx++) diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 5e8b6a1b2d..e4ddda09e6 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -928,14 +928,14 @@ void LayerPlan::addWall( const ExtrusionJunction& p0 = wall[point_idx]; const ExtrusionJunction& p1 = wall[(point_idx + 1) % wall.size()]; - if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask_, p0.p, p1.p)) + if (PolygonUtils::polygonCollidesWithLineSegment(bridge_wall_mask_, p0.p_, p1.p_)) { // the line crosses the boundary between supported and non-supported regions so it will contain one or more bridge segments // determine which segments of the line are bridges Polygons line_polys; - line_polys.addLine(p0.p, p1.p); + line_polys.addLine(p0.p_, p1.p_); constexpr bool restitch = false; // only a single line doesn't need stitching line_polys = bridge_wall_mask_.intersectionPolyLines(line_polys, restitch); @@ -943,10 +943,10 @@ void LayerPlan::addWall( { // find the bridge line segment that's nearest to p0 int nearest = 0; - double smallest_dist2 = vSize2f(p0.p - line_polys[0][0]); + double smallest_dist2 = vSize2f(p0.p_ - line_polys[0][0]); for (unsigned i = 1; i < line_polys.size(); ++i) { - double dist2 = vSize2f(p0.p - line_polys[i][0]); + double dist2 = vSize2f(p0.p_ - line_polys[i][0]); if (dist2 < smallest_dist2) { nearest = i; @@ -959,14 +959,14 @@ void LayerPlan::addWall( Point b0 = bridge[0]; Point b1 = bridge[1]; - if (vSize2f(p0.p - b1) < vSize2f(p0.p - b0)) + if (vSize2f(p0.p_ - b1) < vSize2f(p0.p_ - b0)) { // swap vertex order b0 = bridge[1]; b1 = bridge[0]; } - distance_to_bridge_start += vSize(b0 - p0.p); + distance_to_bridge_start += vSize(b0 - p0.p_); const double bridge_line_len = vSize(b1 - b0); @@ -982,10 +982,10 @@ void LayerPlan::addWall( line_polys.remove(nearest); } } - else if (! bridge_wall_mask_.inside(p0.p, true)) + else if (! bridge_wall_mask_.inside(p0.p_, true)) { // none of the line is over air - distance_to_bridge_start += vSize(p1.p - p0.p); + distance_to_bridge_start += vSize(p1.p_ - p0.p_); } } @@ -997,7 +997,7 @@ void LayerPlan::addWall( bool first_line = true; const coord_t small_feature_max_length = settings.get("small_feature_max_length"); - const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr_ == 0 || wall.inset_idx == 0) && cura::shorterThan(wall, small_feature_max_length); + const bool is_small_feature = (small_feature_max_length > 0) && (layer_nr_ == 0 || wall.inset_idx_ == 0) && cura::shorterThan(wall, small_feature_max_length); Ratio small_feature_speed_factor = settings.get((layer_nr_ == 0) ? "small_feature_speed_factor_0" : "small_feature_speed_factor"); const Velocity min_speed = fan_speed_layer_time_settings_per_extruder_[getLastPlannedExtruderTrain()->extruder_nr_].cool_min_speed; small_feature_speed_factor = std::max((double)small_feature_speed_factor, (double)(min_speed / non_bridge_config.getSpeed())); @@ -1019,7 +1019,7 @@ void LayerPlan::addWall( if (first_line) { - addTravel(p0.p, always_retract); + addTravel(p0.p_, always_retract); first_line = false; } @@ -1035,8 +1035,8 @@ void LayerPlan::addWall( pieces we'd want to get low enough deviation, then check if each piece is not too short at the end. */ - const coord_t delta_line_width = p1.w - p0.w; - const Point line_vector = p1.p - p0.p; + const coord_t delta_line_width = p1.w_ - p0.w_; + const Point line_vector = p1.p_ - p0.p_; const coord_t line_length = vSize(line_vector); /* Calculate how much the line would deviate from the trapezoidal shape if printed at average width. @@ -1055,8 +1055,8 @@ void LayerPlan::addWall( for (size_t piece = 0; piece < pieces; ++piece) { const double average_progress = (double(piece) + 0.5) / pieces; // How far along this line to sample the line width in the middle of this piece. - const coord_t line_width = p0.w + average_progress * delta_line_width; - const Point destination = p0.p + normal(line_vector, piece_length * (piece + 1)); + const coord_t line_width = p0.w_ + average_progress * delta_line_width; + const Point destination = p0.p_ + normal(line_vector, piece_length * (piece + 1)); if (is_small_feature) { constexpr bool spiralize = false; @@ -1071,7 +1071,7 @@ void LayerPlan::addWall( } else { - const Point origin = p0.p + normal(line_vector, piece_length * piece); + const Point origin = p0.p_ + normal(line_vector, piece_length * piece); addWallLine( origin, destination, @@ -1110,14 +1110,14 @@ void LayerPlan::addWall( int p0p1_dist = vSize(p1 - p0); if (distance_traversed + p0p1_dist >= wall_0_wipe_dist) { - Point vector = p1.p - p0.p; - Point half_way = p0.p + normal(vector, wall_0_wipe_dist - distance_traversed); + Point vector = p1.p_ - p0.p_; + Point half_way = p0.p_ + normal(vector, wall_0_wipe_dist - distance_traversed); addTravel_simple(half_way); break; } else { - addTravel_simple(p1.p); + addTravel_simple(p1.p_); distance_traversed += p0p1_dist; } p0 = p1; @@ -1135,14 +1135,14 @@ void LayerPlan::addInfillWall(const ExtrusionLine& wall, const GCodePathConfig& { assert(("All empty walls should have been filtered at this stage", ! wall.empty())); ExtrusionJunction junction{ *wall.begin() }; - addTravel(junction.p, force_retract); + addTravel(junction.p_, force_retract); for (const auto& junction_n : wall) { - const Ratio width_factor{ static_cast(junction_n.w) / Ratio{ static_cast(path_config.getLineWidth()) } }; + const Ratio width_factor{ static_cast(junction_n.w_) / Ratio{ static_cast(path_config.getLineWidth()) } }; constexpr SpaceFillType space_fill_type = SpaceFillType::Polygons; constexpr Ratio flow = 1.0_r; - addExtrusionMove(junction_n.p, path_config, space_fill_type, flow, width_factor); + addExtrusionMove(junction_n.p_, path_config, space_fill_type, flow, width_factor); junction = junction_n; } } @@ -2176,9 +2176,9 @@ void LayerPlan::writeGCode(GCodeExport& gcode) if (extruder.settings_.get("cool_lift_head") && extruder_plan.extra_time_ > 0.0) { gcode.writeComment("Small layer, adding delay"); - const RetractionAndWipeConfig& retraction_config + const RetractionAndWipeConfig& actual_retraction_config = current_mesh ? current_mesh->retraction_wipe_config : storage_.retraction_wipe_config_per_extruder[gcode.getExtruderNr()]; - gcode.writeRetraction(retraction_config.retraction_config); + gcode.writeRetraction(actual_retraction_config.retraction_config); if (extruder_plan_idx == extruder_plans_.size() - 1 || ! extruder.settings_.get("machine_extruder_end_pos_abs")) { // only do the z-hop if it's the last extruder plan; otherwise it's already at the switching bay area // or do it anyway when we switch extruder in-place diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 94adbffe11..eaebbb1683 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -2024,40 +2024,40 @@ void SkeletalTrapezoidation::addToolpathSegment(const ExtrusionJunction& from, c std::vector& generated_toolpaths = *p_generated_toolpaths; - size_t inset_idx = from.perimeter_index; + size_t inset_idx = from.perimeter_index_; if (inset_idx >= generated_toolpaths.size()) { generated_toolpaths.resize(inset_idx + 1); } - assert((generated_toolpaths[inset_idx].empty() || ! generated_toolpaths[inset_idx].back().junctions.empty()) && "empty extrusion lines should never have been generated"); - if (generated_toolpaths[inset_idx].empty() || generated_toolpaths[inset_idx].back().is_odd != is_odd - || generated_toolpaths[inset_idx].back().junctions.back().perimeter_index != inset_idx // inset_idx should always be consistent + assert((generated_toolpaths[inset_idx].empty() || ! generated_toolpaths[inset_idx].back().junctions_.empty()) && "empty extrusion lines should never have been generated"); + if (generated_toolpaths[inset_idx].empty() || generated_toolpaths[inset_idx].back().is_odd_ != is_odd + || generated_toolpaths[inset_idx].back().junctions_.back().perimeter_index_ != inset_idx // inset_idx should always be consistent ) { force_new_path = true; } - if (! force_new_path && shorterThen(generated_toolpaths[inset_idx].back().junctions.back().p - from.p, 10) - && std::abs(generated_toolpaths[inset_idx].back().junctions.back().w - from.w) < 10 && ! from_is_3way // force new path at 3way intersection + if (! force_new_path && shorterThen(generated_toolpaths[inset_idx].back().junctions_.back().p_ - from.p_, 10) + && std::abs(generated_toolpaths[inset_idx].back().junctions_.back().w_ - from.w_) < 10 && ! from_is_3way // force new path at 3way intersection ) { - generated_toolpaths[inset_idx].back().junctions.push_back(to); + generated_toolpaths[inset_idx].back().junctions_.push_back(to); } else if ( - ! force_new_path && shorterThen(generated_toolpaths[inset_idx].back().junctions.back().p - to.p, 10) - && std::abs(generated_toolpaths[inset_idx].back().junctions.back().w - to.w) < 10 && ! to_is_3way // force new path at 3way intersection + ! force_new_path && shorterThen(generated_toolpaths[inset_idx].back().junctions_.back().p_ - to.p_, 10) + && std::abs(generated_toolpaths[inset_idx].back().junctions_.back().w_ - to.w_) < 10 && ! to_is_3way // force new path at 3way intersection ) { if (! is_odd) { spdlog::error("Reversing even wall line causes it to be printed CCW instead of CW!"); } - generated_toolpaths[inset_idx].back().junctions.push_back(from); + generated_toolpaths[inset_idx].back().junctions_.push_back(from); } else { generated_toolpaths[inset_idx].emplace_back(inset_idx, is_odd); - generated_toolpaths[inset_idx].back().junctions.push_back(from); - generated_toolpaths[inset_idx].back().junctions.push_back(to); + generated_toolpaths[inset_idx].back().junctions_.push_back(from); + generated_toolpaths[inset_idx].back().junctions_.push_back(to); } }; @@ -2111,7 +2111,7 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ if (edge_to_peak->prev_) { LineJunctions from_prev_junctions = *edge_to_peak->prev_->data_.getExtrusionJunctions(); - while (! from_junctions.empty() && ! from_prev_junctions.empty() && from_junctions.back().perimeter_index <= from_prev_junctions.front().perimeter_index) + while (! from_junctions.empty() && ! from_prev_junctions.empty() && from_junctions.back().perimeter_index_ <= from_prev_junctions.front().perimeter_index_) { from_junctions.pop_back(); } @@ -2126,7 +2126,7 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ if (edge_from_peak->next_) { LineJunctions to_next_junctions = *edge_from_peak->next_->twin_->data_.getExtrusionJunctions(); - while (! to_junctions.empty() && ! to_next_junctions.empty() && to_junctions.back().perimeter_index <= to_next_junctions.front().perimeter_index) + while (! to_junctions.empty() && ! to_next_junctions.empty() && to_junctions.back().perimeter_index_ <= to_next_junctions.front().perimeter_index_) { to_junctions.pop_back(); } @@ -2152,19 +2152,19 @@ void SkeletalTrapezoidation::connectJunctions(ptr_vector_t& edge_ { ExtrusionJunction& from = from_junctions[from_junctions.size() - 1 - junction_rev_idx]; ExtrusionJunction& to = to_junctions[to_junctions.size() - 1 - junction_rev_idx]; - assert(from.perimeter_index == to.perimeter_index); - if (from.perimeter_index != to.perimeter_index) + assert(from.perimeter_index_ == to.perimeter_index_); + if (from.perimeter_index_ != to.perimeter_index_) { - spdlog::warn("Connecting two perimeters with different indices! Perimeter {} and {}", from.perimeter_index, to.perimeter_index); + spdlog::warn("Connecting two perimeters with different indices! Perimeter {} and {}", from.perimeter_index_, to.perimeter_index_); } const bool from_is_odd = quad_start->to_->data_.bead_count_ > 0 && quad_start->to_->data_.bead_count_ % 2 == 1 // quad contains single bead segment && quad_start->to_->data_.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment - && shorterThen(from.p - quad_start->to_->p_, 5); + && shorterThen(from.p_ - quad_start->to_->p_, 5); const bool to_is_odd = quad_end->from_->data_.bead_count_ > 0 && quad_end->from_->data_.bead_count_ % 2 == 1 // quad contains single bead segment && quad_end->from_->data_.transition_ratio_ == 0 // We're not in a transition && junction_rev_idx == segment_count - 1 // Is single bead segment - && shorterThen(to.p - quad_end->from_->p_, 5); + && shorterThen(to.p_ - quad_end->from_->p_, 5); const bool is_odd_segment = from_is_odd && to_is_odd; if (is_odd_segment && passed_odd_edges.count(quad_start->next_->twin_) > 0) // Only generate toolpath for odd segments once @@ -2215,7 +2215,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() for (coord_t segment = 0; segment < n_segments; segment++) { double a = 2.0 * std::numbers::pi / n_segments * segment; - line.junctions.emplace_back(node.p_ + Point(r * cos(a), r * sin(a)), width, inset_index); + line.junctions_.emplace_back(node.p_ + Point(r * cos(a), r * sin(a)), width, inset_index); } } } diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index b27abb3a54..f3b9b8974a 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -135,7 +135,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage PointMatrix rotate(-direction + 90); const Point center = bounding_box.getMiddle(); const Point far_away = rotate.apply( - Point(0, vSize(bounding_box.max - center) * 100)); // Some direction very far away in the direction perpendicular to the ironing lines, relative to the centre. + Point(0, vSize(bounding_box.max_ - center) * 100)); // Some direction very far away in the direction perpendicular to the ironing lines, relative to the centre. // Two options to start, both perpendicular to the ironing lines. Which is closer? const Point front_side = PolygonUtils::findNearestVert(center + far_away, ironed_areas).p(); const Point back_side = PolygonUtils::findNearestVert(center - far_away, ironed_areas).p(); diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index c6c57d901f..4c993cd487 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -391,8 +391,8 @@ std::shared_ptr TreeSupportTipGenerator::generateCrossFi const coord_t aabb_expansion = mesh.settings.get("support_offset"); AABB3D aabb_here(mesh.bounding_box); - aabb_here.include(aabb_here.min - Point3(-aabb_expansion, -aabb_expansion, 0)); - aabb_here.include(aabb_here.max + Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.min_ - Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.max_ + Point3(-aabb_expansion, -aabb_expansion, 0)); aabb.include(aabb_here); const std::string cross_subdisivion_spec_image_file = mesh.settings.get("cross_support_density_image"); @@ -664,9 +664,9 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( support_tree_branch_reach_limit); elem->area_ = new Polygons(area); - for (Point p : additional_ovalization_targets) + for (Point target : additional_ovalization_targets) { - elem->additional_ovalization_targets_.emplace_back(p); + elem->additional_ovalization_targets_.emplace_back(target); } move_bounds[insert_layer].emplace(elem); @@ -879,17 +879,16 @@ void TreeSupportTipGenerator::generateTips( = relevant_forbidden.offset(EPSILON) .unionPolygons(); // Prevent rounding errors down the line, points placed directly on the line of the forbidden area may not be added otherwise. - std::function generateLines = [&](const Polygons& area, bool roof, LayerIndex layer_idx) + std::function generateLines = [&](const Polygons& area, bool roof, LayerIndex generate_layer_idx) { coord_t upper_line_distance = support_supporting_branch_distance; coord_t line_distance = std::max(roof ? support_roof_line_distance : support_tree_branch_distance, upper_line_distance); - return TreeSupportUtils::generateSupportInfillLines( area, config, roof && ! use_fake_roof, - layer_idx, + generate_layer_idx, line_distance, cross_fill_provider, roof && ! use_fake_roof, diff --git a/src/WallToolPaths.cpp b/src/WallToolPaths.cpp index edf90d751a..75a98b843a 100644 --- a/src/WallToolPaths.cpp +++ b/src/WallToolPaths.cpp @@ -3,6 +3,14 @@ #include "WallToolPaths.h" +#include //For std::partition_copy and std::min_element. +#include + +#include +#include +#include +#include + #include "ExtruderTrain.h" #include "SkeletalTrapezoidation.h" #include "utils/PolylineStitcher.h" @@ -11,14 +19,6 @@ #include "utils/actions/smooth.h" #include "utils/polygonUtils.h" -#include -#include -#include -#include - -#include //For std::partition_copy and std::min_element. -#include - namespace cura { @@ -161,11 +161,11 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); stitchToolPaths(toolpaths_, settings_); scripta::log( @@ -173,11 +173,11 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); removeSmallLines(toolpaths_); scripta::log( @@ -185,11 +185,11 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); simplifyToolPaths(toolpaths_, settings_); scripta::log( @@ -197,11 +197,11 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); separateOutInnerContour(); @@ -211,18 +211,18 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); assert( std::is_sorted( toolpaths_.cbegin(), toolpaths_.cend(), [](const VariableWidthLines& l, const VariableWidthLines& r) { - return l.front().inset_idx < r.front().inset_idx; + return l.front().inset_idx_ < r.front().inset_idx_; }) && "WallToolPaths should be sorted from the outer 0th to inner_walls"); toolpaths_generated_ = true; @@ -231,11 +231,11 @@ const std::vector& WallToolPaths::generate() toolpaths_, section_type_, layer_idx_, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); return toolpaths_; } @@ -256,17 +256,17 @@ void WallToolPaths::stitchToolPaths(std::vector& toolpaths, for (ExtrusionLine& wall_polygon : closed_polygons) { - if (wall_polygon.junctions.empty()) + if (wall_polygon.junctions_.empty()) { continue; } - wall_polygon.is_closed = true; + wall_polygon.is_closed_ = true; wall_lines.emplace_back(std::move(wall_polygon)); // add stitched polygons to result } #ifdef DEBUG for (ExtrusionLine& line : wall_lines) { - assert(line.inset_idx == wall_idx); + assert(line.inset_idx_ == wall_idx); } #endif // DEBUG } @@ -282,9 +282,9 @@ void WallToolPaths::removeSmallLines(std::vector& toolpaths) coord_t min_width = std::numeric_limits::max(); for (const ExtrusionJunction& j : line) { - min_width = std::min(min_width, j.w); + min_width = std::min(min_width, j.w_); } - if (line.is_odd && ! line.is_closed && shorterThan(line, min_width / 2)) + if (line.is_odd_ && ! line.is_closed_ && shorterThan(line, min_width / 2)) { // remove line line = std::move(inset.back()); inset.erase(--inset.end()); @@ -303,9 +303,9 @@ void WallToolPaths::simplifyToolPaths(std::vector& toolpaths | ranges::views::transform( [&simplifier](auto& line) { - auto line_ = line.is_closed ? simplifier.polygon(line) : simplifier.polyline(line); + auto line_ = line.is_closed_ ? simplifier.polygon(line) : simplifier.polyline(line); - if (line_.is_closed && line_.size() >= 2 && line_.front() != line_.back()) + if (line_.is_closed_ && line_.size() >= 2 && line_.front() != line_.back()) { line_.emplace_back(line_.front()); } @@ -357,7 +357,7 @@ void WallToolPaths::separateOutInnerContour() { for (const ExtrusionJunction& j : line) { - if (j.w == 0) + if (j.w_ == 0) { is_contour = true; } @@ -377,17 +377,17 @@ void WallToolPaths::separateOutInnerContour() { for (const ExtrusionJunction& j : line) { - assert(j.w == 0); + assert(j.w_ == 0); } } #endif // DEBUG for (const ExtrusionLine& line : inset) { - if (line.is_odd) + if (line.is_odd_) { continue; // odd lines don't contribute to the contour } - else if (line.is_closed) // sometimes an very small even polygonal wall is not stitched into a polygon + else if (line.is_closed_) // sometimes an very small even polygonal wall is not stitched into a polygon { inner_contour_.emplace_back(line.toPolygon()); } diff --git a/src/bridge.cpp b/src/bridge.cpp index a5a1ab40ac..30ed81ed9c 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -117,7 +117,7 @@ int bridgeAngle( // It needs to be shrunk slightly so that the vertices of the skin polygon that would otherwise fall exactly on // the air boundary do appear to be supported - const int bb_max_dim = std::max(boundary_box.max.X - boundary_box.min.X, boundary_box.max.Y - boundary_box.min.Y); + const int bb_max_dim = std::max(boundary_box.max_.X - boundary_box.min_.X, boundary_box.max_.Y - boundary_box.min_.Y); const Polygons air_below(bb_poly.offset(bb_max_dim).difference(prev_layer_outline).offset(-10)); Polygons skin_perimeter_lines; diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index de365e2bf9..4b608dfbfb 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -25,8 +25,8 @@ namespace cura { CommandLine::CommandLine(const std::vector& arguments) - : arguments(arguments) - , last_shown_progress(0) + : arguments_(arguments) + , last_shown_progress_(0) { } @@ -67,7 +67,7 @@ void CommandLine::setLayerForSend(const LayerIndex::value_type&) bool CommandLine::hasSlice() const { - return ! arguments.empty(); + return ! arguments_.empty(); } bool CommandLine::isSequential() const @@ -101,7 +101,7 @@ void CommandLine::sendPrintTimeMaterialEstimates() const void CommandLine::sendProgress(double progress) const { const unsigned int rounded_amount = 100 * progress; - if (last_shown_progress == rounded_amount) // No need to send another tiny update step. + if (last_shown_progress_ == rounded_amount) // No need to send another tiny update step. { return; } @@ -114,9 +114,9 @@ void CommandLine::sliceNext() // Count the number of mesh groups to slice for. size_t num_mesh_groups = 1; - for (size_t argument_index = 2; argument_index < arguments.size(); argument_index++) + for (size_t argument_index = 2; argument_index < arguments_.size(); argument_index++) { - if (arguments[argument_index].find("--next") == 0) // Starts with "--next". + if (arguments_[argument_index].find("--next") == 0) // Starts with "--next". { num_mesh_groups++; } @@ -128,16 +128,16 @@ void CommandLine::sliceNext() size_t mesh_group_index = 0; Settings* last_settings = &slice.scene.settings; - slice.scene.extruders.reserve(arguments.size() >> 1); // Allocate enough memory to prevent moves. + slice.scene.extruders.reserve(arguments_.size() >> 1); // Allocate enough memory to prevent moves. slice.scene.extruders.emplace_back(0, &slice.scene.settings); // Always have one extruder. ExtruderTrain* last_extruder = &slice.scene.extruders[0]; bool force_read_parent = false; bool force_read_nondefault = false; - for (size_t argument_index = 2; argument_index < arguments.size(); argument_index++) + for (size_t argument_index = 2; argument_index < arguments_.size(); argument_index++) { - std::string argument = arguments[argument_index]; + std::string argument = arguments_[argument_index]; if (argument[0] == '-') // Starts with "-". { if (argument[1] == '-') // Starts with "--". @@ -185,7 +185,7 @@ void CommandLine::sliceNext() } else // Starts with "-" but not with "--". { - argument = arguments[argument_index]; + argument = arguments_[argument_index]; switch (argument[1]) { case 'v': @@ -207,12 +207,12 @@ void CommandLine::sliceNext() case 'j': { argument_index++; - if (argument_index >= arguments.size()) + if (argument_index >= arguments_.size()) { spdlog::error("Missing JSON file with -j argument."); exit(1); } - argument = arguments[argument_index]; + argument = arguments_[argument_index]; if (loadJSON(argument, *last_settings, force_read_parent, force_read_nondefault)) { spdlog::error("Failed to load JSON file: {}", argument); @@ -250,12 +250,12 @@ void CommandLine::sliceNext() case 'l': { argument_index++; - if (argument_index >= arguments.size()) + if (argument_index >= arguments_.size()) { spdlog::error("Missing model file with -l argument."); exit(1); } - argument = arguments[argument_index]; + argument = arguments_[argument_index]; const Matrix4x3D transformation = last_settings->get("mesh_rotation_matrix"); // The transformation applied to the model when loaded. @@ -273,12 +273,12 @@ void CommandLine::sliceNext() case 'o': { argument_index++; - if (argument_index >= arguments.size()) + if (argument_index >= arguments_.size()) { spdlog::error("Missing output file with -o argument."); exit(1); } - argument = arguments[argument_index]; + argument = arguments_[argument_index]; if (! FffProcessor::getInstance()->setTargetFile(argument.c_str())) { spdlog::error("Failed to open {} for output.", argument.c_str()); @@ -296,12 +296,12 @@ void CommandLine::sliceNext() { // Parse the given setting and store it. argument_index++; - if (argument_index >= arguments.size()) + if (argument_index >= arguments_.size()) { spdlog::error("Missing setting name and value with -s argument."); exit(1); } - argument = arguments[argument_index]; + argument = arguments_[argument_index]; const size_t value_position = argument.find("="); std::string key = argument.substr(0, value_position); if (value_position == std::string::npos) @@ -333,7 +333,7 @@ void CommandLine::sliceNext() } } - arguments.clear(); // We've processed all arguments now. + arguments_.clear(); // We've processed all arguments now. #ifndef DEBUG try diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 5e4e1db16e..8d87717fa3 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -249,18 +249,18 @@ std::string GCodeExport::getFileHeader( prefix << ";PRINT.GROUPS:" << Application::getInstance().current_slice_->scene.mesh_groups.size() << new_line_; - if (total_bounding_box_.min.x_ > total_bounding_box_.max.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. + if (total_bounding_box_.min_.x_ > total_bounding_box_.max_.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. { // Put some small default in there. - total_bounding_box_.min = Point3(0, 0, 0); - total_bounding_box_.max = Point3(10, 10, 10); + total_bounding_box_.min_ = Point3(0, 0, 0); + total_bounding_box_.max_ = Point3(10, 10, 10); } - prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box_.min.x_) << new_line_; - prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box_.min.y_) << new_line_; - prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box_.min.z_) << new_line_; - prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box_.max.x_) << new_line_; - prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box_.max.y_) << new_line_; - prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box_.max.z_) << new_line_; + prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box_.min_.x_) << new_line_; + prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box_.min_.y_) << new_line_; + prefix << ";PRINT.SIZE.MIN.Z:" << INT2MM(total_bounding_box_.min_.z_) << new_line_; + prefix << ";PRINT.SIZE.MAX.X:" << INT2MM(total_bounding_box_.max_.x_) << new_line_; + prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box_.max_.y_) << new_line_; + prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box_.max_.z_) << new_line_; prefix << ";SLICE_UUID:" << slice_uuid_ << new_line_; prefix << ";END_OF_HEADER" << new_line_; break; @@ -302,12 +302,12 @@ std::string GCodeExport::getFileHeader( prefix << new_line_; prefix << ";Layer height: " << Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height") << new_line_; } - prefix << ";MINX:" << INT2MM(total_bounding_box_.min.x_) << new_line_; - prefix << ";MINY:" << INT2MM(total_bounding_box_.min.y_) << new_line_; - prefix << ";MINZ:" << INT2MM(total_bounding_box_.min.z_) << new_line_; - prefix << ";MAXX:" << INT2MM(total_bounding_box_.max.x_) << new_line_; - prefix << ";MAXY:" << INT2MM(total_bounding_box_.max.y_) << new_line_; - prefix << ";MAXZ:" << INT2MM(total_bounding_box_.max.z_) << new_line_; + prefix << ";MINX:" << INT2MM(total_bounding_box_.min_.x_) << new_line_; + prefix << ";MINY:" << INT2MM(total_bounding_box_.min_.y_) << new_line_; + prefix << ";MINZ:" << INT2MM(total_bounding_box_.min_.z_) << new_line_; + prefix << ";MAXX:" << INT2MM(total_bounding_box_.max_.x_) << new_line_; + prefix << ";MAXY:" << INT2MM(total_bounding_box_.max_.y_) << new_line_; + prefix << ";MAXZ:" << INT2MM(total_bounding_box_.max_.z_) << new_line_; prefix << ";TARGET_MACHINE.NAME:" << transliterate(machine_name_) << new_line_; } diff --git a/src/infill.cpp b/src/infill.cpp index 6c7f5e80dc..2deda6f1b8 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -144,11 +144,11 @@ void Infill::generate( small_infill_paths, section_type, layer_idx, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); for (const auto& small_infill_path : small_infill_paths) { toolpaths.emplace_back(small_infill_path); @@ -207,11 +207,11 @@ void Infill::generate( toolpaths, section_type, layer_idx, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); if (connect_polygons_) { // remove too small polygons @@ -240,11 +240,11 @@ void Infill::generate( toolpaths, section_type, layer_idx, - scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed }, - scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd }, - scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx }, - scripta::PointVDI{ "width", &ExtrusionJunction::w }, - scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index }); + scripta::CellVDI{ "is_closed", &ExtrusionLine::is_closed_ }, + scripta::CellVDI{ "is_odd", &ExtrusionLine::is_odd_ }, + scripta::CellVDI{ "inset_idx", &ExtrusionLine::inset_idx_ }, + scripta::PointVDI{ "width", &ExtrusionJunction::w_ }, + scripta::PointVDI{ "perimeter_index", &ExtrusionJunction::perimeter_index_ }); } } @@ -566,7 +566,7 @@ void Infill::addLineInfill( assert(! connect_lines_ && "connectLines() should add the infill lines, not addLineInfill"); unsigned int scanline_idx = 0; - for (coord_t x = scanline_min_idx * line_distance + shift; x < boundary.max.X; x += line_distance) + for (coord_t x = scanline_min_idx * line_distance + shift; x < boundary.max_.X; x += line_distance) { if (scanline_idx >= cut_list.size()) { @@ -666,8 +666,8 @@ void Infill::generateLinearBasedInfill( AABB boundary(outline); - int scanline_min_idx = computeScanSegmentIdx(boundary.min.X - shift, line_distance); - int line_count = computeScanSegmentIdx(boundary.max.X - shift, line_distance) + 1 - scanline_min_idx; + int scanline_min_idx = computeScanSegmentIdx(boundary.min_.X - shift, line_distance); + int line_count = computeScanSegmentIdx(boundary.max_.X - shift, line_distance) + 1 - scanline_min_idx; std::vector> cut_list(line_count); // mapping from scanline to all intersections with polygon segments @@ -692,8 +692,8 @@ void Infill::generateLinearBasedInfill( } }; std::vector> crossings_per_scanline; // For each scanline, a list of crossings. - const int min_scanline_index = computeScanSegmentIdx(boundary.min.X - shift, line_distance) + 1; - const int max_scanline_index = computeScanSegmentIdx(boundary.max.X - shift, line_distance) + 1; + const int min_scanline_index = computeScanSegmentIdx(boundary.min_.X - shift, line_distance) + 1; + const int max_scanline_index = computeScanSegmentIdx(boundary.max_.X - shift, line_distance) + 1; crossings_per_scanline.resize(max_scanline_index - min_scanline_index); if (connect_lines_) { diff --git a/src/infill/GyroidInfill.cpp b/src/infill/GyroidInfill.cpp index dbabec6f61..253cabdea9 100644 --- a/src/infill/GyroidInfill.cpp +++ b/src/infill/GyroidInfill.cpp @@ -62,14 +62,14 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za } const unsigned num_coords = odd_line_coords.size(); unsigned num_columns = 0; - for (coord_t x = (std::floor(aabb.min.X / pitch) - 2.25) * pitch; x <= aabb.max.X + pitch / 2; x += pitch / 2) + for (coord_t x = (std::floor(aabb.min_.X / pitch) - 2.25) * pitch; x <= aabb.max_.X + pitch / 2; x += pitch / 2) { bool is_first_point = true; Point last; bool last_inside = false; unsigned chain_end_index = 0; Point chain_end[2]; - for (coord_t y = (std::floor(aabb.min.Y / pitch) - 1) * pitch; y <= aabb.max.Y + pitch; y += pitch) + for (coord_t y = (std::floor(aabb.min_.Y / pitch) - 1) * pitch; y <= aabb.max_.Y + pitch; y += pitch) { for (unsigned i = 0; i < num_coords; ++i) { @@ -154,14 +154,14 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za } const unsigned num_coords = odd_line_coords.size(); unsigned num_rows = 0; - for (coord_t y = (std::floor(aabb.min.Y / pitch) - 1) * pitch; y <= aabb.max.Y + pitch / 2; y += pitch / 2) + for (coord_t y = (std::floor(aabb.min_.Y / pitch) - 1) * pitch; y <= aabb.max_.Y + pitch / 2; y += pitch / 2) { bool is_first_point = true; Point last; bool last_inside = false; unsigned chain_end_index = 0; Point chain_end[2]; - for (coord_t x = (std::floor(aabb.min.X / pitch) - 1) * pitch; x <= aabb.max.X + pitch; x += pitch) + for (coord_t x = (std::floor(aabb.min_.X / pitch) - 1) * pitch; x <= aabb.max_.X + pitch; x += pitch) { for (unsigned i = 0; i < num_coords; ++i) { diff --git a/src/infill/ImageBasedDensityProvider.cpp b/src/infill/ImageBasedDensityProvider.cpp index 4d2344e454..2835d05351 100644 --- a/src/infill/ImageBasedDensityProvider.cpp +++ b/src/infill/ImageBasedDensityProvider.cpp @@ -36,7 +36,7 @@ ImageBasedDensityProvider::ImageBasedDensityProvider(const std::string filename, } { // compute aabb Point middle = model_aabb.getMiddle(); - Point model_aabb_size = model_aabb.max - model_aabb.min; + Point model_aabb_size = model_aabb.max_ - model_aabb.min_; Point image_size2 = Point(image_size.x_, image_size.y_); double aabb_aspect_ratio = double(model_aabb_size.X) / double(model_aabb_size.Y); double image_aspect_ratio = double(image_size.x_) / double(image_size.y_); @@ -65,9 +65,9 @@ ImageBasedDensityProvider::~ImageBasedDensityProvider() double ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const { - AABB query_box(Point(query_cube.min.x_, query_cube.min.y_), Point(query_cube.max.x_, query_cube.max.y_)); - Point img_min = (query_box.min - print_aabb.min - Point(1, 1)) * image_size.x_ / (print_aabb.max.X - print_aabb.min.X); - Point img_max = (query_box.max - print_aabb.min + Point(1, 1)) * image_size.y_ / (print_aabb.max.Y - print_aabb.min.Y); + AABB query_box(Point(query_cube.min_.x_, query_cube.min_.y_), Point(query_cube.max_.x_, query_cube.max_.y_)); + Point img_min = (query_box.min_ - print_aabb.min_ - Point(1, 1)) * image_size.x_ / (print_aabb.max_.X - print_aabb.min_.X); + Point img_max = (query_box.max_ - print_aabb.min_ + Point(1, 1)) * image_size.y_ / (print_aabb.max_.Y - print_aabb.min_.Y); long total_lightness = 0; int value_count = 0; for (int x = std::max((coord_t)0, img_min.X); x <= std::min((coord_t)image_size.x_ - 1, img_max.X); x++) diff --git a/src/infill/LightningTreeNode.cpp b/src/infill/LightningTreeNode.cpp index cdde2d374d..3347a2ae63 100644 --- a/src/infill/LightningTreeNode.cpp +++ b/src/infill/LightningTreeNode.cpp @@ -15,7 +15,7 @@ coord_t LightningTreeNode::getWeightedDistance(const Point& unsupported_location constexpr coord_t max_valence_for_boost = 4; constexpr coord_t valence_boost_multiplier = 4; - const size_t valence = (! is_root) + children.size(); + const size_t valence = (! is_root_) + children_.size(); const coord_t valence_boost = (min_valence_for_boost < valence && valence < max_valence_for_boost) ? valence_boost_multiplier * supporting_radius : 0; const coord_t dist_here = vSize(getLocation() - unsupported_location); return dist_here - valence_boost; @@ -27,7 +27,7 @@ bool LightningTreeNode::hasOffspring(const LightningTreeNodeSPtr& to_be_checked) { return true; } - for (auto& child_ptr : children) + for (auto& child_ptr : children_) { if (child_ptr->hasOffspring(to_be_checked)) return true; @@ -37,17 +37,17 @@ bool LightningTreeNode::hasOffspring(const LightningTreeNodeSPtr& to_be_checked) const Point& LightningTreeNode::getLocation() const { - return p; + return p_; } void LightningTreeNode::setLocation(const Point& loc) { - p = loc; + p_ = loc; } LightningTreeNodeSPtr LightningTreeNode::addChild(const Point& child_loc) { - assert(p != child_loc); + assert(p_ != child_loc); LightningTreeNodeSPtr child = LightningTreeNode::create(child_loc); return addChild(child); } @@ -56,9 +56,9 @@ LightningTreeNodeSPtr LightningTreeNode::addChild(LightningTreeNodeSPtr& new_chi { assert(new_child != shared_from_this()); // assert(p != new_child->p); // NOTE: No problem for now. Issue to solve later. Maybe even afetr final. Low prio. - children.push_back(new_child); - new_child->parent = shared_from_this(); - new_child->is_root = false; + children_.push_back(new_child); + new_child->parent_ = shared_from_this(); + new_child->is_root_ = false; return new_child; } @@ -84,10 +84,10 @@ void LightningTreeNode::propagateToNextLayer( // Skips the root (because that has no root itself), but all initial nodes will have the root point anyway. void LightningTreeNode::visitBranches(const std::function& visitor) const { - for (const auto& node : children) + for (const auto& node : children_) { - assert(node->parent.lock() == shared_from_this()); - visitor(p, node->p); + assert(node->parent_.lock() == shared_from_this()); + visitor(p_, node->p_); node->visitBranches(visitor); } } @@ -96,69 +96,69 @@ void LightningTreeNode::visitBranches(const std::function& visitor) { visitor(shared_from_this()); - for (const auto& node : children) + for (const auto& node : children_) { - assert(node->parent.lock() == shared_from_this()); + assert(node->parent_.lock() == shared_from_this()); node->visitNodes(visitor); } } LightningTreeNode::LightningTreeNode(const Point& p, const std::optional& last_grounding_location /*= std::nullopt*/) - : is_root(true) - , p(p) - , last_grounding_location(last_grounding_location) + : is_root_(true) + , p_(p) + , last_grounding_location_(last_grounding_location) { } LightningTreeNodeSPtr LightningTreeNode::deepCopy() const { - LightningTreeNodeSPtr local_root = LightningTreeNode::create(p); - local_root->is_root = is_root; - if (is_root) + LightningTreeNodeSPtr local_root = LightningTreeNode::create(p_); + local_root->is_root_ = is_root_; + if (is_root_) { - local_root->last_grounding_location = last_grounding_location.value_or(p); + local_root->last_grounding_location_ = last_grounding_location_.value_or(p_); } - local_root->children.reserve(children.size()); - for (const auto& node : children) + local_root->children_.reserve(children_.size()); + for (const auto& node : children_) { LightningTreeNodeSPtr child = node->deepCopy(); - child->parent = local_root; - local_root->children.push_back(child); + child->parent_ = local_root; + local_root->children_.push_back(child); } return local_root; } void LightningTreeNode::reroot(LightningTreeNodeSPtr new_parent /*= nullptr*/) { - if (! is_root) + if (! is_root_) { - auto old_parent = parent.lock(); + auto old_parent = parent_.lock(); old_parent->reroot(shared_from_this()); - children.push_back(old_parent); + children_.push_back(old_parent); } if (new_parent) { - children.erase(std::remove(children.begin(), children.end(), new_parent), children.end()); - is_root = false; - parent = new_parent; + children_.erase(std::remove(children_.begin(), children_.end(), new_parent), children_.end()); + is_root_ = false; + parent_ = new_parent; } else { - is_root = true; - parent.reset(); + is_root_ = true; + parent_.reset(); } } LightningTreeNodeSPtr LightningTreeNode::closestNode(const Point& loc) { LightningTreeNodeSPtr result = shared_from_this(); - coord_t closest_dist2 = vSize2(p - loc); + coord_t closest_dist2 = vSize2(p_ - loc); - for (const auto& child : children) + for (const auto& child : children_) { LightningTreeNodeSPtr candidate_node = child->closestNode(loc); - const coord_t child_dist2 = vSize2(candidate_node->p - loc); + const coord_t child_dist2 = vSize2(candidate_node->p_ - loc); if (child_dist2 < closest_dist2) { closest_dist2 = child_dist2; @@ -176,7 +176,7 @@ bool LightningTreeNode::realign(const Polygons& outlines, const LocToLineGrid& o return false; } - if (outlines.inside(p, true)) + if (outlines.inside(p_, true)) { // Only keep children that have an unbroken connection to here, realign will put the rest in rerooted parts due to recursion: Point coll; @@ -185,11 +185,11 @@ bool LightningTreeNode::realign(const Polygons& outlines, const LocToLineGrid& o [&](const LightningTreeNodeSPtr& child) { bool connect_branch = child->realign(outlines, outline_locator, rerooted_parts); - if (connect_branch && PolygonUtils::lineSegmentPolygonsIntersection(child->p, p, outlines, outline_locator, coll, outline_locator.getCellSize() * 2)) + if (connect_branch && PolygonUtils::lineSegmentPolygonsIntersection(child->p_, p_, outlines, outline_locator, coll, outline_locator.getCellSize() * 2)) { - child->last_grounding_location.reset(); - child->parent.reset(); - child->is_root = true; + child->last_grounding_location_.reset(); + child->parent_.reset(); + child->is_root_ = true; rerooted_parts.push_back(child); reground_me = true; @@ -198,33 +198,33 @@ bool LightningTreeNode::realign(const Polygons& outlines, const LocToLineGrid& o return ! connect_branch; } }; - children.erase(std::remove_if(children.begin(), children.end(), remove_unconnected_func), children.end()); + children_.erase(std::remove_if(children_.begin(), children_.end(), remove_unconnected_func), children_.end()); if (reground_me) { - last_grounding_location.reset(); + last_grounding_location_.reset(); } return true; } // 'Lift' any decendants out of this tree: - for (auto& child : children) + for (auto& child : children_) { if (child->realign(outlines, outline_locator, rerooted_parts)) { - child->last_grounding_location = p; - child->parent.reset(); - child->is_root = true; + child->last_grounding_location_ = p_; + child->parent_.reset(); + child->is_root_ = true; rerooted_parts.push_back(child); } } - children.clear(); + children_.clear(); return false; } void LightningTreeNode::straighten(const coord_t magnitude, const coord_t max_remove_colinear_dist) { - straighten(magnitude, p, 0, max_remove_colinear_dist * max_remove_colinear_dist); + straighten(magnitude, p_, 0, max_remove_colinear_dist * max_remove_colinear_dist); } LightningTreeNode::RectilinearJunction @@ -234,10 +234,10 @@ LightningTreeNode::RectilinearJunction constexpr coord_t junction_magnitude_factor_denominator = 4; const coord_t junction_magnitude = magnitude * junction_magnitude_factor_numerator / junction_magnitude_factor_denominator; - if (children.size() == 1) + if (children_.size() == 1) { - auto child_p = children.front(); - coord_t child_dist = vSize(p - child_p->p); + auto child_p = children_.front(); + coord_t child_dist = vSize(p_ - child_p->p_); RectilinearJunction junction_below = child_p->straighten(magnitude, junction_above, accumulated_dist + child_dist, max_remove_colinear_dist2); coord_t total_dist_to_junction_below = junction_below.total_recti_dist; Point a = junction_above; @@ -246,25 +246,25 @@ LightningTreeNode::RectilinearJunction { Point ab = b - a; Point destination = a + ab * accumulated_dist / std::max(coord_t(1), total_dist_to_junction_below); - if (shorterThen(destination - p, magnitude)) + if (shorterThen(destination - p_, magnitude)) { - p = destination; + p_ = destination; } else { - p = p + normal(destination - p, magnitude); + p_ = p_ + normal(destination - p_, magnitude); } } { // remove nodes on linear segments constexpr coord_t close_enough = 10; - child_p = children.front(); // recursive call to straighten might have removed the child - const LightningTreeNodeSPtr& parent_node = parent.lock(); - if (parent_node && vSize2(child_p->p - parent_node->p) < max_remove_colinear_dist2 - && LinearAlg2D::getDist2FromLineSegment(parent_node->p, p, child_p->p) < close_enough) + child_p = children_.front(); // recursive call to straighten might have removed the child + const LightningTreeNodeSPtr& parent_node = parent_.lock(); + if (parent_node && vSize2(child_p->p_ - parent_node->p_) < max_remove_colinear_dist2 + && LinearAlg2D::getDist2FromLineSegment(parent_node->p_, p_, child_p->p_) < close_enough) { - child_p->parent = parent; - for (auto& sibling : parent_node->children) + child_p->parent_ = parent_; + for (auto& sibling : parent_node->children_) { // find this node among siblings if (sibling == shared_from_this()) { @@ -279,29 +279,29 @@ LightningTreeNode::RectilinearJunction else { constexpr coord_t weight = 1000; - Point junction_moving_dir = normal(junction_above - p, weight); + Point junction_moving_dir = normal(junction_above - p_, weight); bool prevent_junction_moving = false; - for (auto& child_p : children) + for (auto& child_p : children_) { - const coord_t child_dist = vSize(p - child_p->p); - RectilinearJunction below = child_p->straighten(magnitude, p, child_dist, max_remove_colinear_dist2); + const coord_t child_dist = vSize(p_ - child_p->p_); + RectilinearJunction below = child_p->straighten(magnitude, p_, child_dist, max_remove_colinear_dist2); - junction_moving_dir += normal(below.junction_loc - p, weight); + junction_moving_dir += normal(below.junction_loc - p_, weight); if (below.total_recti_dist < magnitude) // TODO: make configurable? { prevent_junction_moving = true; // prevent flipflopping in branches due to straightening and junctoin moving clashing } } - if (junction_moving_dir != Point(0, 0) && ! children.empty() && ! is_root && ! prevent_junction_moving) + if (junction_moving_dir != Point(0, 0) && ! children_.empty() && ! is_root_ && ! prevent_junction_moving) { coord_t junction_moving_dir_len = vSize(junction_moving_dir); if (junction_moving_dir_len > junction_magnitude) { junction_moving_dir = junction_moving_dir * junction_magnitude / junction_moving_dir_len; } - p += junction_moving_dir; + p_ += junction_moving_dir; } - return RectilinearJunction{ accumulated_dist, p }; + return RectilinearJunction{ accumulated_dist, p_ }; } } @@ -314,7 +314,7 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) } coord_t max_distance_pruned = 0; - for (auto child_it = children.begin(); child_it != children.end();) + for (auto child_it = children_.begin(); child_it != children_.end();) { auto& child = *child_it; coord_t dist_pruned_child = child->prune(pruning_distance); @@ -331,9 +331,9 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) const coord_t ab_len = vSize(ba); if (dist_pruned_child + ab_len <= pruning_distance) { // we're still in the process of pruning - assert(child->children.empty() && "when pruning away a node all it's children must already have been pruned away"); + assert(child->children_.empty() && "when pruning away a node all it's children must already have been pruned away"); max_distance_pruned = std::max(max_distance_pruned, dist_pruned_child + ab_len); - child_it = children.erase(child_it); + child_it = children_.erase(child_it); } else { // pruning stops in between this node and the child @@ -351,7 +351,7 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) const std::optional& LightningTreeNode::getLastGroundingLocation() const { - return last_grounding_location; + return last_grounding_location_; } void LightningTreeNode::convertToPolylines(Polygons& output, const coord_t line_width) const @@ -365,23 +365,23 @@ void LightningTreeNode::convertToPolylines(Polygons& output, const coord_t line_ void LightningTreeNode::convertToPolylines(size_t long_line_idx, Polygons& output) const { - if (children.empty()) + if (children_.empty()) { - output[long_line_idx].add(p); + output[long_line_idx].add(p_); return; } - size_t first_child_idx = rand() % children.size(); - children[first_child_idx]->convertToPolylines(long_line_idx, output); - output[long_line_idx].add(p); + size_t first_child_idx = rand() % children_.size(); + children_[first_child_idx]->convertToPolylines(long_line_idx, output); + output[long_line_idx].add(p_); - for (size_t idx_offset = 1; idx_offset < children.size(); idx_offset++) + for (size_t idx_offset = 1; idx_offset < children_.size(); idx_offset++) { - size_t child_idx = (first_child_idx + idx_offset) % children.size(); - const LightningTreeNode& child = *children[child_idx]; + size_t child_idx = (first_child_idx + idx_offset) % children_.size(); + const LightningTreeNode& child = *children_[child_idx]; output.newPoly(); size_t child_line_idx = output.size() - 1; child.convertToPolylines(child_line_idx, output); - output[child_line_idx].add(p); + output[child_line_idx].add(p_); } } diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index b3a15b3b46..b1dc6f545a 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -27,18 +27,18 @@ static constexpr double allowed_length_error = 0.01; static constexpr bool deep_debug_checking = false; SierpinskiFill::SierpinskiFill(const DensityProvider& density_provider, const AABB aabb, int max_depth, const coord_t line_width, bool dithering) - : dithering(dithering) - , constraint_error_diffusion(dithering) - , density_provider(density_provider) - , aabb(aabb) - , line_width(line_width) - , max_depth(max_depth) + : dithering_(dithering) + , constraint_error_diffusion_(dithering) + , density_provider_(density_provider) + , aabb_(aabb) + , line_width_(line_width) + , max_depth_(max_depth) { createTree(); createLowerBoundSequence(); - for (SierpinskiTriangle* node : sequence) + for (SierpinskiTriangle* node : sequence_) { if (node->getValueError() < -allowed_length_error) { @@ -66,27 +66,27 @@ SierpinskiFill::~SierpinskiFill() void SierpinskiFill::createTree() { - Point lt = Point(aabb.min.X, aabb.max.Y); - Point rb = Point(aabb.max.X, aabb.min.Y); + Point lt = Point(aabb_.min_.X, aabb_.max_.Y); + Point rb = Point(aabb_.max_.X, aabb_.min_.Y); bool root_straight_corner_is_left = false; int root_depth = 1; - root.children.emplace_back(rb, aabb.min, aabb.max, SierpinskiTriangle::SierpinskiDirection::AC_TO_AB, root_straight_corner_is_left, root_depth); - root.children.emplace_back(lt, aabb.max, aabb.min, SierpinskiTriangle::SierpinskiDirection::AC_TO_AB, root_straight_corner_is_left, root_depth); - for (SierpinskiTriangle& triangle : root.children) + root_.children.emplace_back(rb, aabb_.min_, aabb_.max_, SierpinskiTriangle::SierpinskiDirection::AC_TO_AB, root_straight_corner_is_left, root_depth); + root_.children.emplace_back(lt, aabb_.max_, aabb_.min_, SierpinskiTriangle::SierpinskiDirection::AC_TO_AB, root_straight_corner_is_left, root_depth); + for (SierpinskiTriangle& triangle : root_.children) { createTree(triangle); } // calculate node statistics - createTreeStatistics(root); + createTreeStatistics(root_); - createTreeRequestedLengths(root); + createTreeRequestedLengths(root_); } void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) { - if (sub_root.depth_ < max_depth) // We need to subdivide. + if (sub_root.depth_ < max_depth_) // We need to subdivide. { SierpinskiTriangle& t = sub_root; Point middle = (t.a_ + t.b_) / 2; @@ -140,9 +140,9 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) triangle_aabb.include(triangle.a_); triangle_aabb.include(triangle.b_); triangle_aabb.include(triangle.straight_corner_); - AABB3D triangle_aabb3d(Point3(triangle_aabb.min.X, triangle_aabb.min.Y, 0), Point3(triangle_aabb.max.X, triangle_aabb.max.Y, 1)); - double density = density_provider(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. - triangle.requested_length_ = density * triangle.area_ / INT2MM(line_width); + AABB3D triangle_aabb3d(Point3(triangle_aabb.min_.X, triangle_aabb.min_.Y, 0), Point3(triangle_aabb.max_.X, triangle_aabb.max_.Y, 1)); + double density = density_provider_(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. + triangle.requested_length_ = density * triangle.area_ / INT2MM(line_width_); } else { // bubble total up requested_length and total_child_realized_length @@ -158,7 +158,7 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) void SierpinskiFill::createLowerBoundSequence() { - sequence.emplace_front(&root); + sequence_.emplace_front(&root_); if (deep_debug_checking) debugCheck(); @@ -169,7 +169,7 @@ void SierpinskiFill::createLowerBoundSequence() if (deep_debug_checking) debugCheck(); - if (constraint_error_diffusion) + if (constraint_error_diffusion_) { change |= bubbleUpConstraintErrors(); if (deep_debug_checking) @@ -178,7 +178,7 @@ void SierpinskiFill::createLowerBoundSequence() if (! change) { - spdlog::debug("Finished after {} iterations, with a max depth of {}.", iteration + 1, max_depth); + spdlog::debug("Finished after {} iterations, with a max depth of {}.", iteration + 1, max_depth_); break; } } @@ -186,9 +186,9 @@ void SierpinskiFill::createLowerBoundSequence() std::vector::iterator>> SierpinskiFill::getDepthOrdered() { - std::vector::iterator>> depth_ordered(max_depth + 1); - depth_ordered.resize(max_depth); - for (std::list::iterator it = sequence.begin(); it != sequence.end(); ++it) + std::vector::iterator>> depth_ordered(max_depth_ + 1); + depth_ordered.resize(max_depth_); + for (std::list::iterator it = sequence_.begin(); it != sequence_.end(); ++it) { SierpinskiTriangle* node = *it; depth_ordered[node->depth_].emplace_back(it); @@ -212,11 +212,11 @@ bool SierpinskiFill::subdivideAll() // so then the range will be two long rather than one. std::list::iterator begin = it; std::list::iterator end = std::next(it); - if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence_.end()) { continue; // don't subdivide these two triangles just yet, wait till next iteration } - if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence_.begin()) { begin = std::prev(it); assert((*begin)->depth_ == triangle.depth_ || isConstrainedBackward(it)); @@ -229,7 +229,7 @@ bool SierpinskiFill::subdivideAll() // Don't check for constraining in between the cells in the range; // the range is defined as the range of triangles which are constraining each other simultaneously. - if (node->depth_ == max_depth) // Never subdivide beyond maximum depth. + if (node->depth_ == max_depth_) // Never subdivide beyond maximum depth. continue; double total_subdiv_error = getSubdivisionError(begin, end); if (! node->children.empty() && total_subdiv_error >= 0 && ! is_constrained) @@ -248,7 +248,7 @@ bool SierpinskiFill::bubbleUpConstraintErrors() bool redistributed_anything = false; - for (int depth = max_depth; depth >= 0; depth--) + for (int depth = max_depth_; depth >= 0; depth--) { std::vector::iterator>& depth_nodes = depth_ordered[depth]; for (std::list::iterator it : depth_nodes) @@ -323,13 +323,13 @@ std::list::iterator assert(! node->children.empty() && "cannot subdivide node with no children!"); for (SierpinskiTriangle& child : node->children) { - sequence.insert(begin, &child); + sequence_.insert(begin, &child); } } first_child_it++; // removal of parents std::list::iterator last_child_it = std::prev(begin); - sequence.erase(begin, end); + sequence_.erase(begin, end); if (redistribute_errors && deep_debug_checking) debugCheck(false); @@ -357,19 +357,19 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: for (auto it = begin; it != end && std::next(it) != end; ++it) { SierpinskiTriangle* node = *it; - SierpinskiTriangle* next = *std::next(it); - if (std::abs(node->error_right_ + next->error_left_) > allowed_length_error) + SierpinskiTriangle* other = *std::next(it); + if (std::abs(node->error_right_ + other->error_left_) > allowed_length_error) { - spdlog::warn("Nodes aren't balanced! er: {} next el: {}", node->error_right_, next->error_left_); + spdlog::warn("Nodes aren't balanced! er: {} other el: {}", node->error_right_, other->error_left_); assert(false); } double exchange = node->error_right_; - if (node->error_right_ < next->error_left_) + if (node->error_right_ < other->error_left_) { exchange *= -1; } node->error_right_ -= exchange; - next->error_left_ += exchange; + other->error_left_ += exchange; } double total_superfluous_error = 0; @@ -387,7 +387,7 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: } return; } - if (begin != sequence.begin() && end != sequence.end() && first->error_left_ > allowed_length_error && last->error_right_ > allowed_length_error) + if (begin != sequence_.begin() && end != sequence_.end() && first->error_left_ > allowed_length_error && last->error_right_ > allowed_length_error) { double total_error_input = first->error_left_ + last->error_right_; total_superfluous_error = std::min(total_superfluous_error, total_error_input); // total superfluous error cannot be more than the influx of error @@ -398,14 +398,14 @@ void SierpinskiFill::redistributeLeftoverErrors(std::list:: (*std::prev(end))->error_right_ -= right_spillover; next->error_left_ += right_spillover; } - else if (begin != sequence.begin() && first->error_left_ > allowed_length_error) + else if (begin != sequence_.begin() && first->error_left_ > allowed_length_error) { total_superfluous_error = std::min(total_superfluous_error, first->error_left_); // total superfluous error cannot be more than the influx of error (*begin)->error_left_ -= total_superfluous_error; prev->error_right_ += total_superfluous_error; assert(first->error_left_ > -allowed_length_error); } - else if (end != sequence.end() && last->error_right_ > allowed_length_error) + else if (end != sequence_.end() && last->error_right_ > allowed_length_error) { total_superfluous_error = std::min(total_superfluous_error, last->error_right_); // total superfluous error cannot be more than the influx of error last->error_right_ -= total_superfluous_error; @@ -532,24 +532,24 @@ void SierpinskiFill::diffuseError() int unconstrained_nodes = 0; int subdivided_nodes = 0; double error = 0; - for (std::list::iterator it = sequence.begin(); it != sequence.end(); ++it) + for (std::list::iterator it = sequence_.begin(); it != sequence_.end(); ++it) { SierpinskiTriangle& triangle = *(*it); double boundary = (triangle.realized_length_ + triangle.total_child_realized_length_) * 0.5; - double nodal_value = ((use_errors_in_dithering) ? triangle.getErroredValue() : triangle.requested_length_); + double nodal_value = ((use_errors_in_dithering_) ? triangle.getErroredValue() : triangle.requested_length_); double boundary_error = nodal_value - boundary + error; std::list::iterator begin = it; std::list::iterator end = std::next(it); - if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence.end()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && end != sequence_.end()) { pair_constrained_nodes++; continue; // don't subdivide these two triangles just yet, wait till next iteration } - if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence.begin()) + if (triangle.dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && begin != sequence_.begin()) { begin = std::prev(it); assert((*begin)->depth_ == triangle.depth_ || isConstrainedBackward(it)); @@ -572,12 +572,12 @@ void SierpinskiFill::diffuseError() { subdivided_nodes++; it = subdivide(begin, end, false); - if (dithering) + if (dithering_) error += nodal_value - triangle.total_child_realized_length_; } else { - if (dithering) + if (dithering_) error += nodal_value - triangle.realized_length_; } } @@ -593,7 +593,7 @@ bool SierpinskiFill::isConstrainedBackward(std::list::itera { SierpinskiTriangle* node = *it; SierpinskiTriangle* prev = *std::prev(it); - if (it != sequence.begin() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && prev->depth_ < node->depth_) + if (it != sequence_.begin() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AB_TO_BC && prev->depth_ < node->depth_) return true; return false; } @@ -601,7 +601,7 @@ bool SierpinskiFill::isConstrainedForward(std::list::iterat { SierpinskiTriangle* node = *it; SierpinskiTriangle* next = *std::next(it); - if (std::next(it) != sequence.end() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && next->depth_ < node->depth_) + if (std::next(it) != sequence_.end() && node->dir_ == SierpinskiTriangle::SierpinskiDirection::AC_TO_AB && next->depth_ < node->depth_) return true; return false; } @@ -620,10 +620,10 @@ double SierpinskiFill::getSubdivisionError(std::list::itera void SierpinskiFill::debugOutput(SVG& svg) { - svg.writePolygon(aabb.toPolygon(), SVG::Color::RED); + svg.writePolygon(aabb_.toPolygon(), SVG::Color::RED); // draw triangles - for (SierpinskiTriangle* node : sequence) + for (SierpinskiTriangle* node : sequence_) { SierpinskiTriangle& triangle = *node; svg.writeLine(triangle.a_, triangle.b_, SVG::Color::GRAY); @@ -702,7 +702,7 @@ Polygon SierpinskiFill::generateCross() const { Polygon ret; - for (SierpinskiTriangle* max_level_it : sequence) + for (SierpinskiTriangle* max_level_it : sequence_) { SierpinskiTriangle& triangle = *max_level_it; Point edge_middle = triangle.a_ + triangle.b_ + triangle.straight_corner_; @@ -722,7 +722,7 @@ Polygon SierpinskiFill::generateCross() const } double realized_length = INT2MM(ret.polygonLength()); - double requested_length = root.requested_length_; + double requested_length = root_.requested_length_; double error = (realized_length - requested_length) / requested_length; spdlog::debug("realized_length: {}, requested_length: {} :: {}% error", realized_length, requested_length, 0.01 * static_cast(10000 * error)); return ret; @@ -746,7 +746,7 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord }; SierpinskiTriangle* last_triangle = nullptr; - for (SierpinskiTriangle* node : sequence) + for (SierpinskiTriangle* node : sequence_) { SierpinskiTriangle& triangle = *node; @@ -813,20 +813,20 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord void SierpinskiFill::debugCheck(bool check_subdivision) { - if (std::abs(sequence.front()->error_left_) > allowed_length_error) + if (std::abs(sequence_.front()->error_left_) > allowed_length_error) { spdlog::warn("First node has error left!"); assert(false); } - if (std::abs(sequence.back()->error_right_) > allowed_length_error) + if (std::abs(sequence_.back()->error_right_) > allowed_length_error) { spdlog::warn("Last node has error right!"); assert(false); } - for (auto it = sequence.begin(); it != sequence.end(); ++it) + for (auto it = sequence_.begin(); it != sequence_.end(); ++it) { - if (std::next(it) == sequence.end()) + if (std::next(it) == sequence_.end()) { break; } diff --git a/src/infill/SierpinskiFillProvider.cpp b/src/infill/SierpinskiFillProvider.cpp index 2668641842..17b27068bf 100644 --- a/src/infill/SierpinskiFillProvider.cpp +++ b/src/infill/SierpinskiFillProvider.cpp @@ -65,7 +65,7 @@ SierpinskiFillProvider::~SierpinskiFillProvider() SierpinskiFillProvider::FractalConfig SierpinskiFillProvider::getFractalConfig(const AABB3D aabb_3d, coord_t min_line_distance) { AABB model_aabb = aabb_3d.flatten(); - Point model_aabb_size = model_aabb.max - model_aabb.min; + Point model_aabb_size = model_aabb.max_ - model_aabb.min_; coord_t max_side_length = std::max(model_aabb_size.X, model_aabb_size.Y); Point model_middle = model_aabb.getMiddle(); diff --git a/src/infill/SubDivCube.cpp b/src/infill/SubDivCube.cpp index 1d35ba0140..6f3a3873fb 100644 --- a/src/infill/SubDivCube.cpp +++ b/src/infill/SubDivCube.cpp @@ -18,14 +18,14 @@ namespace cura { -std::vector SubDivCube::cube_properties_per_recursion_step; -coord_t SubDivCube::radius_addition = 0; -Point3Matrix SubDivCube::rotation_matrix; -PointMatrix SubDivCube::infill_rotation_matrix; +std::vector SubDivCube::cube_properties_per_recursion_step_; +coord_t SubDivCube::radius_addition_ = 0; +Point3Matrix SubDivCube::rotation_matrix_; +PointMatrix SubDivCube::infill_rotation_matrix_; void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point& infill_origin) { - radius_addition = mesh.settings.get("sub_div_rad_add"); + radius_addition_ = mesh.settings.get("sub_div_rad_add"); // if infill_angles is not empty use the first value, otherwise use 0 const std::vector infill_angles = mesh.settings.get>("infill_angles"); @@ -41,8 +41,8 @@ void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point& infill_or { for (coord_t curr_side_length = infill_line_distance * 2; curr_side_length < max_side_length * 2; curr_side_length *= 2) { - cube_properties_per_recursion_step.emplace_back(); - CubeProperties& cube_properties_here = cube_properties_per_recursion_step.back(); + cube_properties_per_recursion_step_.emplace_back(); + CubeProperties& cube_properties_here = cube_properties_per_recursion_step_.back(); cube_properties_here.side_length = curr_side_length; cube_properties_here.height = sqrt(3) * curr_side_length; cube_properties_here.square_height = sqrt(2) * curr_side_length; @@ -75,17 +75,17 @@ void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point& infill_or tilt.matrix[7] = ONE_OVER_SQRT_3; tilt.matrix[8] = ONE_OVER_SQRT_3; - infill_rotation_matrix = PointMatrix(infill_angle); - Point3Matrix infill_angle_mat(infill_rotation_matrix); + infill_rotation_matrix_ = PointMatrix(infill_angle); + Point3Matrix infill_angle_mat(infill_rotation_matrix_); - rotation_matrix = infill_angle_mat.compose(tilt); + rotation_matrix_ = infill_angle_mat.compose(tilt); mesh.base_subdiv_cube = std::make_shared(mesh, center, curr_recursion_depth - 1); } void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons& result) { - if (cube_properties_per_recursion_step.empty()) // Infill is set to 0%. + if (cube_properties_per_recursion_step_.empty()) // Infill is set to 0%. { return; } @@ -105,9 +105,9 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons& result) void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directional_line_groups)[3]) { - CubeProperties cube_properties = cube_properties_per_recursion_step[depth]; + CubeProperties cube_properties = cube_properties_per_recursion_step_[depth_]; - const coord_t z_diff = std::abs(z - center.z_); //!< the difference between the cube center and the target layer. + const coord_t z_diff = std::abs(z - center_.z_); //!< the difference between the cube center and the target layer. if (z_diff > cube_properties.height / 2) //!< this cube does not touch the target layer. Early exit. { return; @@ -118,16 +118,16 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona Point a, b; //!< absolute coordinates of line endpoints relative_a.X = (cube_properties.square_height / 2) * (cube_properties.max_draw_z_diff - z_diff) / cube_properties.max_draw_z_diff; relative_b.X = -relative_a.X; - relative_a.Y = cube_properties.max_line_offset - ((z - (center.z_ - cube_properties.max_draw_z_diff)) * ONE_OVER_SQRT_2); + relative_a.Y = cube_properties.max_line_offset - ((z - (center_.z_ - cube_properties.max_draw_z_diff)) * ONE_OVER_SQRT_2); relative_b.Y = relative_a.Y; rotatePointInitial(relative_a); rotatePointInitial(relative_b); for (int dir_idx = 0; dir_idx < 3; dir_idx++) //!< draw the line, then rotate 120 degrees. { - a.X = center.x_ + relative_a.X; - a.Y = center.y_ + relative_a.Y; - b.X = center.x_ + relative_b.X; - b.Y = center.y_ + relative_b.Y; + a.X = center_.x_ + relative_a.X; + a.Y = center_.y_ + relative_a.Y; + b.X = center_.x_ + relative_b.X; + b.Y = center_.y_ + relative_b.Y; addLineAndCombine(directional_line_groups[dir_idx], a, b); if (dir_idx < 2) { @@ -138,30 +138,29 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona } for (int idx = 0; idx < 8; idx++) //!< draws the eight children { - if (children[idx] != nullptr) + if (children_[idx] != nullptr) { - children[idx]->generateSubdivisionLines(z, directional_line_groups); + children_[idx]->generateSubdivisionLines(z, directional_line_groups); } } } SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) + : depth_(depth) + , center_(center) { - this->depth = depth; - this->center = center; - - if (depth == 0) // lowest layer, no need for subdivision, exit. + if (depth_ == 0) // lowest layer, no need for subdivision, exit. { return; } - if (depth >= cube_properties_per_recursion_step.size()) // Depth is out of bounds of what we pre-computed. + if (depth_ >= cube_properties_per_recursion_step_.size()) // Depth is out of bounds of what we pre-computed. { return; } - CubeProperties cube_properties = cube_properties_per_recursion_step[depth]; + CubeProperties cube_properties = cube_properties_per_recursion_step_[depth]; Point3 child_center; - coord_t radius = double(cube_properties.height) / 4.0 + radius_addition; + coord_t radius = double(cube_properties.height) / 4.0 + radius_addition_; int child_nr = 0; std::vector rel_child_centers; @@ -175,10 +174,10 @@ SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) rel_child_centers.emplace_back(-1, -1, 1); for (Point3 rel_child_center : rel_child_centers) { - child_center = center + rotation_matrix.apply(rel_child_center * int32_t(cube_properties.side_length / 4)); + child_center = center + rotation_matrix_.apply(rel_child_center * int32_t(cube_properties.side_length / 4)); if (isValidSubdivision(mesh, child_center, radius)) { - children[child_nr] = std::make_shared(mesh, child_center, depth - 1); + children_[child_nr] = std::make_shared(mesh, child_center, depth - 1); child_nr++; } } @@ -250,7 +249,7 @@ coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerI void SubDivCube::rotatePointInitial(Point& target) { - target = infill_rotation_matrix.apply(target); + target = infill_rotation_matrix_.apply(target); } void SubDivCube::rotatePoint120(Point& target) diff --git a/src/mesh.cpp b/src/mesh.cpp index 377e72c69a..8224fbfc2f 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -79,11 +79,11 @@ void Mesh::finish() Point3 Mesh::min() const { - return aabb_.min; + return aabb_.min_; } Point3 Mesh::max() const { - return aabb_.max; + return aabb_.max_; } AABB3D Mesh::getAABB() const { @@ -103,8 +103,8 @@ void Mesh::transform(const Matrix4x3D& transformation) { v.p_ = transformation.apply(v.p_); } - aabb_.min = transformation.apply(aabb_.min); - aabb_.max = transformation.apply(aabb_.max); + aabb_.min_ = transformation.apply(aabb_.min_); + aabb_.max_ = transformation.apply(aabb_.max_); } diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index 328ec18b97..7da890d3d9 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -22,40 +22,40 @@ namespace cura LocToLineGrid& Comb::getOutsideLocToLine(const ExtruderTrain& train) { - if (outside_loc_to_line[train.extruder_nr_] == nullptr) + if (outside_loc_to_line_[train.extruder_nr_] == nullptr) { - outside_loc_to_line[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getBoundaryOutside(train), offset_from_inside_to_outside * 3 / 2); + outside_loc_to_line_[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getBoundaryOutside(train), offset_from_inside_to_outside_ * 3 / 2); } - return *outside_loc_to_line[train.extruder_nr_]; + return *outside_loc_to_line_[train.extruder_nr_]; } Polygons& Comb::getBoundaryOutside(const ExtruderTrain& train) { - if (boundary_outside[train.extruder_nr_].empty()) + if (boundary_outside_[train.extruder_nr_].empty()) { bool travel_avoid_supports = train.settings_.get("travel_avoid_supports"); - boundary_outside[train.extruder_nr_] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports).offset(travel_avoid_distance); + boundary_outside_[train.extruder_nr_] = storage_.getLayerOutlines(layer_nr_, travel_avoid_supports, travel_avoid_supports).offset(travel_avoid_distance_); } - return boundary_outside[train.extruder_nr_]; + return boundary_outside_[train.extruder_nr_]; } Polygons& Comb::getModelBoundary(const ExtruderTrain& train) { - if (model_boundary[train.extruder_nr_].empty()) + if (model_boundary_[train.extruder_nr_].empty()) { bool travel_avoid_supports = train.settings_.get("travel_avoid_supports"); - model_boundary[train.extruder_nr_] = storage.getLayerOutlines(layer_nr, travel_avoid_supports, travel_avoid_supports); + model_boundary_[train.extruder_nr_] = storage_.getLayerOutlines(layer_nr_, travel_avoid_supports, travel_avoid_supports); } - return boundary_outside[train.extruder_nr_]; + return boundary_outside_[train.extruder_nr_]; } LocToLineGrid& Comb::getModelBoundaryLocToLine(const ExtruderTrain& train) { - if (model_boundary_loc_to_line[train.extruder_nr_] == nullptr) + if (model_boundary_loc_to_line_[train.extruder_nr_] == nullptr) { - model_boundary_loc_to_line[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getModelBoundary(train), offset_from_inside_to_outside * 3 / 2); + model_boundary_loc_to_line_[train.extruder_nr_] = PolygonUtils::createLocToLineGrid(getModelBoundary(train), offset_from_inside_to_outside_ * 3 / 2); } - return *model_boundary_loc_to_line[train.extruder_nr_]; + return *model_boundary_loc_to_line_[train.extruder_nr_]; } Comb::Comb( @@ -66,22 +66,22 @@ Comb::Comb( coord_t comb_boundary_offset, coord_t travel_avoid_distance, coord_t move_inside_distance) - : storage(storage) - , layer_nr(layer_nr) - , offset_from_outlines(comb_boundary_offset) // between second wall and infill / other walls - , max_moveInside_distance2(offset_from_outlines * offset_from_outlines) - , offset_from_inside_to_outside(offset_from_outlines + travel_avoid_distance) - , max_crossing_dist2( - offset_from_inside_to_outside * offset_from_inside_to_outside + : storage_(storage) + , layer_nr_(layer_nr) + , offset_from_outlines_(comb_boundary_offset) // between second wall and infill / other walls + , max_moveInside_distance2_(offset_from_outlines_ * offset_from_outlines_) + , offset_from_inside_to_outside_(offset_from_outlines_ + travel_avoid_distance) + , max_crossing_dist2_( + offset_from_inside_to_outside_ * offset_from_inside_to_outside_ * 2) // so max_crossing_dist = offset_from_inside_to_outside * sqrt(2) =approx 1.5 to allow for slightly diagonal crossings and slightly inaccurate crossing computation - , boundary_inside_minimum(comb_boundary_inside_minimum) // copy the boundary, because the partsView_inside will reorder the polygons - , boundary_inside_optimal(comb_boundary_inside_optimal) // copy the boundary, because the partsView_inside will reorder the polygons - , partsView_inside_minimum(boundary_inside_minimum.splitIntoPartsView()) // WARNING !! changes the order of boundary_inside !! - , partsView_inside_optimal(boundary_inside_optimal.splitIntoPartsView()) // WARNING !! changes the order of boundary_inside !! - , inside_loc_to_line_minimum(PolygonUtils::createLocToLineGrid(boundary_inside_minimum, comb_boundary_offset)) - , inside_loc_to_line_optimal(PolygonUtils::createLocToLineGrid(boundary_inside_optimal, comb_boundary_offset)) - , move_inside_distance(move_inside_distance) - , travel_avoid_distance(travel_avoid_distance) + , boundary_inside_minimum_(comb_boundary_inside_minimum) // copy the boundary, because the partsView_inside will reorder the polygons + , boundary_inside_optimal_(comb_boundary_inside_optimal) // copy the boundary, because the partsView_inside will reorder the polygons + , parts_view_inside_minimum_(boundary_inside_minimum_.splitIntoPartsView()) // WARNING !! changes the order of boundary_inside !! + , parts_view_inside_optimal_(boundary_inside_optimal_.splitIntoPartsView()) // WARNING !! changes the order of boundary_inside !! + , inside_loc_to_line_minimum_(PolygonUtils::createLocToLineGrid(boundary_inside_minimum_, comb_boundary_offset)) + , inside_loc_to_line_optimal_(PolygonUtils::createLocToLineGrid(boundary_inside_optimal_, comb_boundary_offset)) + , move_inside_distance_(move_inside_distance) + , travel_avoid_distance_(travel_avoid_distance) { } @@ -104,30 +104,30 @@ bool Comb::calc( const Point travel_end_point_before_combing = end_point; // Move start and end point inside the optimal comb boundary unsigned int start_inside_poly = NO_INDEX; - const bool start_inside = moveInside(boundary_inside_optimal, _start_inside, inside_loc_to_line_optimal.get(), start_point, start_inside_poly); + const bool start_inside = moveInside(boundary_inside_optimal_, _start_inside, inside_loc_to_line_optimal_.get(), start_point, start_inside_poly); unsigned int end_inside_poly = NO_INDEX; - const bool end_inside = moveInside(boundary_inside_optimal, _end_inside, inside_loc_to_line_optimal.get(), end_point, end_inside_poly); + const bool end_inside = moveInside(boundary_inside_optimal_, _end_inside, inside_loc_to_line_optimal_.get(), end_point, end_inside_poly); unsigned int start_part_boundary_poly_idx = NO_INDEX; // Added initial value to stop MSVC throwing an exception in debug mode unsigned int end_part_boundary_poly_idx = NO_INDEX; - unsigned int start_part_idx = (start_inside_poly == NO_INDEX) ? NO_INDEX : partsView_inside_optimal.getPartContaining(start_inside_poly, &start_part_boundary_poly_idx); - unsigned int end_part_idx = (end_inside_poly == NO_INDEX) ? NO_INDEX : partsView_inside_optimal.getPartContaining(end_inside_poly, &end_part_boundary_poly_idx); + unsigned int start_part_idx = (start_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(start_inside_poly, &start_part_boundary_poly_idx); + unsigned int end_part_idx = (end_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(end_inside_poly, &end_part_boundary_poly_idx); const bool fail_on_unavoidable_obstacles = perform_z_hops && perform_z_hops_only_when_collides; // normal combing within part using optimal comb boundary if (start_inside && end_inside && start_part_idx == end_part_idx) { - PolygonsPart part = partsView_inside_optimal.assemblePart(start_part_idx); + PolygonsPart part = parts_view_inside_optimal_.assemblePart(start_part_idx); comb_paths.emplace_back(); const bool combing_succeeded = LinePolygonsCrossings::comb( part, - *inside_loc_to_line_optimal, + *inside_loc_to_line_optimal_, start_point, end_point, comb_paths.back(), - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_on_unavoidable_obstacles); // If the endpoint of the travel path changes with combing, then it means that we are moving to an outer wall @@ -138,16 +138,16 @@ bool Comb::calc( // Move start and end point inside the minimum comb boundary unsigned int start_inside_poly_min = NO_INDEX; - const bool start_inside_min = moveInside(boundary_inside_minimum, _start_inside, inside_loc_to_line_minimum.get(), start_point, start_inside_poly_min); + const bool start_inside_min = moveInside(boundary_inside_minimum_, _start_inside, inside_loc_to_line_minimum_.get(), start_point, start_inside_poly_min); unsigned int end_inside_poly_min = NO_INDEX; - const bool end_inside_min = moveInside(boundary_inside_minimum, _end_inside, inside_loc_to_line_minimum.get(), end_point, end_inside_poly_min); + const bool end_inside_min = moveInside(boundary_inside_minimum_, _end_inside, inside_loc_to_line_minimum_.get(), end_point, end_inside_poly_min); unsigned int start_part_boundary_poly_idx_min{}; unsigned int end_part_boundary_poly_idx_min{}; unsigned int start_part_idx_min - = (start_inside_poly_min == NO_INDEX) ? NO_INDEX : partsView_inside_minimum.getPartContaining(start_inside_poly_min, &start_part_boundary_poly_idx_min); - unsigned int end_part_idx_min = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : partsView_inside_minimum.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); + = (start_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(start_inside_poly_min, &start_part_boundary_poly_idx_min); + unsigned int end_part_idx_min = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); CombPath result_path; bool comb_result; @@ -155,19 +155,19 @@ bool Comb::calc( // normal combing within part using minimum comb boundary if (start_inside_min && end_inside_min && start_part_idx_min == end_part_idx_min) { - PolygonsPart part = partsView_inside_minimum.assemblePart(start_part_idx_min); + PolygonsPart part = parts_view_inside_minimum_.assemblePart(start_part_idx_min); comb_paths.emplace_back(); comb_result = LinePolygonsCrossings::comb( part, - *inside_loc_to_line_minimum, + *inside_loc_to_line_minimum_, start_point, end_point, result_path, - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_on_unavoidable_obstacles); - Comb::moveCombPathInside(boundary_inside_minimum, boundary_inside_optimal, result_path, comb_paths.back()); // add altered result_path to combPaths.back() + Comb::moveCombPathInside(boundary_inside_minimum_, boundary_inside_optimal_, result_path, comb_paths.back()); // add altered result_path to combPaths.back() // If the endpoint of the travel path changes with combing, then it means that we are moving to an outer wall // and we should unretract before the last travel move when travelling to that outer wall unretract_before_last_travel_move = comb_result && end_point != travel_end_point_before_combing; @@ -188,16 +188,16 @@ bool Comb::calc( // Find the crossings using the minimum comb boundary, since it's guaranteed to be as close as we can get to the destination. // Getting as close as possible prevents exiting the polygon in the wrong direction (e.g. into a hole instead of to the outside). - Crossing start_crossing(start_point, start_inside_min, start_part_idx_min, start_part_boundary_poly_idx_min, boundary_inside_minimum, *inside_loc_to_line_minimum); - Crossing end_crossing(end_point, end_inside_min, end_part_idx_min, end_part_boundary_poly_idx_min, boundary_inside_minimum, *inside_loc_to_line_minimum); + Crossing start_crossing(start_point, start_inside_min, start_part_idx_min, start_part_boundary_poly_idx_min, boundary_inside_minimum_, *inside_loc_to_line_minimum_); + Crossing end_crossing(end_point, end_inside_min, end_part_idx_min, end_part_boundary_poly_idx_min, boundary_inside_minimum_, *inside_loc_to_line_minimum_); { // find crossing over the in-between area between inside and outside - start_crossing.findCrossingInOrMid(partsView_inside_minimum, end_point); - end_crossing.findCrossingInOrMid(partsView_inside_minimum, start_crossing.in_or_mid); + start_crossing.findCrossingInOrMid(parts_view_inside_minimum_, end_point); + end_crossing.findCrossingInOrMid(parts_view_inside_minimum_, start_crossing.in_or_mid_); } bool skip_avoid_other_parts_path = false; - if (vSize2(start_crossing.in_or_mid - end_crossing.in_or_mid) < offset_from_inside_to_outside * offset_from_inside_to_outside * 4) + if (vSize2(start_crossing.in_or_mid_ - end_crossing.in_or_mid_) < offset_from_inside_to_outside_ * offset_from_inside_to_outside_ * 4) { // parts are next to each other, i.e. the direct crossing will always be smaller than two crossings via outside skip_avoid_other_parts_path = true; } @@ -208,12 +208,12 @@ bool Comb::calc( { // compute the crossing points when moving through air // comb through all air, since generally the outside consists of a single part - bool success = start_crossing.findOutside(train, getBoundaryOutside(train), end_crossing.in_or_mid, fail_on_unavoidable_obstacles, *this); + bool success = start_crossing.findOutside(train, getBoundaryOutside(train), end_crossing.in_or_mid_, fail_on_unavoidable_obstacles, *this); if (! success) { return false; } - success = end_crossing.findOutside(train, getBoundaryOutside(train), start_crossing.out, fail_on_unavoidable_obstacles, *this); + success = end_crossing.findOutside(train, getBoundaryOutside(train), start_crossing.out_, fail_on_unavoidable_obstacles, *this); if (! success) { return false; @@ -224,29 +224,29 @@ bool Comb::calc( if (start_inside_min) { // start to boundary - assert(start_crossing.dest_part.size() > 0 && "The part we start inside when combing should have been computed already!"); + assert(start_crossing.dest_part_.size() > 0 && "The part we start inside when combing should have been computed already!"); comb_paths.emplace_back(); // If we're inside the optimal bound, first try the optimal combing path. If it fails, use the minimum path instead. constexpr bool fail_for_optimum_bound = true; bool combing_succeeded = start_inside && LinePolygonsCrossings::comb( - boundary_inside_optimal, - *inside_loc_to_line_optimal, + boundary_inside_optimal_, + *inside_loc_to_line_optimal_, start_point, - start_crossing.in_or_mid, + start_crossing.in_or_mid_, comb_paths.back(), - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_for_optimum_bound); if (! combing_succeeded) { combing_succeeded = LinePolygonsCrossings::comb( - start_crossing.dest_part, - *inside_loc_to_line_minimum, + start_crossing.dest_part_, + *inside_loc_to_line_minimum_, start_point, - start_crossing.in_or_mid, + start_crossing.in_or_mid_, comb_paths.back(), - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_on_unavoidable_obstacles); } @@ -262,10 +262,10 @@ bool Comb::calc( { comb_paths.emplace_back(); comb_paths.throughAir = true; - if (vSize(start_crossing.in_or_mid - end_crossing.in_or_mid) < vSize(start_crossing.in_or_mid - start_crossing.out) + vSize(end_crossing.in_or_mid - end_crossing.out)) + if (vSize(start_crossing.in_or_mid_ - end_crossing.in_or_mid_) < vSize(start_crossing.in_or_mid_ - start_crossing.out_) + vSize(end_crossing.in_or_mid_ - end_crossing.out_)) { // via outside is moving more over the in-between zone - comb_paths.back().push_back(start_crossing.in_or_mid); - comb_paths.back().push_back(end_crossing.in_or_mid); + comb_paths.back().push_back(start_crossing.in_or_mid_); + comb_paths.back().push_back(end_crossing.in_or_mid_); } else { @@ -273,10 +273,10 @@ bool Comb::calc( bool combing_succeeded = LinePolygonsCrossings::comb( getBoundaryOutside(train), getOutsideLocToLine(train), - start_crossing.out, - end_crossing.out, + start_crossing.out_, + end_crossing.out_, tmp_comb_path, - offset_dist_to_get_from_on_the_polygon_to_outside, + offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, true); @@ -293,8 +293,8 @@ bool Comb::calc( comb_paths.emplace_back(); comb_paths.throughAir = true; comb_paths.back().cross_boundary = true; - comb_paths.back().push_back(start_crossing.in_or_mid); - comb_paths.back().push_back(end_crossing.in_or_mid); + comb_paths.back().push_back(start_crossing.in_or_mid_); + comb_paths.back().push_back(end_crossing.in_or_mid_); if (fail_on_unavoidable_obstacles) { @@ -308,8 +308,8 @@ bool Comb::calc( comb_paths.emplace_back(); comb_paths.throughAir = true; comb_paths.back().cross_boundary = true; // note: we don't actually know whether this is cross boundary, but it might very well be - comb_paths.back().push_back(start_crossing.in_or_mid); - comb_paths.back().push_back(end_crossing.in_or_mid); + comb_paths.back().push_back(start_crossing.in_or_mid_); + comb_paths.back().push_back(end_crossing.in_or_mid_); } if (skip_avoid_other_parts_path) { @@ -317,7 +317,7 @@ bool Comb::calc( { if (start_inside) { // both start and end are inside - comb_paths.back().cross_boundary = PolygonUtils::polygonCollidesWithLineSegment(start_point, end_point, *inside_loc_to_line_optimal); + comb_paths.back().cross_boundary = PolygonUtils::polygonCollidesWithLineSegment(start_point, end_point, *inside_loc_to_line_optimal_); } else { // both start and end are outside @@ -333,29 +333,29 @@ bool Comb::calc( if (end_inside) { // boundary to end - assert(end_crossing.dest_part.size() > 0 && "The part we end up inside when combing should have been computed already!"); + assert(end_crossing.dest_part_.size() > 0 && "The part we end up inside when combing should have been computed already!"); comb_paths.emplace_back(); // If we're inside the optimal bound, first try the optimal combing path. If it fails, use the minimum path instead. constexpr bool fail_for_optimum_bound = true; bool combing_succeeded = end_inside && LinePolygonsCrossings::comb( - boundary_inside_optimal, - *inside_loc_to_line_optimal, - end_crossing.in_or_mid, + boundary_inside_optimal_, + *inside_loc_to_line_optimal_, + end_crossing.in_or_mid_, end_point, comb_paths.back(), - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_for_optimum_bound); if (! combing_succeeded) { combing_succeeded = LinePolygonsCrossings::comb( - end_crossing.dest_part, - *inside_loc_to_line_minimum, - end_crossing.in_or_mid, + end_crossing.dest_part_, + *inside_loc_to_line_minimum_, + end_crossing.in_or_mid_, end_point, comb_paths.back(), - -offset_dist_to_get_from_on_the_polygon_to_outside, + -offset_dist_to_get_from_on_the_polygon_to_outside_, max_comb_distance_ignored, fail_on_unavoidable_obstacles); } @@ -375,7 +375,7 @@ bool Comb::calc( // Try to move comb_path_input points inside by the amount of `move_inside_distance` and see if the points are still in boundary_inside_optimal, add result in comb_path_output void Comb::moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output) { - const coord_t dist = move_inside_distance; + const coord_t dist = move_inside_distance_; const coord_t dist2 = dist * dist; if (comb_path_input.size() == 0) @@ -410,15 +410,15 @@ Comb::Crossing::Crossing( const unsigned int dest_part_boundary_crossing_poly_idx, const Polygons& boundary_inside, const LocToLineGrid& inside_loc_to_line) - : dest_is_inside(dest_is_inside) - , boundary_inside(boundary_inside) - , inside_loc_to_line(inside_loc_to_line) - , dest_point(dest_point) - , dest_part_idx(dest_part_idx) + : dest_is_inside_(dest_is_inside) + , boundary_inside_(boundary_inside) + , inside_loc_to_line_(inside_loc_to_line) + , dest_point_(dest_point) + , dest_part_idx_(dest_part_idx) { if (dest_is_inside) { - dest_crossing_poly.emplace(boundary_inside[dest_part_boundary_crossing_poly_idx]); // initialize with most obvious poly, cause mostly a combing move will move outside the + dest_crossing_poly_.emplace(boundary_inside[dest_part_boundary_crossing_poly_idx]); // initialize with most obvious poly, cause mostly a combing move will move outside the // part, rather than inside a hole in the part } } @@ -428,7 +428,7 @@ bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* if (is_inside) { ClosestPolygonPoint cpp - = PolygonUtils::ensureInsideOrOutside(boundary_inside, dest_point, offset_extra_start_end, max_moveInside_distance2, &boundary_inside, inside_loc_to_line); + = PolygonUtils::ensureInsideOrOutside(boundary_inside, dest_point, offset_extra_start_end_, max_moveInside_distance2_, &boundary_inside, inside_loc_to_line); if (! cpp.isValid()) { return false; @@ -444,21 +444,21 @@ bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, const Point close_to) { - if (dest_is_inside) + if (dest_is_inside_) { // in-case // find the point on the start inside-polygon closest to the endpoint, but also kind of close to the start point - Point _dest_point(dest_point); // copy to local variable for lambda capture + Point _dest_point(dest_point_); // copy to local variable for lambda capture std::function close_towards_start_penalty_function( [_dest_point](Point candidate) { return vSize2((candidate - _dest_point) / 10); }); - dest_part = partsView_inside.assemblePart(dest_part_idx); + dest_part_ = partsView_inside.assemblePart(dest_part_idx_); ClosestPolygonPoint boundary_crossing_point; { // set [result] to a point on the destination part closest to close_to (but also a bit close to _dest_point) std::unordered_set dest_part_poly_indices; - for (unsigned int poly_idx : partsView_inside[dest_part_idx]) + for (unsigned int poly_idx : partsView_inside[dest_part_idx_]) { dest_part_poly_indices.emplace(poly_idx); } @@ -479,72 +479,72 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons } return true; }; - inside_loc_to_line.processLine(std::make_pair(dest_point, close_to), line_processor); + inside_loc_to_line_.processLine(std::make_pair(dest_point_, close_to), line_processor); } Point result(boundary_crossing_point.p()); // the inside point of the crossing if (! boundary_crossing_point.isValid()) { // no point has been found in the sparse grid - result = dest_point; + result = dest_point_; } ClosestPolygonPoint crossing_1_in_cp = PolygonUtils::ensureInsideOrOutside( - dest_part, + dest_part_, result, boundary_crossing_point, - offset_dist_to_get_from_on_the_polygon_to_outside, - &boundary_inside, - &inside_loc_to_line, + offset_dist_to_get_from_on_the_polygon_to_outside_, + &boundary_inside_, + &inside_loc_to_line_, close_towards_start_penalty_function); if (crossing_1_in_cp.isValid()) { - dest_crossing_poly = crossing_1_in_cp.poly_; - in_or_mid = result; + dest_crossing_poly_ = crossing_1_in_cp.poly_; + in_or_mid_ = result; } else { // part is too small to be ensuring a point inside with the given distance - in_or_mid = dest_point; // just use the startPoint or endPoint itself + in_or_mid_ = dest_point_; // just use the startPoint or endPoint itself } } else { // mid-case - in_or_mid = dest_point; + in_or_mid_ = dest_point_; } } bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& outside, const Point close_to, const bool fail_on_unavoidable_obstacles, Comb& comber) { - out = in_or_mid; - if (dest_is_inside || outside.inside(in_or_mid, true)) // start in_between + out_ = in_or_mid_; + if (dest_is_inside_ || outside.inside(in_or_mid_, true)) // start in_between { // move outside - Point preferred_crossing_1_out = in_or_mid + normal(close_to - in_or_mid, comber.offset_from_inside_to_outside); + Point preferred_crossing_1_out = in_or_mid_ + normal(close_to - in_or_mid_, comber.offset_from_inside_to_outside_); std::function close_to_penalty_function( [preferred_crossing_1_out](Point candidate) { return vSize2((candidate - preferred_crossing_1_out) / 2); }); - std::optional crossing_1_out_cpp = PolygonUtils::findClose(in_or_mid, outside, comber.getOutsideLocToLine(train), close_to_penalty_function); + std::optional crossing_1_out_cpp = PolygonUtils::findClose(in_or_mid_, outside, comber.getOutsideLocToLine(train), close_to_penalty_function); if (crossing_1_out_cpp) { - out = PolygonUtils::moveOutside(*crossing_1_out_cpp, comber.offset_dist_to_get_from_on_the_polygon_to_outside); + out_ = PolygonUtils::moveOutside(*crossing_1_out_cpp, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); } else { - PolygonUtils::moveOutside(outside, out, comber.offset_dist_to_get_from_on_the_polygon_to_outside); + PolygonUtils::moveOutside(outside, out_, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); } } - int64_t in_out_dist2_1 = vSize2(out - in_or_mid); - if (dest_is_inside && in_out_dist2_1 > comber.max_crossing_dist2) // moveInside moved too far + int64_t in_out_dist2_1 = vSize2(out_ - in_or_mid_); + if (dest_is_inside_ && in_out_dist2_1 > comber.max_crossing_dist2_) // moveInside moved too far { // if move is too far over in_between // find crossing closer by - assert(dest_crossing_poly && "destination crossing poly should have been instantiated!"); - std::shared_ptr> best = findBestCrossing(train, outside, **dest_crossing_poly, dest_point, close_to, comber); + assert(dest_crossing_poly_ && "destination crossing poly should have been instantiated!"); + std::shared_ptr> best = findBestCrossing(train, outside, **dest_crossing_poly_, dest_point_, close_to, comber); if (best) { - in_or_mid = PolygonUtils::moveInside(best->first, comber.offset_dist_to_get_from_on_the_polygon_to_outside); - out = PolygonUtils::moveOutside(best->second, comber.offset_dist_to_get_from_on_the_polygon_to_outside); + in_or_mid_ = PolygonUtils::moveInside(best->first, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); + out_ = PolygonUtils::moveOutside(best->second, comber.offset_dist_to_get_from_on_the_polygon_to_outside_); } - if (fail_on_unavoidable_obstacles && vSize2(out - in_or_mid) > comber.max_crossing_dist2) // moveInside moved still too far + if (fail_on_unavoidable_obstacles && vSize2(out_ - in_or_mid_) > comber.max_crossing_dist2_) // moveInside moved still too far { return false; } @@ -570,7 +570,7 @@ std::shared_ptr> Comb::Cross for (std::pair& crossing_candidate : crossing_out_candidates) { const coord_t crossing_dist2 = vSize2(crossing_candidate.first.location_ - crossing_candidate.second.location_); - if (crossing_dist2 > comber.max_crossing_dist2 * 2) + if (crossing_dist2 > comber.max_crossing_dist2_ * 2) { // preliminary filtering continue; } @@ -586,11 +586,11 @@ std::shared_ptr> Comb::Cross // In the end we just want to choose between two points which have the _same_ crossing distance, modulo rounding error. if ((! seen_close_enough_connection && detour_score < best_detour_score) // keep the best as long as we havent seen one close enough (so that we may walk along the polygon // to find a closer connection from it in the code below) - || (! seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2) // make the one which is close enough the best as soon as we see one close enough - || (seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2 + || (! seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2_) // make the one which is close enough the best as soon as we see one close enough + || (seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2_ && detour_score < best_detour_score)) // update to keep the best crossing which is close enough already { - if (! seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2) + if (! seen_close_enough_connection && crossing_dist2 <= comber.max_crossing_dist2_) { seen_close_enough_connection = true; } @@ -604,11 +604,11 @@ std::shared_ptr> Comb::Cross { // i.e. if best_in == nullptr or if best_out == nullptr return std::shared_ptr>(); } - if (best_crossing_dist2 > comber.max_crossing_dist2) + if (best_crossing_dist2 > comber.max_crossing_dist2_) { // find closer point on line segments, rather than moving between vertices of the polygons only PolygonUtils::walkToNearestSmallestConnection(*best_in, *best_out); best_crossing_dist2 = vSize2(best_in->location_ - best_out->location_); - if (best_crossing_dist2 > comber.max_crossing_dist2) + if (best_crossing_dist2 > comber.max_crossing_dist2_) { return std::shared_ptr>(); } diff --git a/src/settings/AdaptiveLayerHeights.cpp b/src/settings/AdaptiveLayerHeights.cpp index 66fae223bf..14b37b8eaa 100644 --- a/src/settings/AdaptiveLayerHeights.cpp +++ b/src/settings/AdaptiveLayerHeights.cpp @@ -17,16 +17,16 @@ namespace cura { AdaptiveLayer::AdaptiveLayer(const coord_t layer_height) - : layer_height{ layer_height } + : layer_height_{ layer_height } { } AdaptiveLayerHeights::AdaptiveLayerHeights(const coord_t base_layer_height, const coord_t variation, const coord_t step_size, const coord_t threshold, const MeshGroup* meshgroup) - : base_layer_height{ base_layer_height } - , max_variation{ variation } - , step_size{ step_size } - , threshold{ threshold } - , meshgroup{ meshgroup } + : base_layer_height_{ base_layer_height } + , max_variation_{ variation } + , step_size_{ step_size } + , threshold_{ threshold } + , meshgroup_{ meshgroup } { calculateAllowedLayerHeights(); calculateMeshTriangleSlopes(); @@ -35,36 +35,36 @@ AdaptiveLayerHeights::AdaptiveLayerHeights(const coord_t base_layer_height, cons size_t AdaptiveLayerHeights::getLayerCount() const { - return layers.size(); + return layers_.size(); } std::vector* AdaptiveLayerHeights::getLayers() { - return &layers; + return &layers_; } void AdaptiveLayerHeights::calculateAllowedLayerHeights() { // calculate the allowed layer heights from variation and step size // note: the order is from thickest to thinnest height! - for (coord_t allowed_layer_height = base_layer_height + max_variation; allowed_layer_height >= base_layer_height - max_variation; allowed_layer_height -= step_size) + for (coord_t allowed_layer_height = base_layer_height_ + max_variation_; allowed_layer_height >= base_layer_height_ - max_variation_; allowed_layer_height -= step_size_) { // we should only consider using layer_heights that are > 0 if (allowed_layer_height <= 0) { break; } - allowed_layer_heights.push_back(allowed_layer_height); + allowed_layer_heights_.push_back(allowed_layer_height); } } void AdaptiveLayerHeights::calculateLayers() { - const coord_t minimum_layer_height = *std::min_element(allowed_layer_heights.begin(), allowed_layer_heights.end()); + const coord_t minimum_layer_height = *std::min_element(allowed_layer_heights_.begin(), allowed_layer_heights_.end()); Settings const& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; auto slicing_tolerance = mesh_group_settings.get("slicing_tolerance"); std::vector triangles_of_interest; - const coord_t model_max_z = meshgroup->max().z_; + const coord_t model_max_z = meshgroup_->max().z_; coord_t z_level = 0; coord_t previous_layer_height = 0; @@ -73,32 +73,32 @@ void AdaptiveLayerHeights::calculateLayers() z_level += initial_layer_height; AdaptiveLayer adaptive_layer(initial_layer_height); - adaptive_layer.z_position = z_level; - previous_layer_height = adaptive_layer.layer_height; - layers.push_back(adaptive_layer); + adaptive_layer.z_position_ = z_level; + previous_layer_height = adaptive_layer.layer_height_; + layers_.push_back(adaptive_layer); // loop while triangles are found - while (z_level <= model_max_z || layers.size() < 2) + while (z_level <= model_max_z || layers_.size() < 2) { double global_min_slope = std::numeric_limits::max(); // loop over all allowed layer heights starting with the largest bool has_added_layer = false; - for (auto& layer_height : allowed_layer_heights) + for (auto& layer_height : allowed_layer_heights_) { // use lower and upper bounds to filter on triangles that are interesting for this potential layer const coord_t lower_bound = z_level; // if slicing tolerance "middle" is used, a layer is interpreted as the middle of the upper and lower bounds. const coord_t upper_bound = z_level + ((slicing_tolerance == SlicingTolerance::MIDDLE) ? (layer_height / 2) : layer_height); - if (layer_height == allowed_layer_heights[0]) + if (layer_height == allowed_layer_heights_[0]) { // this is the max layer thickness, search through all of the triangles in the mesh to find those // that intersect with a layer this thick triangles_of_interest.clear(); - for (size_t i = 0; i < face_min_z_values.size(); ++i) + for (size_t i = 0; i < face_min_z_values_.size(); ++i) { - if (face_min_z_values[i] <= upper_bound && face_max_z_values[i] >= lower_bound) + if (face_min_z_values_[i] <= upper_bound && face_max_z_values_[i] >= lower_bound) { triangles_of_interest.push_back(i); } @@ -114,7 +114,7 @@ void AdaptiveLayerHeights::calculateLayers() for (const auto& i : last_triangles_of_interest) { - if (face_min_z_values[i] <= upper_bound) + if (face_min_z_values_[i] <= upper_bound) { triangles_of_interest.push_back(i); } @@ -131,7 +131,7 @@ void AdaptiveLayerHeights::calculateLayers() double minimum_slope = std::numeric_limits::max(); for (const size_t& triangle_index : triangles_of_interest) { - const double slope = face_slopes.at(triangle_index); + const double slope = face_slopes_.at(triangle_index); if (minimum_slope > slope) { minimum_slope = slope; @@ -144,11 +144,11 @@ void AdaptiveLayerHeights::calculateLayers() // check if the maximum step size has been exceeded depending on layer height direction bool has_exceeded_step_size = false; - if (previous_layer_height > layer_height && previous_layer_height - layer_height > step_size) + if (previous_layer_height > layer_height && previous_layer_height - layer_height > step_size_) { has_exceeded_step_size = true; } - else if (layer_height - previous_layer_height > step_size && layer_height > minimum_layer_height) + else if (layer_height - previous_layer_height > step_size_ && layer_height > minimum_layer_height) { continue; } @@ -158,13 +158,13 @@ void AdaptiveLayerHeights::calculateLayers() // 2) the layer height is the smallest it is allowed // 3) the layer is a flat surface (we can't divide by 0) const double minimum_slope_tan = std::tan(minimum_slope); - if (minimum_slope_tan == 0.0 || (layer_height / minimum_slope_tan) <= threshold || layer_height == minimum_layer_height || has_exceeded_step_size) + if (minimum_slope_tan == 0.0 || (layer_height / minimum_slope_tan) <= threshold_ || layer_height == minimum_layer_height || has_exceeded_step_size) { z_level += layer_height; - AdaptiveLayer adaptive_layer(layer_height); - adaptive_layer.z_position = z_level; - previous_layer_height = adaptive_layer.layer_height; - layers.push_back(adaptive_layer); + AdaptiveLayer adaptive_layer_add(layer_height); + adaptive_layer_add.z_position_ = z_level; + previous_layer_height = adaptive_layer_add.layer_height_; + layers_.push_back(adaptive_layer_add); has_added_layer = true; break; } @@ -174,12 +174,12 @@ void AdaptiveLayerHeights::calculateLayers() // in this case, we use the layer height with the lowest if (! has_added_layer) { - const auto& min_layer_height = allowed_layer_heights.back(); + const auto& min_layer_height = allowed_layer_heights_.back(); AdaptiveLayer minimum_adaptive_layer(min_layer_height); z_level += min_layer_height; - minimum_adaptive_layer.z_position = z_level; + minimum_adaptive_layer.z_position_ = z_level; previous_layer_height = min_layer_height; - layers.push_back(minimum_adaptive_layer); + layers_.push_back(minimum_adaptive_layer); } } } @@ -223,9 +223,9 @@ void AdaptiveLayerHeights::calculateMeshTriangleSlopes() z_angle = std::numbers::pi; } - face_min_z_values.push_back(MM2INT(min_z)); - face_max_z_values.push_back(MM2INT(max_z)); - face_slopes.push_back(z_angle); + face_min_z_values_.push_back(MM2INT(min_z)); + face_max_z_values_.push_back(MM2INT(max_z)); + face_slopes_.push_back(z_angle); } } } diff --git a/src/settings/ZSeamConfig.cpp b/src/settings/ZSeamConfig.cpp index b652657538..229722922b 100644 --- a/src/settings/ZSeamConfig.cpp +++ b/src/settings/ZSeamConfig.cpp @@ -7,11 +7,11 @@ namespace cura { ZSeamConfig::ZSeamConfig(const EZSeamType type, const Point pos, const EZSeamCornerPrefType corner_pref, const coord_t simplify_curvature) -: type(type) -, pos(pos) -, corner_pref(corner_pref) -, simplify_curvature(simplify_curvature) +: type_(type) +, pos_(pos) +, corner_pref_(corner_pref) +, simplify_curvature_(simplify_curvature) { } -} //Cura namespace. \ No newline at end of file +} //Cura namespace. diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index ddce31175b..f0e0c79a26 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -55,7 +55,7 @@ bool SliceLayerPart::hasWallAtInsetIndex(size_t inset_idx) const { for (const ExtrusionLine& line : lines) { - if (line.inset_idx == inset_idx) + if (line.inset_idx_ == inset_idx) { return true; } @@ -542,8 +542,8 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const case BuildPlateShape::ELLIPTIC: { // Construct an ellipse to approximate the build volume. - const coord_t width = machine_size.max.x_ - machine_size.min.x_; - const coord_t depth = machine_size.max.y_ - machine_size.min.y_; + const coord_t width = machine_size.max_.x_ - machine_size.min_.x_; + const coord_t depth = machine_size.max_.y_ - machine_size.min_.y_; constexpr unsigned int circle_resolution = 50; for (unsigned int i = 0; i < circle_resolution; i++) { @@ -569,7 +569,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { for (Point& p : poly) { - p = Point(machine_size.max.x_ / 2 + p.X, machine_size.max.y_ / 2 - p.Y); + p = Point(machine_size.max_.x_ / 2 + p.X, machine_size.max_.y_ / 2 - p.Y); } } } diff --git a/src/slicer.cpp b/src/slicer.cpp index c2d62866ff..ee971db3b5 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -986,7 +986,7 @@ std::vector Slicer::buildLayersWithHeight( coord_t adjusted_layer_offset = initial_layer_thickness; if (use_variable_layer_heights) { - layers_res[0].z = (*adaptive_layers)[0].z_position; + layers_res[0].z = (*adaptive_layers)[0].z_position_; } else if (slicing_tolerance == SlicingTolerance::MIDDLE) { @@ -999,7 +999,7 @@ std::vector Slicer::buildLayersWithHeight( { if (use_variable_layer_heights) { - layers_res[layer_nr].z = (*adaptive_layers)[layer_nr].z_position; + layers_res[layer_nr].z = (*adaptive_layers)[layer_nr].z_position_; } else { diff --git a/src/support.cpp b/src/support.cpp index 810d78cd9c..66bc59eb91 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -485,8 +485,8 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp case BuildPlateShape::ELLIPTIC: { // Construct an ellipse to approximate the build volume. - const coord_t width = storage.machine_size.max.x_ - storage.machine_size.min.x_; - const coord_t depth = storage.machine_size.max.y_ - storage.machine_size.min.y_; + const coord_t width = storage.machine_size.max_.x_ - storage.machine_size.min_.x_; + const coord_t depth = storage.machine_size.max_.y_ - storage.machine_size.min_.y_; Polygon border_circle; constexpr unsigned int circle_resolution = 50; for (unsigned int i = 0; i < circle_resolution; i++) @@ -730,8 +730,8 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) } const coord_t aabb_expansion = infill_settings.get("support_offset"); AABB3D aabb_here(mesh.bounding_box); - aabb_here.include(aabb_here.min - Point3(-aabb_expansion, -aabb_expansion, 0)); - aabb_here.include(aabb_here.max + Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.min_ - Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.max_ + Point3(-aabb_expansion, -aabb_expansion, 0)); aabb.include(aabb_here); } diff --git a/src/utils/AABB.cpp b/src/utils/AABB.cpp index 1d6fab5e0f..2b966afe1b 100644 --- a/src/utils/AABB.cpp +++ b/src/utils/AABB.cpp @@ -10,55 +10,55 @@ namespace cura { -AABB::AABB() : min(POINT_MAX, POINT_MAX), max(POINT_MIN, POINT_MIN) +AABB::AABB() : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) { } -AABB::AABB(const Point& min, const Point& max) : min(min), max(max) +AABB::AABB(const Point& min, const Point& max) : min_(min), max_(max) { } -AABB::AABB(const Polygons& polys) : min(POINT_MAX, POINT_MAX), max(POINT_MIN, POINT_MIN) +AABB::AABB(const Polygons& polys) : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) { calculate(polys); } -AABB::AABB(ConstPolygonRef poly) : min(POINT_MAX, POINT_MAX), max(POINT_MIN, POINT_MIN) +AABB::AABB(ConstPolygonRef poly) : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) { calculate(poly); } Point AABB::getMiddle() const { - return (min + max) / 2; + return (min_ + max_) / 2; } coord_t AABB::distanceSquared(const Point& p) const { - const Point a = Point(max.X, min.Y); - const Point b = Point(min.X, max.Y); + const Point a = Point(max_.X, min_.Y); + const Point b = Point(min_.X, max_.Y); return (contains(p) ? -1 : 1) - * std::min({ LinearAlg2D::getDist2FromLineSegment(min, a, p), LinearAlg2D::getDist2FromLineSegment(a, max, p), LinearAlg2D::getDist2FromLineSegment(max, b, p), LinearAlg2D::getDist2FromLineSegment(b, min, p) }); + * std::min({ LinearAlg2D::getDist2FromLineSegment(min_, a, p), LinearAlg2D::getDist2FromLineSegment(a, max_, p), LinearAlg2D::getDist2FromLineSegment(max_, b, p), LinearAlg2D::getDist2FromLineSegment(b, min_, p) }); } coord_t AABB::distanceSquared(const AABB& other) const { return std::min({ - distanceSquared(other.min), - other.distanceSquared(min), - distanceSquared(other.max), - other.distanceSquared(max), - distanceSquared(Point(other.max.X, other.min.Y)), - other.distanceSquared(Point(max.X, min.Y)), - distanceSquared(Point(other.min.X, other.max.Y)), - other.distanceSquared(Point(min.X, max.Y)), + distanceSquared(other.min_), + other.distanceSquared(min_), + distanceSquared(other.max_), + other.distanceSquared(max_), + distanceSquared(Point(other.max_.X, other.min_.Y)), + other.distanceSquared(Point(max_.X, min_.Y)), + distanceSquared(Point(other.min_.X, other.max_.Y)), + other.distanceSquared(Point(min_.X, max_.Y)), }); } void AABB::calculate(const Polygons& polys) { - min = Point(POINT_MAX, POINT_MAX); - max = Point(POINT_MIN, POINT_MIN); + min_ = Point(POINT_MAX, POINT_MAX); + max_ = Point(POINT_MIN, POINT_MIN); for (unsigned int i = 0; i < polys.size(); i++) { for (unsigned int j = 0; j < polys[i].size(); j++) @@ -70,8 +70,8 @@ void AABB::calculate(const Polygons& polys) void AABB::calculate(ConstPolygonRef poly) { - min = Point(POINT_MAX, POINT_MAX); - max = Point(POINT_MIN, POINT_MIN); + min_ = Point(POINT_MAX, POINT_MAX); + max_ = Point(POINT_MIN, POINT_MIN); for (const Point& p : poly) { include(p); @@ -80,7 +80,7 @@ void AABB::calculate(ConstPolygonRef poly) bool AABB::contains(const Point& point) const { - return point.X >= min.X && point.X <= max.X && point.Y >= min.Y && point.Y <= max.Y; + return point.X >= min_.X && point.X <= max_.X && point.Y >= min_.Y && point.Y <= max_.Y; } bool AABB::contains(const AABB& other) const @@ -93,67 +93,67 @@ bool AABB::contains(const AABB& other) const { return true; } - return other.min.X >= min.X && other.max.X <= max.X && other.min.Y >= min.Y && other.max.Y <= max.Y; + return other.min_.X >= min_.X && other.max_.X <= max_.X && other.min_.Y >= min_.Y && other.max_.Y <= max_.Y; } coord_t AABB::area() const { - if (max.X < min.X || max.Y < min.Y) + if (max_.X < min_.X || max_.Y < min_.Y) { return -1; } // Do the unititialized check explicitly, so there aren't any problems with over/underflow and POINT_MAX/POINT_MIN. - return (max.X - min.X) * (max.Y - min.Y); + return (max_.X - min_.X) * (max_.Y - min_.Y); } bool AABB::hit(const AABB& other) const { - if (max.X < other.min.X) + if (max_.X < other.min_.X) return false; - if (min.X > other.max.X) + if (min_.X > other.max_.X) return false; - if (max.Y < other.min.Y) + if (max_.Y < other.min_.Y) return false; - if (min.Y > other.max.Y) + if (min_.Y > other.max_.Y) return false; return true; } void AABB::include(Point point) { - min.X = std::min(min.X, point.X); - min.Y = std::min(min.Y, point.Y); - max.X = std::max(max.X, point.X); - max.Y = std::max(max.Y, point.Y); + min_.X = std::min(min_.X, point.X); + min_.Y = std::min(min_.Y, point.Y); + max_.X = std::max(max_.X, point.X); + max_.Y = std::max(max_.Y, point.Y); } void AABB::include(const AABB other) { // Note that this is different from including the min and max points, since when 'min > max' it's used to denote an negative/empty box. - min.X = std::min(min.X, other.min.X); - min.Y = std::min(min.Y, other.min.Y); - max.X = std::max(max.X, other.max.X); - max.Y = std::max(max.Y, other.max.Y); + min_.X = std::min(min_.X, other.min_.X); + min_.Y = std::min(min_.Y, other.min_.Y); + max_.X = std::max(max_.X, other.max_.X); + max_.Y = std::max(max_.Y, other.max_.Y); } void AABB::expand(int dist) { - if (min == Point(POINT_MAX, POINT_MAX) || max == Point(POINT_MIN, POINT_MIN)) + if (min_ == Point(POINT_MAX, POINT_MAX) || max_ == Point(POINT_MIN, POINT_MIN)) { return; } - min.X -= dist; - min.Y -= dist; - max.X += dist; - max.Y += dist; + min_.X -= dist; + min_.Y -= dist; + max_.X += dist; + max_.Y += dist; } Polygon AABB::toPolygon() const { Polygon ret; - ret.add(min); - ret.add(Point(max.X, min.Y)); - ret.add(max); - ret.add(Point(min.X, max.Y)); + ret.add(min_); + ret.add(Point(max_.X, min_.Y)); + ret.add(max_); + ret.add(Point(min_.X, max_.Y)); return ret; } diff --git a/src/utils/AABB3D.cpp b/src/utils/AABB3D.cpp index b354ad0dc2..4ace7d4cea 100644 --- a/src/utils/AABB3D.cpp +++ b/src/utils/AABB3D.cpp @@ -11,31 +11,31 @@ namespace cura { AABB3D::AABB3D() - : min(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()) - , max(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()) + : min_(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()) + , max_(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()) { } AABB3D::AABB3D(Point3 min, Point3 max) - : min(min) - , max(max) + : min_(min) + , max_(max) { } Point3 AABB3D::getMiddle() const { - return (min + max) / 2; + return (min_ + max_) / 2; } AABB AABB3D::flatten() const { - return AABB(Point(min.x_, min.y_), Point(max.x_, max.y_)); + return AABB(Point(min_.x_, min_.y_), Point(max_.x_, max_.y_)); } bool AABB3D::hit(const AABB3D& other) const { - if (max.x_ < other.min.x_ || min.x_ > other.max.x_ || max.y_ < other.min.y_ || min.y_ > other.max.y_ || max.z_ < other.min.z_ || min.z_ > other.max.z_) + if (max_.x_ < other.min_.x_ || min_.x_ > other.max_.x_ || max_.y_ < other.min_.y_ || min_.y_ > other.max_.y_ || max_.z_ < other.min_.z_ || min_.z_ > other.max_.z_) { return false; } @@ -44,53 +44,53 @@ bool AABB3D::hit(const AABB3D& other) const AABB3D AABB3D::include(Point3 p) { - min.x_ = std::min(min.x_, p.x_); - min.y_ = std::min(min.y_, p.y_); - min.z_ = std::min(min.z_, p.z_); - max.x_ = std::max(max.x_, p.x_); - max.y_ = std::max(max.y_, p.y_); - max.z_ = std::max(max.z_, p.z_); + min_.x_ = std::min(min_.x_, p.x_); + min_.y_ = std::min(min_.y_, p.y_); + min_.z_ = std::min(min_.z_, p.z_); + max_.x_ = std::max(max_.x_, p.x_); + max_.y_ = std::max(max_.y_, p.y_); + max_.z_ = std::max(max_.z_, p.z_); return *this; } AABB3D AABB3D::include(const AABB3D& aabb) { // Note that this is different from including the min and max points, since when 'min > max' it's used to denote an negative/empty box. - min.x_ = std::min(min.x_, aabb.min.x_); - min.y_ = std::min(min.y_, aabb.min.y_); - min.z_ = std::min(min.z_, aabb.min.z_); - max.x_ = std::max(max.x_, aabb.max.x_); - max.y_ = std::max(max.y_, aabb.max.y_); - max.z_ = std::max(max.z_, aabb.max.z_); + min_.x_ = std::min(min_.x_, aabb.min_.x_); + min_.y_ = std::min(min_.y_, aabb.min_.y_); + min_.z_ = std::min(min_.z_, aabb.min_.z_); + max_.x_ = std::max(max_.x_, aabb.max_.x_); + max_.y_ = std::max(max_.y_, aabb.max_.y_); + max_.z_ = std::max(max_.z_, aabb.max_.z_); return *this; } AABB3D AABB3D::includeZ(coord_t z) { - min.z_ = std::min(min.z_, z); - max.z_ = std::max(max.z_, z); + min_.z_ = std::min(min_.z_, z); + max_.z_ = std::max(max_.z_, z); return *this; } AABB3D AABB3D::translate(Point3 offset) { - min += offset; - max += offset; + min_ += offset; + max_ += offset; return *this; } AABB3D AABB3D::translate(Point offset) { - min += offset; - max += offset; + min_ += offset; + max_ += offset; return *this; } AABB3D AABB3D::expand(coord_t outset) { - min -= Point3(outset, outset, outset); - max += Point3(outset, outset, outset); - if (min.x_ > max.x_ || min.y_ > max.y_ || min.z_ > max.z_) + min_ -= Point3(outset, outset, outset); + max_ += Point3(outset, outset, outset); + if (min_.x_ > max_.x_ || min_.y_ > max_.y_ || min_.z_ > max_.z_) { // make this AABB3D invalid *this = AABB3D(); } @@ -99,9 +99,9 @@ AABB3D AABB3D::expand(coord_t outset) AABB3D AABB3D::expandXY(coord_t outset) { - min -= Point3(outset, outset, 0); - max += Point3(outset, outset, 0); - if (min.x_ > max.x_ || min.y_ > max.y_) + min_ -= Point3(outset, outset, 0); + max_ += Point3(outset, outset, 0); + if (min_.x_ > max_.x_ || min_.y_ > max_.y_) { // make this AABB3D invalid *this = AABB3D(); } diff --git a/src/utils/Date.cpp b/src/utils/Date.cpp index d08f058158..52065c72bc 100644 --- a/src/utils/Date.cpp +++ b/src/utils/Date.cpp @@ -12,25 +12,25 @@ namespace cura { Date::Date(int year, int month, int day) -: year(year) -, month(month) -, day(day) +: year_(year) +, month_(month) +, day_(day) { } std::string Date::toStringDashed() { std::ostringstream str; - str << std::setfill('0') << std::setw(4) << year << "-" - << std::setfill('0') << std::setw(2) << month << "-" - << std::setfill('0') << std::setw(2) << day; + str << std::setfill('0') << std::setw(4) << year_ << "-" + << std::setfill('0') << std::setw(2) << month_ << "-" + << std::setfill('0') << std::setw(2) << day_; return str.str(); } Date::Date() -: year(-1) -, month(-1) -, day(-1) +: year_(-1) +, month_(-1) +, day_(-1) { } @@ -42,13 +42,13 @@ Date Date::getDate() char s_month[5]; static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; - std::sscanf(build_date, "%s %d %d", s_month, &ret.day, &ret.year); + std::sscanf(build_date, "%s %d %d", s_month, &ret.day_, &ret.year_); - ret.month = (strstr(month_names, s_month) - month_names) / 3; + ret.month_ = (strstr(month_names, s_month) - month_names) / 3; - ret.month++; // humans count Jan as month 1, not zero + ret.month_++; // humans count Jan as month 1, not zero return ret; } -} // namespace cura \ No newline at end of file +} // namespace cura diff --git a/src/utils/ExtrusionJunction.cpp b/src/utils/ExtrusionJunction.cpp index 972891a9f6..5a7cdb49b9 100644 --- a/src/utils/ExtrusionJunction.cpp +++ b/src/utils/ExtrusionJunction.cpp @@ -8,15 +8,15 @@ namespace cura bool ExtrusionJunction::operator ==(const ExtrusionJunction& other) const { - return p == other.p - && w == other.w - && perimeter_index == other.perimeter_index; + return p_ == other.p_ + && w_ == other.w_ + && perimeter_index_ == other.perimeter_index_; } ExtrusionJunction::ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index) - : p(p), - w(w), - perimeter_index(perimeter_index) + : p_(p), + w_(w), + perimeter_index_(perimeter_index) {} } diff --git a/src/utils/ExtrusionLine.cpp b/src/utils/ExtrusionLine.cpp index ac15007692..b16a247f63 100644 --- a/src/utils/ExtrusionLine.cpp +++ b/src/utils/ExtrusionLine.cpp @@ -1,48 +1,53 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "utils/ExtrusionLine.h" #include -#include "utils/ExtrusionLine.h" -#include "utils/linearAlg2D.h" #include "utils/Simplify.h" +#include "utils/linearAlg2D.h" namespace cura { ExtrusionLine::ExtrusionLine(const size_t inset_idx, const bool is_odd) -: inset_idx(inset_idx) -, is_odd(is_odd) -, is_closed(false) -{} + : inset_idx_(inset_idx) + , is_odd_(is_odd) + , is_closed_(false) +{ +} coord_t ExtrusionLine::getLength() const { - if (junctions.empty()) + if (junctions_.empty()) { return 0; } coord_t len = 0; - ExtrusionJunction prev = junctions.front(); - for (const ExtrusionJunction& next : junctions) + ExtrusionJunction prev = junctions_.front(); + for (const ExtrusionJunction& next : junctions_) { - len += vSize(next.p - prev.p); + len += vSize(next.p_ - prev.p_); prev = next; } - if (is_closed) + if (is_closed_) { - len += vSize(front().p - back().p); + len += vSize(front().p_ - back().p_); } return len; } coord_t ExtrusionLine::getMinimalWidth() const { - return std::min_element(junctions.cbegin(), junctions.cend(), - [](const ExtrusionJunction& l, const ExtrusionJunction& r) - { - return l.w < r.w; - })->w; + return std::min_element( + junctions_.cbegin(), + junctions_.cend(), + [](const ExtrusionJunction& l, const ExtrusionJunction& r) + { + return l.w_ < r.w_; + }) + ->w_; } -} +} // namespace cura diff --git a/src/utils/ExtrusionSegment.cpp b/src/utils/ExtrusionSegment.cpp index 6c152c5612..9e6edb8c5d 100644 --- a/src/utils/ExtrusionSegment.cpp +++ b/src/utils/ExtrusionSegment.cpp @@ -18,7 +18,7 @@ Polygons ExtrusionSegment::toPolygons() Polygons ExtrusionSegment::toPolygons(bool reduced) { Polygons ret; - const Point vec = to_.p - from_.p; + const Point vec = to_.p_ - from_.p_; const coord_t vec_length = vSize(vec); if (vec_length <= 0) // Don't even output the endcaps. @@ -27,10 +27,10 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) } PolygonRef poly = ret.newPoly(); - const double delta_r = 0.5 * std::abs(from_.w - to_.w); + const double delta_r = 0.5 * std::abs(from_.w_ - to_.w_); const double vec_length_fixed = std::max(delta_r, static_cast(vec_length)); float alpha = std::acos(delta_r / vec_length_fixed); // Angle between the slope along the edge of the polygon (due to varying line width) and the centerline. - if (to_.w > from_.w) + if (to_.w_ > from_.w_) { alpha = std::numbers::pi - alpha; } @@ -49,7 +49,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap on the "from" vertex's end. { - poly.emplace_back(from_.p + Point(from_.w / 2 * cos(alpha + dir), from_.w / 2 * sin(alpha + dir))); + poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(alpha + dir), from_.w_ / 2 * sin(alpha + dir))); double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) @@ -67,18 +67,18 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap. for (double a = start_a; a <= end_a; a += a_step) { - poly.emplace_back(from_.p + Point(from_.w / 2 * cos(a), from_.w / 2 * sin(a))); + poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(a), from_.w_ / 2 * sin(a))); } - poly.emplace_back(from_.p + Point(from_.w / 2 * cos(2 * std::numbers::pi - alpha + dir), from_.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); + poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), from_.w_ / 2 * sin(2 * std::numbers::pi - alpha + dir))); } // Draw the endcap on the "to" vertex's end. { poly.emplace_back( - to_.p + to_.p_ + Point( - to_.w / 2 * cos(2 * std::numbers::pi - alpha + dir), - to_.w / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! + to_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), + to_.w_ / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) @@ -109,18 +109,18 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) { for (double a = end_a; a >= start_a; a -= a_step) // Go in the opposite direction. { - poly.emplace_back(to_.p + Point(to_.w / 2 * cos(a), to_.w / 2 * sin(a))); + poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); } } else { for (double a = end_a; a <= start_a; a += a_step) { - poly.emplace_back(to_.p + Point(to_.w / 2 * cos(a), to_.w / 2 * sin(a))); + poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); } } - poly.emplace_back(to_.p + Point(to_.w / 2 * cos(alpha + dir), to_.w / 2 * sin(alpha + dir))); + poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(alpha + dir), to_.w_ / 2 * sin(alpha + dir))); // The other main diagonal from the "to" vertex to the "from" vertex is implicit in the closing of the polygon. } @@ -138,15 +138,15 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) std::vector ExtrusionSegment::discretize(coord_t step_size) { - Point a = from_.p; - Point b = to_.p; + Point a = from_.p_; + Point b = to_.p_; Point ab = b - a; coord_t ab_length = vSize(ab); coord_t step_count = std::max(static_cast(1), (ab_length + step_size / 2) / step_size); std::vector discretized; for (coord_t step = 0; step < step_count; step++) { - ExtrusionJunction mid(a + ab * (step + 1) / step_count, from_.w + (to_.w - from_.w) * (step + 1) / step_count, from_.perimeter_index); + ExtrusionJunction mid(a + ab * (step + 1) / step_count, from_.w_ + (to_.w_ - from_.w_) * (step + 1) / step_count, from_.perimeter_index_); discretized.emplace_back(from_, mid, is_odd_, true); from_ = mid; } diff --git a/src/utils/ListPolyIt.cpp b/src/utils/ListPolyIt.cpp index 86d8e44676..93cad91774 100644 --- a/src/utils/ListPolyIt.cpp +++ b/src/utils/ListPolyIt.cpp @@ -70,8 +70,8 @@ ListPolyIt ListPolyIt::insertPointNonDuplicate(const ListPolyIt before, const Li } else { - ListPolygon& poly = *after.poly; - return ListPolyIt(poly, poly.insert(after.it, to_insert)); + ListPolygon& poly = *after.poly_; + return ListPolyIt(poly, poly.insert(after.it_, to_insert)); } } diff --git a/src/utils/PolygonConnector.cpp b/src/utils/PolygonConnector.cpp index b984010dc9..5aae9257f2 100644 --- a/src/utils/PolygonConnector.cpp +++ b/src/utils/PolygonConnector.cpp @@ -51,7 +51,7 @@ Point PolygonConnector::getPosition(const Point& vertex) const Point PolygonConnector::getPosition(const ExtrusionJunction& junction) const { - return junction.p; + return junction.p_; } coord_t PolygonConnector::getWidth(const Point&) const @@ -61,7 +61,7 @@ coord_t PolygonConnector::getWidth(const Point&) const coord_t PolygonConnector::getWidth(const ExtrusionJunction& junction) const { - return junction.w; + return junction.w_; } void PolygonConnector::addVertex(Polygon& polygonal, const Point& position, const coord_t) const @@ -100,7 +100,7 @@ ExtrusionLine PolygonConnector::createEmpty() const constexpr size_t inset_index = 1; //Specialising to set inset_index to 1 instead of maximum int. Connected polys are not specific to any inset. constexpr bool is_odd = false; ExtrusionLine result(inset_index, is_odd); - result.is_closed = true; + result.is_closed_ = true; return result; //No copy, via RVO. } diff --git a/src/utils/PolylineStitcher.cpp b/src/utils/PolylineStitcher.cpp index 5bec622839..7346613e83 100644 --- a/src/utils/PolylineStitcher.cpp +++ b/src/utils/PolylineStitcher.cpp @@ -12,7 +12,7 @@ namespace cura template<> bool PolylineStitcher::canReverse(const PathsPointIndex& ppi) { - if ((*ppi.polygons_)[ppi.poly_idx_].is_odd) + if ((*ppi.polygons_)[ppi.poly_idx_].is_odd_) { return true; } @@ -31,7 +31,7 @@ bool PolylineStitcher::canReverse(const PathsPointInde template<> bool PolylineStitcher::canConnect(const ExtrusionLine& a, const ExtrusionLine& b) { - return a.is_odd == b.is_odd; + return a.is_odd_ == b.is_odd_; } template<> @@ -43,7 +43,7 @@ bool PolylineStitcher::canConnect(const Polygon&, cons template<> bool PolylineStitcher::isOdd(const ExtrusionLine& line) { - return line.is_odd; + return line.is_odd_; } template<> diff --git a/src/utils/ProximityPointLink.cpp b/src/utils/ProximityPointLink.cpp deleted file mode 100644 index 77944d3cc9..0000000000 --- a/src/utils/ProximityPointLink.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "utils/ProximityPointLink.h" - -namespace cura -{ - -ProximityPointLink::ProximityPointLink(const ListPolyIt a, const ListPolyIt b, int dist, const ProximityPointLinkType type) -: a(a) -, b(b) -, dist(dist) -, type(type) -{ -} - -bool ProximityPointLink::operator==(const ProximityPointLink& other) const -{ - return (a == other.a && b == other.b) || (a == other.b && b == other.a); -} - -void ProximityPointLink::setDist(coord_t distance) const -{ - ProximityPointLink& thiss = *const_cast(this); - thiss.dist = distance; -} - -}//namespace cura diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index 317bd32fba..497f3fe6b7 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -64,21 +64,21 @@ SVG::SVG(std::string filename, AABB aabb, Point canvas_size, ColorObject backgro filename, aabb, std::min( - static_cast(canvas_size.X - canvas_size.X / 5 * 2) / static_cast(aabb.max.X - aabb.min.X), - static_cast(canvas_size.Y - canvas_size.Y / 5) / static_cast(aabb.max.Y - aabb.min.Y)), + static_cast(canvas_size.X - canvas_size.X / 5 * 2) / static_cast(aabb.max_.X - aabb.min_.X), + static_cast(canvas_size.Y - canvas_size.Y / 5) / static_cast(aabb.max_.Y - aabb.min_.Y)), canvas_size, background) { } SVG::SVG(std::string filename, AABB aabb, double scale, ColorObject background) - : SVG(filename, aabb, scale, (aabb.max - aabb.min) * scale, background) + : SVG(filename, aabb, scale, (aabb.max_ - aabb.min_) * scale, background) { } SVG::SVG(std::string filename, AABB aabb, double scale, Point canvas_size, ColorObject background) : aabb_(aabb) - , aabb_size_(aabb.max - aabb.min) + , aabb_size_(aabb.max_ - aabb.min_) , canvas_size_(canvas_size) , scale_(scale) , background_(background) @@ -100,8 +100,8 @@ SVG::SVG(std::string filename, AABB aabb, double scale, Point canvas_size, Color fprintf(out_, "(aabb_.max.Y - aabb_.min.Y)); - fprintf(out_, " width=\"%f\"\n", scale_ * static_cast(aabb_.max.X - aabb_.min.X)); + fprintf(out_, " height=\"%f\"\n", scale_ * static_cast(aabb_.max_.Y - aabb_.min_.Y)); + fprintf(out_, " width=\"%f\"\n", scale_ * static_cast(aabb_.max_.X - aabb_.min_.X)); fprintf(out_, " version=\"1.1\">\n"); fprintf(out_, " (p.X - aabb_.min.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min.Y) * scale_)); + return Point(std::llrint(static_cast(p.X - aabb_.min_.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min_.Y) * scale_)); } Point3D SVG::transformF(const Point& p) const { - return Point3D(static_cast(p.X - aabb_.min.X) * scale_, static_cast(p.Y - aabb_.min.Y) * scale_, 0.0); + return Point3D(static_cast(p.X - aabb_.min_.X) * scale_, static_cast(p.Y - aabb_.min_.Y) * scale_, 0.0); } void SVG::writeComment(const std::string& comment) const @@ -435,25 +435,25 @@ void SVG::writeLines(const VariableWidthLines& lines, const ColorObject color, c void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const double width_factor) const { constexpr double minimum_line_width = 10; // Always have some width, otherwise some lines become completely invisible. - if (line.junctions.empty()) // Only draw lines that have at least 2 junctions, otherwise they are degenerate. + if (line.junctions_.empty()) // Only draw lines that have at least 2 junctions, otherwise they are degenerate. { return; } - ExtrusionJunction start_vertex = line.junctions[0]; - for (size_t index = 1; index < line.junctions.size(); ++index) + ExtrusionJunction start_vertex = line.junctions_[0]; + for (size_t index = 1; index < line.junctions_.size(); ++index) { - ExtrusionJunction end_vertex = line.junctions[index]; + ExtrusionJunction end_vertex = line.junctions_[index]; // Compute the corners of the trapezoid for this variable-width line segment. - const Point direction_vector = end_vertex.p - start_vertex.p; + const Point direction_vector = end_vertex.p_ - start_vertex.p_; const Point direction_left = turn90CCW(direction_vector); const Point direction_right = -direction_left; // Opposite of left. const Point3D start_left - = transformF(start_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); + = transformF(start_vertex.p_ + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w_) * width_factor)))); const Point3D start_right - = transformF(start_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w) * width_factor)))); - const Point3D end_left = transformF(end_vertex.p + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); - const Point3D end_right = transformF(end_vertex.p + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w) * width_factor)))); + = transformF(start_vertex.p_ + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w_) * width_factor)))); + const Point3D end_left = transformF(end_vertex.p_ + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w_) * width_factor)))); + const Point3D end_right = transformF(end_vertex.p_ + normal(direction_right, std::llrint(std::max(minimum_line_width, static_cast(end_vertex.w_) * width_factor)))); fprintf( out_, @@ -475,22 +475,22 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const do void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const double stroke_width, const double font_size) const { constexpr double dist_from_edge = 0.05; // As fraction of image width or height. - const coord_t min_x = aabb_.min.X - (aabb_.min.X % grid_size); - const coord_t min_y = aabb_.min.Y - (aabb_.min.Y % grid_size); + const coord_t min_x = aabb_.min_.X - (aabb_.min_.X % grid_size); + const coord_t min_y = aabb_.min_.Y - (aabb_.min_.Y % grid_size); - for (coord_t x = min_x; x < aabb_.max.X; x += grid_size) + for (coord_t x = min_x; x < aabb_.max_.X; x += grid_size) { - writeLine(Point(x, aabb_.min.Y), Point(x, aabb_.max.Y), color, stroke_width); + writeLine(Point(x, aabb_.min_.Y), Point(x, aabb_.max_.Y), color, stroke_width); std::stringstream ss; ss << INT2MM(x); - writeText(Point(x, std::llrint(static_cast(aabb_.min.Y) + static_cast(aabb_.max.Y - aabb_.min.Y) * dist_from_edge)), ss.str(), color, font_size); + writeText(Point(x, std::llrint(static_cast(aabb_.min_.Y) + static_cast(aabb_.max_.Y - aabb_.min_.Y) * dist_from_edge)), ss.str(), color, font_size); } - for (coord_t y = min_y; y < aabb_.max.Y; y += grid_size) + for (coord_t y = min_y; y < aabb_.max_.Y; y += grid_size) { - writeLine(Point(aabb_.min.X, y), Point(aabb_.max.Y, y), color, stroke_width); + writeLine(Point(aabb_.min_.X, y), Point(aabb_.max_.Y, y), color, stroke_width); std::stringstream ss; ss << INT2MM(y); - writeText(Point(std::llrint(static_cast(aabb_.min.X) + static_cast(aabb_.max.X - aabb_.min.X) * dist_from_edge), y), ss.str(), color, font_size); + writeText(Point(std::llrint(static_cast(aabb_.min_.X) + static_cast(aabb_.max_.X - aabb_.min_.X) * dist_from_edge), y), ss.str(), color, font_size); } } diff --git a/src/utils/Simplify.cpp b/src/utils/Simplify.cpp index 19ec8f04a4..ed2dc9edb5 100644 --- a/src/utils/Simplify.cpp +++ b/src/utils/Simplify.cpp @@ -10,15 +10,15 @@ namespace cura { Simplify::Simplify(const coord_t max_resolution, const coord_t max_deviation, const coord_t max_area_deviation) - : max_resolution(max_resolution) - , max_deviation(max_deviation) - , max_area_deviation(max_area_deviation) + : max_resolution_(max_resolution) + , max_deviation_(max_deviation) + , max_area_deviation_(max_area_deviation) {} Simplify::Simplify(const Settings& settings) - : max_resolution(settings.get("meshfix_maximum_resolution")) - , max_deviation(settings.get("meshfix_maximum_deviation")) - , max_area_deviation(settings.get("meshfix_maximum_extrusion_area_deviation")) + : max_resolution_(settings.get("meshfix_maximum_resolution")) + , max_deviation_(settings.get("meshfix_maximum_deviation")) + , max_area_deviation_(settings.get("meshfix_maximum_extrusion_area_deviation")) {} Polygons Simplify::polygon(const Polygons& polygons) const @@ -86,8 +86,8 @@ Polygon Simplify::createEmpty(const Polygon& original) const ExtrusionLine Simplify::createEmpty(const ExtrusionLine& original) const { - ExtrusionLine result(original.inset_idx, original.is_odd); - result.is_closed = original.is_closed; + ExtrusionLine result(original.inset_idx_, original.is_odd_); + result.is_closed_ = original.is_closed_; return result; } @@ -98,7 +98,7 @@ void Simplify::appendVertex(Polygon& polygon, const Point& vertex) const void Simplify::appendVertex(ExtrusionLine& extrusion_line, const ExtrusionJunction& vertex) const { - extrusion_line.junctions.push_back(vertex); + extrusion_line.junctions_.push_back(vertex); } const Point& Simplify::getPosition(const Point& vertex) const @@ -108,7 +108,7 @@ const Point& Simplify::getPosition(const Point& vertex) const const Point& Simplify::getPosition(const ExtrusionJunction& vertex) const { - return vertex.p; + return vertex.p_; } Point Simplify::createIntersection(const Point& before, const Point intersection, const Point& after) const @@ -121,7 +121,7 @@ ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, //Average the extrusion width of the line. //More correct would be to see where along the line the intersection occurs with a projection or something. //But these details are so small, and this solution is so much quicker and simpler. - return ExtrusionJunction(intersection, (before.w + after.w) / 2, before.perimeter_index); + return ExtrusionJunction(intersection, (before.w_ + after.w_) / 2, before.perimeter_index_); } coord_t Simplify::getAreaDeviation(const Point& before, const Point& vertex, const Point& after) const @@ -155,13 +155,13 @@ coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const Extrus { return 0; //Either of the line segments is zero, so the deviation of one of the line segments doesn't matter (not printed). So effectively there is no deviation. } - const coord_t width_diff = std::max(std::abs(vertex.w - before.w), std::abs(after.w - vertex.w)); + const coord_t width_diff = std::max(std::abs(vertex.w_ - before.w_), std::abs(after.w_ - vertex.w_)); if (width_diff > 1) { // Adjust the width only if there is a difference, or else the rounding errors may produce the wrong // weighted average value. - const coord_t ab_weight = (before.w + vertex.w) / 2; - const coord_t bc_weight = (vertex.w + after.w) / 2; + const coord_t ab_weight = (before.w_ + vertex.w_) / 2; + const coord_t bc_weight = (vertex.w_ + after.w_) / 2; const coord_t weighted_average_width = (ab_length * ab_weight + bc_length * bc_weight) / ac_length; return std::abs(ab_weight - weighted_average_width) * ab_length + std::abs(bc_weight - weighted_average_width) * bc_length; } @@ -172,4 +172,4 @@ coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const Extrus } } -} \ No newline at end of file +} diff --git a/src/utils/ToolpathVisualizer.cpp b/src/utils/ToolpathVisualizer.cpp index 1b5d294b89..22b3b489f3 100644 --- a/src/utils/ToolpathVisualizer.cpp +++ b/src/utils/ToolpathVisualizer.cpp @@ -22,8 +22,8 @@ void ToolpathVisualizer::toolpaths(const std::vector& all_segm for (size_t segment_idx = 0; segment_idx < all_segments.size(); segment_idx++) { ExtrusionSegment s = all_segments[segment_idx]; - s.from_.w *= w / .9; - s.to_.w *= w / .9; + s.from_.w_ *= w / .9; + s.to_.w_ *= w / .9; Polygons covered = s.toPolygons(false); polys.add(covered); } @@ -65,23 +65,23 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size return ss.str(); }; AABB aabb(input); - ExtrusionJunction legend_btm(Point(aabb.max.X + nozzle_size + max_dev, aabb.max.Y), nozzle_size - max_dev, 0); - ExtrusionJunction legend_top(Point(aabb.max.X + nozzle_size + max_dev, aabb.min.Y), nozzle_size + max_dev, 0); - ExtrusionJunction legend_mid((legend_top.p + legend_btm.p) / 2, (legend_top.w + legend_btm.w) / 2, 0); - legend_btm.p += (legend_mid.p - legend_btm.p) / 4; - legend_top.p += (legend_mid.p - legend_top.p) / 4; + ExtrusionJunction legend_btm(Point(aabb.max_.X + nozzle_size + max_dev, aabb.max_.Y), nozzle_size - max_dev, 0); + ExtrusionJunction legend_top(Point(aabb.max_.X + nozzle_size + max_dev, aabb.min_.Y), nozzle_size + max_dev, 0); + ExtrusionJunction legend_mid((legend_top.p_ + legend_btm.p_) / 2, (legend_top.w_ + legend_btm.w_) / 2, 0); + legend_btm.p_ += (legend_mid.p_ - legend_btm.p_) / 4; + legend_top.p_ += (legend_mid.p_ - legend_top.p_) / 4; ExtrusionSegment legend_segment(legend_btm, legend_top, true, false); svg_.writeAreas(legend_segment.toPolygons(false), SVG::ColorObject(200, 200, 200), SVG::Color::NONE); // real outline std::vector all_segments_plus; all_segments_plus.emplace_back(legend_segment); // colored Point legend_text_offset(nozzle_size, 0); - svg_.writeText(legend_top.p + legend_text_offset, to_string(INT2MM(legend_top.w))); - svg_.writeText(legend_btm.p + legend_text_offset, to_string(INT2MM(legend_btm.w))); - svg_.writeText(legend_mid.p + legend_text_offset, to_string(INT2MM(legend_mid.w))); - svg_.writeLine(legend_top.p, legend_top.p + legend_text_offset); - svg_.writeLine(legend_btm.p, legend_btm.p + legend_text_offset); - svg_.writeLine(legend_mid.p, legend_mid.p + legend_text_offset); + svg_.writeText(legend_top.p_ + legend_text_offset, to_string(INT2MM(legend_top.w_))); + svg_.writeText(legend_btm.p_ + legend_text_offset, to_string(INT2MM(legend_btm.w_))); + svg_.writeText(legend_mid.p_ + legend_text_offset, to_string(INT2MM(legend_mid.w_))); + svg_.writeLine(legend_top.p_, legend_top.p_ + legend_text_offset); + svg_.writeLine(legend_btm.p_, legend_btm.p_ + legend_text_offset); + svg_.writeLine(legend_mid.p_, legend_mid.p_ + legend_text_offset); widths(all_segments_plus, nozzle_size, max_dev, min_w, rounded_visualization); } @@ -113,7 +113,7 @@ void ToolpathVisualizer::widths( // ss.to.w *= w; for (ExtrusionSegment s : ss.discretize(MM2INT(0.1))) { - coord_t avg_w = (s.from_.w + s.to_.w) / 2; + coord_t avg_w = (s.from_.w_ + s.to_.w_) / 2; Point3 clr; double color_ratio = std::min(1.0, double(std::abs(avg_w - nozzle_size)) / max_dev); color_ratio = color_ratio * .5 + .5 * sqrt(color_ratio); @@ -133,16 +133,16 @@ void ToolpathVisualizer::widths( // clr.y = clr.y * (255 - 92 * clr.dot(green) / green.vSize() / 255) / 255; if (exaggerate_widths) { - s.from_.w = std::max(min_w, min_w + (s.from_.w - (nozzle_size - max_dev)) * 5 / 4); - s.to_.w = std::max(min_w, min_w + (s.to_.w - (nozzle_size - max_dev)) * 5 / 4); + s.from_.w_ = std::max(min_w, min_w + (s.from_.w_ - (nozzle_size - max_dev)) * 5 / 4); + s.to_.w_ = std::max(min_w, min_w + (s.to_.w_ - (nozzle_size - max_dev)) * 5 / 4); } // else // { // s.from.w *= 0.9; // s.to.w *= 0.9; // } - s.from_.w *= w / .9; - s.to_.w *= w / .9; + s.from_.w_ *= w / .9; + s.to_.w_ *= w / .9; Polygons covered = s.toPolygons(); svg_.writeAreas(covered, SVG::ColorObject(clr.x_, clr.y_, clr.z_), SVG::Color::NONE); } diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index a00b0d4dfd..31ecf2bf4c 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -9,11 +9,11 @@ namespace cura { DilationKernel::DilationKernel(GridPoint3 kernel_size, DilationKernel::Type type) - : kernel_size(kernel_size) - , type(type) + : kernel_size_(kernel_size) + , type_(type) { coord_t mult = kernel_size.x_ * kernel_size.y_ * kernel_size.z_; // multiplier for division to avoid rounding and to avoid use of floating point numbers - relative_cells.reserve(mult); + relative_cells_.reserve(mult); GridPoint3 half_kernel = kernel_size / 2; GridPoint3 start = -half_kernel; @@ -40,7 +40,7 @@ DilationKernel::DilationKernel(GridPoint3 kernel_size, DilationKernel::Type type continue; // don't consider this cell } } - relative_cells.emplace_back(x, y, z); + relative_cells_.emplace_back(x, y, z); } } } @@ -116,7 +116,7 @@ bool VoxelUtils::walkPolygons(const Polygons& polys, coord_t z, const std::funct bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size_ / 2; + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2; if (translation.x_ && translation.y_) { translated.translate(Point(translation.x_, translation.y_)); @@ -152,7 +152,7 @@ bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::functio bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel + const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { @@ -165,7 +165,7 @@ std::function VoxelUtils::dilate(const DilationKernel& kernel, { return [&process_cell_func, &kernel](GridPoint3 loc) { - for (const GridPoint3& rel : kernel.relative_cells) + for (const GridPoint3& rel : kernel.relative_cells_) { bool continue_ = process_cell_func(loc + rel); if (! continue_) diff --git a/src/utils/channel.cpp b/src/utils/channel.cpp index 2a4c775767..45d1711b1b 100644 --- a/src/utils/channel.cpp +++ b/src/utils/channel.cpp @@ -3,11 +3,11 @@ #include "utils/channel.h" -#include "utils/resources/certificate.pem.h" - #include #include +#include "utils/resources/certificate.pem.h" + namespace cura::utils { namespace details @@ -17,23 +17,23 @@ inline constexpr static bool ALLOW_REMOTE_CHANNELS = ENABLE_REMOTE_PLUGINS; std::shared_ptr createChannel(const ChannelSetupConfiguration& config) { - constexpr auto create_credentials = [](const ChannelSetupConfiguration& config) + constexpr auto create_credentials = [](const ChannelSetupConfiguration& actual_config) { - if (config.host == "localhost" || config.host == "127.0.0.1") + if (actual_config.host == "localhost" || actual_config.host == "127.0.0.1") { - spdlog::info("Create local channel on port {}.", config.port); + spdlog::info("Create local channel on port {}.", actual_config.port); return grpc::InsecureChannelCredentials(); } if (details::ALLOW_REMOTE_CHANNELS) { - spdlog::info("Create local channel on port {}.", config.port); + spdlog::info("Create local channel on port {}.", actual_config.port); auto creds_config = grpc::SslCredentialsOptions(); creds_config.pem_root_certs = resources::certificate; return grpc::SslCredentials(creds_config); } // Create empty credentials, so it'll make a dummy channel where all operations fail. // This is consistent with creating a channel with the wrong credentials as it where. - spdlog::warn("Remote plugins where disabled, will not connect to {}:{}.", config.host, config.port); + spdlog::warn("Remote plugins where disabled, will not connect to {}:{}.", actual_config.host, actual_config.port); return std::shared_ptr(); }; grpc::ChannelArguments args; diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index a3d6b3c315..e314c1e5f9 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -655,17 +655,19 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( } // try once more with half the preferred distance inside - int64_t max_dist2_here = std::numeric_limits::max(); // we already concluded we are close enough to the closest_poly when we obtained the closest_polygon_point - moveInside2(*loc_to_line_polygons, closest_poly, from, preferred_dist_inside / 2, max_dist2_here, loc_to_line_grid, penalty_function); - bool is_inside = closest_poly.inside(from) == is_outside_boundary; // inside a hole is outside the part - if (is_inside == (preferred_dist_inside > 0)) - { // we ended up on the right side of the polygon - // assume we didn't overshoot another polygon in [polygons] - return closest_polygon_point; + { + int64_t max_dist2_here = std::numeric_limits::max(); // we already concluded we are close enough to the closest_poly when we obtained the closest_polygon_point + moveInside2(*loc_to_line_polygons, closest_poly, from, preferred_dist_inside / 2, max_dist2_here, loc_to_line_grid, penalty_function); + bool is_inside = closest_poly.inside(from) == is_outside_boundary; // inside a hole is outside the part + if (is_inside == (preferred_dist_inside > 0)) + { // we ended up on the right side of the polygon + // assume we didn't overshoot another polygon in [polygons] + return closest_polygon_point; + } } + // if above fails, we perform an offset and sit directly on the offsetted polygon (and keep the result from the above moveInside) // The offset is performed on the closest reference polygon in order to save computation time - else { const coord_t offset = (is_outside_boundary) ? -preferred_dist_inside : preferred_dist_inside; // perform inset on outer boundary and outset on holes Polygons insetted @@ -1058,7 +1060,7 @@ std::vector> Point x = p0 + normal(p0p1, middle_point_nr * grid_size); dist_to_p1 -= grid_size; - std::optional best_here = findClose(x, destination, destination_loc_to_line, penalty_function); + best_here = findClose(x, destination, destination_loc_to_line, penalty_function); if (best_here) { ret.push_back(std::make_pair(ClosestPolygonPoint(x, p0_idx, from), *best_here)); @@ -1336,8 +1338,8 @@ bool PolygonUtils::polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, con // Heuristic check if their AABBs are near first. AABB inner_aabb(inner_poly); AABB outer_aabb(outer_poly); - inner_aabb.max += Point(max_gap, max_gap); // Expand one of them by way of a "distance" by checking intersection with the expanded rectangle. - inner_aabb.min -= Point(max_gap, max_gap); + inner_aabb.max_ += Point(max_gap, max_gap); // Expand one of them by way of a "distance" by checking intersection with the expanded rectangle. + inner_aabb.min_ -= Point(max_gap, max_gap); if (! inner_aabb.hit(outer_aabb)) { return false; @@ -1562,8 +1564,8 @@ Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb auto sides = [aabb](const Point& p) { - return int(p.X < aabb.min.X) * int(Side::Left) + int(p.X > aabb.max.X) * int(Side::Right) + int(p.Y < aabb.min.Y) * int(Side::Bottom) - + int(p.Y > aabb.max.Y) * int(Side::Top); + return int(p.X < aabb.min_.X) * int(Side::Left) + int(p.X > aabb.max_.X) * int(Side::Right) + int(p.Y < aabb.min_.Y) * int(Side::Bottom) + + int(p.Y > aabb.max_.Y) * int(Side::Top); }; int sides_prev = sides(path.back()); diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index c357169170..291c2acd15 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -79,7 +79,7 @@ TEST_F(SlicePhaseTest, Cube) const auto initial_layer_thickness = scene.settings.get("layer_height_0"); constexpr bool variable_layer_height = false; constexpr std::vector* variable_layer_height_values = nullptr; - const size_t num_layers = (cube_mesh.getAABB().max.z - initial_layer_thickness) / layer_thickness + 1; + const size_t num_layers = (cube_mesh.getAABB().max_.z - initial_layer_thickness) / layer_thickness + 1; Slicer slicer(&cube_mesh, layer_thickness, num_layers, variable_layer_height, variable_layer_height_values); ASSERT_EQ(slicer.layers.size(), num_layers) << "The number of layers in the output must equal the requested number of layers."; @@ -140,7 +140,7 @@ TEST_F(SlicePhaseTest, Cylinder1000) const auto initial_layer_thickness = scene.settings.get("layer_height_0"); constexpr bool variable_layer_height = false; constexpr std::vector* variable_layer_height_values = nullptr; - const size_t num_layers = (cylinder_mesh.getAABB().max.z - initial_layer_thickness) / layer_thickness + 1; + const size_t num_layers = (cylinder_mesh.getAABB().max_.z - initial_layer_thickness) / layer_thickness + 1; Slicer slicer(&cylinder_mesh, layer_thickness, num_layers, variable_layer_height, variable_layer_height_values); ASSERT_EQ(slicer.layers.size(), num_layers) << "The number of layers in the output must equal the requested number of layers."; diff --git a/tests/utils/AABB3DTest.cpp b/tests/utils/AABB3DTest.cpp index 854d25dcc5..7bfb51d7db 100644 --- a/tests/utils/AABB3DTest.cpp +++ b/tests/utils/AABB3DTest.cpp @@ -112,8 +112,8 @@ TEST(AABB3DTest, TestInclude) AABB3D empty; box2.include(empty); - EXPECT_EQ(box2.min, a) << "Inclusion of an 'empty' or negative box should not change the minimum of the original."; - EXPECT_EQ(box2.max, b) << "Inclusion of an 'empty' or negative box should not change the maximum of the original."; + EXPECT_EQ(box2.min_, a) << "Inclusion of an 'empty' or negative box should not change the minimum of the original."; + EXPECT_EQ(box2.max_, b) << "Inclusion of an 'empty' or negative box should not change the maximum of the original."; } TEST(AABB3DTest, TestTranslate) diff --git a/tests/utils/AABBTest.cpp b/tests/utils/AABBTest.cpp index f70d4162c4..e09245e3bb 100644 --- a/tests/utils/AABBTest.cpp +++ b/tests/utils/AABBTest.cpp @@ -131,8 +131,8 @@ TEST(AABBTest, TestInclude) AABB empty; box2.include(empty); - EXPECT_EQ(box2.min, a) << "Inclusion of an 'empty' or negative box should not change the minimum of the original."; - EXPECT_EQ(box2.max, b) << "Inclusion of an 'empty' or negative box should not change the maximum of the original."; + EXPECT_EQ(box2.min_, a) << "Inclusion of an 'empty' or negative box should not change the minimum of the original."; + EXPECT_EQ(box2.max_, b) << "Inclusion of an 'empty' or negative box should not change the maximum of the original."; } TEST(AABBTest, TestExpand) @@ -156,7 +156,7 @@ TEST(AABBTest, TestToPolygon) Polygon polygon = box.toPolygon(); - EXPECT_EQ(polygon.area(), (box.max.X - box.min.X) * (box.max.Y - box.min.Y)) << "The polygon from the bounding box should have the same area."; + EXPECT_EQ(polygon.area(), (box.max_.X - box.min_.X) * (box.max_.Y - box.min_.Y)) << "The polygon from the bounding box should have the same area."; EXPECT_EQ(polygon.centerOfMass(), box.getMiddle()) << "The center of mass of an (AA) rectangle is its middle."; } // NOLINTEND(*-magic-numbers) From ddfbb1ea50ccdb4fe9c8a2ccf8db23a039d42659 Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Wed, 22 Nov 2023 08:33:24 +0000 Subject: [PATCH 085/218] Applied clang-format. --- .../OuterWallInsetBeadingStrategy.h | 50 +-- include/ExtruderTrain.h | 10 +- include/InsetOrderOptimizer.h | 6 +- include/InterlockingGenerator.h | 73 ++-- include/MeshGroup.h | 12 +- include/PathOrder.h | 19 +- include/PathOrdering.h | 25 +- include/SkeletalTrapezoidationEdge.h | 4 +- include/TreeModelVolumes.h | 44 +-- include/TreeSupportElement.h | 281 +++++++-------- include/TreeSupportSettings.h | 319 ++++++++---------- include/TreeSupportUtils.h | 4 +- include/WallToolPaths.h | 30 +- include/WallsComputation.h | 8 +- include/gcodeExport.h | 4 +- include/infill/LightningTreeNode.h | 6 +- include/pathPlanning/Comb.h | 99 +++--- include/pathPlanning/LinePolygonsCrossings.h | 97 +++--- include/plugins/pluginproxy.h | 26 +- include/progress/ProgressEstimatorLinear.h | 7 +- include/settings/FlowTempGraph.h | 15 +- include/settings/ZSeamConfig.h | 16 +- include/utils/AABB.h | 25 +- include/utils/ExtrusionJunction.h | 6 +- include/utils/PolygonConnector.h | 267 ++++++++------- include/utils/PolylineStitcher.h | 166 ++++----- include/utils/SquareGrid.h | 30 +- .../OuterWallInsetBeadingStrategy.cpp | 20 +- src/ExtruderTrain.cpp | 11 +- src/PathOrderPath.cpp | 70 ++-- src/Preheat.cpp | 3 +- src/Slice.cpp | 6 +- src/communication/CommandLine.cpp | 16 +- src/gcodeExport.cpp | 3 +- src/infill/LightningDistanceField.cpp | 77 ++--- src/infill/ZigzagConnectorProcessor.cpp | 19 +- src/multiVolumes.cpp | 4 +- src/pathPlanning/Comb.cpp | 8 +- src/progress/ProgressStageEstimator.cpp | 16 +- src/settings/ZSeamConfig.cpp | 14 +- src/utils/AABB.cpp | 25 +- src/utils/Date.cpp | 22 +- src/utils/ExtrusionJunction.cpp | 21 +- src/utils/FMatrix4x3.cpp | 3 +- src/utils/ListPolyIt.cpp | 9 +- src/utils/PolygonConnector.cpp | 28 +- src/utils/PolygonsPointIndex.cpp | 6 +- src/utils/PolylineStitcher.cpp | 7 +- src/utils/Simplify.cpp | 38 ++- src/utils/SquareGrid.cpp | 48 ++- 50 files changed, 1083 insertions(+), 1040 deletions(-) diff --git a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h index 87fb2b8258..c8c6eae31d 100644 --- a/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h +++ b/include/BeadingStrategy/OuterWallInsetBeadingStrategy.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef OUTER_WALL_INSET_BEADING_STRATEGY_H #define OUTER_WALL_INSET_BEADING_STRATEGY_H @@ -8,28 +8,28 @@ namespace cura { - /* - * This is a meta strategy that allows for the outer wall to be inset towards the inside of the model. - */ - class OuterWallInsetBeadingStrategy : public BeadingStrategy - { - public: - OuterWallInsetBeadingStrategy(coord_t outer_wall_offset, BeadingStrategyPtr parent); - - virtual ~OuterWallInsetBeadingStrategy() = default; - - Beading compute(coord_t thickness, coord_t bead_count) const override; - - coord_t getOptimalThickness(coord_t bead_count) const override; - coord_t getTransitionThickness(coord_t lower_bead_count) const override; - coord_t getOptimalBeadCount(coord_t thickness) const override; - coord_t getTransitioningLength(coord_t lower_bead_count) const override; - - virtual std::string toString() const; - - private: - BeadingStrategyPtr parent_; - coord_t outer_wall_offset_; - }; +/* + * This is a meta strategy that allows for the outer wall to be inset towards the inside of the model. + */ +class OuterWallInsetBeadingStrategy : public BeadingStrategy +{ +public: + OuterWallInsetBeadingStrategy(coord_t outer_wall_offset, BeadingStrategyPtr parent); + + virtual ~OuterWallInsetBeadingStrategy() = default; + + Beading compute(coord_t thickness, coord_t bead_count) const override; + + coord_t getOptimalThickness(coord_t bead_count) const override; + coord_t getTransitionThickness(coord_t lower_bead_count) const override; + coord_t getOptimalBeadCount(coord_t thickness) const override; + coord_t getTransitioningLength(coord_t lower_bead_count) const override; + + virtual std::string toString() const; + +private: + BeadingStrategyPtr parent_; + coord_t outer_wall_offset_; +}; } // namespace cura #endif // OUTER_WALL_INSET_BEADING_STRATEGY_H diff --git a/include/ExtruderTrain.h b/include/ExtruderTrain.h index 14ede169f4..1aaccf715a 100644 --- a/include/ExtruderTrain.h +++ b/include/ExtruderTrain.h @@ -1,14 +1,14 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef EXTRUDER_TRAIN_H #define EXTRUDER_TRAIN_H #include "settings/Settings.h" -namespace cura +namespace cura { - + class ExtruderTrain { public: @@ -32,5 +32,5 @@ class ExtruderTrain const size_t extruder_nr_; }; -}//namespace cura +} // namespace cura #endif // EXTRUDER_TRAIN_H diff --git a/include/InsetOrderOptimizer.h b/include/InsetOrderOptimizer.h index e5592806a2..eadde17b9a 100644 --- a/include/InsetOrderOptimizer.h +++ b/include/InsetOrderOptimizer.h @@ -4,11 +4,11 @@ #ifndef INSET_ORDER_OPTIMIZER_H #define INSET_ORDER_OPTIMIZER_H +#include + #include "settings/ZSeamConfig.h" #include "sliceDataStorage.h" -#include - namespace cura { @@ -105,7 +105,7 @@ class InsetOrderOptimizer std::vector> inset_polys_; // vector of vectors holding the inset polygons Polygons retraction_region_; // After printing an outer wall, move into this region so that retractions do not leave visible blobs. Calculated lazily if needed (see - // retraction_region_calculated). + // retraction_region_calculated). /*! * Determine if the paths should be reversed diff --git a/include/InterlockingGenerator.h b/include/InterlockingGenerator.h index 5ff35fd9fc..02bebde68b 100644 --- a/include/InterlockingGenerator.h +++ b/include/InterlockingGenerator.h @@ -1,15 +1,15 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INTERLOCKING_GENERATOR_H #define INTERLOCKING_GENERATOR_H -#include #include #include +#include -#include "utils/polygon.h" #include "utils/VoxelUtils.h" +#include "utils/polygon.h" namespace cura { @@ -18,17 +18,17 @@ class Slicer; /*! * Class for generating an interlocking structure between two adjacent models of a different extruder. - * + * * The structure consists of horizontal beams of the two materials interlaced. * In the z direction the direction of these beams is alternated with 90*. - * + * * Example with two materials # and O * Even beams: Odd beams: * ###### ##OO##OO * OOOOOO ##OO##OO * ###### ##OO##OO * OOOOOO ##OO##OO - * + * * One material of a single cell of the structure looks like this: * .-*-. * .-* *-. @@ -41,7 +41,7 @@ class Slicer; * | *-.-* .-* *-|-* * *-. | .-* * *-|-* - * + * * We set up a voxel grid of (2*beam_w,2*beam_w,2*beam_h) and mark all the voxels which contain both meshes. * We then remove all voxels which also contain air, so that the interlocking pattern will not be visible from the outside. * We then generate and combine the polygons for each voxel and apply those areas to the outlines ofthe meshes. @@ -71,21 +71,33 @@ class InterlockingGenerator * \param beam_layer_count The number of layers for the height of the beams * \param interface_dilation The thicknening kernel for the interface * \param air_dilation The thickening kernel applied to air so that cells near the outside of the model won't be generated - * \param air_filtering Whether to fully remove all of the interlocking cells which would be visible on the outside (i.e. touching air). If no air filtering then those cells will be cut off in the middle of a beam. + * \param air_filtering Whether to fully remove all of the interlocking cells which would be visible on the outside (i.e. touching air). If no air filtering then those cells + * will be cut off in the middle of a beam. */ - InterlockingGenerator(Slicer& mesh_a, Slicer& mesh_b, coord_t beam_width_a, coord_t beam_width_b, const PointMatrix& rotation, Point3 cell_size, coord_t beam_layer_count, DilationKernel interface_dilation, DilationKernel air_dilation, bool air_filtering) - : mesh_a_(mesh_a) - , mesh_b_(mesh_b) - , beam_width_a_(beam_width_a) - , beam_width_b_(beam_width_b) - , vu_(cell_size) - , rotation_(rotation) - , cell_size_(cell_size) - , beam_layer_count_(beam_layer_count) - , interface_dilation_(interface_dilation) - , air_dilation_(air_dilation) - , air_filtering_(air_filtering) - {} + InterlockingGenerator( + Slicer& mesh_a, + Slicer& mesh_b, + coord_t beam_width_a, + coord_t beam_width_b, + const PointMatrix& rotation, + Point3 cell_size, + coord_t beam_layer_count, + DilationKernel interface_dilation, + DilationKernel air_dilation, + bool air_filtering) + : mesh_a_(mesh_a) + , mesh_b_(mesh_b) + , beam_width_a_(beam_width_a) + , beam_width_b_(beam_width_b) + , vu_(cell_size) + , rotation_(rotation) + , cell_size_(cell_size) + , beam_layer_count_(beam_layer_count) + , interface_dilation_(interface_dilation) + , air_dilation_(air_dilation) + , air_filtering_(air_filtering) + { + } /*! Given two polygons, return the parts that border on air, and grow 'perpendicular' up to 'detect' distance. * @@ -106,16 +118,16 @@ class InterlockingGenerator /*! * Compute the voxels overlapping with the shell of both models. * This includes the walls, but also top/bottom skin. - * + * * \param kernel The dilation kernel to give the returned voxel shell more thickness * \return The shell voxels for mesh a and those for mesh b */ std::vector> getShellVoxels(const DilationKernel& kernel) const; - + /*! * Compute the voxels overlapping with the shell of some layers. * This includes the walls, but also top/bottom skin. - * + * * \param layers The layer outlines for which to compute the shell voxels * \param kernel The dilation kernel to give the returned voxel shell more thickness * \param[out] cells The output cells which elong to the shell @@ -124,7 +136,7 @@ class InterlockingGenerator /*! * Compute the regions occupied by both models. - * + * * A morphological close is performed so that we don't register small gaps between the two models as being separate. * \return layer_regions The computed layer regions */ @@ -138,7 +150,7 @@ class InterlockingGenerator /*! * Change the outlines of the meshes with the computed interlocking structure. - * + * * \param cells The cells where we want to apply the interlocking structure. * \param layer_regions The total volume of the two meshes combined (and small gaps closed) */ @@ -158,9 +170,10 @@ class InterlockingGenerator const coord_t beam_layer_count_; const DilationKernel interface_dilation_; const DilationKernel air_dilation_; - const bool air_filtering_; //!< Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells will be cut off midway in a beam. + const bool air_filtering_; //!< Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells will be cut + //!< off midway in a beam. }; -}//namespace cura +} // namespace cura -#endif//INTERLOCKING_GENERATOR_H +#endif // INTERLOCKING_GENERATOR_H diff --git a/include/MeshGroup.h b/include/MeshGroup.h index 71ba1f6a6f..51a12be124 100644 --- a/include/MeshGroup.h +++ b/include/MeshGroup.h @@ -1,5 +1,5 @@ -//Copyright (C) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (C) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef MESH_GROUP_H #define MESH_GROUP_H @@ -14,7 +14,7 @@ class Matrix4x3D; /*! * A MeshGroup is a collection with 1 or more 3D meshes. - * + * * One MeshGroup is a whole which is printed at once. * Generally there is one single MeshGroup, though when using one-at-a-time printing, multiple MeshGroups are processed consecutively. */ @@ -43,7 +43,7 @@ class MeshGroup : public NoCopy /*! * Load a Mesh from file and store it in the \p meshgroup. - * + * * \param meshgroup The meshgroup where to store the mesh * \param filename The filename of the mesh file * \param transformation The transformation applied to all vertices @@ -52,6 +52,6 @@ class MeshGroup : public NoCopy */ bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const Matrix4x3D& transformation, Settings& object_parent_settings); -} //namespace cura +} // namespace cura -#endif //MESH_GROUP_H +#endif // MESH_GROUP_H diff --git a/include/PathOrder.h b/include/PathOrder.h index bb87aa0a44..53b4a3543a 100644 --- a/include/PathOrder.h +++ b/include/PathOrder.h @@ -1,5 +1,5 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATHORDER_H #define PATHORDER_H @@ -28,7 +28,6 @@ template class PathOrder { public: - /*! * After reordering, this contains the paths that need to be printed in the * correct order. @@ -108,25 +107,25 @@ class PathOrder */ void detectLoops() { - for(PathOrdering& path : paths_) + for (PathOrdering& path : paths_) { - if(path.is_closed_) //Already a polygon. No need to detect loops. + if (path.is_closed_) // Already a polygon. No need to detect loops. { continue; } - if(path.converted_->size() < 3) //Not enough vertices to really be a closed loop. + if (path.converted_->size() < 3) // Not enough vertices to really be a closed loop. { continue; } - if(vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance_ * coincident_point_distance_) + if (vSize2(path.converted_->back() - path.converted_->front()) < coincident_point_distance_ * coincident_point_distance_) { - //Endpoints are really close to one another. Consider it a closed loop. + // Endpoints are really close to one another. Consider it a closed loop. path.is_closed_ = true; } } } }; -} +} // namespace cura -#endif //PATHORDER_H +#endif // PATHORDER_H diff --git a/include/PathOrdering.h b/include/PathOrdering.h index 96ce53863d..0ec185e700 100644 --- a/include/PathOrdering.h +++ b/include/PathOrdering.h @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATH_ORDER_PATH_H #define PATH_ORDER_PATH_H @@ -38,7 +38,8 @@ struct PathOrdering , start_vertex_(start_vertex) , is_closed_(is_closed) , backwards_(backwards) - {} + { + } /*! * The vertex data of the path. @@ -60,11 +61,11 @@ struct PathOrdering size_t start_vertex_; /*! - * Whether the path should be closed at the ends or not. - * - * If this path should be closed, it represents a polygon. If it should - * not be closed, it represents a polyline. - */ + * Whether the path should be closed at the ends or not. + * + * If this path should be closed, it represents a polygon. If it should + * not be closed, it represents a polyline. + */ bool is_closed_; /*! @@ -74,8 +75,8 @@ struct PathOrdering * backwards direction, if the last vertex is closer than the first. */ bool backwards_; - - + + /*! * Get vertex data from the custom path type. * @@ -102,6 +103,6 @@ struct PathOrdering std::optional cached_vertices_; }; -} +} // namespace cura -#endif //PATH_ORDER_PATH_H +#endif // PATH_ORDER_PATH_H diff --git a/include/SkeletalTrapezoidationEdge.h b/include/SkeletalTrapezoidationEdge.h index 75b0c06b73..a50abb9e65 100644 --- a/include/SkeletalTrapezoidationEdge.h +++ b/include/SkeletalTrapezoidationEdge.h @@ -4,12 +4,12 @@ #ifndef SKELETAL_TRAPEZOIDATION_EDGE_H #define SKELETAL_TRAPEZOIDATION_EDGE_H -#include "utils/ExtrusionJunction.h" - #include #include // smart pointers #include +#include "utils/ExtrusionJunction.h" + namespace cura { diff --git a/include/TreeModelVolumes.h b/include/TreeModelVolumes.h index 8418a9d2c4..9c9013888d 100644 --- a/include/TreeModelVolumes.h +++ b/include/TreeModelVolumes.h @@ -33,8 +33,7 @@ class TreeModelVolumes { public: TreeModelVolumes() = default; - TreeModelVolumes - ( + TreeModelVolumes( const SliceDataStorage& storage, coord_t max_move, coord_t max_move_slow, @@ -42,8 +41,7 @@ class TreeModelVolumes size_t current_mesh_idx, double progress_multiplier, double progress_offset, - const std::vector& additional_excluded_areas = std::vector() - ); + const std::vector& additional_excluded_areas = std::vector()); TreeModelVolumes(TreeModelVolumes&&) = default; TreeModelVolumes& operator=(TreeModelVolumes&&) = default; @@ -123,11 +121,9 @@ class TreeModelVolumes const Polygons& getPlaceableAreas(coord_t radius, LayerIndex layer_idx); /*! - * \brief Provides the area that represents the walls, as in the printed area, of the model. This is an abstract representation not equal with the outline. See calculateWallRestrictions for better description. - * \param radius The radius of the node of interest. - * \param layer_idx The layer of interest. - * \param min_xy_dist is the minimum xy distance used. - * \return Polygons object + * \brief Provides the area that represents the walls, as in the printed area, of the model. This is an abstract representation not equal with the outline. See + * calculateWallRestrictions for better description. \param radius The radius of the node of interest. \param layer_idx The layer of interest. \param min_xy_dist is the minimum + * xy distance used. \return Polygons object */ const Polygons& getWallRestriction(coord_t radius, LayerIndex layer_idx, bool min_xy_dist); @@ -289,7 +285,8 @@ class TreeModelVolumes void calculatePlaceables(const std::deque& keys); /*! - * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model without being able to place a branch with given radius on a single layer. + * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model without being able to place a branch with given radius on a + * single layer. * * The result is a 2D area that would cause nodes of radius \p radius to * collide with the model in a not wanted way. Result is saved in the cache. @@ -299,7 +296,8 @@ class TreeModelVolumes void calculateAvoidanceToModel(const std::deque& keys); /*! - * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model without being able to place a branch with given radius on a single layer. + * \brief Creates the areas that have to be avoided by the tree's branches to prevent collision with the model without being able to place a branch with given radius on a + * single layer. * * The result is a 2D area that would cause nodes of radius \p radius to * collide with the model in a not wanted way. Result is saved in the cache. @@ -311,9 +309,11 @@ class TreeModelVolumes } /*! - * \brief Creates the areas that can not be passed when expanding an area downwards. As such these areas are an somewhat abstract representation of a wall (as in a printed object). + * \brief Creates the areas that can not be passed when expanding an area downwards. As such these areas are an somewhat abstract representation of a wall (as in a printed + * object). * - * These areas are at least xy_min_dist wide. When calculating it is always assumed that every wall is printed on top of another (as in has an overlap with the wall a layer below). Result is saved in the corresponding cache. + * These areas are at least xy_min_dist wide. When calculating it is always assumed that every wall is printed on top of another (as in has an overlap with the wall a layer + * below). Result is saved in the corresponding cache. * * \param keys RadiusLayerPairs of all requested areas. Every radius will be calculated up to the provided layer. * @@ -322,9 +322,9 @@ class TreeModelVolumes void calculateWallRestrictions(const std::deque& keys); /*! - * \brief Creates the areas that can not be passed when expanding an area downwards. As such these areas are an somewhat abstract representation of a wall (as in a printed object). - * These areas are at least xy_min_dist wide. When calculating it is always assumed that every wall is printed on top of another (as in has an overlap with the wall a layer below). Result is saved in the corresponding cache. - * \param key RadiusLayerPair of the requested area. It well be will be calculated up to the provided layer. + * \brief Creates the areas that can not be passed when expanding an area downwards. As such these areas are an somewhat abstract representation of a wall (as in a printed + * object). These areas are at least xy_min_dist wide. When calculating it is always assumed that every wall is printed on top of another (as in has an overlap with the wall a + * layer below). Result is saved in the corresponding cache. \param key RadiusLayerPair of the requested area. It well be will be calculated up to the provided layer. */ void calculateWallRestrictions(RadiusLayerPair key) { @@ -336,7 +336,7 @@ class TreeModelVolumes * \param key RadiusLayerPair of the requested areas. The radius will be calculated up to the provided layer. * \return A wrapped optional reference of the requested area (if it was found, an empty optional if nothing was found) */ - template + template const std::optional> getArea(const std::unordered_map& cache, const KEY key) const; bool checkSettingsEquality(const Settings& me, const Settings& other) const; @@ -499,7 +499,8 @@ class TreeModelVolumes std::unique_ptr critical_placeable_areas_cache_ = std::make_unique(); /*! - * \brief Caches to avoid holes smaller than the radius until which the radius is always increased, as they are free of holes. Also called safe avoidances, as they are safe regarding not running into holes. + * \brief Caches to avoid holes smaller than the radius until which the radius is always increased, as they are free of holes. Also called safe avoidances, as they are safe + * regarding not running into holes. */ mutable std::unordered_map avoidance_cache_hole_; std::unique_ptr critical_avoidance_cache_holefree_ = std::make_unique(); @@ -513,7 +514,8 @@ class TreeModelVolumes mutable std::unordered_map wall_restrictions_cache_; std::unique_ptr critical_wall_restrictions_cache_ = std::make_unique(); - // A different cache for min_xy_dist as the maximal safe distance an influence area can be increased(guaranteed overlap of two walls in consecutive layer) is much smaller when min_xy_dist is used. This causes the area of the wall restriction to be thinner and as such just using the min_xy_dist wall restriction would be slower. + // A different cache for min_xy_dist as the maximal safe distance an influence area can be increased(guaranteed overlap of two walls in consecutive layer) is much smaller when + // min_xy_dist is used. This causes the area of the wall restriction to be thinner and as such just using the min_xy_dist wall restriction would be slower. mutable std::unordered_map wall_restrictions_cache_min_; std::unique_ptr critical_wall_restrictions_cache_min_ = std::make_unique(); @@ -522,6 +524,6 @@ class TreeModelVolumes Simplify simplifier_ = Simplify(0, 0, 0); // a simplifier to simplify polygons. Will be properly initialised in the constructor. }; -} +} // namespace cura -#endif //TREEMODELVOLUMES_H +#endif // TREEMODELVOLUMES_H diff --git a/include/TreeSupportElement.h b/include/TreeSupportElement.h index a463ce30fe..95bbb73eee 100644 --- a/include/TreeSupportElement.h +++ b/include/TreeSupportElement.h @@ -1,48 +1,41 @@ -//CuraEngine is released under the terms of the AGPLv3 or higher. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef TREESUPPORTELEMENT_H #define TREESUPPORTELEMENT_H +#include +#include + +#include + #include "TreeModelVolumes.h" #include "TreeSupportBaseCircle.h" #include "TreeSupportEnums.h" #include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" #include "utils/polygon.h" -#include - -#include -#include namespace cura { struct AreaIncreaseSettings { - AreaIncreaseSettings() : - type_(AvoidanceType::FAST), - increase_speed_(0), - increase_radius_(false), - no_error_(false), - use_min_distance_(false), - move_(false) + AreaIncreaseSettings() + : type_(AvoidanceType::FAST) + , increase_speed_(0) + , increase_radius_(false) + , no_error_(false) + , use_min_distance_(false) + , move_(false) { } - AreaIncreaseSettings - ( - AvoidanceType type, - coord_t increase_speed, - bool increase_radius, - bool simplify, - bool use_min_distance, - bool move - ) : - type_(type), - increase_speed_(increase_speed), - increase_radius_(increase_radius), - no_error_(simplify), - use_min_distance_(use_min_distance), - move_(move) + AreaIncreaseSettings(AvoidanceType type, coord_t increase_speed, bool increase_radius, bool simplify, bool use_min_distance, bool move) + : type_(type) + , increase_speed_(increase_speed) + , increase_radius_(increase_radius) + , no_error_(simplify) + , use_min_distance_(use_min_distance) + , move_(move) { } @@ -55,20 +48,14 @@ struct AreaIncreaseSettings bool operator==(const AreaIncreaseSettings& other) const { - return - increase_radius_ == other.increase_radius_ && - increase_speed_ == other.increase_speed_ && - type_ == other.type_ && - no_error_ == other.no_error_ && - use_min_distance_ == other.use_min_distance_ && - move_ == other.move_; + return increase_radius_ == other.increase_radius_ && increase_speed_ == other.increase_speed_ && type_ == other.type_ && no_error_ == other.no_error_ + && use_min_distance_ == other.use_min_distance_ && move_ == other.move_; } }; struct TreeSupportElement { - TreeSupportElement - ( + TreeSupportElement( coord_t distance_to_top, size_t target_height, Point target_position, @@ -81,59 +68,58 @@ struct TreeSupportElement bool force_tips_to_roof, bool skip_ovalisation, bool influence_area_limit_active, - coord_t influence_area_limit_range - ) : - target_height_(target_height), - target_position_(target_position), - next_position_(target_position), - next_height_(target_height), - effective_radius_height_(distance_to_top), - to_buildplate_(to_buildplate), - distance_to_top_(distance_to_top), - area_(nullptr), - result_on_layer_(target_position), - increased_to_model_radius_(0), - to_model_gracious_(to_model_gracious), - buildplate_radius_increases_(0), - use_min_xy_dist_(use_min_xy_dist), - supports_roof_(supports_roof), - dont_move_until_(dont_move_until), - can_use_safe_radius_(can_use_safe_radius), - last_area_increase_(AreaIncreaseSettings(AvoidanceType::FAST, 0, false, false, false, false)), - missing_roof_layers_(force_tips_to_roof ? dont_move_until : 0), - skip_ovalisation_(skip_ovalisation), - all_tips_({ target_position }), - influence_area_limit_active_(influence_area_limit_active), - influence_area_limit_range_(influence_area_limit_range - ) + coord_t influence_area_limit_range) + : target_height_(target_height) + , target_position_(target_position) + , next_position_(target_position) + , next_height_(target_height) + , effective_radius_height_(distance_to_top) + , to_buildplate_(to_buildplate) + , distance_to_top_(distance_to_top) + , area_(nullptr) + , result_on_layer_(target_position) + , increased_to_model_radius_(0) + , to_model_gracious_(to_model_gracious) + , buildplate_radius_increases_(0) + , use_min_xy_dist_(use_min_xy_dist) + , supports_roof_(supports_roof) + , dont_move_until_(dont_move_until) + , can_use_safe_radius_(can_use_safe_radius) + , last_area_increase_(AreaIncreaseSettings(AvoidanceType::FAST, 0, false, false, false, false)) + , missing_roof_layers_(force_tips_to_roof ? dont_move_until : 0) + , skip_ovalisation_(skip_ovalisation) + , all_tips_({ target_position }) + , influence_area_limit_active_(influence_area_limit_active) + , influence_area_limit_range_(influence_area_limit_range) { RecreateInfluenceLimitArea(); } - TreeSupportElement(const TreeSupportElement& elem, Polygons* newArea = nullptr) : // copy constructor with possibility to set a new area - target_height_(elem.target_height_), - target_position_(elem.target_position_), - next_position_(elem.next_position_), - next_height_(elem.next_height_), - effective_radius_height_(elem.effective_radius_height_), - to_buildplate_(elem.to_buildplate_), - distance_to_top_(elem.distance_to_top_), - area_(newArea != nullptr ? newArea : elem.area_), - result_on_layer_(elem.result_on_layer_), - increased_to_model_radius_(elem.increased_to_model_radius_), - to_model_gracious_(elem.to_model_gracious_), - buildplate_radius_increases_(elem.buildplate_radius_increases_), - use_min_xy_dist_(elem.use_min_xy_dist_), - supports_roof_(elem.supports_roof_), - dont_move_until_(elem.dont_move_until_), - can_use_safe_radius_(elem.can_use_safe_radius_), - last_area_increase_(elem.last_area_increase_), - missing_roof_layers_(elem.missing_roof_layers_), - skip_ovalisation_(elem.skip_ovalisation_), - all_tips_(elem.all_tips_), - influence_area_limit_area_(elem.influence_area_limit_area_), - influence_area_limit_range_(elem.influence_area_limit_range_), - influence_area_limit_active_(elem.influence_area_limit_active_) + TreeSupportElement(const TreeSupportElement& elem, Polygons* newArea = nullptr) + : // copy constructor with possibility to set a new area + target_height_(elem.target_height_) + , target_position_(elem.target_position_) + , next_position_(elem.next_position_) + , next_height_(elem.next_height_) + , effective_radius_height_(elem.effective_radius_height_) + , to_buildplate_(elem.to_buildplate_) + , distance_to_top_(elem.distance_to_top_) + , area_(newArea != nullptr ? newArea : elem.area_) + , result_on_layer_(elem.result_on_layer_) + , increased_to_model_radius_(elem.increased_to_model_radius_) + , to_model_gracious_(elem.to_model_gracious_) + , buildplate_radius_increases_(elem.buildplate_radius_increases_) + , use_min_xy_dist_(elem.use_min_xy_dist_) + , supports_roof_(elem.supports_roof_) + , dont_move_until_(elem.dont_move_until_) + , can_use_safe_radius_(elem.can_use_safe_radius_) + , last_area_increase_(elem.last_area_increase_) + , missing_roof_layers_(elem.missing_roof_layers_) + , skip_ovalisation_(elem.skip_ovalisation_) + , all_tips_(elem.all_tips_) + , influence_area_limit_area_(elem.influence_area_limit_area_) + , influence_area_limit_range_(elem.influence_area_limit_range_) + , influence_area_limit_active_(elem.influence_area_limit_active_) { parents_.insert(parents_.begin(), elem.parents_.begin(), elem.parents_.end()); } @@ -141,37 +127,37 @@ struct TreeSupportElement /*! * \brief Create a new Element for one layer below the element of the pointer supplied. */ - TreeSupportElement(TreeSupportElement* element_above) : - target_height_(element_above->target_height_), - target_position_(element_above->target_position_), - next_position_(element_above->next_position_), - next_height_(element_above->next_height_), - effective_radius_height_(element_above->effective_radius_height_), - to_buildplate_(element_above->to_buildplate_), - distance_to_top_(element_above->distance_to_top_ + 1), - area_(element_above->area_), - result_on_layer_(Point(-1, -1)), // set to invalid as we are a new node on a new layer - increased_to_model_radius_(element_above->increased_to_model_radius_), - to_model_gracious_(element_above->to_model_gracious_), - buildplate_radius_increases_(element_above->buildplate_radius_increases_), - use_min_xy_dist_(element_above->use_min_xy_dist_), - supports_roof_(element_above->supports_roof_), - dont_move_until_(element_above->dont_move_until_), - can_use_safe_radius_(element_above->can_use_safe_radius_), - last_area_increase_(element_above->last_area_increase_), - missing_roof_layers_(element_above->missing_roof_layers_), - skip_ovalisation_(false), - all_tips_(element_above->all_tips_), - influence_area_limit_area_(element_above->influence_area_limit_area_), - influence_area_limit_range_(element_above->influence_area_limit_range_), - influence_area_limit_active_(element_above->influence_area_limit_active_) + TreeSupportElement(TreeSupportElement* element_above) + : target_height_(element_above->target_height_) + , target_position_(element_above->target_position_) + , next_position_(element_above->next_position_) + , next_height_(element_above->next_height_) + , effective_radius_height_(element_above->effective_radius_height_) + , to_buildplate_(element_above->to_buildplate_) + , distance_to_top_(element_above->distance_to_top_ + 1) + , area_(element_above->area_) + , result_on_layer_(Point(-1, -1)) + , // set to invalid as we are a new node on a new layer + increased_to_model_radius_(element_above->increased_to_model_radius_) + , to_model_gracious_(element_above->to_model_gracious_) + , buildplate_radius_increases_(element_above->buildplate_radius_increases_) + , use_min_xy_dist_(element_above->use_min_xy_dist_) + , supports_roof_(element_above->supports_roof_) + , dont_move_until_(element_above->dont_move_until_) + , can_use_safe_radius_(element_above->can_use_safe_radius_) + , last_area_increase_(element_above->last_area_increase_) + , missing_roof_layers_(element_above->missing_roof_layers_) + , skip_ovalisation_(false) + , all_tips_(element_above->all_tips_) + , influence_area_limit_area_(element_above->influence_area_limit_area_) + , influence_area_limit_range_(element_above->influence_area_limit_range_) + , influence_area_limit_active_(element_above->influence_area_limit_active_) { parents_ = { element_above }; } // ONLY to be called in merge as it assumes a few assurances made by it. - TreeSupportElement - ( + TreeSupportElement( const TreeSupportElement& first, const TreeSupportElement& second, size_t next_height, @@ -180,18 +166,17 @@ struct TreeSupportElement const std::function& getRadius, double diameter_scale_bp_radius, coord_t branch_radius, - double diameter_angle_scale_factor - ) : - next_position_(next_position), - next_height_(next_height), - area_(nullptr), - increased_to_model_radius_(increased_to_model_radius), - use_min_xy_dist_(first.use_min_xy_dist_ || second.use_min_xy_dist_), - supports_roof_(first.supports_roof_ || second.supports_roof_), - dont_move_until_(std::max(first.dont_move_until_, second.dont_move_until_)), - can_use_safe_radius_(first.can_use_safe_radius_ || second.can_use_safe_radius_), - missing_roof_layers_(std::min(first.missing_roof_layers_, second.missing_roof_layers_)), - skip_ovalisation_(false) + double diameter_angle_scale_factor) + : next_position_(next_position) + , next_height_(next_height) + , area_(nullptr) + , increased_to_model_radius_(increased_to_model_radius) + , use_min_xy_dist_(first.use_min_xy_dist_ || second.use_min_xy_dist_) + , supports_roof_(first.supports_roof_ || second.supports_roof_) + , dont_move_until_(std::max(first.dont_move_until_, second.dont_move_until_)) + , can_use_safe_radius_(first.can_use_safe_radius_ || second.can_use_safe_radius_) + , missing_roof_layers_(std::min(first.missing_roof_layers_, second.missing_roof_layers_)) + , skip_ovalisation_(false) { if (first.target_height_ > second.target_height_) { @@ -215,38 +200,31 @@ struct TreeSupportElement buildplate_radius_increases_ = 0; if (diameter_scale_bp_radius > 0) { - const coord_t foot_increase_radius = - std::abs - ( - std::max - ( - getRadius(second.effective_radius_height_, second.buildplate_radius_increases_), - getRadius(first.effective_radius_height_, first.buildplate_radius_increases_)) - getRadius(effective_radius_height_, buildplate_radius_increases_ - ) - ); + const coord_t foot_increase_radius = std::abs( + std::max( + getRadius(second.effective_radius_height_, second.buildplate_radius_increases_), + getRadius(first.effective_radius_height_, first.buildplate_radius_increases_)) + - getRadius(effective_radius_height_, buildplate_radius_increases_)); // 'buildplate_radius_increases' has to be recalculated, as when a smaller tree with a larger buildplate_radius_increases merge with a larger branch, // the buildplate_radius_increases may have to be lower as otherwise the radius suddenly increases. This results often in a non integer value. buildplate_radius_increases_ = foot_increase_radius / (branch_radius * (diameter_scale_bp_radius - diameter_angle_scale_factor)); } // set last settings to the best out of both parents. If this is wrong, it will only cause a small performance penalty instead of weird behavior. - last_area_increase_ = - AreaIncreaseSettings - ( - std::min(first.last_area_increase_.type_, second.last_area_increase_.type_), - std::min(first.last_area_increase_.increase_speed_, second.last_area_increase_.increase_speed_), - first.last_area_increase_.increase_radius_ || second.last_area_increase_.increase_radius_, - first.last_area_increase_.no_error_ || second.last_area_increase_.no_error_, - first.last_area_increase_.use_min_distance_ && second.last_area_increase_.use_min_distance_, - first.last_area_increase_.move_ || second.last_area_increase_.move_ - ); + last_area_increase_ = AreaIncreaseSettings( + std::min(first.last_area_increase_.type_, second.last_area_increase_.type_), + std::min(first.last_area_increase_.increase_speed_, second.last_area_increase_.increase_speed_), + first.last_area_increase_.increase_radius_ || second.last_area_increase_.increase_radius_, + first.last_area_increase_.no_error_ || second.last_area_increase_.no_error_, + first.last_area_increase_.use_min_distance_ && second.last_area_increase_.use_min_distance_, + first.last_area_increase_.move_ || second.last_area_increase_.move_); all_tips_ = first.all_tips_; all_tips_.insert(all_tips_.end(), second.all_tips_.begin(), second.all_tips_.end()); influence_area_limit_range_ = std::max(first.influence_area_limit_range_, second.influence_area_limit_range_); influence_area_limit_active_ = first.influence_area_limit_active_ || second.influence_area_limit_active_; RecreateInfluenceLimitArea(); - if(first.to_buildplate_ != second.to_buildplate_) + if (first.to_buildplate_ != second.to_buildplate_) { setToBuildplateForAllParents(to_buildplate_); } @@ -388,7 +366,7 @@ struct TreeSupportElement bool operator<(const TreeSupportElement& other) const // true if me < other { - return !(*this == other) && !(*this > other); + return ! (*this == other) && ! (*this > other); } bool operator>(const TreeSupportElement& other) const @@ -440,29 +418,30 @@ struct TreeSupportElement void setToBuildplateForAllParents(bool new_value) { to_buildplate_ = new_value; - std::vector grandparents {parents_}; - while (!grandparents.empty()){ + std::vector grandparents{ parents_ }; + while (! grandparents.empty()) + { std::vector next_parents; - for (TreeSupportElement* grandparent:grandparents){ - next_parents.insert(next_parents.end(),grandparent->parents_.begin(),grandparent->parents_.end()); + for (TreeSupportElement* grandparent : grandparents) + { + next_parents.insert(next_parents.end(), grandparent->parents_.begin(), grandparent->parents_.end()); grandparent->to_buildplate_ = new_value; } grandparents = next_parents; } } - + inline bool isResultOnLayerSet() const { return result_on_layer_ != Point(-1, -1); } - }; } // namespace cura namespace std { -template <> +template<> struct hash { size_t operator()(const cura::TreeSupportElement& node) const diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 4f973cc430..a550bb530b 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -1,8 +1,10 @@ -//CuraEngine is released under the terms of the AGPLv3 or higher. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef TREESUPPORTSETTINGS_H #define TREESUPPORTSETTINGS_H +#include + #include "TreeSupportElement.h" #include "TreeSupportEnums.h" #include "settings/EnumSettings.h" @@ -10,7 +12,6 @@ #include "settings/types/Angle.h" #include "utils/Coord_t.h" #include "utils/Simplify.h" -#include namespace cura { @@ -22,60 +23,68 @@ struct TreeSupportSettings { TreeSupportSettings() = default; // required for the definition of the config variable in the TreeSupport class. - TreeSupportSettings(const Settings& mesh_group_settings) : - angle(mesh_group_settings.get("support_tree_angle")), - angle_slow(mesh_group_settings.get("support_tree_angle_slow")), - support_line_width(mesh_group_settings.get("support_line_width")), - layer_height(mesh_group_settings.get("layer_height")), - branch_radius(mesh_group_settings.get("support_tree_branch_diameter") / 2), - min_radius(mesh_group_settings.get("support_tree_tip_diameter") / 2), // The actual radius is 50 microns larger as the resulting branches will be increased by 50 microns to avoid rounding errors effectively increasing the xydistance - max_radius(mesh_group_settings.get("support_tree_max_diameter")/2), - maximum_move_distance((angle < TAU / 4) ? (coord_t)(tan(angle) * layer_height) : std::numeric_limits::max()), - maximum_move_distance_slow((angle_slow < TAU / 4) ? (coord_t)(tan(angle_slow) * layer_height) : std::numeric_limits::max()), - support_bottom_layers(mesh_group_settings.get("support_bottom_enable") ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0), - tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)), // Ensure lines always stack nicely even if layer height is large - diameter_angle_scale_factor(sin(mesh_group_settings.get("support_tree_branch_diameter_angle")) * layer_height / branch_radius), - max_to_model_radius_increase(mesh_group_settings.get("support_tree_max_diameter_increase_by_merges_when_support_to_model") / 2), - min_dtt_to_model(round_up_divide(mesh_group_settings.get("support_tree_min_height_to_model"), layer_height)), - increase_radius_until_radius(mesh_group_settings.get("support_tree_branch_diameter") / 2), - increase_radius_until_dtt(increase_radius_until_radius <= branch_radius ? tip_layers * (increase_radius_until_radius / branch_radius) : (increase_radius_until_radius - branch_radius) / (branch_radius * diameter_angle_scale_factor)), - support_rests_on_model(mesh_group_settings.get("support_type") == ESupportType::EVERYWHERE), - support_rest_preference((support_rests_on_model && mesh_group_settings.get("support_tree_rest_preference") == "graceful") ? RestPreference::GRACEFUL : RestPreference::BUILDPLATE), - xy_distance(mesh_group_settings.get("support_xy_distance")), - bp_radius(mesh_group_settings.get("support_tree_bp_diameter") / 2), - diameter_scale_bp_radius(std::min(sin(0.7) * layer_height / branch_radius, 1.0 / (branch_radius / (support_line_width / 2.0)))), // Either 40° or as much as possible so that 2 lines will overlap by at least 50%, whichever is smaller. - support_overrides(mesh_group_settings.get("support_xy_overrides_z")), - xy_min_distance(support_overrides == SupportDistPriority::Z_OVERRIDES_XY ? mesh_group_settings.get("support_xy_distance_overhang") : xy_distance), - z_distance_top_layers(round_up_divide(mesh_group_settings.get("support_top_distance"), layer_height)), - z_distance_bottom_layers(round_up_divide(mesh_group_settings.get("support_bottom_distance"), layer_height)), - performance_interface_skip_layers(round_up_divide(mesh_group_settings.get("support_interface_skip_height"), layer_height)), - support_infill_angles(mesh_group_settings.get>("support_infill_angles")), - support_roof_angles(mesh_group_settings.get>("support_roof_angles")), - roof_pattern(mesh_group_settings.get("support_roof_pattern")), - support_pattern(mesh_group_settings.get("support_pattern")), - support_roof_line_width(mesh_group_settings.get("support_roof_line_width")), - support_line_distance(mesh_group_settings.get("support_line_distance")), - support_bottom_offset(mesh_group_settings.get("support_bottom_offset")), - support_wall_count(mesh_group_settings.get("support_wall_count")), - support_roof_wall_count(mesh_group_settings.get("support_roof_wall_count")), - zig_zaggify_support(mesh_group_settings.get("zig_zaggify_support")), - maximum_deviation(mesh_group_settings.get("meshfix_maximum_deviation")), - maximum_resolution(mesh_group_settings.get("meshfix_maximum_resolution")), - support_roof_line_distance(mesh_group_settings.get("support_roof_line_distance")), // in the end the actual infill has to be calculated to subtract interface from support areas according to interface_preference. - skip_some_zags(mesh_group_settings.get("support_skip_some_zags")), - zag_skip_count(mesh_group_settings.get("support_zag_skip_count")), - connect_zigzags(mesh_group_settings.get("support_connect_zigzags")), - settings(mesh_group_settings), - min_feature_size(mesh_group_settings.get("min_feature_size")), - min_wall_line_width(settings.get("min_wall_line_width")), - fill_outline_gaps(settings.get("fill_outline_gaps")), - simplifier(Simplify(mesh_group_settings)) + TreeSupportSettings(const Settings& mesh_group_settings) + : angle(mesh_group_settings.get("support_tree_angle")) + , angle_slow(mesh_group_settings.get("support_tree_angle_slow")) + , support_line_width(mesh_group_settings.get("support_line_width")) + , layer_height(mesh_group_settings.get("layer_height")) + , branch_radius(mesh_group_settings.get("support_tree_branch_diameter") / 2) + , min_radius(mesh_group_settings.get("support_tree_tip_diameter") / 2) + , // The actual radius is 50 microns larger as the resulting branches will be increased by 50 microns to avoid rounding errors effectively increasing the xydistance + max_radius(mesh_group_settings.get("support_tree_max_diameter") / 2) + , maximum_move_distance((angle < TAU / 4) ? (coord_t)(tan(angle) * layer_height) : std::numeric_limits::max()) + , maximum_move_distance_slow((angle_slow < TAU / 4) ? (coord_t)(tan(angle_slow) * layer_height) : std::numeric_limits::max()) + , support_bottom_layers(mesh_group_settings.get("support_bottom_enable") ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) + , tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)) + , // Ensure lines always stack nicely even if layer height is large + diameter_angle_scale_factor(sin(mesh_group_settings.get("support_tree_branch_diameter_angle")) * layer_height / branch_radius) + , max_to_model_radius_increase(mesh_group_settings.get("support_tree_max_diameter_increase_by_merges_when_support_to_model") / 2) + , min_dtt_to_model(round_up_divide(mesh_group_settings.get("support_tree_min_height_to_model"), layer_height)) + , increase_radius_until_radius(mesh_group_settings.get("support_tree_branch_diameter") / 2) + , increase_radius_until_dtt( + increase_radius_until_radius <= branch_radius ? tip_layers * (increase_radius_until_radius / branch_radius) + : (increase_radius_until_radius - branch_radius) / (branch_radius * diameter_angle_scale_factor)) + , support_rests_on_model(mesh_group_settings.get("support_type") == ESupportType::EVERYWHERE) + , support_rest_preference( + (support_rests_on_model && mesh_group_settings.get("support_tree_rest_preference") == "graceful") ? RestPreference::GRACEFUL + : RestPreference::BUILDPLATE) + , xy_distance(mesh_group_settings.get("support_xy_distance")) + , bp_radius(mesh_group_settings.get("support_tree_bp_diameter") / 2) + , diameter_scale_bp_radius(std::min(sin(0.7) * layer_height / branch_radius, 1.0 / (branch_radius / (support_line_width / 2.0)))) + , // Either 40° or as much as possible so that 2 lines will overlap by at least 50%, whichever is smaller. + support_overrides(mesh_group_settings.get("support_xy_overrides_z")) + , xy_min_distance(support_overrides == SupportDistPriority::Z_OVERRIDES_XY ? mesh_group_settings.get("support_xy_distance_overhang") : xy_distance) + , z_distance_top_layers(round_up_divide(mesh_group_settings.get("support_top_distance"), layer_height)) + , z_distance_bottom_layers(round_up_divide(mesh_group_settings.get("support_bottom_distance"), layer_height)) + , performance_interface_skip_layers(round_up_divide(mesh_group_settings.get("support_interface_skip_height"), layer_height)) + , support_infill_angles(mesh_group_settings.get>("support_infill_angles")) + , support_roof_angles(mesh_group_settings.get>("support_roof_angles")) + , roof_pattern(mesh_group_settings.get("support_roof_pattern")) + , support_pattern(mesh_group_settings.get("support_pattern")) + , support_roof_line_width(mesh_group_settings.get("support_roof_line_width")) + , support_line_distance(mesh_group_settings.get("support_line_distance")) + , support_bottom_offset(mesh_group_settings.get("support_bottom_offset")) + , support_wall_count(mesh_group_settings.get("support_wall_count")) + , support_roof_wall_count(mesh_group_settings.get("support_roof_wall_count")) + , zig_zaggify_support(mesh_group_settings.get("zig_zaggify_support")) + , maximum_deviation(mesh_group_settings.get("meshfix_maximum_deviation")) + , maximum_resolution(mesh_group_settings.get("meshfix_maximum_resolution")) + , support_roof_line_distance(mesh_group_settings.get("support_roof_line_distance")) + , // in the end the actual infill has to be calculated to subtract interface from support areas according to interface_preference. + skip_some_zags(mesh_group_settings.get("support_skip_some_zags")) + , zag_skip_count(mesh_group_settings.get("support_zag_skip_count")) + , connect_zigzags(mesh_group_settings.get("support_connect_zigzags")) + , settings(mesh_group_settings) + , min_feature_size(mesh_group_settings.get("min_feature_size")) + , min_wall_line_width(settings.get("min_wall_line_width")) + , fill_outline_gaps(settings.get("fill_outline_gaps")) + , simplifier(Simplify(mesh_group_settings)) { layer_start_bp_radius = (bp_radius - branch_radius) / (branch_radius * diameter_scale_bp_radius); - // safeOffsetInc can only work in steps of the size xy_min_distance in the worst case => xy_min_distance has to be a bit larger than 0 in this worst case and should be large enough for performance to not suffer extremely - // When for all meshes the z bottom and top distance is more than one layer though the worst case is xy_min_distance + min_feature_size - // This is not the best solution, but the only one to ensure areas can not lag though walls at high maximum_move_distance. + // safeOffsetInc can only work in steps of the size xy_min_distance in the worst case => xy_min_distance has to be a bit larger than 0 in this worst case and should be + // large enough for performance to not suffer extremely When for all meshes the z bottom and top distance is more than one layer though the worst case is xy_min_distance + + // min_feature_size This is not the best solution, but the only one to ensure areas can not lag though walls at high maximum_move_distance. if (has_to_rely_on_min_xy_dist_only) { xy_min_distance = std::max(coord_t(100), xy_min_distance); // If set to low rounding errors WILL cause errors. Best to keep it above 25. @@ -83,49 +92,47 @@ struct TreeSupportSettings xy_distance = std::max(xy_distance, xy_min_distance); - const std::function&, EFillMethod)> getInterfaceAngles = - [&](std::vector& angles, EFillMethod pattern) { // (logic) from getInterfaceAngles in FFFGcodeWriter. - if (angles.empty()) - { - if (pattern == EFillMethod::CONCENTRIC) - { - angles.push_back(0); // Concentric has no rotation. - } - else if (pattern == EFillMethod::TRIANGLES) - { - angles.push_back(90); // Triangular support interface shouldn't alternate every layer. - } - else - { - if (TreeSupportSettings::some_model_contains_thick_roof) - { - // Some roofs are quite thick. - // Alternate between the two kinds of diagonal: / and \ . - angles.push_back(45); - angles.push_back(135); - } - if (angles.empty()) - { - angles.push_back(90); // Perpendicular to support lines. - } - } - } - }; - - if(support_infill_angles.empty()) + const std::function&, EFillMethod)> getInterfaceAngles + = [&](std::vector& angles, EFillMethod pattern) { // (logic) from getInterfaceAngles in FFFGcodeWriter. + if (angles.empty()) + { + if (pattern == EFillMethod::CONCENTRIC) + { + angles.push_back(0); // Concentric has no rotation. + } + else if (pattern == EFillMethod::TRIANGLES) + { + angles.push_back(90); // Triangular support interface shouldn't alternate every layer. + } + else + { + if (TreeSupportSettings::some_model_contains_thick_roof) + { + // Some roofs are quite thick. + // Alternate between the two kinds of diagonal: / and \ . + angles.push_back(45); + angles.push_back(135); + } + if (angles.empty()) + { + angles.push_back(90); // Perpendicular to support lines. + } + } + } + }; + + if (support_infill_angles.empty()) { support_infill_angles.push_back(0); } getInterfaceAngles(support_roof_angles, roof_pattern); - const std::unordered_map interface_map = - { - { "support_area_overwrite_interface_area", InterfacePreference::SUPPORT_AREA_OVERWRITES_INTERFACE }, + const std::unordered_map interface_map + = { { "support_area_overwrite_interface_area", InterfacePreference::SUPPORT_AREA_OVERWRITES_INTERFACE }, { "interface_area_overwrite_support_area", InterfacePreference::INTERFACE_AREA_OVERWRITES_SUPPORT }, { "support_lines_overwrite_interface_area", InterfacePreference::SUPPORT_LINES_OVERWRITE_INTERFACE }, { "interface_lines_overwrite_support_area", InterfacePreference::INTERFACE_LINES_OVERWRITE_SUPPORT }, - { "nothing", InterfacePreference::NOTHING } - }; + { "nothing", InterfacePreference::NOTHING } }; interface_preference = interface_map.at(mesh_group_settings.get("support_interface_priority")); } @@ -236,7 +243,8 @@ struct TreeSupportSettings coord_t layer_start_bp_radius; /*! - * \brief Factor by which to increase the branch radius to reach the required bp_radius at layer 0. Note that this radius increase will not happen in the tip, to ensure the tip is structurally sound. + * \brief Factor by which to increase the branch radius to reach the required bp_radius at layer 0. Note that this radius increase will not happen in the tip, to ensure the tip + * is structurally sound. */ double diameter_scale_bp_radius; @@ -321,7 +329,8 @@ struct TreeSupportSettings coord_t maximum_deviation; /*! - * \brief Maximum allowed resolution (length of a line segment) when simplifying. The resolution is higher when this variable is smaller => Minimum size a line segment may have. + * \brief Maximum allowed resolution (length of a line segment) when simplifying. The resolution is higher when this variable is smaller => Minimum size a line segment may + * have. */ coord_t maximum_resolution; @@ -375,83 +384,55 @@ struct TreeSupportSettings */ Simplify simplifier = Simplify(0, 0, 0); - public: +public: bool operator==(const TreeSupportSettings& other) const { - return - branch_radius == other.branch_radius && - tip_layers == other.tip_layers && - diameter_angle_scale_factor == other.diameter_angle_scale_factor && - layer_start_bp_radius == other.layer_start_bp_radius && - bp_radius == other.bp_radius && - diameter_scale_bp_radius == other.diameter_scale_bp_radius && - min_radius == other.min_radius && - xy_min_distance == other.xy_min_distance && // as a recalculation of the collision areas is required to set a new min_radius. - xy_distance - xy_min_distance == other.xy_distance - other.xy_min_distance && // if the delta of xy_min_distance and xy_distance is different the collision areas have to be recalculated. - support_rests_on_model == other.support_rests_on_model && - increase_radius_until_dtt == other.increase_radius_until_dtt && - min_dtt_to_model == other.min_dtt_to_model && - max_to_model_radius_increase == other.max_to_model_radius_increase && - maximum_move_distance == other.maximum_move_distance && - maximum_move_distance_slow == other.maximum_move_distance_slow && - z_distance_bottom_layers == other.z_distance_bottom_layers && - support_line_width == other.support_line_width && - support_overrides == other.support_overrides && - support_line_distance == other.support_line_distance && - support_roof_line_width == other.support_roof_line_width && // can not be set on a per-mesh basis currently, so code to enable processing different roof line width in the same iteration seems useless. - support_bottom_offset == other.support_bottom_offset && - support_wall_count == other.support_wall_count && - support_pattern == other.support_pattern && - roof_pattern == other.roof_pattern && // can not be set on a per-mesh basis currently, so code to enable processing different roof patterns in the same iteration seems useless. - support_roof_angles == other.support_roof_angles && - support_infill_angles == other.support_infill_angles && - increase_radius_until_radius == other.increase_radius_until_radius && - support_bottom_layers == other.support_bottom_layers && - layer_height == other.layer_height && - z_distance_top_layers == other.z_distance_top_layers && - maximum_deviation == other.maximum_deviation && // Infill generation depends on deviation and resolution. - maximum_resolution == other.maximum_resolution && - support_roof_line_distance == other.support_roof_line_distance && - skip_some_zags == other.skip_some_zags && - zag_skip_count == other.zag_skip_count && - connect_zigzags == other.connect_zigzags && - interface_preference == other.interface_preference && - min_feature_size == other.min_feature_size && // interface_preference should be identical to ensure the tree will correctly interact with the roof. - support_rest_preference == other.support_rest_preference && - max_radius == other.max_radius && - min_wall_line_width == other.min_wall_line_width && - fill_outline_gaps == other.fill_outline_gaps && - // The infill class now wants the settings object and reads a lot of settings, and as the infill class is used to calculate support roof lines for interface-preference. Not all of these may be required to be identical, but as I am not sure, better safe than sorry - ( - interface_preference == InterfacePreference::INTERFACE_AREA_OVERWRITES_SUPPORT || - interface_preference == InterfacePreference::SUPPORT_AREA_OVERWRITES_INTERFACE || - ( - settings.get("fill_outline_gaps") == other.settings.get("fill_outline_gaps") && - settings.get("min_bead_width") == other.settings.get("min_bead_width") && - settings.get("wall_transition_angle") == other.settings.get("wall_transition_angle") && - settings.get("wall_transition_length") == other.settings.get("wall_transition_length") && - settings.get("min_odd_wall_line_width") == other.settings.get("min_odd_wall_line_width") && - settings.get("min_even_wall_line_width") == other.settings.get("min_even_wall_line_width") && - settings.get("wall_distribution_count") == other.settings.get("wall_distribution_count") && - settings.get("wall_transition_filter_distance") == other.settings.get("wall_transition_filter_distance") && - settings.get("wall_transition_filter_deviation") == other.settings.get("wall_transition_filter_deviation") && - settings.get("wall_line_width_x") == other.settings.get("wall_line_width_x") && - settings.get("meshfix_maximum_extrusion_area_deviation") == other.settings.get("meshfix_maximum_extrusion_area_deviation") - ) - ); + return branch_radius == other.branch_radius && tip_layers == other.tip_layers && diameter_angle_scale_factor == other.diameter_angle_scale_factor + && layer_start_bp_radius == other.layer_start_bp_radius && bp_radius == other.bp_radius && diameter_scale_bp_radius == other.diameter_scale_bp_radius + && min_radius == other.min_radius && xy_min_distance == other.xy_min_distance && // as a recalculation of the collision areas is required to set a new min_radius. + xy_distance - xy_min_distance == other.xy_distance - other.xy_min_distance + && // if the delta of xy_min_distance and xy_distance is different the collision areas have to be recalculated. + support_rests_on_model == other.support_rests_on_model && increase_radius_until_dtt == other.increase_radius_until_dtt && min_dtt_to_model == other.min_dtt_to_model + && max_to_model_radius_increase == other.max_to_model_radius_increase && maximum_move_distance == other.maximum_move_distance + && maximum_move_distance_slow == other.maximum_move_distance_slow && z_distance_bottom_layers == other.z_distance_bottom_layers + && support_line_width == other.support_line_width && support_overrides == other.support_overrides && support_line_distance == other.support_line_distance + && support_roof_line_width == other.support_roof_line_width + && // can not be set on a per-mesh basis currently, so code to enable processing different roof line width in the same iteration seems useless. + support_bottom_offset == other.support_bottom_offset && support_wall_count == other.support_wall_count && support_pattern == other.support_pattern + && roof_pattern == other.roof_pattern + && // can not be set on a per-mesh basis currently, so code to enable processing different roof patterns in the same iteration seems useless. + support_roof_angles == other.support_roof_angles && support_infill_angles == other.support_infill_angles + && increase_radius_until_radius == other.increase_radius_until_radius && support_bottom_layers == other.support_bottom_layers && layer_height == other.layer_height + && z_distance_top_layers == other.z_distance_top_layers && maximum_deviation == other.maximum_deviation && // Infill generation depends on deviation and resolution. + maximum_resolution == other.maximum_resolution && support_roof_line_distance == other.support_roof_line_distance && skip_some_zags == other.skip_some_zags + && zag_skip_count == other.zag_skip_count && connect_zigzags == other.connect_zigzags && interface_preference == other.interface_preference + && min_feature_size == other.min_feature_size && // interface_preference should be identical to ensure the tree will correctly interact with the roof. + support_rest_preference == other.support_rest_preference && max_radius == other.max_radius && min_wall_line_width == other.min_wall_line_width + && fill_outline_gaps == other.fill_outline_gaps && + // The infill class now wants the settings object and reads a lot of settings, and as the infill class is used to calculate support roof lines for + // interface-preference. Not all of these may be required to be identical, but as I am not sure, better safe than sorry + (interface_preference == InterfacePreference::INTERFACE_AREA_OVERWRITES_SUPPORT || interface_preference == InterfacePreference::SUPPORT_AREA_OVERWRITES_INTERFACE + || (settings.get("fill_outline_gaps") == other.settings.get("fill_outline_gaps") + && settings.get("min_bead_width") == other.settings.get("min_bead_width") + && settings.get("wall_transition_angle") == other.settings.get("wall_transition_angle") + && settings.get("wall_transition_length") == other.settings.get("wall_transition_length") + && settings.get("min_odd_wall_line_width") == other.settings.get("min_odd_wall_line_width") + && settings.get("min_even_wall_line_width") == other.settings.get("min_even_wall_line_width") + && settings.get("wall_distribution_count") == other.settings.get("wall_distribution_count") + && settings.get("wall_transition_filter_distance") == other.settings.get("wall_transition_filter_distance") + && settings.get("wall_transition_filter_deviation") == other.settings.get("wall_transition_filter_deviation") + && settings.get("wall_line_width_x") == other.settings.get("wall_line_width_x") + && settings.get("meshfix_maximum_extrusion_area_deviation") == other.settings.get("meshfix_maximum_extrusion_area_deviation"))); } /*! - * \brief Get the Distance to top regarding the real radius this part will have. This is different from distance_to_top, which is can be used to calculate the top most layer of the branch. - * \param elem[in] The SupportElement one wants to know the effectiveDTT - * \return The Effective DTT. + * \brief Get the Distance to top regarding the real radius this part will have. This is different from distance_to_top, which is can be used to calculate the top most layer of + * the branch. \param elem[in] The SupportElement one wants to know the effectiveDTT \return The Effective DTT. */ [[nodiscard]] inline size_t getEffectiveDTT(const TreeSupportElement& elem) const { - return - elem.effective_radius_height_ < increase_radius_until_dtt ? - (elem.distance_to_top_ < increase_radius_until_dtt ? elem.distance_to_top_ : increase_radius_until_dtt) : - elem.effective_radius_height_; + return elem.effective_radius_height_ < increase_radius_until_dtt ? (elem.distance_to_top_ < increase_radius_until_dtt ? elem.distance_to_top_ : increase_radius_until_dtt) + : elem.effective_radius_height_; } /*! @@ -462,15 +443,13 @@ struct TreeSupportSettings */ [[nodiscard]] inline coord_t getRadius(size_t distance_to_top, const double buildplate_radius_increases = 0) const { - coord_t uncapped_radius = - ( - distance_to_top <= tip_layers ? - /* tip */ min_radius + (branch_radius - min_radius) * distance_to_top / tip_layers : - /* base */ branch_radius + - /* gradual increase */ branch_radius * (distance_to_top - tip_layers) * diameter_angle_scale_factor) + - branch_radius * buildplate_radius_increases * (std::max(diameter_scale_bp_radius - diameter_angle_scale_factor, 0.0) - ); - return std::min(uncapped_radius,max_radius); + coord_t uncapped_radius = (distance_to_top <= tip_layers ? + /* tip */ min_radius + (branch_radius - min_radius) * distance_to_top / tip_layers + : + /* base */ branch_radius + + /* gradual increase */ branch_radius * (distance_to_top - tip_layers) * diameter_angle_scale_factor) + + branch_radius * buildplate_radius_increases * (std::max(diameter_scale_bp_radius - diameter_angle_scale_factor, 0.0)); + return std::min(uncapped_radius, max_radius); } /*! @@ -480,7 +459,7 @@ struct TreeSupportSettings */ [[nodiscard]] inline coord_t getRadius(const TreeSupportElement& elem) const { - return getRadius(getEffectiveDTT(elem), (elem.isResultOnLayerSet() || !support_rests_on_model) && elem.to_buildplate_ ? elem.buildplate_radius_increases_ : 0); + return getRadius(getEffectiveDTT(elem), (elem.isResultOnLayerSet() || ! support_rests_on_model) && elem.to_buildplate_ ? elem.buildplate_radius_increases_ : 0); } /*! @@ -501,7 +480,7 @@ struct TreeSupportSettings [[nodiscard]] inline coord_t recommendedMinRadius(LayerIndex layer_idx) const { const double scale = (layer_start_bp_radius - layer_idx) * diameter_scale_bp_radius; - return scale > 0 ? std::min(coord_t(branch_radius + branch_radius * scale),max_radius) : 0; + return scale > 0 ? std::min(coord_t(branch_radius + branch_radius * scale), max_radius) : 0; } /*! diff --git a/include/TreeSupportUtils.h b/include/TreeSupportUtils.h index 7782fef79e..750665ef01 100644 --- a/include/TreeSupportUtils.h +++ b/include/TreeSupportUtils.h @@ -4,6 +4,8 @@ #ifndef TREESUPPORTTUTILS_H #define TREESUPPORTTUTILS_H +#include + #include "TreeModelVolumes.h" #include "TreeSupportBaseCircle.h" #include "TreeSupportElement.h" @@ -17,8 +19,6 @@ #include "utils/Coord_t.h" #include "utils/polygon.h" -#include - namespace cura { diff --git a/include/WallToolPaths.h b/include/WallToolPaths.h index 22e1f13a3d..70ded7d889 100644 --- a/include/WallToolPaths.h +++ b/include/WallToolPaths.h @@ -25,7 +25,14 @@ class WallToolPaths * \param wall_0_inset How far to inset the outer wall, to make it adhere better to other walls. * \param settings The settings as provided by the user */ - WallToolPaths(const Polygons& outline, const coord_t nominal_bead_width, const size_t inset_count, const coord_t wall_0_inset, const Settings& settings, const int layer_idx, SectionType section_type); + WallToolPaths( + const Polygons& outline, + const coord_t nominal_bead_width, + const size_t inset_count, + const coord_t wall_0_inset, + const Settings& settings, + const int layer_idx, + SectionType section_type); /*! * A class that creates the toolpaths given an outline, nominal bead width and maximum amount of walls @@ -36,7 +43,15 @@ class WallToolPaths * \param wall_0_inset How far to inset the outer wall, to make it adhere better to other walls. * \param settings The settings as provided by the user */ - WallToolPaths(const Polygons& outline, const coord_t bead_width_0, const coord_t bead_width_x, const size_t inset_count, const coord_t wall_0_inset, const Settings& settings, const int layer_idx, SectionType section_type); + WallToolPaths( + const Polygons& outline, + const coord_t bead_width_0, + const coord_t bead_width_x, + const size_t inset_count, + const coord_t wall_0_inset, + const Settings& settings, + const int layer_idx, + SectionType section_type); /*! * Generates the Toolpaths @@ -87,9 +102,9 @@ class WallToolPaths protected: /*! * Stitch the polylines together and form closed polygons. - * + * * Works on both toolpaths and inner contours simultaneously. - * + * * \param settings The settings as provided by the user */ static void stitchToolPaths(std::vector& toolpaths, const Settings& settings); @@ -109,17 +124,18 @@ class WallToolPaths private: const Polygons& outline_; // toolpaths_; // #include #include #include +#include "../utils/polygon.h" +#include "../utils/polygonUtils.h" + namespace cura { diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index 93bff84b30..49757fbf1a 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -1,17 +1,17 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATH_PLANNING_COMB_H #define PATH_PLANNING_COMB_H -#include // shared_ptr #include // To find the maximum for coord_t. +#include // shared_ptr #include "../settings/types/LayerIndex.h" // To store the layer on which we comb. #include "../utils/polygon.h" #include "../utils/polygonUtils.h" -namespace cura +namespace cura { class CombPath; @@ -43,10 +43,11 @@ class SliceDataStorage; class Comb { friend class LinePolygonsCrossings; + private: /*! * A crossing from the inside boundary to the outside boundary. - * + * * 'dest' is either the startPoint or the endpoint of a whole combing move. */ class Crossing @@ -62,26 +63,32 @@ class Comb /*! * Simple constructor - * + * * \param dest_point Either the eventual startPoint or the eventual endPoint of this combing move. * \param dest_is_inside Whether the startPoint or endPoint is inside the inside boundary. * \param dest_part_idx The index into Comb:partsView_inside of the part in which the \p dest_point is. - * \param dest_part_boundary_crossing_poly_idx The index in \p boundary_inside of the polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon). - * \param boundary_inside The boundary within which to comb. + * \param dest_part_boundary_crossing_poly_idx The index in \p boundary_inside of the polygon of the part in which dest_point lies, which will be crossed (often will be the + * outside polygon). \param boundary_inside The boundary within which to comb. */ - Crossing(const Point& dest_point, const bool dest_is_inside, const unsigned int dest_part_idx, const unsigned int dest_part_boundary_crossing_poly_idx, const Polygons& boundary_inside, const LocToLineGrid& inside_loc_to_line); + Crossing( + const Point& dest_point, + const bool dest_is_inside, + const unsigned int dest_part_idx, + const unsigned int dest_part_boundary_crossing_poly_idx, + const Polygons& boundary_inside, + const LocToLineGrid& inside_loc_to_line); /*! * Find the not-outside location (Combing::in_or_mid) of the crossing between to the outside boundary - * - * \param partsView_inside Structured indices onto Comb::boundary_inside which shows which polygons belong to which part. + * + * \param partsView_inside Structured indices onto Comb::boundary_inside which shows which polygons belong to which part. * \param close_to[in] Try to get a crossing close to this point */ void findCrossingInOrMid(const PartsView& partsView_inside, const Point close_to); /*! * Find the outside location (Combing::out) - * + * * \param outside The outside boundary polygons. * \param close_to A point to get closer to when there are multiple * candidates on the outside boundary which are almost equally close to @@ -99,9 +106,9 @@ class Comb /*! * Find the best crossing from some inside polygon to the outside boundary. - * + * * The detour from \p estimated_start to \p estimated_end is minimized. - * + * * \param outside The outside boundary polygons * \param from From which inside boundary the crossing to the outside starts or ends * \param estimated_start The one point to which to stay close when evaluating crossings which cross about the same distance @@ -109,7 +116,8 @@ class Comb * \param comber[in] The combing calculator which has references to the offsets and boundaries to use in combing. * \return A pair of which the first is the crossing point on the inside boundary and the second the crossing point on the outside boundary */ - std::shared_ptr> findBestCrossing(const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, const Point estimated_start, const Point estimated_end, Comb& comber); + std::shared_ptr> + findBestCrossing(const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, const Point estimated_start, const Point estimated_end, Comb& comber); }; @@ -118,7 +126,8 @@ class Comb const coord_t travel_avoid_distance_; //!< const coord_t offset_from_outlines_; //!< Offset from the boundary of a part to the comb path. (nozzle width / 2) - const coord_t max_moveInside_distance2_; //!< Maximal distance of a point to the Comb::boundary_inside which is still to be considered inside. (very sharp corners not allowed :S) + const coord_t + max_moveInside_distance2_; //!< Maximal distance of a point to the Comb::boundary_inside which is still to be considered inside. (very sharp corners not allowed :S) const coord_t offset_from_inside_to_outside_; //!< The sum of the offsets for the inside and outside boundary Comb::offset_from_outlines and Comb::offset_from_outlines_outside const coord_t max_crossing_dist2_; //!< The maximal distance by which to cross the in_between area between inside and outside static const coord_t max_moveOutside_distance2_ = std::numeric_limits::max(); //!< Any point which is not inside should be considered outside. @@ -131,20 +140,23 @@ class Comb const PartsView parts_view_inside_optimal_; //!< Structured indices onto boundary_inside_optimal which shows which polygons belong to which part. std::unique_ptr inside_loc_to_line_minimum_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. std::unique_ptr inside_loc_to_line_optimal_; //!< The SparsePointGridInclusive mapping locations to line segments of the inner boundary. - std::unordered_map boundary_outside_; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only compute it when we move outside the boundary (so not when there is only a single part in the layer) + std::unordered_map boundary_outside_; //!< The boundary outside of which to stay to avoid collision with other layer parts. This is a pointer cause we only + //!< compute it when we move outside the boundary (so not when there is only a single part in the layer) std::unordered_map model_boundary_; //!< The boundary of the model itself std::unordered_map> outside_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the outside boundary. - std::unordered_map> model_boundary_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the model boundary - coord_t move_inside_distance_; //!< When using comb_boundary_inside_minimum for combing it tries to move points inside by this amount after calculating the path to move it from the border a bit. + std::unordered_map> + model_boundary_loc_to_line_; //!< The SparsePointGridInclusive mapping locations to line segments of the model boundary + coord_t move_inside_distance_; //!< When using comb_boundary_inside_minimum for combing it tries to move points inside by this amount after calculating the path to move it from + //!< the border a bit. /*! * Get the SparsePointGridInclusive mapping locations to line segments of the outside boundary. Calculate it when it hasn't been calculated yet. */ LocToLineGrid& getOutsideLocToLine(const ExtruderTrain& train); - /*! - * Get the boundary_outside, which is an offset from the outlines of all meshes in the layer. Calculate it when it hasn't been calculated yet. - */ + /*! + * Get the boundary_outside, which is an offset from the outlines of all meshes in the layer. Calculate it when it hasn't been calculated yet. + */ Polygons& getBoundaryOutside(const ExtruderTrain& train); /*! @@ -172,10 +184,10 @@ class Comb public: /*! * Initialises the combing areas for every mesh in the layer (not support). - * + * * \warning \ref Comb::calc changes the order of polygons in * \p Comb::comb_boundary_inside - * + * * \param storage Where the layer polygon data is stored. * \param layer_nr The number of the layer for which to generate the combing * areas. @@ -191,30 +203,30 @@ class Comb * combing it tries to move points inside by this amount after calculating * the path to move it from the border a bit. */ - Comb(const SliceDataStorage& storage, const LayerIndex layer_nr, const Polygons& comb_boundary_inside_minimum, const Polygons& comb_boundary_inside_optimal, coord_t offset_from_outlines, coord_t travel_avoid_distance, coord_t move_inside_distance); + Comb( + const SliceDataStorage& storage, + const LayerIndex layer_nr, + const Polygons& comb_boundary_inside_minimum, + const Polygons& comb_boundary_inside_optimal, + coord_t offset_from_outlines, + coord_t travel_avoid_distance, + coord_t move_inside_distance); /*! * \brief Calculate the comb paths (if any), one for each polygon combed * alternated with travel paths. - * + * * \warning Changes the order of polygons in \ref Comb::comb_boundary_inside * \param perform_z_hops Whether to Z hop when retracted. * \param perform_z_hops_only_when_collides Whether to Z hop only over printed parts. - * \param train Extruder train, for settings and extruder-nr. NOTE: USe for travel settings and 'extruder-nr' only, don't use for z-hop/retraction/wipe settings, as that should also be settable per mesh! - * \param startPoint Where to start moving from. - * \param endPoint Where to move to. - * \param[out] combPoints The points along the combing path, excluding the - * \p startPoint (?) and \p endPoint. - * \param startInside Whether we want to start inside the comb boundary. - * \param endInside Whether we want to end up inside the comb boundary. - * \param unretract_before_last_travel_move Whether we should unretract before the last travel move when travelling - * because of combing. If the endpoint of a travel path changes with combing, then it means that an outer wall is - * involved, which means that we should then unretract before the last travel move to that wall to avoid any blips - * being introduced due to the unretraction. - * \return Whether combing has succeeded; otherwise a retraction is needed. + * \param train Extruder train, for settings and extruder-nr. NOTE: USe for travel settings and 'extruder-nr' only, don't use for z-hop/retraction/wipe settings, as that should + * also be settable per mesh! \param startPoint Where to start moving from. \param endPoint Where to move to. \param[out] combPoints The points along the combing path, + * excluding the \p startPoint (?) and \p endPoint. \param startInside Whether we want to start inside the comb boundary. \param endInside Whether we want to end up inside the + * comb boundary. \param unretract_before_last_travel_move Whether we should unretract before the last travel move when travelling because of combing. If the endpoint of a + * travel path changes with combing, then it means that an outer wall is involved, which means that we should then unretract before the last travel move to that wall to avoid + * any blips being introduced due to the unretraction. \return Whether combing has succeeded; otherwise a retraction is needed. */ - bool calc - ( + bool calc( bool perform_z_hops, bool perform_z_hops_only_when_collides, const ExtruderTrain& train, @@ -224,10 +236,9 @@ class Comb bool startInside, bool endInside, coord_t max_comb_distance_ignored, - bool &unretract_before_last_travel_move - ); + bool& unretract_before_last_travel_move); }; -}//namespace cura +} // namespace cura -#endif//PATH_PLANNING_COMB_H +#endif // PATH_PLANNING_COMB_H diff --git a/include/pathPlanning/LinePolygonsCrossings.h b/include/pathPlanning/LinePolygonsCrossings.h index 70802800f2..5fcea84545 100644 --- a/include/pathPlanning/LinePolygonsCrossings.h +++ b/include/pathPlanning/LinePolygonsCrossings.h @@ -1,33 +1,32 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATH_PLANNING_LINE_POLYGONS_CROSSINGS_H #define PATH_PLANNING_LINE_POLYGONS_CROSSINGS_H -#include "CombPath.h" #include "../utils/polygon.h" #include "../utils/polygonUtils.h" +#include "CombPath.h" -namespace cura +namespace cura { /*! * Class for generating a combing move action from point a to point b and avoiding collision with other parts when moving through air. * See LinePolygonsCrossings::comb. - * + * * The general implementation is by rotating everything such that the the line segment from a to b is aligned with the x-axis. * We call the line on which a and b lie the 'scanline'. - * - * The basic path is generated by following the scanline until it hits a polygon, then follow the polygon until the last point where it hits the scanline, + * + * The basic path is generated by following the scanline until it hits a polygon, then follow the polygon until the last point where it hits the scanline, * follow the scanline again, etc. * The path is offsetted from the polygons, so that it doesn't intersect with them. - * + * * Next the basic path is optimized by taking shortcuts where possible. Only shortcuts which skip a single point are considered, in order to reduce computational complexity. */ class LinePolygonsCrossings { private: - /*! * A Crossing holds data on a single point where a polygon crosses the scanline. */ @@ -36,7 +35,7 @@ class LinePolygonsCrossings size_t poly_idx_; //!< The index of the polygon which crosses the scanline coord_t x_; //!< x coordinate of crossings between the polygon and the scanline. size_t point_idx_; //!< The index of the first point of the line segment which crosses the scanline - + /*! * Creates a Crossing with minimal initialization * \param poly_idx The index of the polygon in LinePolygonsCrossings::boundary @@ -45,76 +44,79 @@ class LinePolygonsCrossings */ Crossing(const size_t poly_idx, const coord_t x, const size_t point_idx); }; - + std::vector crossings_; //!< All crossings of polygons in the LinePolygonsCrossings::boundary with the scanline. - + const Polygons& boundary_; //!< The boundary not to cross during combing. LocToLineGrid& loc_to_line_grid_; //!< Mapping from locations to line segments of \ref LinePolygonsCrossings::boundary Point start_point_; //!< The start point of the scanline. Point end_point_; //!< The end point of the scanline. - - int64_t dist_to_move_boundary_point_outside_; //!< The distance used to move outside or inside so that a boundary point doesn't intersect with the boundary anymore. Neccesary due to computational rounding problems. Use negative value for insicde combing. - + + int64_t dist_to_move_boundary_point_outside_; //!< The distance used to move outside or inside so that a boundary point doesn't intersect with the boundary anymore. Neccesary + //!< due to computational rounding problems. Use negative value for insicde combing. + PointMatrix transformation_matrix_; //!< The transformation which rotates everything such that the scanline is aligned with the x-axis. - Point transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_endPoint - Point transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as transformed_startPoint + Point transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as + //!< transformed_endPoint + Point transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as + //!< transformed_startPoint + - /*! * Check if we are crossing the boundaries, and pre-calculate some values. - * + * * Sets Comb::transformation_matrix, Comb::transformed_startPoint and Comb::transformed_endPoint * \return Whether the line segment from LinePolygonsCrossings::startPoint to LinePolygonsCrossings::endPoint collides with the boundary */ bool lineSegmentCollidesWithBoundary(); - + /*! * Calculate Comb::crossings. * \param fail_on_unavoidable_obstacles When moving over other parts is inavoidable, stop calculation early and return false. * \return Whether combing succeeded, i.e. when fail_on_unavoidable_obstacles: we didn't cross any gaps/other parts */ bool calcScanlineCrossings(bool fail_on_unavoidable_obstacles); - - /*! + + /*! * Generate the basic combing path and optimize it. - * + * * \param combPath Output parameter: the points along the combing path. * \param fail_on_unavoidable_obstacles When moving over other parts is inavoidable, stop calculation early and return false. * \return Whether combing succeeded, i.e. we didn't cross any gaps/other parts */ bool generateCombingPath(CombPath& combPath, int64_t max_comb_distance_ignored, bool fail_on_unavoidable_obstacles); - - /*! + + /*! * Generate the basic combing path, without shortcuts. The path goes straight toward the endPoint and follows the boundary when it hits it, until it passes the scanline again. - * + * * Walk trough the crossings, for every boundary we cross, find the initial cross point and the exit point. Then add all the points in between * to the \p combPath and continue with the next boundary we will cross, until there are no more boundaries to cross. * This gives a path from the start to finish curved around the holes that it encounters. - * + * * \param combPath Output parameter: the points along the combing path. */ void generateBasicCombingPath(CombPath& combPath); - - /*! + + /*! * Generate the basic combing path, following a single boundary polygon when it hits it, until it passes the scanline again. - * + * * Find the initial cross point and the exit point. Then add all the points in between * to the \p combPath and continue with the next boundary we will cross, until there are no more boundaries to cross. * This gives a path from the start to finish curved around the polygon that it encounters. - * + * * \param combPath Output parameter: where to add the points along the combing path. */ void generateBasicCombingPath(const Crossing& min, const Crossing& max, CombPath& combPath); /*! * Optimize the \p comb_path: skip each point we could already reach by not crossing a boundary. This smooths out the path and makes it skip some unneeded corners. - * + * * \param comb_path The unoptimized combing path. * \param optimized_comb_path Output parameter: The points of optimized combing path * \return Whether it turns out that the basic comb path already crossed a boundary */ bool optimizePath(CombPath& comb_path, CombPath& optimized_comb_path); - + /*! * Create a LinePolygonsCrossings with minimal initialization. * \param boundary The boundary which not to cross during combing @@ -123,16 +125,15 @@ class LinePolygonsCrossings * \param dist_to_move_boundary_point_outside Distance used to move a point from a boundary so that it doesn't intersect with it anymore. (Precision issue) */ LinePolygonsCrossings(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point& start, Point& end, int64_t dist_to_move_boundary_point_outside) - : boundary_(boundary) - , loc_to_line_grid_(loc_to_line_grid) - , start_point_(start) - , end_point_(end) - , dist_to_move_boundary_point_outside_(dist_to_move_boundary_point_outside) + : boundary_(boundary) + , loc_to_line_grid_(loc_to_line_grid) + , start_point_(start) + , end_point_(end) + , dist_to_move_boundary_point_outside_(dist_to_move_boundary_point_outside) { } - -public: - + +public: /*! * The main function of this class: calculate one combing path within the boundary. * \param boundary The polygons to follow when calculating the basic combing path @@ -143,13 +144,21 @@ class LinePolygonsCrossings * \param fail_on_unavoidable_obstacles When moving over other parts is inavoidable, stop calculation early and return false. * \return Whether combing succeeded, i.e. we didn't cross any gaps/other parts */ - static bool comb(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point startPoint, Point endPoint, CombPath& combPath, int64_t dist_to_move_boundary_point_outside, int64_t max_comb_distance_ignored, bool fail_on_unavoidable_obstacles) + static bool comb( + const Polygons& boundary, + LocToLineGrid& loc_to_line_grid, + Point startPoint, + Point endPoint, + CombPath& combPath, + int64_t dist_to_move_boundary_point_outside, + int64_t max_comb_distance_ignored, + bool fail_on_unavoidable_obstacles) { LinePolygonsCrossings linePolygonsCrossings(boundary, loc_to_line_grid, startPoint, endPoint, dist_to_move_boundary_point_outside); return linePolygonsCrossings.generateCombingPath(combPath, max_comb_distance_ignored, fail_on_unavoidable_obstacles); }; }; -}//namespace cura +} // namespace cura -#endif//PATH_PLANNING_LINE_POLYGONS_CROSSINGS_H +#endif // PATH_PLANNING_LINE_POLYGONS_CROSSINGS_H diff --git a/include/plugins/pluginproxy.h b/include/plugins/pluginproxy.h index 3059287b4a..44be2830b9 100644 --- a/include/plugins/pluginproxy.h +++ b/include/plugins/pluginproxy.h @@ -4,18 +4,7 @@ #ifndef PLUGINS_PLUGINPROXY_H #define PLUGINS_PLUGINPROXY_H -#include "Application.h" -#include "cura/plugins/slots/broadcast/v0/broadcast.grpc.pb.h" -#include "cura/plugins/slots/broadcast/v0/broadcast.pb.h" -#include "cura/plugins/slots/handshake/v0/handshake.grpc.pb.h" -#include "cura/plugins/slots/handshake/v0/handshake.pb.h" -#include "cura/plugins/v0/slot_id.pb.h" -#include "plugins/broadcasts.h" -#include "plugins/exception.h" -#include "plugins/metadata.h" -#include "utils/format/thread_id.h" -#include "utils/types/char_range_literal.h" -#include "utils/types/generic.h" +#include #include #include @@ -30,7 +19,18 @@ #include #include -#include +#include "Application.h" +#include "cura/plugins/slots/broadcast/v0/broadcast.grpc.pb.h" +#include "cura/plugins/slots/broadcast/v0/broadcast.pb.h" +#include "cura/plugins/slots/handshake/v0/handshake.grpc.pb.h" +#include "cura/plugins/slots/handshake/v0/handshake.pb.h" +#include "cura/plugins/v0/slot_id.pb.h" +#include "plugins/broadcasts.h" +#include "plugins/exception.h" +#include "plugins/metadata.h" +#include "utils/format/thread_id.h" +#include "utils/types/char_range_literal.h" +#include "utils/types/generic.h" #if __has_include() #include #elif __has_include() diff --git a/include/progress/ProgressEstimatorLinear.h b/include/progress/ProgressEstimatorLinear.h index 178338a560..ba99ab8086 100644 --- a/include/progress/ProgressEstimatorLinear.h +++ b/include/progress/ProgressEstimatorLinear.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PROGRESS_PROGRESS_ESTIMATOR_LINEAR_H #define PROGRESS_PROGRESS_ESTIMATOR_LINEAR_H @@ -15,9 +15,10 @@ namespace cura class ProgressEstimatorLinear : public ProgressEstimator { unsigned int total_steps_; + public: ProgressEstimatorLinear(unsigned int total_steps) - : total_steps_(total_steps) + : total_steps_(total_steps) { } double progress(int current_step) diff --git a/include/settings/FlowTempGraph.h b/include/settings/FlowTempGraph.h index 3cb26e91dd..c1c3166f09 100644 --- a/include/settings/FlowTempGraph.h +++ b/include/settings/FlowTempGraph.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef FLOW_TEMP_GRAPH #define FLOW_TEMP_GRAPH @@ -24,19 +24,20 @@ class FlowTempGraph const double flow_; //!< The flow in mm^3/s const Temperature temp_; //!< The temperature in *C Datum(const double flow, const Temperature temp) - : flow_(flow) - , temp_(temp) - {} + : flow_(flow) + , temp_(temp) + { + } }; std::vector data_; //!< The points of the graph between which the graph is linearly interpolated /*! * Get the temperature corresponding to a specific flow. - * + * * For flows outside of the chart, the temperature at the minimal or maximal flow is returned. * When the graph is empty, the @p material_print_temperature is returned. - * + * * \param flow the flow in mm^3/s * \param material_print_temperature The default printing temp (backward compatibility for when the graph fails) * \return the corresponding temp diff --git a/include/settings/ZSeamConfig.h b/include/settings/ZSeamConfig.h index c82090de5c..1086248d59 100644 --- a/include/settings/ZSeamConfig.h +++ b/include/settings/ZSeamConfig.h @@ -1,11 +1,11 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef ZSEAMCONFIG_H #define ZSEAMCONFIG_H -#include "EnumSettings.h" //For EZSeamType and EZSeamCornerPrefType. #include "../utils/IntPoint.h" //To store the preferred seam position. +#include "EnumSettings.h" //For EZSeamType and EZSeamCornerPrefType. namespace cura { @@ -49,15 +49,13 @@ struct ZSeamConfig * \param corner_pref The corner preference, when using the sharpest corner strategy. * \param by how much to simplify the curvature (when detecting corners), as otherwise 'smooth' corners are penalized. */ - ZSeamConfig - ( + ZSeamConfig( const EZSeamType type = EZSeamType::SHORTEST, const Point pos = Point(0, 0), const EZSeamCornerPrefType corner_pref = EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, - const coord_t simplify_curvature = 0 - ); + const coord_t simplify_curvature = 0); }; -} //Cura namespace. +} // namespace cura -#endif //ZSEAMCONFIG_H +#endif // ZSEAMCONFIG_H diff --git a/include/utils/AABB.h b/include/utils/AABB.h index eded125621..988eb3b7ff 100644 --- a/include/utils/AABB.h +++ b/include/utils/AABB.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_AABB_H #define UTILS_AABB_H @@ -64,9 +64,9 @@ class AABB /*! * Check whether this aabb overlaps with another. - * + * * In the boundary case false is returned. - * + * * \param other the aabb to check for overlaps with * \return Whether the two aabbs overlap */ @@ -74,27 +74,27 @@ class AABB /*! * \brief Includes the specified point in the bounding box. - * + * * The bounding box is expanded if the point is not within the bounding box. - * + * * \param point The point to include in the bounding box. */ void include(Point point); /*! * \brief Includes the specified bounding box in the bounding box. - * + * * The bounding box is expanded to include the other bounding box. - * + * * This performs a union on two bounding boxes. - * + * * \param other The bounding box to include in this one. */ void include(const AABB other); /*! * Expand the borders of the bounding box in each direction with the given amount - * + * * \param dist The distance by which to expand the borders of the bounding box */ void expand(int dist); @@ -106,6 +106,5 @@ class AABB Polygon toPolygon() const; }; -}//namespace cura -#endif//UTILS_AABB_H - +} // namespace cura +#endif // UTILS_AABB_H diff --git a/include/utils/ExtrusionJunction.h b/include/utils/ExtrusionJunction.h index ce38e1900b..71cd71a636 100644 --- a/include/utils/ExtrusionJunction.h +++ b/include/utils/ExtrusionJunction.h @@ -1,5 +1,5 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_EXTRUSION_JUNCTION_H @@ -55,5 +55,5 @@ inline const Point& make_point(const ExtrusionJunction& ej) using LineJunctions = std::vector; // //To allow tests to use protected members. +#include //To allow tests to use protected members. #endif #include #include "IntPoint.h" +#include "linearAlg2D.h" #include "polygon.h" #include "polygonUtils.h" -#include "linearAlg2D.h" -namespace cura +namespace cura { /*! @@ -105,7 +105,8 @@ class PolygonConnector std::vector input_polygons_; //!< The polygons assembled by calls to \ref PolygonConnector::add. std::vector input_paths_; //!< The paths assembled by calls to \ref PolygonConnector::add. - constexpr static Ratio max_gap_ = 0.5; //!< The maximum allowed gap between lines that get connected, in multiples of the local line width. Allows connections inside corners where the endpoints are slightly apart. + constexpr static Ratio max_gap_ = 0.5; //!< The maximum allowed gap between lines that get connected, in multiples of the local line width. Allows connections inside corners + //!< where the endpoints are slightly apart. /*! * Line segment to connect two polygons, with all the necessary information @@ -166,12 +167,12 @@ class PolygonConnector * connection. */ PolygonConnection(Polygonal* from_poly, const size_t from_segment, const Point from_point, Polygonal* to_poly, const size_t to_segment, const Point to_point) - : from_poly_(from_poly) - , from_segment_(from_segment) - , from_point_(from_point) - , to_poly_(to_poly) - , to_segment_(to_segment) - , to_point_(to_point) + : from_poly_(from_poly) + , from_segment_(from_segment) + , from_point_(from_point) + , to_poly_(to_poly) + , to_segment_(to_segment) + , to_point_(to_point) { } @@ -195,7 +196,7 @@ class PolygonConnector * a ^ ^ b --> connection a is always the left one * ^ ^ --> direction of the two connections themselves. * -----o-----o---- - * + * * The resulting polygon will travel along the edges in a direction different from each other. */ template @@ -204,8 +205,10 @@ class PolygonConnector PolygonConnection a_; //!< first connection PolygonConnection b_; //!< second connection PolygonBridge(const PolygonConnection& a, const PolygonConnection& b) - : a_(a), b_(b) - {} + : a_(a) + , b_(b) + { + } }; /*! @@ -222,9 +225,9 @@ class PolygonConnector std::vector connectGroup(std::vector& to_connect) { std::vector result; - while(!to_connect.empty()) + while (! to_connect.empty()) { - if(to_connect.size() == 1) //Nothing to connect it to any more. + if (to_connect.size() == 1) // Nothing to connect it to any more. { result.push_back(to_connect[0]); break; @@ -232,18 +235,18 @@ class PolygonConnector Polygonal current = std::move(to_connect.back()); to_connect.pop_back(); - if(!isClosed(current)) //Only bridge closed contours. + if (! isClosed(current)) // Only bridge closed contours. { result.push_back(current); continue; } std::optional> bridge = getBridge(current, to_connect); - if(bridge) + if (bridge) { - connectPolygonsAlongBridge(*bridge, *bridge->a_.to_poly_); //Connect the polygons, and store the result in the to_poly. - //Don't store the current polygon. It has just been merged into the other one. + connectPolygonsAlongBridge(*bridge, *bridge->a_.to_poly_); // Connect the polygons, and store the result in the to_poly. + // Don't store the current polygon. It has just been merged into the other one. } - else //Can't connect this to anything. Leave it as-is. + else // Can't connect this to anything. Leave it as-is. { result.push_back(current); } @@ -371,8 +374,14 @@ class PolygonConnector template coord_t getSpace(const PolygonConnection& connection) const { - const coord_t from_width = interpolateWidth(connection.from_point_, (*connection.from_poly_)[connection.from_segment_], (*connection.from_poly_)[(connection.from_segment_ + 1) % connection.from_poly_->size()]); - const coord_t to_width = interpolateWidth(connection.to_point_, (*connection.to_poly_)[connection.to_segment_], (*connection.to_poly_)[(connection.to_segment_ + 1) % connection.to_poly_->size()]); + const coord_t from_width = interpolateWidth( + connection.from_point_, + (*connection.from_poly_)[connection.from_segment_], + (*connection.from_poly_)[(connection.from_segment_ + 1) % connection.from_poly_->size()]); + const coord_t to_width = interpolateWidth( + connection.to_point_, + (*connection.to_poly_)[connection.to_segment_], + (*connection.to_poly_)[(connection.to_segment_ + 1) % connection.to_poly_->size()]); return vSize(connection.to_point_ - connection.from_point_) - from_width / 2 - to_width / 2; } @@ -390,9 +399,9 @@ class PolygonConnector coord_t interpolateWidth(const Point position, Vertex a, Vertex b) const { const coord_t total_length = vSize(getPosition(a) - getPosition(b)); - if(total_length == 0) //Prevent division by 0 when the vertices are on top of each other. + if (total_length == 0) // Prevent division by 0 when the vertices are on top of each other. { - return getWidth(a); //Just return one of them. They are on top of each other anyway. + return getWidth(a); // Just return one of them. They are on top of each other anyway. } const coord_t position_along_length = vSize(position - getPosition(a)); return round_divide(getWidth(b) * position_along_length, total_length) + round_divide(getWidth(a) * (total_length - position_along_length), total_length); @@ -405,27 +414,27 @@ class PolygonConnector template std::optional> findConnection(Polygonal& from_poly, std::vector& to_polygons) { - //Optimise for finding the best connection. - coord_t best_distance = line_width_ * max_gap_; //Allow up to the max_gap. + // Optimise for finding the best connection. + coord_t best_distance = line_width_ * max_gap_; // Allow up to the max_gap. std::optional> best_connection; std::optional> best_second_connection; - //The smallest connection will be from one of the vertices. So go through all of the vertices to find the closest place where they approach. - for(size_t poly_index = 0; poly_index < to_polygons.size(); ++poly_index) + // The smallest connection will be from one of the vertices. So go through all of the vertices to find the closest place where they approach. + for (size_t poly_index = 0; poly_index < to_polygons.size(); ++poly_index) { - if(!isClosed(to_polygons[poly_index])) + if (! isClosed(to_polygons[poly_index])) { continue; } - for(size_t to_index = 0; to_index < to_polygons[poly_index].size(); ++to_index) + for (size_t to_index = 0; to_index < to_polygons[poly_index].size(); ++to_index) { - const Point to_pos1 = getPosition(to_polygons[poly_index][to_index]); + const Point to_pos1 = getPosition(to_polygons[poly_index][to_index]); const coord_t to_width1 = getWidth(to_polygons[poly_index][to_index]); - const Point to_pos2 = getPosition(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); + const Point to_pos2 = getPosition(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); const coord_t to_width2 = getWidth(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); const coord_t smallest_to_width = std::min(to_width1, to_width2); - for(size_t from_index = 0; from_index < from_poly.size(); ++from_index) + for (size_t from_index = 0; from_index < from_poly.size(); ++from_index) { const Point from_pos1 = getPosition(from_poly[from_index]); const coord_t from_width1 = getWidth(from_poly[from_index]); @@ -433,22 +442,24 @@ class PolygonConnector const coord_t from_width2 = getWidth(from_poly[(from_index + 1) % from_poly.size()]); const coord_t smallest_from_width = std::min(from_width1, from_width2); - //Try a naive distance first. Faster to compute, but it may estimate the distance too small. + // Try a naive distance first. Faster to compute, but it may estimate the distance too small. coord_t naive_dist = LinearAlg2D::getDistFromLine(from_pos1, to_pos1, to_pos2); - if(naive_dist - from_width1 - smallest_to_width < line_width_ * max_gap_) + if (naive_dist - from_width1 - smallest_to_width < line_width_ * max_gap_) { const Point closest_point = LinearAlg2D::getClosestOnLineSegment(from_pos1, to_pos1, to_pos2); - if(closest_point == to_pos2) //The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. + if (closest_point == to_pos2) // The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. { continue; } - const coord_t width_at_closest = interpolateWidth(closest_point, to_polygons[poly_index][to_index], to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); - const coord_t distance = vSize(closest_point - from_pos1) - from_width1 - width_at_closest; //Actual, accurate distance to the other polygon. - if(distance < best_distance) + const coord_t width_at_closest + = interpolateWidth(closest_point, to_polygons[poly_index][to_index], to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); + const coord_t distance = vSize(closest_point - from_pos1) - from_width1 - width_at_closest; // Actual, accurate distance to the other polygon. + if (distance < best_distance) { - PolygonConnection first_connection = PolygonConnection(&from_poly, from_index, from_pos1, &to_polygons[poly_index], to_index, closest_point); + PolygonConnection first_connection + = PolygonConnection(&from_poly, from_index, from_pos1, &to_polygons[poly_index], to_index, closest_point); std::optional> second_connection = getSecondConnection(first_connection, (width_at_closest + from_width1) / 2); - if(second_connection) //Second connection is also valid. + if (second_connection) // Second connection is also valid. { best_distance = distance; best_connection = first_connection; @@ -457,22 +468,23 @@ class PolygonConnector } } - //Also try the other way around: From the line segment of the from_poly to a vertex in the to_polygons. + // Also try the other way around: From the line segment of the from_poly to a vertex in the to_polygons. naive_dist = LinearAlg2D::getDistFromLine(to_pos1, from_pos1, from_pos2); - if(naive_dist - smallest_from_width - to_width1 < line_width_ * max_gap_) + if (naive_dist - smallest_from_width - to_width1 < line_width_ * max_gap_) { const Point closest_point = LinearAlg2D::getClosestOnLineSegment(to_pos1, from_pos1, from_pos2); - if(closest_point == from_pos2) //The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. + if (closest_point == from_pos2) // The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. { continue; } const coord_t width_at_closest = interpolateWidth(closest_point, from_poly[from_index], from_poly[(from_index + 1) % from_poly.size()]); - const coord_t distance = vSize(closest_point - to_pos1) - width_at_closest - to_width1; //Actual, accurate distance. - if(distance < best_distance) + const coord_t distance = vSize(closest_point - to_pos1) - width_at_closest - to_width1; // Actual, accurate distance. + if (distance < best_distance) { - PolygonConnection first_connection = PolygonConnection(&from_poly, from_index, closest_point, &to_polygons[poly_index], to_index, to_pos1); + PolygonConnection first_connection + = PolygonConnection(&from_poly, from_index, closest_point, &to_polygons[poly_index], to_index, to_pos1); std::optional> second_connection = getSecondConnection(first_connection, (to_width1 + width_at_closest) / 2); - if(second_connection) //Second connection is also valid. + if (second_connection) // Second connection is also valid. { best_distance = distance; best_connection = first_connection; @@ -484,7 +496,7 @@ class PolygonConnector } } - if(best_connection) + if (best_connection) { return PolygonBridge(*best_connection, *best_second_connection); } @@ -496,15 +508,15 @@ class PolygonConnector /*! * Get the bridge to cross between two polygons. - * + * * If no bridge is possible, or if no bridge is found for any reason, then no object is returned. - * + * * Algorithm outline: * - find the closest first connection between a \p poly and all (other) \p polygons * - find the best second connection parallel to that one at a line_width away - * + * * if no second connection is found: - * - find the second connection at half a line width away and + * - find the second connection at half a line width away and * - the first connection at a whole line distance away * So as to try and find a bridge which is centered around the initiall found first connection */ @@ -512,13 +524,13 @@ class PolygonConnector std::optional> getBridge(Polygonal& from_poly, std::vector& to_polygons) { std::optional> connection = findConnection(from_poly, to_polygons); - if(!connection) //We didn't find a connection. No bridge. + if (! connection) // We didn't find a connection. No bridge. { return std::nullopt; } - //Ensure that B is always the right connection and A the left. - if(LinearAlg2D::pointIsLeftOfLine(connection->b_.from_point_, connection->a_.from_point_, connection->a_.to_point_) > 0) + // Ensure that B is always the right connection and A the left. + if (LinearAlg2D::pointIsLeftOfLine(connection->b_.from_point_, connection->a_.from_point_, connection->a_.to_point_) > 0) { std::swap(connection->a_, connection->b_); } @@ -546,37 +558,38 @@ class PolygonConnector * ``std::nullopt``. */ template - std::optional> walkUntilDistanceFromLine(const Polygonal& poly, const size_t start_index, const coord_t distance, const Point& line_a, const Point& line_b, const short direction) + std::optional> + walkUntilDistanceFromLine(const Polygonal& poly, const size_t start_index, const coord_t distance, const Point& line_a, const Point& line_b, const short direction) { const size_t poly_size = poly.size(); - const coord_t line_magnitude = vSize(line_b - line_a); //Pre-compute, used for line distance calculation. - if(line_magnitude == 0) + const coord_t line_magnitude = vSize(line_b - line_a); // Pre-compute, used for line distance calculation. + if (line_magnitude == 0) { - return std::nullopt; //Line doesn't have a direction, so we can't be on any one side of it. + return std::nullopt; // Line doesn't have a direction, so we can't be on any one side of it. } - for(size_t index = (start_index + direction + poly_size) % poly_size; index != start_index; index = (index + direction + poly_size) % poly_size) + for (size_t index = (start_index + direction + poly_size) % poly_size; index != start_index; index = (index + direction + poly_size) % poly_size) { const Point vertex_pos = getPosition(poly[index]); - const coord_t vertex_distance = cross(line_a - line_b, line_a - vertex_pos) / line_magnitude; //Signed distance! - if(std::abs(vertex_distance) >= distance) //Further away from the line than the threshold. + const coord_t vertex_distance = cross(line_a - line_b, line_a - vertex_pos) / line_magnitude; // Signed distance! + if (std::abs(vertex_distance) >= distance) // Further away from the line than the threshold. { - //Interpolate over that last line segment to find the point at exactly the right distance. + // Interpolate over that last line segment to find the point at exactly the right distance. const size_t previous_index = (index - direction + poly_size) % poly_size; const Point previous_pos = getPosition(poly[previous_index]); const coord_t previous_distance = cross(line_a - line_b, line_a - previous_pos) / line_magnitude; - if(previous_distance == vertex_distance) //0-length line segment, or parallel to line. + if (previous_distance == vertex_distance) // 0-length line segment, or parallel to line. { continue; } const double interpolation_pos = double(distance - previous_distance) / (vertex_distance - previous_distance); const double interpolation_neg = double(-distance - previous_distance) / (vertex_distance - previous_distance); double interpolation; - if(interpolation_pos >= 0 && interpolation_pos < 1) + if (interpolation_pos >= 0 && interpolation_pos < 1) { interpolation = interpolation_pos; } - else if(interpolation_neg >= 0 && interpolation_neg < 1) + else if (interpolation_neg >= 0 && interpolation_neg < 1) { interpolation = interpolation_neg; } @@ -585,19 +598,19 @@ class PolygonConnector continue; } const Point interpolated_point = previous_pos + (vertex_pos - previous_pos) * interpolation; - return std::make_pair(interpolated_point, (direction == +1) ? previous_index : index); //Choose the "earlier" index of the two, regardless of direction. + return std::make_pair(interpolated_point, (direction == +1) ? previous_index : index); // Choose the "earlier" index of the two, regardless of direction. } } - return std::nullopt; //None of the vertices were far enough away from the line. + return std::nullopt; // None of the vertices were far enough away from the line. } /*! * Get a connection parallel to a given \p first connection at an orthogonal distance line_width from the \p first connection. - * + * * From a given \p first connection, * walk along both polygons in each direction * until we are at a distance of line_width away orthogonally from the line segment of the \p first connection. - * + * * For all combinations of such found points: * - check whether they are both on the same side of the \p first connection * - choose the connection which woukd form the smalles bridge @@ -608,23 +621,27 @@ class PolygonConnector std::optional> result = std::nullopt; coord_t best_connection_length = std::numeric_limits::max(); - //Find the four intersections, on both sides of the initial connection, and on both polygons. - std::optional> from_forward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); - std::optional> from_backward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); - std::optional> to_forward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); - std::optional> to_backward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); - - for(const std::optional>& from_intersection : {from_forward_intersection, from_backward_intersection}) + // Find the four intersections, on both sides of the initial connection, and on both polygons. + std::optional> from_forward_intersection + = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); + std::optional> from_backward_intersection + = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); + std::optional> to_forward_intersection + = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); + std::optional> to_backward_intersection + = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); + + for (const std::optional>& from_intersection : { from_forward_intersection, from_backward_intersection }) { - if(!from_intersection) + if (! from_intersection) { continue; } - //Find the shortest of the connections in the to_poly. + // Find the shortest of the connections in the to_poly. const bool original_side = LinearAlg2D::pointIsLeftOfLine(first.to_point_, first.from_point_, from_intersection->first) > 0; - for(const std::optional>& to_intersection : {to_forward_intersection, to_backward_intersection}) + for (const std::optional>& to_intersection : { to_forward_intersection, to_backward_intersection }) { - if(!to_intersection) + if (! to_intersection) { continue; } @@ -633,9 +650,10 @@ class PolygonConnector { continue; } - PolygonConnection connection(first.from_poly_, from_intersection->second, from_intersection->first, first.to_poly_, to_intersection->second, to_intersection->first); + PolygonConnection + connection(first.from_poly_, from_intersection->second, from_intersection->first, first.to_poly_, to_intersection->second, to_intersection->first); const coord_t connection_length = getSpace(connection); - if(connection_length < max_gap_ * line_width_ && connection_length < best_connection_length) //Connection is allowed. + if (connection_length < max_gap_ * line_width_ && connection_length < best_connection_length) // Connection is allowed. { result = connection; best_connection_length = connection_length; @@ -648,63 +666,67 @@ class PolygonConnector template void connectPolygonsAlongBridge(const PolygonBridge& bridge, Polygonal& result) { - //We'll traverse the following path: + // We'll traverse the following path: // - // <<<<<>>>>>X......X>>>>>>> from_poly + // <<<<<>>>>>X......X>>>>>>> from_poly // - //To do this, from_poly and to_poly might need to be traversed in reverse order. This function figures all of that out. + // To do this, from_poly and to_poly might need to be traversed in reverse order. This function figures all of that out. - Polygonal ret = createEmpty(); //Create a temporary result that we'll move into the result. + Polygonal ret = createEmpty(); // Create a temporary result that we'll move into the result. const size_t from_size = bridge.b_.from_poly_->size(); - //Add the from-endpoint of B. - const coord_t b_from_width = interpolateWidth(bridge.b_.from_point_, (*bridge.b_.from_poly_)[bridge.b_.from_segment_], (*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); + // Add the from-endpoint of B. + const coord_t b_from_width + = interpolateWidth(bridge.b_.from_point_, (*bridge.b_.from_poly_)[bridge.b_.from_segment_], (*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); addVertex(ret, bridge.b_.from_point_, b_from_width); - //Add the from-polygonal from B to A. + // Add the from-polygonal from B to A. short forwards; - if(bridge.a_.from_segment_ == bridge.b_.from_segment_) //If we start and end on the same segment, iterate in the direction from A to B. + if (bridge.a_.from_segment_ == bridge.b_.from_segment_) // If we start and end on the same segment, iterate in the direction from A to B. { - const Point vertex = getPosition((*bridge.b_.from_poly_)[bridge.b_.from_segment_]); //Same vertex for A and B. + const Point vertex = getPosition((*bridge.b_.from_poly_)[bridge.b_.from_segment_]); // Same vertex for A and B. const Point next_vertex = getPosition((*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); - const Point direction = next_vertex - vertex; //Direction we'd go into when forward iterating. + const Point direction = next_vertex - vertex; // Direction we'd go into when forward iterating. const Point a_to_b = bridge.b_.from_point_ - bridge.a_.from_point_; forwards = vSize2(direction - a_to_b) < vSize2(-direction - a_to_b); } else { - //If not the same segment, traverse in whichever direction is the long way around. - forwards = ((bridge.b_.from_segment_ + from_size - bridge.a_.from_segment_) % from_size) < ((bridge.a_.from_segment_ + from_size - bridge.b_.from_segment_) % from_size); + // If not the same segment, traverse in whichever direction is the long way around. + forwards + = ((bridge.b_.from_segment_ + from_size - bridge.a_.from_segment_) % from_size) < ((bridge.a_.from_segment_ + from_size - bridge.b_.from_segment_) % from_size); } size_t first_segment = forwards ? (bridge.b_.from_segment_ + 1) % from_size : (bridge.b_.from_segment_ + from_size) % from_size; size_t last_segment = forwards ? bridge.a_.from_segment_ : bridge.a_.from_segment_; - if(first_segment == last_segment) last_segment = (last_segment + from_size - 2 * forwards + 1) % from_size; + if (first_segment == last_segment) + last_segment = (last_segment + from_size - 2 * forwards + 1) % from_size; size_t i = first_segment; - do //Since we might start and end on the same segment, do a do_while loop to iterate at least once. + do // Since we might start and end on the same segment, do a do_while loop to iterate at least once. { addVertex(ret, (*bridge.b_.from_poly_)[i]); i = (i + 2 * forwards - 1 + from_size) % from_size; - } - while(i != (last_segment + from_size + 2 * forwards - 1) % from_size); + } while (i != (last_segment + from_size + 2 * forwards - 1) % from_size); - //Add the from-endpoint of A. - const coord_t a_from_width = interpolateWidth(bridge.a_.from_point_, (*bridge.b_.from_poly_)[bridge.a_.from_segment_], (*bridge.b_.from_poly_)[(bridge.a_.from_segment_ + 1) % from_size]); + // Add the from-endpoint of A. + const coord_t a_from_width + = interpolateWidth(bridge.a_.from_point_, (*bridge.b_.from_poly_)[bridge.a_.from_segment_], (*bridge.b_.from_poly_)[(bridge.a_.from_segment_ + 1) % from_size]); addVertex(ret, bridge.a_.from_point_, a_from_width); const size_t to_size = bridge.b_.to_poly_->size(); - //Add the to-endpoint of A. - const coord_t a_to_width = interpolateWidth(bridge.a_.to_point_, (*bridge.a_.to_poly_)[bridge.a_.to_segment_], (*bridge.a_.to_poly_)[(bridge.a_.to_segment_ + 1) % to_size]); + // Add the to-endpoint of A. + const coord_t a_to_width + = interpolateWidth(bridge.a_.to_point_, (*bridge.a_.to_poly_)[bridge.a_.to_segment_], (*bridge.a_.to_poly_)[(bridge.a_.to_segment_ + 1) % to_size]); addVertex(ret, bridge.a_.to_point_, a_to_width); - //Add the to_polygonal from A to B. - if(bridge.a_.to_segment_ == bridge.b_.to_segment_) + // Add the to_polygonal from A to B. + if (bridge.a_.to_segment_ == bridge.b_.to_segment_) { - const Point vertex = getPosition((*bridge.b_.to_poly_)[bridge.b_.to_segment_]); //Same vertex for A and B. + const Point vertex = getPosition((*bridge.b_.to_poly_)[bridge.b_.to_segment_]); // Same vertex for A and B. const Point next_vertex = getPosition((*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); const Point direction = next_vertex - vertex; const Point a_to_b = bridge.b_.to_point_ - bridge.a_.to_point_; @@ -721,25 +743,24 @@ class PolygonConnector { addVertex(ret, (*bridge.b_.to_poly_)[i]); i = (i + 2 * forwards - 1 + to_size) % to_size; - } - while(i != end_segment); + } while (i != end_segment); - //Add the to-endpoint of B. - const coord_t b_to_width = interpolateWidth(bridge.b_.to_point_, (*bridge.b_.to_poly_)[bridge.b_.to_segment_], (*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); + // Add the to-endpoint of B. + const coord_t b_to_width + = interpolateWidth(bridge.b_.to_point_, (*bridge.b_.to_poly_)[bridge.b_.to_segment_], (*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); addVertex(ret, bridge.b_.to_point_, b_to_width); - if(getPosition(ret.back()) != getPosition(ret.front())) + if (getPosition(ret.back()) != getPosition(ret.front())) { addVertex(ret, getPosition(ret.front()), getWidth(ret.front())); } - result = std::move(ret); //Override the result with the new combined shape. + result = std::move(ret); // Override the result with the new combined shape. } }; -}//namespace cura - +} // namespace cura -#endif//UTILS_POLYGON_CONNECTOR_H +#endif // UTILS_POLYGON_CONNECTOR_H diff --git a/include/utils/PolylineStitcher.h b/include/utils/PolylineStitcher.h index 6a2063c1b9..2942a0840e 100644 --- a/include/utils/PolylineStitcher.h +++ b/include/utils/PolylineStitcher.h @@ -1,16 +1,16 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POLYLINE_STITCHER_H #define UTILS_POLYLINE_STITCHER_H -#include "polygon.h" -#include "SparsePointGrid.h" -#include "PolygonsPointIndex.h" +#include +#include +#include "PolygonsPointIndex.h" +#include "SparsePointGrid.h" #include "SymmetricPair.h" -#include -#include +#include "polygon.h" namespace cura { @@ -29,14 +29,14 @@ class PolylineStitcher * Only introduce new segments shorter than \p max_stitch_distance, and * larger than \p snap_distance but always try to take the shortest * connection possible. - * + * * Only stitch polylines into closed polygons if they are larger than 3 * * \p max_stitch_distance, in order to prevent small segments to * accidentally get closed into a polygon. - * + * * \warning Tiny polylines (smaller than 3 * max_stitch_distance) will not * be closed into polygons. - * + * * \note Resulting polylines and polygons are added onto the existing * containers, so you can directly output onto a polygons container with * existing polygons in it. However, you shouldn't call this function with @@ -60,7 +60,7 @@ class PolylineStitcher } SparsePointGrid, PathsPointIndexLocator> grid(max_stitch_distance, lines.size() * 2); - + // populate grid for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) { @@ -68,9 +68,9 @@ class PolylineStitcher grid.insert(PathsPointIndex(&lines, line_idx, 0)); grid.insert(PathsPointIndex(&lines, line_idx, line.size() - 1)); } - + std::vector processed(lines.size(), false); - + for (size_t line_idx = 0; line_idx < lines.size(); line_idx++) { if (processed[line_idx]) @@ -80,7 +80,7 @@ class PolylineStitcher processed[line_idx] = true; const auto line = lines[line_idx]; bool should_close = isOdd(line); - + Path chain = line; bool closest_is_closing_polygon = false; for (bool go_in_reverse_direction : { false, true }) // first go in the unreversed direction, to try to prevent the chain.reverse() operation. @@ -94,75 +94,86 @@ class PolylineStitcher while (true) { Point from = make_point(chain.back()); - + PathsPointIndex closest; coord_t closest_distance = std::numeric_limits::max(); - grid.processNearby(from, max_stitch_distance, - std::function&)> ( - [from, &chain, &closest, &closest_is_closing_polygon, &closest_distance, &processed, &chain_length, go_in_reverse_direction, max_stitch_distance, snap_distance, should_close] - (const PathsPointIndex& nearby)->bool - { - bool is_closing_segment = false; - coord_t dist = vSize(nearby.p() - from); - if (dist > max_stitch_distance) - { - return true; // keep looking - } - if(vSize2(nearby.p() - make_point(chain.front())) < snap_distance * snap_distance) + grid.processNearby( + from, + max_stitch_distance, + std::function&)>( + [from, + &chain, + &closest, + &closest_is_closing_polygon, + &closest_distance, + &processed, + &chain_length, + go_in_reverse_direction, + max_stitch_distance, + snap_distance, + should_close](const PathsPointIndex& nearby) -> bool { - if (chain_length + dist < 3 * max_stitch_distance // prevent closing of small poly, cause it might be able to continue making a larger polyline - || chain.size() <= 2) // don't make 2 vert polygons + bool is_closing_segment = false; + coord_t dist = vSize(nearby.p() - from); + if (dist > max_stitch_distance) { - return true; // look for a better next line + return true; // keep looking } - is_closing_segment = true; - if(!should_close) + if (vSize2(nearby.p() - make_point(chain.front())) < snap_distance * snap_distance) { - dist += 10; // prefer continuing polyline over closing a polygon; avoids closed zigzags from being printed separately - // continue to see if closing segment is also the closest - // there might be a segment smaller than [max_stitch_distance] which closes the polygon better + if (chain_length + dist < 3 * max_stitch_distance // prevent closing of small poly, cause it might be able to continue making a larger polyline + || chain.size() <= 2) // don't make 2 vert polygons + { + return true; // look for a better next line + } + is_closing_segment = true; + if (! should_close) + { + dist += 10; // prefer continuing polyline over closing a polygon; avoids closed zigzags from being printed separately + // continue to see if closing segment is also the closest + // there might be a segment smaller than [max_stitch_distance] which closes the polygon better + } + else + { + dist -= 10; // Prefer closing the polygon if it's 100% even lines. Used to create closed contours. + // Continue to see if closing segment is also the closest. + } } - else + else if (processed[nearby.poly_idx_]) + { // it was already moved to output + return true; // keep looking for a connection + } + bool nearby_would_be_reversed = nearby.point_idx_ != 0; + nearby_would_be_reversed + = nearby_would_be_reversed != go_in_reverse_direction; // flip nearby_would_be_reversed when searching in the reverse direction + if (! canReverse(nearby) && nearby_would_be_reversed) + { // connecting the segment would reverse the polygon direction + return true; // keep looking for a connection + } + if (! canConnect(chain, (*nearby.polygons_)[nearby.poly_idx_])) { - dist -= 10; //Prefer closing the polygon if it's 100% even lines. Used to create closed contours. - //Continue to see if closing segment is also the closest. + return true; // keep looking for a connection } - } - else if (processed[nearby.poly_idx_]) - { // it was already moved to output - return true; // keep looking for a connection - } - bool nearby_would_be_reversed = nearby.point_idx_ != 0; - nearby_would_be_reversed = nearby_would_be_reversed != go_in_reverse_direction; // flip nearby_would_be_reversed when searching in the reverse direction - if ( ! canReverse(nearby) && nearby_would_be_reversed) - { // connecting the segment would reverse the polygon direction - return true; // keep looking for a connection - } - if ( ! canConnect(chain, (*nearby.polygons_)[nearby.poly_idx_])) - { - return true; // keep looking for a connection - } - if (dist < closest_distance) - { - closest_distance = dist; - closest = nearby; - closest_is_closing_polygon = is_closing_segment; - } - if (dist < snap_distance) - { // we have found a good enough next line - return false; // stop looking for alternatives - } - return true; // keep processing elements - }) - ); - - if (!closest.initialized() // we couldn't find any next line - || closest_is_closing_polygon // we closed the polygon + if (dist < closest_distance) + { + closest_distance = dist; + closest = nearby; + closest_is_closing_polygon = is_closing_segment; + } + if (dist < snap_distance) + { // we have found a good enough next line + return false; // stop looking for alternatives + } + return true; // keep processing elements + })); + + if (! closest.initialized() // we couldn't find any next line + || closest_is_closing_polygon // we closed the polygon ) { break; } - + coord_t segment_dist = vSize(make_point(chain.back()) - closest.p()); assert(segment_dist <= max_stitch_distance + 10); @@ -185,12 +196,12 @@ class PolylineStitcher } chain.insert(chain.end(), start_pos, (*closest.polygons_)[closest.poly_idx_].rend()); } - for(size_t i = old_size; i < chain.size(); ++i) //Update chain length. + for (size_t i = old_size; i < chain.size(); ++i) // Update chain length. { chain_length += vSize(chain[i] - chain[i - 1]); } - should_close = should_close & !isOdd((*closest.polygons_)[closest.poly_idx_]); //If we connect an even to an odd line, we should no longer try to close it. - assert( ! processed[closest.poly_idx_]); + should_close = should_close & ! isOdd((*closest.polygons_)[closest.poly_idx_]); // If we connect an even to an odd line, we should no longer try to close it. + assert(! processed[closest.poly_idx_]); processed[closest.poly_idx_] = true; } @@ -212,7 +223,7 @@ class PolylineStitcher else { PathsPointIndex ppi_here(&lines, line_idx, 0); - if ( ! canReverse(ppi_here)) + if (! canReverse(ppi_here)) { // Since closest_is_closing_polygon is false we went through the second iterations of the for-loop, where go_in_reverse_direction is true // the polyline isn't allowed to be reversed, so we re-reverse it. chain.reverse(); @@ -221,7 +232,7 @@ class PolylineStitcher } } } - + /*! * Whether a polyline is allowed to be reversed. (Not true for wall polylines which are not odd) */ @@ -236,6 +247,5 @@ class PolylineStitcher static bool isOdd(const Path& line); }; -}//namespace cura -#endif//UTILS_POLYLINE_STITCHER_H - +} // namespace cura +#endif // UTILS_POLYLINE_STITCHER_H diff --git a/include/utils/SquareGrid.h b/include/utils/SquareGrid.h index 0ed6e7305a..515cf0cf9d 100644 --- a/include/utils/SquareGrid.h +++ b/include/utils/SquareGrid.h @@ -1,17 +1,18 @@ -//Copyright (c) 2021 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2021 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_SQUARE_GRID_H #define UTILS_SQUARE_GRID_H -#include "IntPoint.h" - #include +#include #include #include -#include -namespace cura { +#include "IntPoint.h" + +namespace cura +{ /*! * Helper class to calculate coordinates on a square grid, and providing some @@ -45,7 +46,7 @@ class SquareGrid * for each cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function. */ - bool processLineCells(const std::pair line, const std::function& process_cell_func); + bool processLineCells(const std::pair line, const std::function& process_cell_func); /*! \brief Process cells along a line indicated by \p line. * @@ -54,7 +55,7 @@ class SquareGrid * for each cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function. */ - bool processLineCells(const std::pair line, const std::function& process_cell_func) const; + bool processLineCells(const std::pair line, const std::function& process_cell_func) const; /*! * Process all cells in an axis-aligned right triangle. @@ -89,8 +90,8 @@ class SquareGrid * good candidate has been found. * \return Whether we need to continue processing after this function. */ - bool processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const; - bool processAxisAlignedTriangle(const Point from, const Point to, bool to_the_right, const std::function& process_cell_func) const; + bool processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const; + bool processAxisAlignedTriangle(const Point from, const Point to, bool to_the_right, const std::function& process_cell_func) const; /*! \brief Process cells that might contain sought after points. * @@ -104,8 +105,7 @@ class SquareGrid * ``false``. * \return Whether we need to continue processing after this function. */ - bool processNearby(const Point &query_pt, coord_t radius, - const std::function& process_func) const; + bool processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const; /*! \brief Compute the grid coordinates of a point. * \param point The actual location. @@ -125,7 +125,7 @@ class SquareGrid * \param location The grid location. * \return The print space coordinates that correspond to \p location. */ - Point toLowerCorner(const GridPoint& location) const; + Point toLowerCorner(const GridPoint& location) const; /*! \brief Compute the lowest coord in a grid cell. * The lowest point is the point in the grid cell closest to the origin. @@ -133,7 +133,7 @@ class SquareGrid * \param grid_coord The grid coordinate. * \return The print space coordinate that corresponds to \p grid_coord. */ - coord_t toLowerCoord(const grid_coord_t& grid_coord) const; + coord_t toLowerCoord(const grid_coord_t& grid_coord) const; protected: /*! \brief The cell (square) size. */ @@ -152,4 +152,4 @@ class SquareGrid } // namespace cura -#endif //UTILS_SQUARE_GRID_H +#endif // UTILS_SQUARE_GRID_H diff --git a/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp b/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp index c7d81cd798..bc49bd6f27 100644 --- a/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp +++ b/src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "BeadingStrategy/OuterWallInsetBeadingStrategy.h" @@ -7,10 +7,10 @@ namespace cura { -OuterWallInsetBeadingStrategy::OuterWallInsetBeadingStrategy(coord_t outer_wall_offset, BeadingStrategyPtr parent) : - BeadingStrategy(*parent), - parent_(std::move(parent)), - outer_wall_offset_(outer_wall_offset) +OuterWallInsetBeadingStrategy::OuterWallInsetBeadingStrategy(coord_t outer_wall_offset, BeadingStrategyPtr parent) + : BeadingStrategy(*parent) + , parent_(std::move(parent)) + , outer_wall_offset_(outer_wall_offset) { name_ = "OuterWallOfsetBeadingStrategy"; } @@ -46,7 +46,13 @@ BeadingStrategy::Beading OuterWallInsetBeadingStrategy::compute(coord_t thicknes Beading ret = parent_->compute(thickness, bead_count); // Actual count and thickness as represented by extant walls. Don't count any potential zero-width 'signaling' walls. - bead_count = std::count_if(ret.bead_widths.begin(), ret.bead_widths.end(), [](const coord_t width) { return width > 0; }); + bead_count = std::count_if( + ret.bead_widths.begin(), + ret.bead_widths.end(), + [](const coord_t width) + { + return width > 0; + }); // No need to apply any inset if there is just a single wall. if (bead_count < 2) diff --git a/src/ExtruderTrain.cpp b/src/ExtruderTrain.cpp index a06131472c..59d930aa88 100644 --- a/src/ExtruderTrain.cpp +++ b/src/ExtruderTrain.cpp @@ -1,14 +1,15 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "ExtruderTrain.h" -namespace cura +namespace cura { -ExtruderTrain::ExtruderTrain(const size_t extruder_nr, Settings* parent_settings) : extruder_nr_(extruder_nr) +ExtruderTrain::ExtruderTrain(const size_t extruder_nr, Settings* parent_settings) + : extruder_nr_(extruder_nr) { settings_.setParent(parent_settings); } -}//namespace cura +} // namespace cura diff --git a/src/PathOrderPath.cpp b/src/PathOrderPath.cpp index 7ee8e49d55..cfca513fa9 100644 --- a/src/PathOrderPath.cpp +++ b/src/PathOrderPath.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2023 UltiMaker -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "PathOrdering.h" //The definitions we're implementing here. #include "WallToolPaths.h" @@ -8,43 +8,43 @@ namespace cura { - template<> - ConstPolygonRef PathOrdering::getVertexData() - { - return *vertices_; - } +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + return *vertices_; +} - template<> - ConstPolygonRef PathOrdering::getVertexData() - { - return *vertices_; - } +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + return *vertices_; +} - template<> - ConstPolygonRef PathOrdering::getVertexData() - { - return vertices_->outline.outerPolygon(); - } +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + return vertices_->outline.outerPolygon(); +} - template<> - ConstPolygonRef PathOrdering::getVertexData() - { - return vertices_->outline.outerPolygon(); - } +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + return vertices_->outline.outerPolygon(); +} - template<> - ConstPolygonRef PathOrdering::getVertexData() - { - return vertices_->outline_.outerPolygon(); - } - template<> - ConstPolygonRef PathOrdering::getVertexData() +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + return vertices_->outline_.outerPolygon(); +} +template<> +ConstPolygonRef PathOrdering::getVertexData() +{ + if (! cached_vertices_) { - if ( ! cached_vertices_) - { - cached_vertices_ = vertices_->toPolygon(); - } - return ConstPolygonRef(*cached_vertices_); + cached_vertices_ = vertices_->toPolygon(); } - + return ConstPolygonRef(*cached_vertices_); } + +} // namespace cura diff --git a/src/Preheat.cpp b/src/Preheat.cpp index 914da06595..d2190cb9a3 100644 --- a/src/Preheat.cpp +++ b/src/Preheat.cpp @@ -1,11 +1,12 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "Preheat.h" + #include #include "Application.h" //To get settings. #include "ExtruderTrain.h" -#include "Preheat.h" #include "Slice.h" #include "settings/FlowTempGraph.h" #include "settings/types/Ratio.h" diff --git a/src/Slice.cpp b/src/Slice.cpp index 4782604e00..eb92ae1d68 100644 --- a/src/Slice.cpp +++ b/src/Slice.cpp @@ -1,15 +1,17 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher +#include "Slice.h" + #include #include "ExtruderTrain.h" -#include "Slice.h" namespace cura { -Slice::Slice(const size_t num_mesh_groups) : scene(num_mesh_groups) +Slice::Slice(const size_t num_mesh_groups) + : scene(num_mesh_groups) { } diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 4b608dfbfb..e1a7b36e37 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -3,14 +3,6 @@ #include "communication/CommandLine.h" -#include "Application.h" //To get the extruders for material estimates. -#include "ExtruderTrain.h" -#include "FffProcessor.h" //To start a slice and get time estimates. -#include "Slice.h" -#include "utils/Matrix4x3D.h" //For the mesh_rotation_matrix setting. - -#include - #include //For strtok and strcopy. #include // error number when trying to read file #include @@ -21,6 +13,14 @@ #include #include +#include + +#include "Application.h" //To get the extruders for material estimates. +#include "ExtruderTrain.h" +#include "FffProcessor.h" //To start a slice and get time estimates. +#include "Slice.h" +#include "utils/Matrix4x3D.h" //For the mesh_rotation_matrix setting. + namespace cura { diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 8d87717fa3..d719f8b236 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -98,7 +98,8 @@ void GCodeExport::preSetup(const size_t start_extruder) const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; if (use_extruder_offset_to_offset_coords_) { - extruder_attr_[extruder_nr].nozzle_offset_ = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + extruder_attr_[extruder_nr].nozzle_offset_ + = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); } else { diff --git a/src/infill/LightningDistanceField.cpp b/src/infill/LightningDistanceField.cpp index d0d0b5f2a3..0c532b8ced 100644 --- a/src/infill/LightningDistanceField.cpp +++ b/src/infill/LightningDistanceField.cpp @@ -1,25 +1,21 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/LightningDistanceField.h" //Class we're implementing. + #include "utils/polygonUtils.h" //For spreadDotsArea helper function. namespace cura { -constexpr coord_t radius_per_cell_size = 6; // The cell-size should be small compared to the radius, but not so small as to be inefficient. +constexpr coord_t radius_per_cell_size = 6; // The cell-size should be small compared to the radius, but not so small as to be inefficient. -LightningDistanceField::LightningDistanceField -( - const coord_t& radius, - const Polygons& current_outline, - const Polygons& current_overhang -) -: cell_size_(radius / radius_per_cell_size) -, grid_(cell_size_) -, supporting_radius_(radius) -, current_outline_(current_outline) -, current_overhang_(current_overhang) +LightningDistanceField::LightningDistanceField(const coord_t& radius, const Polygons& current_outline, const Polygons& current_overhang) + : cell_size_(radius / radius_per_cell_size) + , grid_(cell_size_) + , supporting_radius_(radius) + , current_outline_(current_outline) + , current_overhang_(current_overhang) { std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size_); for (const auto& p : regular_dots) @@ -28,17 +24,13 @@ LightningDistanceField::LightningDistanceField const coord_t dist_to_boundary = vSize(p - cpp.p()); unsupported_points_.emplace_back(p, dist_to_boundary); } - unsupported_points_.sort - ( + unsupported_points_.sort( [&radius](const UnsupCell& a, const UnsupCell& b) { constexpr coord_t prime_for_hash = 191; - return - std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius ? - a.dist_to_boundary_ < b.dist_to_boundary_ : - (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); - } - ); + return std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius ? a.dist_to_boundary_ < b.dist_to_boundary_ + : (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); + }); for (auto it = unsupported_points_.begin(); it != unsupported_points_.end(); ++it) { UnsupCell& cell = *it; @@ -58,36 +50,35 @@ bool LightningDistanceField::tryGetNextPoint(Point* p) const void LightningDistanceField::update(const Point& to_node, const Point& added_leaf) { - auto process_func = - [added_leaf, this](const SquareGrid::GridPoint& grid_loc) + auto process_func = [added_leaf, this](const SquareGrid::GridPoint& grid_loc) + { + auto it = unsupported_points_grid_.find(grid_loc); + if (it != unsupported_points_grid_.end()) { - auto it = unsupported_points_grid_.find(grid_loc); - if (it != unsupported_points_grid_.end()) + std::list::iterator& list_it = it->second; + UnsupCell& cell = *list_it; + if (shorterThen(cell.loc_ - added_leaf, supporting_radius_)) { - std::list::iterator& list_it = it->second; - UnsupCell& cell = *list_it; - if (shorterThen(cell.loc_ - added_leaf, supporting_radius_)) - { - unsupported_points_.erase(list_it); - unsupported_points_grid_.erase(it); - } + unsupported_points_.erase(list_it); + unsupported_points_grid_.erase(it); } - return true; - }; + } + return true; + }; const Point a = to_node; const Point b = added_leaf; Point ab = b - a; Point ab_T = turn90CCW(ab); Point extent = normal(ab_T, supporting_radius_); // TODO: process cells only once; make use of PolygonUtils::spreadDotsArea - grid_.processLineCells(std::make_pair(a + extent, a - extent), - [this, ab, extent, &process_func] (const SquareGrid::GridPoint& p) - { - grid_.processLineCells(std::make_pair(p, p + ab), process_func); - return true; - } - ); + grid_.processLineCells( + std::make_pair(a + extent, a - extent), + [this, ab, extent, &process_func](const SquareGrid::GridPoint& p) + { + grid_.processLineCells(std::make_pair(p, p + ab), process_func); + return true; + }); grid_.processNearby(added_leaf, supporting_radius_, process_func); } -} \ No newline at end of file +} // namespace cura \ No newline at end of file diff --git a/src/infill/ZigzagConnectorProcessor.cpp b/src/infill/ZigzagConnectorProcessor.cpp index 1853ff77a5..5c579841a8 100644 --- a/src/infill/ZigzagConnectorProcessor.cpp +++ b/src/infill/ZigzagConnectorProcessor.cpp @@ -1,9 +1,10 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. -#include #include "infill/ZigzagConnectorProcessor.h" +#include + using namespace cura; @@ -76,9 +77,8 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, } } - const bool should_add = - (is_this_connection_even && !is_this_endpiece && !should_skip_this_connection) // normal connections that should be added - || (use_endpieces_ && is_this_endpiece); // end piece if it is enabled; + const bool should_add = (is_this_connection_even && ! is_this_endpiece && ! should_skip_this_connection) // normal connections that should be added + || (use_endpieces_ && is_this_endpiece); // end piece if it is enabled; return should_add; } @@ -116,11 +116,10 @@ void ZigzagConnectorProcessor::registerPolyFinished() { int scanline_start_index = last_connector_index_; int scanline_end_index = first_connector_end_scanline_index_; - const bool is_endpiece = is_first_connector_ || (!is_first_connector_ && scanline_start_index == scanline_end_index); + const bool is_endpiece = is_first_connector_ || (! is_first_connector_ && scanline_start_index == scanline_end_index); // decides whether to add this zag according to the following rules - if ((is_endpiece && use_endpieces_) - || (!is_endpiece && shouldAddCurrentConnector(scanline_start_index, scanline_end_index))) + if ((is_endpiece && use_endpieces_) || (! is_endpiece && shouldAddCurrentConnector(scanline_start_index, scanline_end_index))) { // for convenience, put every point in one vector for (const Point& point : first_connector_) @@ -145,7 +144,7 @@ void ZigzagConnectorProcessor::addZagConnector(std::vector& points, bool return; } Polygon polyline(points); - if (is_endpiece && !connected_endpieces_) + if (is_endpiece && ! connected_endpieces_) { polyline.pop_back(); } diff --git a/src/multiVolumes.cpp b/src/multiVolumes.cpp index e4e5398725..220523c723 100644 --- a/src/multiVolumes.cpp +++ b/src/multiVolumes.cpp @@ -3,6 +3,8 @@ #include "multiVolumes.h" +#include + #include "Application.h" #include "Slice.h" #include "settings/EnumSettings.h" @@ -10,8 +12,6 @@ #include "slicer.h" #include "utils/PolylineStitcher.h" -#include - namespace cura { diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index 7da890d3d9..e3243a344b 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -147,7 +147,8 @@ bool Comb::calc( unsigned int end_part_boundary_poly_idx_min{}; unsigned int start_part_idx_min = (start_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(start_inside_poly_min, &start_part_boundary_poly_idx_min); - unsigned int end_part_idx_min = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); + unsigned int end_part_idx_min + = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); CombPath result_path; bool comb_result; @@ -262,7 +263,8 @@ bool Comb::calc( { comb_paths.emplace_back(); comb_paths.throughAir = true; - if (vSize(start_crossing.in_or_mid_ - end_crossing.in_or_mid_) < vSize(start_crossing.in_or_mid_ - start_crossing.out_) + vSize(end_crossing.in_or_mid_ - end_crossing.out_)) + if (vSize(start_crossing.in_or_mid_ - end_crossing.in_or_mid_) + < vSize(start_crossing.in_or_mid_ - start_crossing.out_) + vSize(end_crossing.in_or_mid_ - end_crossing.out_)) { // via outside is moving more over the in-between zone comb_paths.back().push_back(start_crossing.in_or_mid_); comb_paths.back().push_back(end_crossing.in_or_mid_); @@ -419,7 +421,7 @@ Comb::Crossing::Crossing( if (dest_is_inside) { dest_crossing_poly_.emplace(boundary_inside[dest_part_boundary_crossing_poly_idx]); // initialize with most obvious poly, cause mostly a combing move will move outside the - // part, rather than inside a hole in the part + // part, rather than inside a hole in the part } } diff --git a/src/progress/ProgressStageEstimator.cpp b/src/progress/ProgressStageEstimator.cpp index e587141a0b..1ae0d6c713 100644 --- a/src/progress/ProgressStageEstimator.cpp +++ b/src/progress/ProgressStageEstimator.cpp @@ -1,17 +1,17 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "progress/ProgressStageEstimator.h" -namespace cura +namespace cura { -ProgressStageEstimator::ProgressStageEstimator(std::vector< double >& relative_time_estimates) -: total_estimated_time_(0) -, accumulated_estimate_(0) -, current_stage_idx_(-1) +ProgressStageEstimator::ProgressStageEstimator(std::vector& relative_time_estimates) + : total_estimated_time_(0) + , accumulated_estimate_(0) + , current_stage_idx_(-1) { stages_.reserve(relative_time_estimates.size()); for (double relative_estimated_time : relative_time_estimates) @@ -51,4 +51,4 @@ void ProgressStageEstimator::nextStage(ProgressEstimator* stage) } -} // namespace cura +} // namespace cura diff --git a/src/settings/ZSeamConfig.cpp b/src/settings/ZSeamConfig.cpp index 229722922b..ea91b0f516 100644 --- a/src/settings/ZSeamConfig.cpp +++ b/src/settings/ZSeamConfig.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "settings/ZSeamConfig.h" //The definitions we're implementing. @@ -7,11 +7,11 @@ namespace cura { ZSeamConfig::ZSeamConfig(const EZSeamType type, const Point pos, const EZSeamCornerPrefType corner_pref, const coord_t simplify_curvature) -: type_(type) -, pos_(pos) -, corner_pref_(corner_pref) -, simplify_curvature_(simplify_curvature) + : type_(type) + , pos_(pos) + , corner_pref_(corner_pref) + , simplify_curvature_(simplify_curvature) { } -} //Cura namespace. +} // namespace cura diff --git a/src/utils/AABB.cpp b/src/utils/AABB.cpp index 2b966afe1b..d31a64af21 100644 --- a/src/utils/AABB.cpp +++ b/src/utils/AABB.cpp @@ -2,28 +2,38 @@ // CuraEngine is released under the terms of the AGPLv3 or higher #include "utils/AABB.h" + +#include + #include "utils/linearAlg2D.h" #include "utils/polygon.h" //To create the AABB of a polygon. -#include namespace cura { -AABB::AABB() : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) +AABB::AABB() + : min_(POINT_MAX, POINT_MAX) + , max_(POINT_MIN, POINT_MIN) { } -AABB::AABB(const Point& min, const Point& max) : min_(min), max_(max) +AABB::AABB(const Point& min, const Point& max) + : min_(min) + , max_(max) { } -AABB::AABB(const Polygons& polys) : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) +AABB::AABB(const Polygons& polys) + : min_(POINT_MAX, POINT_MAX) + , max_(POINT_MIN, POINT_MIN) { calculate(polys); } -AABB::AABB(ConstPolygonRef poly) : min_(POINT_MAX, POINT_MAX), max_(POINT_MIN, POINT_MIN) +AABB::AABB(ConstPolygonRef poly) + : min_(POINT_MAX, POINT_MAX) + , max_(POINT_MIN, POINT_MIN) { calculate(poly); } @@ -38,7 +48,10 @@ coord_t AABB::distanceSquared(const Point& p) const const Point a = Point(max_.X, min_.Y); const Point b = Point(min_.X, max_.Y); return (contains(p) ? -1 : 1) - * std::min({ LinearAlg2D::getDist2FromLineSegment(min_, a, p), LinearAlg2D::getDist2FromLineSegment(a, max_, p), LinearAlg2D::getDist2FromLineSegment(max_, b, p), LinearAlg2D::getDist2FromLineSegment(b, min_, p) }); + * std::min({ LinearAlg2D::getDist2FromLineSegment(min_, a, p), + LinearAlg2D::getDist2FromLineSegment(a, max_, p), + LinearAlg2D::getDist2FromLineSegment(max_, b, p), + LinearAlg2D::getDist2FromLineSegment(b, min_, p) }); } coord_t AABB::distanceSquared(const AABB& other) const diff --git a/src/utils/Date.cpp b/src/utils/Date.cpp index 52065c72bc..890936622b 100644 --- a/src/utils/Date.cpp +++ b/src/utils/Date.cpp @@ -1,36 +1,34 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/Date.h" -#include #include // sscanf #include // strstr #include // setw, setfill +#include namespace cura { Date::Date(int year, int month, int day) -: year_(year) -, month_(month) -, day_(day) + : year_(year) + , month_(month) + , day_(day) { } std::string Date::toStringDashed() { std::ostringstream str; - str << std::setfill('0') << std::setw(4) << year_ << "-" - << std::setfill('0') << std::setw(2) << month_ << "-" - << std::setfill('0') << std::setw(2) << day_; + str << std::setfill('0') << std::setw(4) << year_ << "-" << std::setfill('0') << std::setw(2) << month_ << "-" << std::setfill('0') << std::setw(2) << day_; return str.str(); } Date::Date() -: year_(-1) -, month_(-1) -, day_(-1) + : year_(-1) + , month_(-1) + , day_(-1) { } diff --git a/src/utils/ExtrusionJunction.cpp b/src/utils/ExtrusionJunction.cpp index 5a7cdb49b9..4e83ad3c24 100644 --- a/src/utils/ExtrusionJunction.cpp +++ b/src/utils/ExtrusionJunction.cpp @@ -1,22 +1,21 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/ExtrusionJunction.h" namespace cura { -bool ExtrusionJunction::operator ==(const ExtrusionJunction& other) const +bool ExtrusionJunction::operator==(const ExtrusionJunction& other) const { - return p_ == other.p_ - && w_ == other.w_ - && perimeter_index_ == other.perimeter_index_; + return p_ == other.p_ && w_ == other.w_ && perimeter_index_ == other.perimeter_index_; } ExtrusionJunction::ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index) - : p_(p), - w_(w), - perimeter_index_(perimeter_index) -{} - + : p_(p) + , w_(w) + , perimeter_index_(perimeter_index) +{ } + +} // namespace cura diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/FMatrix4x3.cpp index bdf5adb257..99d5bc0646 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/FMatrix4x3.cpp @@ -1,10 +1,9 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/Matrix4x3D.h" //The definitions we're implementing. - #include "settings/types/Ratio.h" //Scale factor. #include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. +#include "utils/Matrix4x3D.h" //The definitions we're implementing. #include "utils/Point3D.h" //This matrix gets applied to floating point coordinates. namespace cura diff --git a/src/utils/ListPolyIt.cpp b/src/utils/ListPolyIt.cpp index 93cad91774..c640a9884e 100644 --- a/src/utils/ListPolyIt.cpp +++ b/src/utils/ListPolyIt.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/ListPolyIt.h" @@ -9,7 +9,7 @@ #include "utils/AABB.h" // for debug output svg html #include "utils/SVG.h" -namespace cura +namespace cura { @@ -76,5 +76,4 @@ ListPolyIt ListPolyIt::insertPointNonDuplicate(const ListPolyIt before, const Li } - -}//namespace cura +} // namespace cura diff --git a/src/utils/PolygonConnector.cpp b/src/utils/PolygonConnector.cpp index 5aae9257f2..62b7b968a3 100644 --- a/src/utils/PolygonConnector.cpp +++ b/src/utils/PolygonConnector.cpp @@ -1,17 +1,18 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/PolygonConnector.h" -#include "utils/linearAlg2D.h" #include "utils/AABB.h" +#include "utils/linearAlg2D.h" -namespace cura +namespace cura { PolygonConnector::PolygonConnector(const coord_t line_width) -: line_width_(line_width) -{} + : line_width_(line_width) +{ +} void PolygonConnector::add(const Polygons& input) { @@ -23,9 +24,9 @@ void PolygonConnector::add(const Polygons& input) void PolygonConnector::add(const std::vector& input) { - for(const VariableWidthLines& lines : input) + for (const VariableWidthLines& lines : input) { - for(const ExtrusionLine& line : lines) + for (const ExtrusionLine& line : lines) { input_paths_.push_back(line); } @@ -35,7 +36,7 @@ void PolygonConnector::add(const std::vector& input) void PolygonConnector::connect(Polygons& output_polygons, std::vector& output_paths) { std::vector result_polygons = connectGroup(input_polygons_); - for(Polygon& polygon : result_polygons) + for (Polygon& polygon : result_polygons) { output_polygons.add(polygon); } @@ -76,7 +77,7 @@ void PolygonConnector::addVertex(Polygon& polygonal, const Point& vertex) const void PolygonConnector::addVertex(ExtrusionLine& polygonal, const Point& position, const coord_t width) const { - polygonal.emplace_back(position, width, 1); //Perimeter indices don't make sense any more once perimeters are merged. Use 1 as placeholder, being the first "normal" wall. + polygonal.emplace_back(position, width, 1); // Perimeter indices don't make sense any more once perimeters are merged. Use 1 as placeholder, being the first "normal" wall. } void PolygonConnector::addVertex(ExtrusionLine& polygonal, const ExtrusionJunction& vertex) const @@ -97,12 +98,11 @@ bool PolygonConnector::isClosed(ExtrusionLine& polygonal) const template<> ExtrusionLine PolygonConnector::createEmpty() const { - constexpr size_t inset_index = 1; //Specialising to set inset_index to 1 instead of maximum int. Connected polys are not specific to any inset. + constexpr size_t inset_index = 1; // Specialising to set inset_index to 1 instead of maximum int. Connected polys are not specific to any inset. constexpr bool is_odd = false; ExtrusionLine result(inset_index, is_odd); result.is_closed_ = true; - return result; //No copy, via RVO. + return result; // No copy, via RVO. } -}//namespace cura - +} // namespace cura diff --git a/src/utils/PolygonsPointIndex.cpp b/src/utils/PolygonsPointIndex.cpp index 9cc2d3cf18..d41092baba 100644 --- a/src/utils/PolygonsPointIndex.cpp +++ b/src/utils/PolygonsPointIndex.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/PolygonsPointIndex.h" @@ -12,4 +12,4 @@ ConstPolygonRef PathsPointIndex::getPolygon() const return (*polygons_)[poly_idx_]; } -} +} // namespace cura diff --git a/src/utils/PolylineStitcher.cpp b/src/utils/PolylineStitcher.cpp index 7346613e83..98a839e673 100644 --- a/src/utils/PolylineStitcher.cpp +++ b/src/utils/PolylineStitcher.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/PolylineStitcher.h" @@ -52,5 +52,4 @@ bool PolylineStitcher::isOdd(const Polygon&) return false; } -}//namespace cura - +} // namespace cura diff --git a/src/utils/Simplify.cpp b/src/utils/Simplify.cpp index ed2dc9edb5..caefbf74de 100644 --- a/src/utils/Simplify.cpp +++ b/src/utils/Simplify.cpp @@ -1,11 +1,11 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "utils/Simplify.h" #include #include //Priority queue to prioritise removing unimportant vertices. -#include "utils/Simplify.h" - namespace cura { @@ -13,18 +13,20 @@ Simplify::Simplify(const coord_t max_resolution, const coord_t max_deviation, co : max_resolution_(max_resolution) , max_deviation_(max_deviation) , max_area_deviation_(max_area_deviation) -{} +{ +} Simplify::Simplify(const Settings& settings) : max_resolution_(settings.get("meshfix_maximum_resolution")) , max_deviation_(settings.get("meshfix_maximum_deviation")) , max_area_deviation_(settings.get("meshfix_maximum_extrusion_area_deviation")) -{} +{ +} Polygons Simplify::polygon(const Polygons& polygons) const { Polygons result; - for(size_t i = 0; i < polygons.size(); ++i) + for (size_t i = 0; i < polygons.size(); ++i) { result.addIfNotEmpty(polygon(polygons[i])); } @@ -46,7 +48,7 @@ ExtrusionLine Simplify::polygon(const ExtrusionLine& polygon) const Polygons Simplify::polyline(const Polygons& polylines) const { Polygons result; - for(size_t i = 0; i < polylines.size(); ++i) + for (size_t i = 0; i < polylines.size(); ++i) { result.addIfNotEmpty(polyline(polylines[i])); } @@ -68,14 +70,16 @@ ExtrusionLine Simplify::polyline(const ExtrusionLine& polyline) const size_t Simplify::nextNotDeleted(size_t index, const std::vector& to_delete) const { const size_t size = to_delete.size(); - for(index = (index + 1) % size; to_delete[index]; index = (index + 1) % size); //Changes the index variable in-place until we found one that is not deleted. + for (index = (index + 1) % size; to_delete[index]; index = (index + 1) % size) + ; // Changes the index variable in-place until we found one that is not deleted. return index; } size_t Simplify::previousNotDeleted(size_t index, const std::vector& to_delete) const { const size_t size = to_delete.size(); - for(index = (index + size - 1) % size; to_delete[index]; index = (index + size - 1) % size); //Changes the index variable in-place until we found one that is not deleted. + for (index = (index + size - 1) % size; to_delete[index]; index = (index + size - 1) % size) + ; // Changes the index variable in-place until we found one that is not deleted. return index; } @@ -118,15 +122,15 @@ Point Simplify::createIntersection(const Point& before, const Point intersection ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, const Point intersection, const ExtrusionJunction& after) const { - //Average the extrusion width of the line. - //More correct would be to see where along the line the intersection occurs with a projection or something. - //But these details are so small, and this solution is so much quicker and simpler. + // Average the extrusion width of the line. + // More correct would be to see where along the line the intersection occurs with a projection or something. + // But these details are so small, and this solution is so much quicker and simpler. return ExtrusionJunction(intersection, (before.w_ + after.w_) / 2, before.perimeter_index_); } coord_t Simplify::getAreaDeviation(const Point& before, const Point& vertex, const Point& after) const { - return 0; //Fixed-width polygons don't have any deviation. + return 0; // Fixed-width polygons don't have any deviation. } coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const ExtrusionJunction& vertex, const ExtrusionJunction& after) const @@ -151,9 +155,9 @@ coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const Extrus const coord_t ab_length = vSize(vertex - before); const coord_t bc_length = vSize(after - vertex); const coord_t ac_length = vSize(after - before); - if(ab_length == 0 || ac_length == 0 || bc_length == 0) + if (ab_length == 0 || ac_length == 0 || bc_length == 0) { - return 0; //Either of the line segments is zero, so the deviation of one of the line segments doesn't matter (not printed). So effectively there is no deviation. + return 0; // Either of the line segments is zero, so the deviation of one of the line segments doesn't matter (not printed). So effectively there is no deviation. } const coord_t width_diff = std::max(std::abs(vertex.w_ - before.w_), std::abs(after.w_ - vertex.w_)); if (width_diff > 1) @@ -172,4 +176,4 @@ coord_t Simplify::getAreaDeviation(const ExtrusionJunction& before, const Extrus } } -} +} // namespace cura diff --git a/src/utils/SquareGrid.cpp b/src/utils/SquareGrid.cpp index 46f7a41534..29d1d9fec8 100644 --- a/src/utils/SquareGrid.cpp +++ b/src/utils/SquareGrid.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/SquareGrid.h" @@ -8,19 +8,20 @@ using namespace cura; -SquareGrid::SquareGrid(coord_t cell_size) : cell_size_(cell_size) +SquareGrid::SquareGrid(coord_t cell_size) + : cell_size_(cell_size) { assert(cell_size > 0U); } -SquareGrid::GridPoint SquareGrid::toGridPoint(const Point &point) const +SquareGrid::GridPoint SquareGrid::toGridPoint(const Point& point) const { return Point(toGridCoord(point.X), toGridCoord(point.Y)); } -SquareGrid::grid_coord_t SquareGrid::toGridCoord(const coord_t& coord) const +SquareGrid::grid_coord_t SquareGrid::toGridCoord(const coord_t& coord) const { // This mapping via truncation results in the cells with // GridPoint.x==0 being twice as large and similarly for @@ -32,13 +33,13 @@ SquareGrid::grid_coord_t SquareGrid::toGridCoord(const coord_t& coord) const } -cura::Point SquareGrid::toLowerCorner(const GridPoint& location) const +cura::Point SquareGrid::toLowerCorner(const GridPoint& location) const { return cura::Point(toLowerCoord(location.X), toLowerCoord(location.Y)); } -cura::coord_t SquareGrid::toLowerCoord(const grid_coord_t& grid_coord) const +cura::coord_t SquareGrid::toLowerCoord(const grid_coord_t& grid_coord) const { // This mapping via truncation results in the cells with // GridPoint.x==0 being twice as large and similarly for @@ -50,13 +51,13 @@ cura::coord_t SquareGrid::toLowerCoord(const grid_coord_t& grid_coord) const } -bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) +bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) { return static_cast(this)->processLineCells(line, process_cell_func); } -bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) const +bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) const { Point start = line.first; Point end = line.second; @@ -117,13 +118,7 @@ bool SquareGrid::processLineCells(const std::pair line, const std: return false; } -bool SquareGrid::processAxisAlignedTriangle -( - const Point from, - const Point to, - bool to_the_right, - const std::function& process_cell_func -) const +bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, bool to_the_right, const std::function& process_cell_func) const { Point a = from; Point b = to; @@ -134,12 +129,13 @@ bool SquareGrid::processAxisAlignedTriangle return processAxisAlignedTriangle(a, b, process_cell_func); } -bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const +bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const { GridPoint last; GridPoint grid_to = toGridPoint(to); - return processLineCells(std::make_pair(from, to), - [grid_to, &last, &process_cell_func, this] (const GridPoint grid_loc) + return processLineCells( + std::make_pair(from, to), + [grid_to, &last, &process_cell_func, this](const GridPoint grid_loc) { if (grid_loc.Y != last.Y) { @@ -161,16 +157,10 @@ bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, co } last = grid_loc; return true; - } - ); + }); } -bool SquareGrid::processNearby -( - const Point &query_pt, - coord_t radius, - const std::function& process_func -) const +bool SquareGrid::processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const { const Point min_loc(query_pt.X - radius, query_pt.Y - radius); const Point max_loc(query_pt.X + radius, query_pt.Y + radius); @@ -182,8 +172,8 @@ bool SquareGrid::processNearby { for (coord_t grid_x = min_grid.X; grid_x <= max_grid.X; ++grid_x) { - GridPoint grid_pt(grid_x,grid_y); - if (!process_func(grid_pt)) + GridPoint grid_pt(grid_x, grid_y); + if (! process_func(grid_pt)) { return false; } From 3b65d4b1e5d59a20a0f1e63068bf34e89300c8bd Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 09:40:44 +0100 Subject: [PATCH 086/218] Removed unused ClientSocket class --- CMakeLists.txt | 1 - include/utils/socket.h | 32 --------- src/utils/socket.cpp | 146 ----------------------------------------- 3 files changed, 179 deletions(-) delete mode 100644 include/utils/socket.h delete mode 100644 src/utils/socket.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3189c3c8ce..9832338c20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,7 +144,6 @@ set(engine_SRCS # Except main.cpp. src/utils/PolylineStitcher.cpp src/utils/Simplify.cpp src/utils/SVG.cpp - src/utils/socket.cpp src/utils/SquareGrid.cpp src/utils/ThreadPool.cpp src/utils/ToolpathVisualizer.cpp diff --git a/include/utils/socket.h b/include/utils/socket.h deleted file mode 100644 index 19097ccdc8..0000000000 --- a/include/utils/socket.h +++ /dev/null @@ -1,32 +0,0 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#ifndef SOCKET_H -#define SOCKET_H - -#include -namespace cura -{ - -class ClientSocket -{ - int sockfd; -public: - ClientSocket(); - ~ClientSocket(); - - void connectTo(std::string host, int port); - - void sendInt32(int32_t nr); - void sendFloat32(float f); - void sendAll(const void* data, int length); - - int32_t recvInt32(); - float recvFloat32(); - void recvAll(void* data, int length); - - void close(); -}; - -}//namespace cura -#endif//SOCKET_H diff --git a/src/utils/socket.cpp b/src/utils/socket.cpp deleted file mode 100644 index 8e6c7a722e..0000000000 --- a/src/utils/socket.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2022 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher - -#include -#include - -#ifdef _WIN32 -#include -#else -#include -#include -#include -#include -#include -#endif - -#include - -#include "utils/socket.h" - -namespace cura -{ - -#ifdef _WIN32 -bool wsaStartupDone = false; -#endif - -ClientSocket::ClientSocket() -{ - sockfd = -1; - -#ifdef _WIN32 - if (! wsaStartupDone) - { - WSADATA wsaData; - memset(&wsaData, 0, sizeof(WSADATA)); - // WSAStartup needs to be called on windows before sockets can be used. Request version 1.1, which is supported on windows 98 and higher. - WSAStartup(MAKEWORD(1, 1), &wsaData); - wsaStartupDone = true; - } -#endif -} - -void ClientSocket::connectTo(std::string host, int port) -{ - struct sockaddr_in serv_addr; - sockfd = socket(AF_INET, SOCK_STREAM, 0); - - memset(&serv_addr, '0', sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_port = htons(port); - serv_addr.sin_addr.s_addr = inet_addr(host.c_str()); - - if (connect(sockfd, reinterpret_cast(&serv_addr), sizeof(serv_addr)) < 0) - { - printf("Connect to %s:%d failed\n", host.c_str(), port); - close(); - return; - } -} - -ClientSocket::~ClientSocket() -{ - close(); -} - -void ClientSocket::sendInt32(int32_t nr) -{ - sendAll(&nr, sizeof(int32_t)); -} - -void ClientSocket::sendFloat32(float f) -{ - sendAll(&f, sizeof(float)); -} - - -void ClientSocket::sendAll(const void* data, int length) -{ - if (sockfd == -1) - return; - const char* ptr = static_cast(data); - while (length > 0) - { - int n = send(sockfd, ptr, length, 0); - if (n <= 0) - { - close(); - return; - } - ptr += length; - length -= n; - } -} - -int32_t ClientSocket::recvInt32() -{ - int32_t ret = -1; - recvAll(&ret, sizeof(int32_t)); - return ret; -} - -float ClientSocket::recvFloat32() -{ - float ret = 0; - recvAll(&ret, sizeof(float)); - return ret; -} - -void ClientSocket::recvAll(void* data, int length) -{ - if (sockfd == -1) - return; - char* ptr = static_cast(data); - while (length > 0) - { - int n = recv(sockfd, ptr, length, 0); - if (n == 0) - { - close(); - return; - } - if (n < 0) - { - spdlog::error("ClientSocket::recvAll error..."); - close(); - return; - } - ptr += n; - length -= n; - } -} - -void ClientSocket::close() -{ - if (sockfd == -1) - return; -#ifdef _WIN32 - closesocket(sockfd); -#else - ::close(sockfd); -#endif - sockfd = -1; -} - -} // namespace cura \ No newline at end of file From 6c24ce4d1e718ea24ac805aa13e35e979c066e6d Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Wed, 22 Nov 2023 08:45:53 +0000 Subject: [PATCH 087/218] Applied clang-format. --- include/WallToolPaths.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/WallToolPaths.h b/include/WallToolPaths.h index 70ded7d889..07b67ebfcd 100644 --- a/include/WallToolPaths.h +++ b/include/WallToolPaths.h @@ -125,7 +125,7 @@ class WallToolPaths const Polygons& outline_; // Date: Wed, 22 Nov 2023 10:00:53 +0100 Subject: [PATCH 088/218] Fix formatting Co-authored-by: Casper Lamboo --- include/SupportInfillPart.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/SupportInfillPart.h b/include/SupportInfillPart.h index 7b1c94c8f0..354e37fe73 100644 --- a/include/SupportInfillPart.h +++ b/include/SupportInfillPart.h @@ -33,7 +33,7 @@ class SupportInfillPart // for infill_areas[x][n], x means the density level and n means the thickness std::vector wall_toolpaths; //!< Any walls go here, not in the areas, where they could be combined vertically (don't combine walls). Binned by inset_idx. - coord_t custom_line_distance;//!< The distance between support infill lines. 0 means use the default line distance instead. + coord_t custom_line_distance; //!< The distance between support infill lines. 0 means use the default line distance instead. bool use_fractional_config; //!< Request to use the configuration used to fill a partial layer height here, instead of the normal full layer height configuration. SupportInfillPart(const PolygonsPart& outline, coord_t support_line_width, bool use_fractional_config, int inset_count_to_generate = 0, coord_t custom_line_distance = 0); From d020d0f17b02859dff0f198a033e1f4cd3ed86c3 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 22 Nov 2023 10:18:14 +0100 Subject: [PATCH 089/218] Fix Sentry (crash logging) for Win64. The issue was windows defaults to wide-strings. Sadly sentry doesn't seem to take wide-string paths, so that users with non-ASCII names might be left out again :-/ part of CURA-11364 --- include/utils/format/filesystem_path.h | 2 +- src/main.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/utils/format/filesystem_path.h b/include/utils/format/filesystem_path.h index 679b69223e..f6f8d697a7 100644 --- a/include/utils/format/filesystem_path.h +++ b/include/utils/format/filesystem_path.h @@ -32,7 +32,7 @@ struct formatter : formatter template auto format(const std::filesystem::path& path, FormatContext& ctx) { - return formatter::format(anonymizePath(path.native()), ctx); + return formatter::format(anonymizePath(path.generic_string()), ctx); } }; diff --git a/src/main.cpp b/src/main.cpp index 4f4798a175..9f02aba974 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include "utils/format/filesystem_path.h" @@ -78,7 +78,7 @@ int main(int argc, char** argv) const auto config_path = std::filesystem::path(fmt::format("{}\\cura\\.sentry-native", std::getenv("APPDATA"))); #endif spdlog::info("Sentry config path: {}", config_path); - sentry_options_set_database_path(options, static_cast(std::filesystem::absolute(config_path).native().c_str())); + sentry_options_set_database_path(options, std::filesystem::absolute(config_path).generic_string().c_str()); constexpr std::string_view cura_engine_version{ CURA_ENGINE_VERSION }; const auto version = semver::from_string( cura_engine_version From 4556a1826e7929d5c01d2147521b24844e7c3eb4 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 10:00:30 +0100 Subject: [PATCH 090/218] Geometry classes naming consistency --- CMakeLists.txt | 4 +- include/BeadingStrategy/BeadingStrategy.h | 2 +- include/BoostInterface.hpp | 39 +- include/ExtruderPlan.h | 8 +- include/FffGcodeWriter.h | 2 +- include/InterlockingGenerator.h | 4 +- include/LayerPlan.h | 28 +- include/MeshGroup.h | 4 +- include/PathOrder.h | 2 +- include/PathOrderMonotonic.h | 22 +- include/PathOrderOptimizer.h | 48 +-- include/PrimeTower.h | 4 +- include/SkeletalTrapezoidation.h | 26 +- include/SkeletalTrapezoidationGraph.h | 8 +- include/SkeletalTrapezoidationJoint.h | 2 +- include/TreeSupportElement.h | 24 +- include/TreeSupportTipGenerator.h | 14 +- include/TreeSupportUtils.h | 8 +- include/communication/ArcusCommunication.h | 4 +- include/communication/CommandLine.h | 4 +- include/communication/Communication.h | 6 +- include/gcodeExport.h | 20 +- include/infill.h | 24 +- include/infill/ImageBasedDensityProvider.h | 2 +- include/infill/LightningDistanceField.h | 6 +- include/infill/LightningLayer.h | 8 +- include/infill/LightningTreeNode.h | 24 +- include/infill/NoZigZagConnectorProcessor.h | 4 +- include/infill/SierpinskiFill.h | 10 +- include/infill/SubDivCube.h | 20 +- include/infill/ZigzagConnectorProcessor.h | 14 +- include/mesh.h | 16 +- include/pathPlanning/Comb.h | 20 +- include/pathPlanning/CombPath.h | 4 +- include/pathPlanning/GCodePath.h | 4 +- include/pathPlanning/LinePolygonsCrossings.h | 14 +- include/plugins/slots.h | 2 +- include/plugins/types.h | 2 +- include/settings/ZSeamConfig.h | 6 +- include/sliceDataStorage.h | 6 +- include/slicer.h | 8 +- include/utils/AABB.h | 14 +- include/utils/AABB3D.h | 16 +- include/utils/ExtrusionJunction.h | 10 +- include/utils/ExtrusionSegment.h | 2 +- include/utils/HalfEdge.h | 2 +- include/utils/HalfEdgeNode.h | 6 +- include/utils/ListPolyIt.h | 8 +- include/utils/Matrix4x3D.h | 10 +- include/utils/MinimumSpanningTree.h | 18 +- include/utils/{IntPoint.h => Point2LL.h} | 124 +++---- include/utils/Point3D.h | 10 +- include/utils/Point3F.h | 2 +- include/utils/{Point3.h => Point3LL.h} | 58 +-- include/utils/PolygonConnector.h | 72 ++-- include/utils/PolygonsPointIndex.h | 18 +- include/utils/PolygonsSegmentIndex.h | 4 +- include/utils/PolylineStitcher.h | 2 +- include/utils/SVG.h | 28 +- include/utils/Simplify.h | 28 +- include/utils/SparseGrid.h | 18 +- include/utils/SparseLineGrid.h | 80 ++--- include/utils/SparsePointGrid.h | 8 +- include/utils/SparsePointGridInclusive.h | 16 +- include/utils/SquareGrid.h | 18 +- include/utils/VoronoiUtils.h | 20 +- include/utils/VoxelUtils.h | 18 +- include/utils/actions/smooth.h | 2 +- include/utils/linearAlg2D.h | 74 ++-- include/utils/orderOptimizer.h | 16 +- include/utils/polygon.h | 92 ++--- include/utils/polygonUtils.h | 92 ++--- src/FffGcodeWriter.cpp | 74 ++-- src/FffPolygonGenerator.cpp | 14 +- src/GCodePathConfig.cpp | 2 +- src/InterlockingGenerator.cpp | 18 +- src/LayerPlan.cpp | 132 +++---- src/LayerPlanBuffer.cpp | 6 +- src/MeshGroup.cpp | 40 +-- src/Mold.cpp | 2 +- src/PrimeTower.cpp | 16 +- src/SkeletalTrapezoidation.cpp | 146 ++++---- src/SkeletalTrapezoidationGraph.cpp | 16 +- src/SkirtBrim.cpp | 2 +- src/TopSurface.cpp | 12 +- src/TreeSupport.cpp | 52 +-- src/TreeSupportTipGenerator.cpp | 54 +-- src/bridge.cpp | 8 +- src/communication/ArcusCommunication.cpp | 18 +- .../ArcusCommunicationPrivate.cpp | 2 +- src/communication/CommandLine.cpp | 4 +- src/gcodeExport.cpp | 64 ++-- src/infill.cpp | 48 +-- src/infill/GyroidInfill.cpp | 24 +- src/infill/ImageBasedDensityProvider.cpp | 18 +- src/infill/LightningDistanceField.cpp | 18 +- src/infill/LightningLayer.cpp | 16 +- src/infill/LightningTreeNode.cpp | 46 +-- src/infill/NoZigZagConnectorProcessor.cpp | 4 +- src/infill/SierpinskiFill.cpp | 24 +- src/infill/SierpinskiFillProvider.cpp | 6 +- src/infill/SubDivCube.cpp | 32 +- src/infill/ZigzagConnectorProcessor.cpp | 8 +- src/layerPart.cpp | 2 +- src/mesh.cpp | 10 +- src/multiVolumes.cpp | 2 +- src/pathPlanning/Comb.cpp | 36 +- src/pathPlanning/LinePolygonsCrossings.cpp | 32 +- src/plugins/converters.cpp | 12 +- src/settings/ZSeamConfig.cpp | 2 +- src/sliceDataStorage.cpp | 28 +- src/slicer.cpp | 48 +-- src/support.cpp | 16 +- src/utils/AABB.cpp | 38 +- src/utils/AABB3D.cpp | 20 +- src/utils/ExtrusionJunction.cpp | 2 +- src/utils/ExtrusionSegment.cpp | 24 +- src/utils/LinearAlg2D.cpp | 46 +-- src/utils/ListPolyIt.cpp | 8 +- src/utils/{FMatrix4x3.cpp => Matrix4x3D.cpp} | 14 +- src/utils/MinimumSpanningTree.cpp | 34 +- src/utils/Point3.cpp | 76 ---- src/utils/Point3LL.cpp | 76 ++++ src/utils/PolygonConnector.cpp | 12 +- src/utils/PolygonsSegmentIndex.cpp | 4 +- src/utils/PolylineStitcher.cpp | 6 +- src/utils/SVG.cpp | 52 +-- src/utils/Simplify.cpp | 12 +- src/utils/SquareGrid.cpp | 30 +- src/utils/ToolpathVisualizer.cpp | 14 +- src/utils/VoronoiUtils.cpp | 66 ++-- src/utils/VoxelUtils.cpp | 30 +- src/utils/polygon.cpp | 166 ++++----- src/utils/polygonUtils.cpp | 338 +++++++++--------- tests/ExtruderPlanTest.cpp | 44 +-- tests/GCodeExportTest.cpp | 22 +- tests/LayerPlanTest.cpp | 52 +-- tests/PathOrderMonotonicTest.cpp | 16 +- tests/PathOrderOptimizerTest.cpp | 22 +- tests/arcus/ArcusCommunicationTest.cpp | 2 +- tests/utils/AABB3DTest.cpp | 56 +-- tests/utils/AABBTest.cpp | 92 ++--- tests/utils/IntPointTest.cpp | 16 +- tests/utils/LinearAlg2DTest.cpp | 182 +++++----- tests/utils/MinimumSpanningTreeTest.cpp | 44 +-- tests/utils/PolygonConnectorTest.cpp | 4 +- tests/utils/PolygonTest.cpp | 176 ++++----- tests/utils/PolygonUtilsTest.cpp | 166 ++++----- tests/utils/SimplifyTest.cpp | 66 ++-- tests/utils/SmoothTest.cpp | 66 ++-- tests/utils/SparseGridTest.cpp | 126 ++++--- tests/utils/StringTest.cpp | 2 +- 152 files changed, 2354 insertions(+), 2345 deletions(-) rename include/utils/{IntPoint.h => Point2LL.h} (68%) rename include/utils/{Point3.h => Point3LL.h} (68%) rename src/utils/{FMatrix4x3.cpp => Matrix4x3D.cpp} (83%) delete mode 100644 src/utils/Point3.cpp create mode 100644 src/utils/Point3LL.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9832338c20..efe1adfbcb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,12 +130,12 @@ set(engine_SRCS # Except main.cpp. src/utils/ExtrusionJunction.cpp src/utils/ExtrusionLine.cpp src/utils/ExtrusionSegment.cpp - src/utils/FMatrix4x3.cpp src/utils/gettime.cpp src/utils/LinearAlg2D.cpp src/utils/ListPolyIt.cpp + src/utils/Matrix4x3D.cpp src/utils/MinimumSpanningTree.cpp - src/utils/Point3.cpp + src/utils/Point3LL.cpp src/utils/PolygonConnector.cpp src/utils/PolygonsPointIndex.cpp src/utils/PolygonsSegmentIndex.cpp diff --git a/include/BeadingStrategy/BeadingStrategy.h b/include/BeadingStrategy/BeadingStrategy.h index ab628788cd..d72645592f 100644 --- a/include/BeadingStrategy/BeadingStrategy.h +++ b/include/BeadingStrategy/BeadingStrategy.h @@ -8,7 +8,7 @@ #include "../settings/types/Angle.h" #include "../settings/types/Ratio.h" //For the wall transition threshold. -#include "../utils/IntPoint.h" +#include "../utils/Point2LL.h" namespace cura { diff --git a/include/BoostInterface.hpp b/include/BoostInterface.hpp index 52cf9e9f84..a294450a11 100644 --- a/include/BoostInterface.hpp +++ b/include/BoostInterface.hpp @@ -1,13 +1,13 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef BOOST_INTERFACE_HPP #define BOOST_INTERFACE_HPP -#include #include +#include -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/PolygonsSegmentIndex.h" #include "utils/polygon.h" @@ -16,47 +16,48 @@ using CSegment = cura::PolygonsSegmentIndex; using CPolygon = boost::polygon::polygon_data; using CPolygonSet = std::vector; -namespace boost { -namespace polygon { +namespace boost +{ +namespace polygon +{ -template <> -struct geometry_concept +template<> +struct geometry_concept { typedef point_concept type; }; -template <> -struct point_traits +template<> +struct point_traits { typedef cura::coord_t coordinate_type; - static inline coordinate_type get( - const cura::Point& point, orientation_2d orient) + static inline coordinate_type get(const cura::Point2LL& point, orientation_2d orient) { return (orient == HORIZONTAL) ? point.X : point.Y; } }; -template <> +template<> struct geometry_concept { typedef segment_concept type; }; -template <> +template<> struct segment_traits { typedef cura::coord_t coordinate_type; - typedef cura::Point point_type; - static inline point_type get(const CSegment& CSegment, direction_1d dir) { + typedef cura::Point2LL point_type; + static inline point_type get(const CSegment& CSegment, direction_1d dir) + { return dir.to_int() ? CSegment.p() : CSegment.next().p(); } }; - -} // polygon -} // boost +} // namespace polygon +} // namespace boost #endif // BOOST_INTERFACE_HPP diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index ab0fef772e..17e45d0013 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -12,7 +12,7 @@ #include "pathPlanning/TimeMaterialEstimates.h" #include "settings/types/LayerIndex.h" #include "settings/types/Ratio.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #ifdef BUILD_TESTS #include //Friend tests, so that they can inspect the privates. @@ -97,7 +97,7 @@ class ExtruderPlan * \param minTime Maximum minimum layer time for all extruders in this layer * \param time_other_extr_plans The time spent on the other extruder plans in this layer */ - void processFanSpeedForMinimalLayerTime(Point starting_position, Duration maximum_cool_min_layer_time, double time_other_extr_plans); + void processFanSpeedForMinimalLayerTime(Point2LL starting_position, Duration maximum_cool_min_layer_time, double time_other_extr_plans); /*! * Applying fan speed changes for the first layers. @@ -191,7 +191,7 @@ class ExtruderPlan /*! * @return distance between p0 and p1 as well as the time spend on the segment */ - std::pair getPointToPointTime(const Point& p0, const Point& p1, const GCodePath& path); + std::pair getPointToPointTime(const Point2LL& p0, const Point2LL& p1, const GCodePath& path); /*! * Compute naive time estimates (without accounting for slow down at corners etc.) and naive material estimates. @@ -200,7 +200,7 @@ class ExtruderPlan * \param starting_position The position the head was in before starting this layer * \return the total estimates of this layer */ - TimeMaterialEstimates computeNaiveTimeEstimates(Point starting_position); + TimeMaterialEstimates computeNaiveTimeEstimates(Point2LL starting_position); }; } // namespace cura diff --git a/include/FffGcodeWriter.h b/include/FffGcodeWriter.h index d63547692e..68c1cb9986 100644 --- a/include/FffGcodeWriter.h +++ b/include/FffGcodeWriter.h @@ -601,7 +601,7 @@ class FffGcodeWriter : public NoCopy * \param last_position The position the print head is in before going to fill the part * \return The location near where to start filling the part */ - std::optional getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point last_position) const; + std::optional getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point2LL last_position) const; /*! * Add the g-code for ironing the top surface. diff --git a/include/InterlockingGenerator.h b/include/InterlockingGenerator.h index 02bebde68b..da37b66e53 100644 --- a/include/InterlockingGenerator.h +++ b/include/InterlockingGenerator.h @@ -80,7 +80,7 @@ class InterlockingGenerator coord_t beam_width_a, coord_t beam_width_b, const PointMatrix& rotation, - Point3 cell_size, + Point3LL cell_size, coord_t beam_layer_count, DilationKernel interface_dilation, DilationKernel air_dilation, @@ -166,7 +166,7 @@ class InterlockingGenerator const VoxelUtils vu_; const PointMatrix rotation_; - const Point3 cell_size_; + const Point3LL cell_size_; const coord_t beam_layer_count_; const DilationKernel interface_dilation_; const DilationKernel air_dilation_; diff --git a/include/LayerPlan.h b/include/LayerPlan.h index aff1b0304a..d978cbdbd7 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -66,9 +66,9 @@ class LayerPlan : public NoCopy const bool is_raft_layer_; //!< Whether this is a layer which is part of the raft coord_t layer_thickness_; - std::vector layer_start_pos_per_extruder_; //!< The starting position of a layer for each extruder + std::vector layer_start_pos_per_extruder_; //!< The starting position of a layer for each extruder std::vector has_prime_tower_planned_per_extruder_; //!< For each extruder, whether the prime tower is planned yet or not. - std::optional last_planned_position_; //!< The last planned XY position of the print head (if known) + std::optional last_planned_position_; //!< The last planned XY position of the print head (if known) std::shared_ptr current_mesh_; //!< The mesh of the last planned move. @@ -83,7 +83,7 @@ class LayerPlan : public NoCopy size_t last_extruder_previous_layer_; //!< The last id of the extruder with which was printed in the previous layer ExtruderTrain* last_planned_extruder_; //!< The extruder for which a move has most recently been planned. - std::optional first_travel_destination_; //!< The destination of the first (travel) move (if this layer is not empty) + std::optional first_travel_destination_; //!< The destination of the first (travel) move (if this layer is not empty) bool first_travel_destination_is_inside_; //!< Whether the destination of the first planned travel move is inside a layer part std::optional> first_extrusion_acc_jerk_; //!< The acceleration and jerk rates of the first extruded move (if this layer is not empty). std::optional> next_layer_acc_jerk_; //!< If there is a next layer, the first acceleration and jerk it starts with. @@ -183,7 +183,7 @@ class LayerPlan : public NoCopy * * \warning The layer start position might be outside of the build plate! */ - Point getLastPlannedPositionOrStartingPosition() const; + Point2LL getLastPlannedPositionOrStartingPosition() const; /*! * return whether the last position planned was inside the mesh (used in combing) @@ -213,7 +213,7 @@ class LayerPlan : public NoCopy * * Returns nothing if the layer is empty and no travel move was ever made. */ - std::optional> getFirstTravelDestinationState() const; + std::optional> getFirstTravelDestinationState() const; /*! * Set whether the next destination is inside a layer part or not. @@ -283,7 +283,7 @@ class LayerPlan : public NoCopy * \param p The point to travel to. * \param force_retract Whether to force a retraction to occur. */ - GCodePath& addTravel(const Point& p, const bool force_retract = false, const coord_t z_offset = 0); + GCodePath& addTravel(const Point2LL& p, const bool force_retract = false, const coord_t z_offset = 0); /*! * Add a travel path to a certain point and retract if needed. @@ -293,7 +293,7 @@ class LayerPlan : public NoCopy * \param p The point to travel to * \param path (optional) The travel path to which to add the point \p p */ - GCodePath& addTravel_simple(const Point& p, GCodePath* path = nullptr); + GCodePath& addTravel_simple(const Point2LL& p, GCodePath* path = nullptr); /*! * Plan a prime blob at the current location. @@ -319,7 +319,7 @@ class LayerPlan : public NoCopy * \param fan_speed Fan speed override for this path. */ void addExtrusionMove( - const Point p, + const Point2LL p, const GCodePathConfig& config, const SpaceFillType space_fill_type, const Ratio& flow = 1.0_r, @@ -386,7 +386,7 @@ class LayerPlan : public NoCopy const Ratio flow_ratio = 1.0_r, bool always_retract = false, bool reverse_order = false, - const std::optional start_near_location = std::optional()); + const std::optional start_near_location = std::optional()); /*! * Add a single line that is part of a wall to the gcode. @@ -409,8 +409,8 @@ class LayerPlan : public NoCopy * the first bridge segment. */ void addWallLine( - const Point& p0, - const Point& p1, + const Point2LL& p0, + const Point2LL& p1, const Settings& settings, const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, @@ -527,7 +527,7 @@ class LayerPlan : public NoCopy const bool enable_travel_optimization = false, const coord_t wipe_dist = 0, const Ratio flow_ratio = 1.0, - const std::optional near_start_location = std::optional(), + const std::optional near_start_location = std::optional(), const double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT, const bool reverse_print_direction = false, const std::unordered_multimap& order_requirements = PathOrderOptimizer::no_order_requirements_); @@ -630,7 +630,7 @@ class LayerPlan : public NoCopy while (true) { - const Point& vertex = cura::make_point(wall[curr_idx]); + const Point2LL& vertex = cura::make_point(wall[curr_idx]); if (! air_below.inside(vertex, true)) { // vertex isn't above air so it's OK to use @@ -691,7 +691,7 @@ class LayerPlan : public NoCopy * * \param starting_position The position of the print head when the first extruder plan of this layer starts */ - void processFanSpeedAndMinimalLayerTime(Point starting_position); + void processFanSpeedAndMinimalLayerTime(Point2LL starting_position); /*! * Add a travel move to the layer plan to move inside the current layer part diff --git a/include/MeshGroup.h b/include/MeshGroup.h index 51a12be124..232bf08662 100644 --- a/include/MeshGroup.h +++ b/include/MeshGroup.h @@ -24,8 +24,8 @@ class MeshGroup : public NoCopy std::vector meshes; Settings settings; - Point3 min() const; //! minimal corner of bounding box - Point3 max() const; //! maximal corner of bounding box + Point3LL min() const; //! minimal corner of bounding box + Point3LL max() const; //! maximal corner of bounding box void clear(); diff --git a/include/PathOrder.h b/include/PathOrder.h index 53b4a3543a..bd95594ee7 100644 --- a/include/PathOrder.h +++ b/include/PathOrder.h @@ -42,7 +42,7 @@ class PathOrder * The location where the nozzle is assumed to start from before printing * these parts. */ - Point start_point_; + Point2LL start_point_; /*! * Seam settings. diff --git a/include/PathOrderMonotonic.h b/include/PathOrderMonotonic.h index 267fcc7261..356eb248f5 100644 --- a/include/PathOrderMonotonic.h +++ b/include/PathOrderMonotonic.h @@ -44,7 +44,7 @@ class PathOrderMonotonic : public PathOrder using Path = PathOrdering; using PathOrder::coincident_point_distance_; - PathOrderMonotonic(const AngleRadians monotonic_direction, const coord_t max_adjacent_distance, const Point start_point) + PathOrderMonotonic(const AngleRadians monotonic_direction, const coord_t max_adjacent_distance, const Point2LL start_point) // The monotonic vector needs to rotate clockwise instead of counter-clockwise, the same as how the infill patterns are generated. : monotonic_vector_(-std::cos(monotonic_direction) * monotonic_vector_resolution_, std::sin(monotonic_direction) * monotonic_vector_resolution_) , max_adjacent_distance_(max_adjacent_distance) @@ -124,7 +124,7 @@ class PathOrderMonotonic : public PathOrder // The ``starting_lines`` set indicates possible locations to start from. Each starting line represents one "sequence", which is either a set of adjacent line segments or a // string of polylines. The ``connections`` map indicates, starting from each starting segment, the sequence of line segments to print in order. Note that for performance // reasons, the ``connections`` map will sometimes link the end of one segment to the start of the next segment. This link should be ignored. - const Point perpendicular = turn90CCW(monotonic_vector_); // To project on to detect adjacent lines. + const Point2LL perpendicular = turn90CCW(monotonic_vector_); // To project on to detect adjacent lines. std::unordered_set connected_lines; // Lines that are reachable from one of the starting lines through its connections. std::unordered_set starting_lines; // Starting points of a linearly connected segment. @@ -219,7 +219,7 @@ class PathOrderMonotonic : public PathOrder }); // Now that we have the segments of overlapping lines, and know in which order to print the segments, print segments in monotonic order. - Point current_pos = this->start_point_; + Point2LL current_pos = this->start_point_; for (Path* line : starting_lines_monotonic) { optimizeClosestStartPoint(*line, current_pos); @@ -254,7 +254,7 @@ class PathOrderMonotonic : public PathOrder * The resulting ordering will cause clusters of paths to be sorted * according to their projection on this vector. */ - Point monotonic_vector_; + Point2LL monotonic_vector_; /*! * Maximum distance at which lines are considered to be adjacent. @@ -279,7 +279,7 @@ class PathOrderMonotonic : public PathOrder * \param current_pos The last position of the nozzle before printing this * path. */ - void optimizeClosestStartPoint(Path& path, Point& current_pos) + void optimizeClosestStartPoint(Path& path, Point2LL& current_pos) { if (path.start_vertex_ == path.converted_->size()) { @@ -310,7 +310,7 @@ class PathOrderMonotonic : public PathOrder * printed. All paths in this string already have their start_vertex set * correctly. */ - std::deque findPolylineString(Path* polyline, const SparsePointGridInclusive& line_bucket_grid, const Point monotonic_vector) + std::deque findPolylineString(Path* polyline, const SparsePointGridInclusive& line_bucket_grid, const Point2LL monotonic_vector) { std::deque result; if (polyline->converted_->empty()) @@ -321,8 +321,8 @@ class PathOrderMonotonic : public PathOrder // Find the two endpoints of the polyline string, on either side. result.push_back(polyline); polyline->start_vertex_ = 0; - Point first_endpoint = polyline->converted_->front(); - Point last_endpoint = polyline->converted_->back(); + Point2LL first_endpoint = polyline->converted_->front(); + Point2LL last_endpoint = polyline->converted_->back(); std::vector> lines_before = line_bucket_grid.getNearby(first_endpoint, coincident_point_distance_); auto close_line_before = std::find_if( lines_before.begin(), @@ -403,7 +403,7 @@ class PathOrderMonotonic : public PathOrder * \param point The point to get far away from. * \return The vertex index of the endpoint that is farthest away. */ - size_t getFarthestEndpoint(Path* polyline, const Point point) + size_t getFarthestEndpoint(Path* polyline, const Point2LL point) { const coord_t front_dist = vSize2(polyline->converted_->front() - point); const coord_t back_dist = vSize2(polyline->converted_->back() - point); @@ -427,7 +427,7 @@ class PathOrderMonotonic : public PathOrder * calculated. * \param polylines The sorted list of polylines. */ - std::vector getOverlappingLines(const typename std::vector::iterator polyline_it, const Point perpendicular, const std::vector& polylines) + std::vector getOverlappingLines(const typename std::vector::iterator polyline_it, const Point2LL perpendicular, const std::vector& polylines) { const coord_t max_adjacent_projected_distance = max_adjacent_distance_ * monotonic_vector_resolution_; // How far this extends in the monotonic direction, to make sure we only go up to max_adjacent_distance in that direction. @@ -504,7 +504,7 @@ class PathOrderMonotonic : public PathOrder * struct of the bucket grid contains not only the actual path (via pointer) * but also the endpoint of it that it found to be nearby. */ - static bool canConnectToPolyline(const Point nearby_endpoint, SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) + static bool canConnectToPolyline(const Point2LL nearby_endpoint, SparsePointGridInclusiveImpl::SparsePointGridInclusiveElem found_path) { return found_path.val->start_vertex_ == found_path.val->converted_->size() // Don't find any line already in the string. && vSize2(found_path.point - nearby_endpoint) < coincident_point_distance_ * coincident_point_distance_; // And only find close lines. diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 71c6e92891..56212693d2 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -80,7 +80,7 @@ class PathOrderOptimizer * The location where the nozzle is assumed to start from before printing * these parts. */ - const Point start_point_; + const Point2LL start_point_; /*! * Seam settings. @@ -104,7 +104,7 @@ class PathOrderOptimizer * \param combing_boundary Boundary to avoid when making travel moves. */ PathOrderOptimizer( - const Point start_point, + const Point2LL start_point, const ZSeamConfig seam_config = ZSeamConfig(), const bool detect_loops = false, const Polygons* combing_boundary = nullptr, @@ -185,7 +185,7 @@ class PathOrderOptimizer } if (path.is_closed_) { - for (const Point& point : *path.converted_) + for (const Point2LL& point : *path.converted_) { line_bucket_grid.insert(point, i); // Store by index so that we can also mark them down in the `picked` vector. } @@ -296,7 +296,7 @@ class PathOrderOptimizer { std::vector optimized_order; // To store our result in. - Point current_position = start_point_; + Point2LL current_position = start_point_; std::unordered_map picked(paths_.size()); // Fixed size boolean flag for whether each path is already in the optimized vector. @@ -381,7 +381,7 @@ class PathOrderOptimizer // We used a shared visited set between runs of dfs. This is for the case when we reverse the ordering tree. // In this case two roots can share the same children nodes, but we don't want to print them twice. std::unordered_set visited; - Point current_position = start_point_; + Point2LL current_position = start_point_; std::function(const Path, const std::unordered_multimap&)> get_neighbours = [current_position, this](const Path current_node, const std::unordered_multimap& graph) @@ -536,7 +536,7 @@ class PathOrderOptimizer return reversed; } - Path findClosestPathVertices(Point start_position, std::unordered_set candidate_paths) + Path findClosestPathVertices(Point2LL start_position, std::unordered_set candidate_paths) { std::vector candidate_orderable_paths; @@ -549,7 +549,7 @@ class PathOrderOptimizer return best_candidate->vertices_; } - OrderablePath* findClosestPath(Point start_position, std::vector candidate_paths) + OrderablePath* findClosestPath(Point2LL start_position, std::vector candidate_paths) { coord_t best_distance2 = std::numeric_limits::max(); OrderablePath* best_candidate = 0; @@ -575,7 +575,7 @@ class PathOrderOptimizer path->backwards_ = path->start_vertex_ > 0; } } - const Point candidate_position = (*path->converted_)[path->start_vertex_]; + const Point2LL candidate_position = (*path->converted_)[path->start_vertex_]; coord_t distance2 = getDirectDistance(start_position, candidate_position); if (distance2 < best_distance2 && combing_boundary_) // If direct distance is longer than best combing distance, the combing distance can never be better, so only compute combing if necessary. @@ -608,7 +608,7 @@ class PathOrderOptimizer * endpoints rather than * \return An index to a vertex in that path where printing must start. */ - size_t findStartLocation(const OrderablePath& path, const Point& target_pos) + size_t findStartLocation(const OrderablePath& path, const Point2LL& target_pos) { if (! path.is_closed_) { @@ -640,7 +640,7 @@ class PathOrderOptimizer coord_t total_length = 0; for (const auto& [i, here] : **path.converted_ | ranges::views::enumerate) { - const Point& next = (*path.converted_)[(i + 1) % path.converted_->size()]; + const Point2LL& next = (*path.converted_)[(i + 1) % path.converted_->size()]; const coord_t segment_size = vSize(next - here); segments_sizes[i] = segment_size; total_length += segment_size; @@ -714,7 +714,7 @@ class PathOrderOptimizer // ties are broken by favouring points with lower x-coord // if x-coord for both points are equal then break ties by // favouring points with lower y-coord - const Point& best_point = (*path.converted_)[best_i]; + const Point2LL& best_point = (*path.converted_)[best_i]; if (std::abs(here.Y - best_point.Y) <= EPSILON ? best_point.X < here.X : best_point.Y < here.Y) { best_score = std::min(best_score, score); @@ -747,7 +747,7 @@ class PathOrderOptimizer * \param segments_sizes The pre-computed sizes of the segments * \return The position of the path a the given distance from the reference point */ - static Point findNeighbourPoint(const OrderablePath& path, int here, coord_t distance, const std::vector& segments_sizes) + static Point2LL findNeighbourPoint(const OrderablePath& path, int here, coord_t distance, const std::vector& segments_sizes) { const int direction = distance > 0 ? 1 : -1; const int size_delta = distance > 0 ? -1 : 0; @@ -764,17 +764,17 @@ class PathOrderOptimizer travelled_distance += segment_size; } - const Point& next_pos = (*path.converted_)[(here + actual_delta + path.converted_->size()) % path.converted_->size()]; + const Point2LL& next_pos = (*path.converted_)[(here + actual_delta + path.converted_->size()) % path.converted_->size()]; if (travelled_distance > distance) [[likely]] { // We have overtaken the required distance, go backward on the last segment int prev = (here + actual_delta - direction + path.converted_->size()) % path.converted_->size(); - const Point& prev_pos = (*path.converted_)[prev]; + const Point2LL& prev_pos = (*path.converted_)[prev]; - const Point vector = next_pos - prev_pos; - const Point unit_vector = (vector * 1000) / segment_size; - const Point vector_delta = unit_vector * (segment_size - (travelled_distance - distance)); + const Point2LL vector = next_pos - prev_pos; + const Point2LL unit_vector = (vector * 1000) / segment_size; + const Point2LL vector_delta = unit_vector * (segment_size - (travelled_distance - distance)); return prev_pos + vector_delta / 1000; } else @@ -800,9 +800,9 @@ class PathOrderOptimizer static double cornerAngle(const OrderablePath& path, int i, const std::vector& segments_sizes, coord_t total_length, const coord_t angle_query_distance = 1000) { const coord_t bounded_distance = std::min(angle_query_distance, total_length / 2); - const Point& here = (*path.converted_)[i]; - const Point next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); - const Point previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); + const Point2LL& here = (*path.converted_)[i]; + const Point2LL next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); + const Point2LL previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); double angle = LinearAlg2D::getAngleLeft(previous, here, next) - std::numbers::pi; @@ -816,7 +816,7 @@ class PathOrderOptimizer * \param b Another point, to compute distance to \ref a. * \return The distance between the two points. */ - coord_t getDirectDistance(const Point& a, const Point& b) const + coord_t getDirectDistance(const Point2LL& a, const Point2LL& b) const { return vSize2(a - b); } @@ -831,7 +831,7 @@ class PathOrderOptimizer * \param b Another point, to compute distance to \ref a. * \return The combing distance between the two points. */ - coord_t getCombingDistance(const Point& a, const Point& b) + coord_t getCombingDistance(const Point2LL& a, const Point2LL& b) { if (! PolygonUtils::polygonCollidesWithLineSegment(*combing_boundary_, a, b)) { @@ -858,8 +858,8 @@ class PathOrderOptimizer LinePolygonsCrossings::comb(*combing_boundary_, *combing_grid_, a, b, comb_path, rounding_error, tiny_travel_threshold, fail_on_unavoidable_obstacles); coord_t sum = 0; - Point last_point = a; - for (const Point& point : comb_path) + Point2LL last_point = a; + for (const Point2LL& point : comb_path) { sum += vSize(point - last_point); last_point = point; diff --git a/include/PrimeTower.h b/include/PrimeTower.h index 9761c12e0f..a4a31a26b9 100644 --- a/include/PrimeTower.h +++ b/include/PrimeTower.h @@ -32,9 +32,9 @@ class PrimeTower size_t extruder_count_; //!< Number of extruders bool wipe_from_middle_; //!< Whether to wipe on the inside of the hollow prime tower - Point middle_; //!< The middle of the prime tower + Point2LL middle_; //!< The middle of the prime tower - Point post_wipe_point_; //!< Location to post-wipe the unused nozzle off on + Point2LL post_wipe_point_; //!< Location to post-wipe the unused nozzle off on std::vector prime_tower_start_locations_; //!< The differernt locations where to pre-wipe the active nozzle const unsigned int number_of_prime_tower_start_locations_ = 21; //!< The required size of \ref PrimeTower::wipe_locations diff --git a/include/SkeletalTrapezoidation.h b/include/SkeletalTrapezoidation.h index b277ffd0ce..86f13f2782 100644 --- a/include/SkeletalTrapezoidation.h +++ b/include/SkeletalTrapezoidation.h @@ -167,7 +167,7 @@ class SkeletalTrapezoidation */ void constructFromPolygons(const Polygons& polys); - node_t& makeNode(vd_t::vertex_type& vd_node, Point p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. + node_t& makeNode(vd_t::vertex_type& vd_node, Point2LL p); //!< Get the node which the VD node maps to, or create a new mapping if there wasn't any yet. /*! * (Eventual) returned 'polylines per index' result (from generateToolpaths): @@ -181,13 +181,13 @@ class SkeletalTrapezoidation * \p prev_edge serves as input and output. May be null as input. */ void transferEdge( - Point from, - Point to, + Point2LL from, + Point2LL to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, - Point& start_source_point, - Point& end_source_point, - const std::vector& points, + Point2LL& start_source_point, + Point2LL& end_source_point, + const std::vector& points, const std::vector& segments); /*! @@ -215,7 +215,7 @@ class SkeletalTrapezoidation * \return A number of coordinates along the edge where the edge is broken * up into discrete pieces. */ - std::vector discretize(const vd_t::edge_type& segment, const std::vector& points, const std::vector& segments); + std::vector discretize(const vd_t::edge_type& segment, const std::vector& points, const std::vector& segments); /*! * Compute the range of line segments that surround a cell of the skeletal @@ -243,11 +243,11 @@ class SkeletalTrapezoidation */ bool computePointCellRange( vd_t::cell_type& cell, - Point& start_source_point, - Point& end_source_point, + Point2LL& start_source_point, + Point2LL& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, - const std::vector& points, + const std::vector& points, const std::vector& segments); /*! @@ -276,11 +276,11 @@ class SkeletalTrapezoidation */ void computeSegmentCellRange( vd_t::cell_type& cell, - Point& start_source_point, - Point& end_source_point, + Point2LL& start_source_point, + Point2LL& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, - const std::vector& points, + const std::vector& points, const std::vector& segments); /*! diff --git a/include/SkeletalTrapezoidationGraph.h b/include/SkeletalTrapezoidationGraph.h index 4a3f9bc594..ab6e589d16 100644 --- a/include/SkeletalTrapezoidationGraph.h +++ b/include/SkeletalTrapezoidationGraph.h @@ -51,7 +51,7 @@ class STHalfEdgeNode : public HalfEdgeNode insertRib(edge_t& edge, node_t* mid_node); protected: - std::pair getSource(const edge_t& edge); + std::pair getSource(const edge_t& edge); }; } diff --git a/include/SkeletalTrapezoidationJoint.h b/include/SkeletalTrapezoidationJoint.h index 0c596b6599..daa9087cdf 100644 --- a/include/SkeletalTrapezoidationJoint.h +++ b/include/SkeletalTrapezoidationJoint.h @@ -7,7 +7,7 @@ #include // smart pointers #include "BeadingStrategy/BeadingStrategy.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" namespace cura { diff --git a/include/TreeSupportElement.h b/include/TreeSupportElement.h index 95bbb73eee..3fa5c3eafd 100644 --- a/include/TreeSupportElement.h +++ b/include/TreeSupportElement.h @@ -58,7 +58,7 @@ struct TreeSupportElement TreeSupportElement( coord_t distance_to_top, size_t target_height, - Point target_position, + Point2LL target_position, bool to_buildplate, bool to_model_gracious, bool use_min_xy_dist, @@ -136,7 +136,7 @@ struct TreeSupportElement , to_buildplate_(element_above->to_buildplate_) , distance_to_top_(element_above->distance_to_top_ + 1) , area_(element_above->area_) - , result_on_layer_(Point(-1, -1)) + , result_on_layer_(Point2LL(-1, -1)) , // set to invalid as we are a new node on a new layer increased_to_model_radius_(element_above->increased_to_model_radius_) , to_model_gracious_(element_above->to_model_gracious_) @@ -161,7 +161,7 @@ struct TreeSupportElement const TreeSupportElement& first, const TreeSupportElement& second, size_t next_height, - Point next_position, + Point2LL next_position, coord_t increased_to_model_radius, const std::function& getRadius, double diameter_scale_bp_radius, @@ -238,12 +238,12 @@ struct TreeSupportElement /*! * \brief The position this support elements wants to support on layer=target_height */ - Point target_position_; + Point2LL target_position_; /*! * \brief The next position this support elements wants to reach. NOTE: This is mainly a suggestion regarding direction inside the influence area. */ - Point next_position_; + Point2LL next_position_; /*! @@ -283,7 +283,7 @@ struct TreeSupportElement * \brief The resulting center point around which a circle will be drawn later. * Will be set by setPointsOnAreas */ - Point result_on_layer_ = Point(-1, -1); + Point2LL result_on_layer_ = Point2LL(-1, -1); /*! * \brief The amount of extra radius we got from merging branches that could have reached the buildplate, but merged with ones that can not. */ @@ -336,7 +336,7 @@ struct TreeSupportElement /*! * \brief The coordinates of all tips supported by this branch. */ - std::vector all_tips_; + std::vector all_tips_; /*! * \brief Whether the range of an influence area is limited @@ -356,7 +356,7 @@ struct TreeSupportElement /*! * \brief Additional locations that the tip should reach */ - std::vector additional_ovalization_targets_; + std::vector additional_ovalization_targets_; bool operator==(const TreeSupportElement& other) const @@ -397,10 +397,10 @@ struct TreeSupportElement { influence_area_limit_area_.clear(); - for (Point p : all_tips_) + for (Point2LL p : all_tips_) { Polygon circle; - for (Point corner : TreeSupportBaseCircle::getBaseCircle()) + for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { circle.add(p + corner * influence_area_limit_range_ / double(TreeSupportBaseCircle::base_radius)); } @@ -433,7 +433,7 @@ struct TreeSupportElement inline bool isResultOnLayerSet() const { - return result_on_layer_ != Point(-1, -1); + return result_on_layer_ != Point2LL(-1, -1); } }; @@ -446,7 +446,7 @@ struct hash { size_t operator()(const cura::TreeSupportElement& node) const { - size_t hash_node = hash()(node.target_position_); + size_t hash_node = hash()(node.target_position_); boost::hash_combine(hash_node, size_t(node.target_height_)); return hash_node; } diff --git a/include/TreeSupportTipGenerator.h b/include/TreeSupportTipGenerator.h index 13c9dc6a80..eaf85c0c3d 100644 --- a/include/TreeSupportTipGenerator.h +++ b/include/TreeSupportTipGenerator.h @@ -54,7 +54,7 @@ class TreeSupportTipGenerator TO_BP_SAFE }; - using LineInformation = std::vector>; + using LineInformation = std::vector>; /*! * \brief Converts a Polygons object representing a line into the internal format. @@ -79,7 +79,7 @@ class TreeSupportTipGenerator * \param current_layer[in] The layer on which the point lies * \return A function that can be called to evaluate a point. */ - std::function)> getEvaluatePointForNextLayerFunction(size_t current_layer); + std::function)> getEvaluatePointForNextLayerFunction(size_t current_layer); /*! * \brief Evaluates which points of some lines are not valid one layer below and which are. Assumes all points are valid on the current layer. Validity is evaluated using @@ -91,7 +91,7 @@ class TreeSupportTipGenerator */ std::pair, std::vector> splitLines( std::vector lines, - std::function)> evaluatePoint); // assumes all Points on the current line are valid + std::function)> evaluatePoint); // assumes all Points on the current line are valid /*! * \brief Ensures that every line segment is about distance in length. The resulting lines may differ from the original but all points are on the original @@ -141,13 +141,13 @@ class TreeSupportTipGenerator */ void addPointAsInfluenceArea( std::vector>& move_bounds, - std::pair p, + std::pair p, size_t dtt, LayerIndex insert_layer, size_t dont_move_until, bool roof, bool skip_ovalisation, - std::vector additional_ovalization_targets = std::vector()); + std::vector additional_ovalization_targets = std::vector()); /*! @@ -293,7 +293,7 @@ class TreeSupportTipGenerator /*! * \brief Map that saves locations of already inserted tips. Used to prevent tips far to close together from being added. */ - std::vector> already_inserted; + std::vector> already_inserted; /*! * \brief Areas that will be saved as support roof @@ -312,4 +312,4 @@ class TreeSupportTipGenerator } // namespace cura -#endif /* TREESUPPORT_H */ \ No newline at end of file +#endif /* TREESUPPORT_H */ diff --git a/include/TreeSupportUtils.h b/include/TreeSupportUtils.h index 750665ef01..ca301b6ad4 100644 --- a/include/TreeSupportUtils.h +++ b/include/TreeSupportUtils.h @@ -118,7 +118,7 @@ class TreeSupportUtils const int support_shift = roof ? 0 : support_infill_distance / 2; const size_t wall_line_count = include_walls ? (! roof ? config.support_wall_count : config.support_roof_wall_count) : 0; constexpr coord_t narrow_area_width = 0; - const Point infill_origin; + const Point2LL infill_origin; constexpr bool skip_stitching = false; constexpr bool fill_gaps = true; constexpr bool use_endpieces = true; @@ -298,11 +298,11 @@ class TreeSupportUtils for (auto line : polylines) { Polygon next_line; - for (Point p : line) + for (Point2LL p : line) { if (area.inside(p)) { - Point next_outside = p; + Point2LL next_outside = p; PolygonUtils::moveOutside(area, next_outside); if (vSize2(p - next_outside) < max_allowed_distance * max_allowed_distance) { @@ -336,7 +336,7 @@ class TreeSupportUtils { ExtrusionLine vwl_line(1, true); - for (Point p : path) + for (Point2LL p : path) { vwl_line.emplace_back(p, line_width, 1); } diff --git a/include/communication/ArcusCommunication.h b/include/communication/ArcusCommunication.h index 37855fa368..ebc687deb4 100644 --- a/include/communication/ArcusCommunication.h +++ b/include/communication/ArcusCommunication.h @@ -84,7 +84,7 @@ class ArcusCommunication : public Communication * This may indicate the starting position (or any other jump in the path). * \param position The current position to start the next line at. */ - void sendCurrentPosition(const Point& position) override; + void sendCurrentPosition(const Point2LL& position) override; /* * \brief Sends a message to indicate that all the slicing is done. @@ -130,7 +130,7 @@ class ArcusCommunication : public Communication * \param line_thickness The thickness (in the Z direction) of the line. * \param velocity The velocity of printing this polygon. */ - void sendLineTo(const PrintFeatureType& type, const Point& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) override; + void sendLineTo(const PrintFeatureType& type, const Point2LL& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) override; /* * \brief Send the sliced layer data to the front-end after the optimisation diff --git a/include/communication/CommandLine.h b/include/communication/CommandLine.h index 6190a30df4..ac7c1ccda7 100644 --- a/include/communication/CommandLine.h +++ b/include/communication/CommandLine.h @@ -59,7 +59,7 @@ class CommandLine : public Communication * The command line doesn't do anything with the current position so this is * ignored. */ - void sendCurrentPosition(const Point&) override; + void sendCurrentPosition(const Point2LL&) override; /* * \brief Indicate to the command line that we finished slicing. @@ -93,7 +93,7 @@ class CommandLine : public Communication * * The command line doesn't show any layer view so this is ignored. */ - void sendLineTo(const PrintFeatureType&, const Point&, const coord_t&, const coord_t&, const Velocity&) override; + void sendLineTo(const PrintFeatureType&, const Point2LL&, const coord_t&, const coord_t&, const Velocity&) override; /* * \brief Complete a layer to show it in layer view. diff --git a/include/communication/Communication.h b/include/communication/Communication.h index 48186c133b..0b8a509a5b 100644 --- a/include/communication/Communication.h +++ b/include/communication/Communication.h @@ -6,7 +6,7 @@ #include "settings/types/LayerIndex.h" #include "settings/types/Velocity.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" namespace cura { @@ -104,7 +104,7 @@ class Communication * \param line_thickness The thickness (in the Z direction) of the line. * \param velocity The velocity of printing this polygon. */ - virtual void sendLineTo(const PrintFeatureType& type, const Point& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; + virtual void sendLineTo(const PrintFeatureType& type, const Point2LL& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) = 0; /* * \brief Send the current position to visualise. @@ -112,7 +112,7 @@ class Communication * This may indicate the starting position (or any other jump in the path). * \param position The current position to start the next line at. */ - virtual void sendCurrentPosition(const Point& position) = 0; + virtual void sendCurrentPosition(const Point2LL& position) = 0; /* * \brief Set which extruder is being used for the following calls to diff --git a/include/gcodeExport.h b/include/gcodeExport.h index d4cc80c564..29582eb649 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -19,7 +19,7 @@ #include "sliceDataStorage.h" #include "timeEstimate.h" #include "utils/AABB3D.h" //To track the used build volume for the Griffin header. -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/NoCopy.h" namespace cura @@ -90,7 +90,7 @@ class GCodeExport : public NoCopy double last_e_value_after_wipe_; //!< The current material amount extruded since last wipe unsigned fan_number_; // nozzle print cooling fan number - Point nozzle_offset_; //!< Cache of setting machine_nozzle_offset_[xy] + Point2LL nozzle_offset_; //!< Cache of setting machine_nozzle_offset_[xy] bool machine_firmware_retract_; //!< Cache of setting machine_firmware_retract std::deque extruded_volume_at_previous_n_retractions_; // in mm^3 @@ -127,7 +127,7 @@ class GCodeExport : public NoCopy double max_extrusion_offset_; //!< 0 to turn it off, normally 4 double extrusion_offset_factor_; //!< default 1 - Point3 current_position_; //!< The last build plate coordinates written to gcode (which might be different from actually written gcode coordinates when the extruder offset is + Point3LL current_position_; //!< The last build plate coordinates written to gcode (which might be different from actually written gcode coordinates when the extruder offset is //!< encoded in the gcode) Velocity current_speed_; //!< The current speed (F values / 60) in mm/s Acceleration current_print_acceleration_; //!< The current acceleration (in mm/s^2) used for print moves (and also for travel moves if the gcode flavor doesn't have separate @@ -249,7 +249,7 @@ class GCodeExport : public NoCopy bool getExtruderIsUsed(const int extruder_nr) const; //!< return whether the extruder has been used throughout printing all meshgroup up till now - Point getGcodePos(const coord_t x, const coord_t y, const int extruder_train) const; + Point2LL getGcodePos(const coord_t x, const coord_t y, const int extruder_train) const; void setFlavor(EGCodeFlavor flavor); EGCodeFlavor getFlavor() const; @@ -265,9 +265,9 @@ class GCodeExport : public NoCopy */ void addExtraPrimeAmount(double extra_prime_volume); - Point3 getPosition() const; + Point3LL getPosition() const; - Point getPositionXY() const; + Point2LL getPositionXY() const; int getPositionZ() const; @@ -348,7 +348,7 @@ class GCodeExport : public NoCopy * \param p location to go to * \param speed movement speed */ - void writeTravel(const Point& p, const Velocity& speed); + void writeTravel(const Point2LL& p, const Velocity& speed); /*! * Coordinates are build plate coordinates, which might be offsetted when extruder offsets are encoded in the gcode. @@ -358,7 +358,7 @@ class GCodeExport : public NoCopy * \param feature the feature that's currently printing * \param update_extrusion_offset whether to update the extrusion offset to match the current flow rate */ - void writeExtrusion(const Point& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset = false); + void writeExtrusion(const Point2LL& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset = false); /*! * Go to a X/Y location with the z-hopped Z value @@ -367,7 +367,7 @@ class GCodeExport : public NoCopy * \param p location to go to * \param speed movement speed */ - void writeTravel(const Point3& p, const Velocity& speed); + void writeTravel(const Point3LL& p, const Velocity& speed); /*! * Go to a X/Y location with the extrusion Z @@ -381,7 +381,7 @@ class GCodeExport : public NoCopy * \param feature the feature that's currently printing * \param update_extrusion_offset whether to update the extrusion offset to match the current flow rate */ - void writeExtrusion(const Point3& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset = false); + void writeExtrusion(const Point3LL& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset = false); /*! * Initialize the extruder trains. diff --git a/include/infill.h b/include/infill.h index 806d5b89b5..3f0cc19943 100644 --- a/include/infill.h +++ b/include/infill.h @@ -15,7 +15,7 @@ #include "settings/types/Angle.h" #include "utils/AABB.h" #include "utils/ExtrusionLine.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/section_type.h" namespace cura @@ -48,7 +48,7 @@ class Infill coord_t max_deviation_{}; //!< Max deviation fro the original poly when enforcing max_resolution size_t wall_line_count_{}; //!< Number of walls to generate at the boundary of the infill region, spaced \ref infill_line_width apart coord_t small_area_width_{}; //!< Maximum width of a small infill region to be filled with walls - Point infill_origin_{}; //!< origin of the infill pattern + Point2LL infill_origin_{}; //!< origin of the infill pattern bool skip_line_stitching_{ false }; //!< Whether to bypass the line stitching normally performed for polyline type infills bool fill_gaps_{ true }; //!< Whether to fill gaps in strips of infill that would be too thin to fit the infill lines. If disabled, those areas are left empty. bool connected_zigzags_{ false }; //!< (ZigZag) Whether endpieces of zigzag infill should be connected to the nearest infill line on both sides of the zigzag connector @@ -116,7 +116,7 @@ class Infill coord_t max_deviation, size_t wall_line_count, coord_t small_area_width, - Point infill_origin, + Point2LL infill_origin, bool skip_line_stitching) noexcept : pattern_{ pattern } , zig_zaggify_{ zig_zaggify } @@ -154,7 +154,7 @@ class Infill coord_t max_deviation, size_t wall_line_count, coord_t small_area_width, - Point infill_origin, + Point2LL infill_origin, bool skip_line_stitching, bool fill_gaps, bool connected_zigzags, @@ -245,7 +245,7 @@ class Infill * \param start Where the line segment starts. * \param end Where the line segment ends. */ - InfillLineSegment(const Point start, const size_t start_segment, const size_t start_polygon, const Point end, const size_t end_segment, const size_t end_polygon) + InfillLineSegment(const Point2LL start, const size_t start_segment, const size_t start_polygon, const Point2LL end, const size_t end_segment, const size_t end_polygon) : start_(start) , altered_start_(start) , start_segment_(start_segment) @@ -262,14 +262,14 @@ class Infill /*! * Where the line segment starts. */ - Point start_; + Point2LL start_; /*! * If the line-segment starts at a different point due to prevention of crossing near the boundary, it gets saved here. * * The original start-point is still used to determine ordering then, so it can't just be overwritten. */ - Point altered_start_; + Point2LL altered_start_; /*! * Which polygon line segment the start of this infill line belongs to. @@ -291,19 +291,19 @@ class Infill /*! * If the line-segment needs to prevent crossing with another line near its start, a point is inserted near the start. */ - std::optional start_bend_; + std::optional start_bend_; /*! * Where the line segment ends. */ - Point end_; + Point2LL end_; /*! * If the line-segment ends at a different point due to prevention of crossing near the boundary, it gets saved here. * * The original end-point is still used to determine ordering then, so it can't just be overwritten. */ - Point altered_end_; + Point2LL altered_end_; /*! * Which polygon line segment the end of this infill line belongs to. @@ -325,7 +325,7 @@ class Infill /*! * If the line-segment needs to prevent crossing with another line near its end, a point is inserted near the end. */ - std::optional end_bend_; + std::optional end_bend_; /*! * The previous line segment that this line segment is connected to, if @@ -610,7 +610,7 @@ class Infill * \param a The first line-segment. * \param b The second line-segment. */ - void resolveIntersection(const coord_t at_distance, const Point& intersect, Point& connect_start, Point& connect_end, InfillLineSegment* a, InfillLineSegment* b); + void resolveIntersection(const coord_t at_distance, const Point2LL& intersect, Point2LL& connect_start, Point2LL& connect_end, InfillLineSegment* a, InfillLineSegment* b); /*! * Connects infill lines together so that they form polylines. diff --git a/include/infill/ImageBasedDensityProvider.h b/include/infill/ImageBasedDensityProvider.h index cd5e8afb37..f8b215ecd7 100644 --- a/include/infill/ImageBasedDensityProvider.h +++ b/include/infill/ImageBasedDensityProvider.h @@ -23,7 +23,7 @@ class ImageBasedDensityProvider : public DensityProvider virtual double operator()(const AABB3D& aabb) const; protected: - Point3 image_size; //!< dimensions of the image. Third dimension is the amount of channels. + Point3LL image_size; //!< dimensions of the image. Third dimension is the amount of channels. unsigned char* image = nullptr; //!< image data: rows of channel data per pixel. AABB print_aabb; //!< bounding box of print coordinates in which to apply the image diff --git a/include/infill/LightningDistanceField.h b/include/infill/LightningDistanceField.h index 2dbfc00256..3624fd72c7 100644 --- a/include/infill/LightningDistanceField.h +++ b/include/infill/LightningDistanceField.h @@ -37,7 +37,7 @@ class LightningDistanceField * \return ``true`` if successful, or ``false`` if there are no more points * to consider. */ - bool tryGetNextPoint(Point* p) const; + bool tryGetNextPoint(Point2LL* p) const; /*! * Update the distance field with a newly added branch. @@ -51,7 +51,7 @@ class LightningDistanceField * \param added_leaf The location of the leaf of the newly added branch, * drawing a straight line to the node. */ - void update(const Point& to_node, const Point& added_leaf); + void update(const Point2LL& to_node, const Point2LL& added_leaf); protected: using GridPoint = SquareGrid::GridPoint; @@ -92,7 +92,7 @@ class LightningDistanceField /*! * The position of the center of this cell. */ - Point loc_; + Point2LL loc_; /*! * How far this cell is removed from the ``current_outline`` polygon, diff --git a/include/infill/LightningLayer.h b/include/infill/LightningLayer.h index 64540ea896..e9cd2b77c0 100644 --- a/include/infill/LightningLayer.h +++ b/include/infill/LightningLayer.h @@ -22,7 +22,7 @@ struct GroundingLocation { LightningTreeNodeSPtr tree_node; //!< not null if the gounding location is on a tree std::optional boundary_location; //!< in case the gounding location is on the boundary - Point p() const; + Point2LL p() const; }; /*! @@ -46,7 +46,7 @@ class LightningLayer * \param min_dist_from_boundary_for_tree If the unsupported point is closer to the boundary than this then don't consider connecting it to a tree */ GroundingLocation getBestGroundingLocation( - const Point& unsupported_location, + const Point2LL& unsupported_location, const Polygons& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, @@ -59,7 +59,7 @@ class LightningLayer * \param[out] new_root The new root node if one had been made * \return Whether a new root was added */ - bool attach(const Point& unsupported_location, const GroundingLocation& ground, LightningTreeNodeSPtr& new_child, LightningTreeNodeSPtr& new_root); + bool attach(const Point2LL& unsupported_location, const GroundingLocation& ground, LightningTreeNodeSPtr& new_child, LightningTreeNodeSPtr& new_root); void reconnectRoots( std::vector& to_be_reconnected_tree_roots, @@ -70,7 +70,7 @@ class LightningLayer Polygons convertToLines(const Polygons& limit_to_outline, const coord_t line_width) const; - coord_t getWeightedDistance(const Point& boundary_loc, const Point& unsupported_location); + coord_t getWeightedDistance(const Point2LL& boundary_loc, const Point2LL& unsupported_location); void fillLocator(SparseLightningTreeNodeGrid& tree_node_locator); }; diff --git a/include/infill/LightningTreeNode.h b/include/infill/LightningTreeNode.h index 3ab0d17b36..0ebd5503a8 100644 --- a/include/infill/LightningTreeNode.h +++ b/include/infill/LightningTreeNode.h @@ -55,13 +55,13 @@ class LightningTreeNode : public std::enable_shared_from_this * path to print. * \return The position that this node represents. */ - const Point& getLocation() const; + const Point2LL& getLocation() const; /*! * Change the position on this layer that the node represents. * \param p The position that the node needs to represent. */ - void setLocation(const Point& p); + void setLocation(const Point2LL& p); /*! * Construct a new ``LightningTreeNode`` instance and add it as a child of @@ -69,7 +69,7 @@ class LightningTreeNode : public std::enable_shared_from_this * \param p The location of the new node. * \return A shared pointer to the new node. */ - LightningTreeNodeSPtr addChild(const Point& p); + LightningTreeNodeSPtr addChild(const Point2LL& p); /*! * Add an existing ``LightningTreeNode`` as a child of this node. @@ -115,7 +115,7 @@ class LightningTreeNode : public std::enable_shared_from_this * \param visitor A function to execute for every branch in the node's sub- * tree. */ - void visitBranches(const std::function& visitor) const; + void visitBranches(const std::function& visitor) const; /*! * Execute a given function for every node in this node's sub-tree. @@ -139,7 +139,7 @@ class LightningTreeNode : public std::enable_shared_from_this * \param supporting_radius The maximum distance which can be bridged without (infill) supporting it. * \return The weighted distance. */ - coord_t getWeightedDistance(const Point& unsupported_location, const coord_t& supporting_radius) const; + coord_t getWeightedDistance(const Point2LL& unsupported_location, const coord_t& supporting_radius) const; /*! * Returns whether this node is the root of a lightning tree. It is the root @@ -166,7 +166,7 @@ class LightningTreeNode : public std::enable_shared_from_this * \param loc The specified location. * \result The branch that starts at the position closest to the location within this tree. */ - LightningTreeNodeSPtr closestNode(const Point& loc); + LightningTreeNodeSPtr closestNode(const Point2LL& loc); /*! * Returns whether the given tree node is a descendant of this node. @@ -188,7 +188,7 @@ class LightningTreeNode : public std::enable_shared_from_this * Connecting other nodes to this node indicates that a line segment should * be drawn between those two physical positions. */ - LightningTreeNode(const Point& p, const std::optional& last_grounding_location = std::nullopt); + LightningTreeNode(const Point2LL& p, const std::optional& last_grounding_location = std::nullopt); /*! * Copy this node and its entire sub-tree. @@ -205,7 +205,7 @@ class LightningTreeNode : public std::enable_shared_from_this struct RectilinearJunction { coord_t total_recti_dist; //!< rectilinear distance along the tree from the last junction above to the junction below - Point junction_loc; //!< junction location below + Point2LL junction_loc; //!< junction location below }; /*! @@ -222,7 +222,7 @@ class LightningTreeNode : public std::enable_shared_from_this * \param max_remove_colinear_dist2 Maximum distance _squared_ of the (compound) line-segment from which a co-linear point may be removed. * \return the total distance along the tree from the last junction above to the first next junction below and the location of the next junction below */ - RectilinearJunction straighten(const coord_t magnitude, const Point& junction_above, const coord_t accumulated_dist, const coord_t max_remove_colinear_dist2); + RectilinearJunction straighten(const coord_t magnitude, const Point2LL& junction_above, const coord_t accumulated_dist, const coord_t max_remove_colinear_dist2); /*! Prune the tree from the extremeties (leaf-nodes) until the pruning distance is reached. * \return The distance that has been pruned. If less than \p distance, then the whole tree was puned away. @@ -245,7 +245,7 @@ class LightningTreeNode : public std::enable_shared_from_this * * This needs to be known when roots are reconnected, so that the last (higher) layer is supported by the next one. */ - const std::optional& getLastGroundingLocation() const; + const std::optional& getLastGroundingLocation() const; protected: /*! @@ -263,11 +263,11 @@ class LightningTreeNode : public std::enable_shared_from_this void removeJunctionOverlap(Polygons& polylines, const coord_t line_width) const; bool is_root_; - Point p_; + Point2LL p_; std::weak_ptr parent_; std::vector children_; - std::optional last_grounding_location_; // last_grounding_location_; //, 8> children_; //!< pointers to this cube's eight octree children static std::vector cube_properties_per_recursion_step_; //!< precomputed array of basic properties of cubes based on recursion depth. static Ratio radius_multiplier_; //!< multiplier for the bounding radius when determining if a cube should be subdivided diff --git a/include/infill/ZigzagConnectorProcessor.h b/include/infill/ZigzagConnectorProcessor.h index 46761af97a..513ad9d8f1 100644 --- a/include/infill/ZigzagConnectorProcessor.h +++ b/include/infill/ZigzagConnectorProcessor.h @@ -129,7 +129,7 @@ class ZigzagConnectorProcessor * Handle the next vertex on the outer boundary. * \param vertex The vertex */ - virtual void registerVertex(const Point& vertex); + virtual void registerVertex(const Point2LL& vertex); /*! * Handle the next intersection between a scanline and the outer boundary. @@ -137,7 +137,7 @@ class ZigzagConnectorProcessor * \param intersection The intersection * \param scanline_index Index of the current scanline */ - virtual void registerScanlineSegmentIntersection(const Point& intersection, int scanline_index); + virtual void registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index); /*! * Handle the end of a polygon and prepare for the next. @@ -175,7 +175,7 @@ class ZigzagConnectorProcessor * \param first_point The first of the points * \param second_point The second of the points */ - void checkAndAddZagConnectorLine(Point* first_point, Point* second_point); + void checkAndAddZagConnectorLine(Point2LL* first_point, Point2LL* second_point); /*! * Adds a Zag connector represented by the given points. The last line of the connector will not be @@ -184,7 +184,7 @@ class ZigzagConnectorProcessor * \param points All the points on this connector * \param is_endpiece Whether this connector is an end piece */ - void addZagConnector(std::vector& points, bool is_endpiece); + void addZagConnector(std::vector& points, bool is_endpiece); protected: const PointMatrix& rotation_matrix_; //!< The rotation matrix used to enforce the infill angle @@ -205,11 +205,11 @@ class ZigzagConnectorProcessor * * Because the boundary polygon may start in in the middle of a zigzag connector, */ - std::vector first_connector_; + std::vector first_connector_; /*! * The currently built up zigzag connector (not the first/last) or end piece or discarded boundary segment */ - std::vector current_connector_; + std::vector current_connector_; }; // @@ -228,7 +228,7 @@ inline void ZigzagConnectorProcessor::reset() inline void ZigzagConnectorProcessor::addPolyline(PolygonRef polyline) { result_.emplace_back(polyline); - for (Point& p : result_.back()) + for (Point2LL& p : result_.back()) { p = rotation_matrix_.unapply(p); } diff --git a/include/mesh.h b/include/mesh.h index e50b1303a7..17ba1fffcd 100644 --- a/include/mesh.h +++ b/include/mesh.h @@ -18,10 +18,10 @@ Keeps track of which faces connect to it. class MeshVertex { public: - Point3 p_; //!< location of the vertex + Point3LL p_; //!< location of the vertex std::vector connected_faces_; //!< list of the indices of connected faces - MeshVertex(Point3 p) + MeshVertex(Point3LL p) : p_(p) { connected_faces_.reserve(8); @@ -77,12 +77,12 @@ class Mesh Mesh(Settings& parent); Mesh(); - void addFace(Point3& v0, Point3& v1, Point3& v2); //!< add a face to the mesh without settings it's connected_faces. + void addFace(Point3LL& v0, Point3LL& v1, Point3LL& v2); //!< add a face to the mesh without settings it's connected_faces. void clear(); //!< clears all data void finish(); //!< complete the model : set the connected_face_index fields of the faces. - Point3 min() const; //!< min (in x,y and z) vertex of the bounding box - Point3 max() const; //!< max (in x,y and z) vertex of the bounding box + Point3LL min() const; //!< min (in x,y and z) vertex of the bounding box + Point3LL max() const; //!< max (in x,y and z) vertex of the bounding box AABB3D getAABB() const; //!< Get the axis aligned bounding box void expandXY(int64_t offset); //!< Register applied horizontal expansion in the AABB @@ -90,9 +90,9 @@ class Mesh * Offset the whole mesh (all vertices and the bounding box). * \param offset The offset byu which to offset the whole mesh. */ - void translate(Point3 offset) + void translate(Point3LL offset) { - if (offset == Point3(0, 0, 0)) + if (offset == Point3LL(0, 0, 0)) { return; } @@ -126,7 +126,7 @@ class Mesh private: mutable bool has_disconnected_faces; //!< Whether it has been logged that this mesh contains disconnected faces mutable bool has_overlapping_faces; //!< Whether it has been logged that this mesh contains overlapping faces - int findIndexOfVertex(const Point3& v); //!< find index of vertex close to the given point, or create a new vertex and return its index. + int findIndexOfVertex(const Point3LL& v); //!< find index of vertex close to the given point, or create a new vertex and return its index. /*! * Get the index of the face connected to the face with index \p notFaceIdx, via vertices \p idx0 and \p idx1. diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index 49757fbf1a..c766bb0820 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -54,8 +54,8 @@ class Comb { public: bool dest_is_inside_; //!< Whether the startPoint or endPoint is inside the inside boundary - Point in_or_mid_; //!< The point on the inside boundary, or in between the inside and outside boundary if the start/end point isn't inside the inside boudary - Point out_; //!< The point on the outside boundary + Point2LL in_or_mid_; //!< The point on the inside boundary, or in between the inside and outside boundary if the start/end point isn't inside the inside boudary + Point2LL out_; //!< The point on the outside boundary PolygonsPart dest_part_; //!< The assembled inside-boundary PolygonsPart in which the dest_point lies. (will only be initialized when Crossing::dest_is_inside holds) std::optional dest_crossing_poly_; //!< The polygon of the part in which dest_point lies, which will be crossed (often will be the outside polygon) const Polygons& boundary_inside_; //!< The inside boundary as in \ref Comb::boundary_inside @@ -71,7 +71,7 @@ class Comb * outside polygon). \param boundary_inside The boundary within which to comb. */ Crossing( - const Point& dest_point, + const Point2LL& dest_point, const bool dest_is_inside, const unsigned int dest_part_idx, const unsigned int dest_part_boundary_crossing_poly_idx, @@ -84,7 +84,7 @@ class Comb * \param partsView_inside Structured indices onto Comb::boundary_inside which shows which polygons belong to which part. * \param close_to[in] Try to get a crossing close to this point */ - void findCrossingInOrMid(const PartsView& partsView_inside, const Point close_to); + void findCrossingInOrMid(const PartsView& partsView_inside, const Point2LL close_to); /*! * Find the outside location (Combing::out) @@ -98,10 +98,10 @@ class Comb * \param comber[in] The combing calculator which has references to the * offsets and boundaries to use in combing. */ - bool findOutside(const ExtruderTrain& train, const Polygons& outside, const Point close_to, const bool fail_on_unavoidable_obstacles, Comb& comber); + bool findOutside(const ExtruderTrain& train, const Polygons& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber); private: - const Point dest_point_; //!< Either the eventual startPoint or the eventual endPoint of this combing move + const Point2LL dest_point_; //!< Either the eventual startPoint or the eventual endPoint of this combing move unsigned int dest_part_idx_; //!< The index into Comb:partsView_inside of the part in which the \p dest_point is. /*! @@ -117,7 +117,7 @@ class Comb * \return A pair of which the first is the crossing point on the inside boundary and the second the crossing point on the outside boundary */ std::shared_ptr> - findBestCrossing(const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, const Point estimated_start, const Point estimated_end, Comb& comber); + findBestCrossing(const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, const Point2LL estimated_start, const Point2LL estimated_end, Comb& comber); }; @@ -177,7 +177,7 @@ class Comb * \param start_inside_poly[out] The polygon in which the point has been moved * \return Whether we have moved the point inside */ - bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point& dest_point, unsigned int& start_inside_poly); + bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, unsigned int& start_inside_poly); void moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output); @@ -230,8 +230,8 @@ class Comb bool perform_z_hops, bool perform_z_hops_only_when_collides, const ExtruderTrain& train, - Point startPoint, - Point endPoint, + Point2LL startPoint, + Point2LL endPoint, CombPaths& combPaths, bool startInside, bool endInside, diff --git a/include/pathPlanning/CombPath.h b/include/pathPlanning/CombPath.h index fe94109540..b1811352ea 100644 --- a/include/pathPlanning/CombPath.h +++ b/include/pathPlanning/CombPath.h @@ -4,12 +4,12 @@ #ifndef PATH_PLANNING_COMB_PATH_H #define PATH_PLANNING_COMB_PATH_H -#include "../utils/IntPoint.h" +#include "../utils/Point2LL.h" namespace cura { -class CombPath : public std::vector //!< A single path either inside or outise the parts +class CombPath : public std::vector //!< A single path either inside or outise the parts { public: bool cross_boundary = false; //!< Whether the path crosses a boundary. diff --git a/include/pathPlanning/GCodePath.h b/include/pathPlanning/GCodePath.h index da4efd30aa..e94fb8edfc 100644 --- a/include/pathPlanning/GCodePath.h +++ b/include/pathPlanning/GCodePath.h @@ -12,7 +12,7 @@ #include "TimeMaterialEstimates.h" #include "settings/types/Ratio.h" #include "sliceDataStorage.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" namespace cura { @@ -45,7 +45,7 @@ struct GCodePath bool perform_z_hop{ false }; //!< Whether to perform a z_hop in this path, which is assumed to be a travel path. bool perform_prime{ false }; //!< Whether this path is preceded by a prime (blob) bool skip_agressive_merge_hint{ false }; //!< Wheter this path needs to skip merging if any travel paths are in between the extrusions. - std::vector points; //!< The points constituting this path. + std::vector points; //!< The points constituting this path. bool done{ false }; //!< Path is finished, no more moves should be added, and a new path should be started instead of any appending done to this one. double fan_speed{ GCodePathConfig::FAN_SPEED_DEFAULT }; //!< fan speed override for this path, value should be within range 0-100 (inclusive) and ignored otherwise TimeMaterialEstimates estimates{}; //!< Naive time and material estimates diff --git a/include/pathPlanning/LinePolygonsCrossings.h b/include/pathPlanning/LinePolygonsCrossings.h index 5fcea84545..551577ae2e 100644 --- a/include/pathPlanning/LinePolygonsCrossings.h +++ b/include/pathPlanning/LinePolygonsCrossings.h @@ -49,16 +49,16 @@ class LinePolygonsCrossings const Polygons& boundary_; //!< The boundary not to cross during combing. LocToLineGrid& loc_to_line_grid_; //!< Mapping from locations to line segments of \ref LinePolygonsCrossings::boundary - Point start_point_; //!< The start point of the scanline. - Point end_point_; //!< The end point of the scanline. + Point2LL start_point_; //!< The start point of the scanline. + Point2LL end_point_; //!< The end point of the scanline. int64_t dist_to_move_boundary_point_outside_; //!< The distance used to move outside or inside so that a boundary point doesn't intersect with the boundary anymore. Neccesary //!< due to computational rounding problems. Use negative value for insicde combing. PointMatrix transformation_matrix_; //!< The transformation which rotates everything such that the scanline is aligned with the x-axis. - Point transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as + Point2LL transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as //!< transformed_endPoint - Point transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as + Point2LL transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as //!< transformed_startPoint @@ -124,7 +124,7 @@ class LinePolygonsCrossings * \param end the end point * \param dist_to_move_boundary_point_outside Distance used to move a point from a boundary so that it doesn't intersect with it anymore. (Precision issue) */ - LinePolygonsCrossings(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point& start, Point& end, int64_t dist_to_move_boundary_point_outside) + LinePolygonsCrossings(const Polygons& boundary, LocToLineGrid& loc_to_line_grid, Point2LL& start, Point2LL& end, int64_t dist_to_move_boundary_point_outside) : boundary_(boundary) , loc_to_line_grid_(loc_to_line_grid) , start_point_(start) @@ -147,8 +147,8 @@ class LinePolygonsCrossings static bool comb( const Polygons& boundary, LocToLineGrid& loc_to_line_grid, - Point startPoint, - Point endPoint, + Point2LL startPoint, + Point2LL endPoint, CombPath& combPath, int64_t dist_to_move_boundary_point_outside, int64_t max_comb_distance_ignored, diff --git a/include/plugins/slots.h b/include/plugins/slots.h index ed7c91a4e6..c519553114 100644 --- a/include/plugins/slots.h +++ b/include/plugins/slots.h @@ -16,7 +16,7 @@ #include "plugins/slotproxy.h" #include "plugins/types.h" #include "plugins/validator.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/Simplify.h" // TODO: Remove once the simplify slot has been removed #include "utils/polygon.h" #include "utils/types/char_range_literal.h" diff --git a/include/plugins/types.h b/include/plugins/types.h index 1585d5ff47..1a9ab54d59 100644 --- a/include/plugins/types.h +++ b/include/plugins/types.h @@ -5,7 +5,7 @@ #define PLUGINS_TYPES_H #include "cura/plugins/v0/slot_id.pb.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/polygon.h" #include diff --git a/include/settings/ZSeamConfig.h b/include/settings/ZSeamConfig.h index 1086248d59..db1fb49ef9 100644 --- a/include/settings/ZSeamConfig.h +++ b/include/settings/ZSeamConfig.h @@ -4,7 +4,7 @@ #ifndef ZSEAMCONFIG_H #define ZSEAMCONFIG_H -#include "../utils/IntPoint.h" //To store the preferred seam position. +#include "../utils/Point2LL.h" //To store the preferred seam position. #include "EnumSettings.h" //For EZSeamType and EZSeamCornerPrefType. namespace cura @@ -28,7 +28,7 @@ struct ZSeamConfig * When using a user-specified position for the seam, this is the position * that the user specified. */ - Point pos_; + Point2LL pos_; /*! * Corner preference type, if using the sharpest corner strategy. @@ -51,7 +51,7 @@ struct ZSeamConfig */ ZSeamConfig( const EZSeamType type = EZSeamType::SHORTEST, - const Point pos = Point(0, 0), + const Point2LL pos = Point2LL(0, 0), const EZSeamCornerPrefType corner_pref = EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, const coord_t simplify_curvature = 0); }; diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index 6db1cd605a..3442f0b08d 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -18,7 +18,7 @@ #include "settings/types/LayerIndex.h" #include "utils/AABB.h" #include "utils/AABB3D.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/NoCopy.h" #include "utils/polygon.h" @@ -326,7 +326,7 @@ class SliceMeshStorage /*! * \return the mesh's user specified z seam hint */ - Point getZSeamHint() const; + Point2LL getZSeamHint() const; }; /*! @@ -343,7 +343,7 @@ class SliceDataStorage : public NoCopy public: size_t print_layer_count; //!< The total number of layers (except the raft and filler layers) - Point3 model_size, model_min, model_max; + Point3LL model_size, model_min, model_max; AABB3D machine_size; //!< The bounding box with the width, height and depth of the printer. std::vector> meshes; diff --git a/include/slicer.h b/include/slicer.h index 789da58a8c..37cd45f122 100644 --- a/include/slicer.h +++ b/include/slicer.h @@ -25,7 +25,7 @@ class MeshVertex; class SlicerSegment { public: - Point start, end; + Point2LL start, end; int faceIndex = -1; // The index of the other face connected via the edge that created end int endOtherFaceIdx = -1; @@ -115,9 +115,9 @@ class SlicerLayer */ void stitch(Polygons& open_polylines); - std::optional findPolygonGapCloser(Point ip0, Point ip1); + std::optional findPolygonGapCloser(Point2LL ip0, Point2LL ip1); - std::optional findPolygonPointClosestTo(Point input); + std::optional findPolygonPointClosestTo(Point2LL input); /*! * Try to close up polylines into polygons while they have large gaps in them. @@ -513,7 +513,7 @@ class Slicer * \param z The Z coordinate of the layer to intersect with. * \return A slicer segment. */ - static SlicerSegment project2D(const Point3& p0, const Point3& p1, const Point3& p2, const coord_t z); + static SlicerSegment project2D(const Point3LL& p0, const Point3LL& p1, const Point3LL& p2, const coord_t z); /*! Creates an array of "z bounding boxes" for each face. * \param[in] mesh The mesh which is analyzed. diff --git a/include/utils/AABB.h b/include/utils/AABB.h index 988eb3b7ff..b69d8c2c57 100644 --- a/include/utils/AABB.h +++ b/include/utils/AABB.h @@ -4,7 +4,7 @@ #ifndef UTILS_AABB_H #define UTILS_AABB_H -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -17,10 +17,10 @@ class Polygons; class AABB { public: - Point min_, max_; + Point2LL min_, max_; AABB(); //!< initializes with invalid min and max - AABB(const Point& min, const Point& max); //!< initializes with given min and max + AABB(const Point2LL& min, const Point2LL& max); //!< initializes with given min and max AABB(const Polygons& polys); //!< Computes the boundary box for the given polygons AABB(ConstPolygonRef poly); //!< Computes the boundary box for the given polygons @@ -33,7 +33,7 @@ class AABB * \return ``true`` if the bounding box contains the specified point, or * ``false`` otherwise. */ - bool contains(const Point& point) const; + bool contains(const Point2LL& point) const; /*! * Whether this bounding box contains the other bounding box. @@ -49,12 +49,12 @@ class AABB /*! * Get the middle of the bounding box. */ - Point getMiddle() const; + Point2LL getMiddle() const; /*! * If point outside of bounding box: positive distance-squared to the bounding box edges, otherwise negative. */ - coord_t distanceSquared(const Point& p) const; + coord_t distanceSquared(const Point2LL& p) const; /*! * If other aabb outside of this bounding box: positive distance-squared to the bounding box edges, @@ -79,7 +79,7 @@ class AABB * * \param point The point to include in the bounding box. */ - void include(Point point); + void include(Point2LL point); /*! * \brief Includes the specified bounding box in the bounding box. diff --git a/include/utils/AABB3D.h b/include/utils/AABB3D.h index 68911b2f87..48142d24ce 100644 --- a/include/utils/AABB3D.h +++ b/include/utils/AABB3D.h @@ -4,7 +4,7 @@ #ifndef UTILS_AABB3D_H #define UTILS_AABB3D_H -#include "IntPoint.h" +#include "Point2LL.h" #include "utils/AABB.h" namespace cura @@ -15,8 +15,8 @@ An Axis Aligned Bounding Box. Has a min and max vector, representing minimal and */ struct AABB3D { - Point3 min_; //!< The minimal coordinates in x, y and z direction - Point3 max_; //!< The maximal coordinates in x, y and z direction + Point3LL min_; //!< The minimal coordinates in x, y and z direction + Point3LL max_; //!< The maximal coordinates in x, y and z direction /*! * Create an AABB3D with coordinates at the numeric limits. @@ -26,12 +26,12 @@ struct AABB3D /*! * Create an AABB3D with given limits */ - AABB3D(Point3 min, Point3 max); + AABB3D(Point3LL min, Point3LL max); /*! * Get the middle of the bounding box */ - Point3 getMiddle() const; + Point3LL getMiddle() const; /*! * Creates a 2D version of this bounding box by leaving away the Z @@ -56,7 +56,7 @@ struct AABB3D * \param p The point to include with the bounding box. * \return this object (which has changed) */ - AABB3D include(Point3 p); + AABB3D include(Point3LL p); /*! * Expand the AABB3D to include the bounding box \p aabb. @@ -79,14 +79,14 @@ struct AABB3D * \param offset The offset with which to offset the AABB3D. * \return this object (which has changed) */ - AABB3D translate(Point3 offset); + AABB3D translate(Point3LL offset); /*! * Offset the coordinates of the bounding box. * \param offset The offset with which to offset the AABB3D. * \return this object (which has changed) */ - AABB3D translate(Point offset); + AABB3D translate(Point2LL offset); /*! * Offset the bounding box in the horizontal direction; outward or inward. diff --git a/include/utils/ExtrusionJunction.h b/include/utils/ExtrusionJunction.h index 71cd71a636..66cb46c9cc 100644 --- a/include/utils/ExtrusionJunction.h +++ b/include/utils/ExtrusionJunction.h @@ -5,7 +5,7 @@ #ifndef UTILS_EXTRUSION_JUNCTION_H #define UTILS_EXTRUSION_JUNCTION_H -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -22,7 +22,7 @@ struct ExtrusionJunction * The position of the centreline of the path when it reaches this junction. * This is the position that should end up in the g-code eventually. */ - Point p_; + Point2LL p_; /*! * The width of the extruded path at this junction. @@ -37,18 +37,18 @@ struct ExtrusionJunction */ size_t perimeter_index_; - ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index); + ExtrusionJunction(const Point2LL p, const coord_t w, const coord_t perimeter_index); bool operator==(const ExtrusionJunction& other) const; }; -inline Point operator-(const ExtrusionJunction& a, const ExtrusionJunction& b) +inline Point2LL operator-(const ExtrusionJunction& a, const ExtrusionJunction& b) { return a.p_ - b.p_; } // Identity function, used to be able to make templated algorithms that do their operations on 'point-like' input. -inline const Point& make_point(const ExtrusionJunction& ej) +inline const Point2LL& make_point(const ExtrusionJunction& ej) { return ej.p_; } diff --git a/include/utils/ExtrusionSegment.h b/include/utils/ExtrusionSegment.h index 318c2e25cf..99430f8789 100644 --- a/include/utils/ExtrusionSegment.h +++ b/include/utils/ExtrusionSegment.h @@ -8,7 +8,7 @@ #include #include "ExtrusionJunction.h" -#include "IntPoint.h" +#include "Point2LL.h" #include "polygon.h" #include "polygonUtils.h" diff --git a/include/utils/HalfEdge.h b/include/utils/HalfEdge.h index 34df6f2a48..ae8736f589 100644 --- a/include/utils/HalfEdge.h +++ b/include/utils/HalfEdge.h @@ -7,7 +7,7 @@ #include #include -#include "../utils/IntPoint.h" +#include "../utils/Point2LL.h" #include "Coord_t.h" namespace cura diff --git a/include/utils/HalfEdgeNode.h b/include/utils/HalfEdgeNode.h index 3da47ba7fe..163b45d07b 100644 --- a/include/utils/HalfEdgeNode.h +++ b/include/utils/HalfEdgeNode.h @@ -6,7 +6,7 @@ #include -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -19,10 +19,10 @@ class HalfEdgeNode public: node_data_t data_; - Point p_; + Point2LL p_; edge_t* incident_edge_ = nullptr; - HalfEdgeNode(node_data_t data, Point p) + HalfEdgeNode(node_data_t data, Point2LL p) : data_(data) , p_(p) { diff --git a/include/utils/ListPolyIt.h b/include/utils/ListPolyIt.h index 0af99f0e7d..0847305bdf 100644 --- a/include/utils/ListPolyIt.h +++ b/include/utils/ListPolyIt.h @@ -7,7 +7,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "polygon.h" @@ -32,7 +32,7 @@ class ListPolyIt { } - Point& p() const + Point2LL& p() const { return *it_; } @@ -144,7 +144,7 @@ class ListPolyIt * \param to_insert The point to insert into the ListPolygon in between \p before and \p after * \return Iterator to the newly inserted point, or \p before or \p after in case to_insert was already in the polygon */ - static ListPolyIt insertPointNonDuplicate(const ListPolyIt before, const ListPolyIt after, const Point to_insert); + static ListPolyIt insertPointNonDuplicate(const ListPolyIt before, const ListPolyIt after, const Point2LL to_insert); private: ListPolygon* poly_; //!< The polygon @@ -164,7 +164,7 @@ struct hash { size_t operator()(const cura::ListPolyIt& lpi) const { - return std::hash()(lpi.p()); + return std::hash()(lpi.p()); } }; } // namespace std diff --git a/include/utils/Matrix4x3D.h b/include/utils/Matrix4x3D.h index b4b9aed3cc..9945ee9f30 100644 --- a/include/utils/Matrix4x3D.h +++ b/include/utils/Matrix4x3D.h @@ -10,7 +10,7 @@ namespace cura { class Point3D; -class Point3; +class Point3LL; /*! * A 4x3 affine transformation matrix. @@ -28,8 +28,8 @@ class Matrix4x3D * is reduced, all coordinates will go towards this origin. If the scale is * increased, all coordinates will go away from this origin. */ - static Matrix4x3D scale(const Ratio scale, const Point3 origin); - static Matrix4x3D scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin); + static Matrix4x3D scale(const Ratio scale, const Point3LL origin); + static Matrix4x3D scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3LL origin); /*! * The matrix data, row-endian. @@ -51,14 +51,14 @@ class Matrix4x3D * \param p The coordinate to transform. * \return A transformed coordinate. */ - Point3 apply(const Point3D& p) const; + Point3LL apply(const Point3D& p) const; /*! * Apply this transformation to a coordinate. * \param p The coordinate to transform. * \return A transformed coordinate. */ - Point3 apply(const Point3& p) const; + Point3LL apply(const Point3LL& p) const; }; } // namespace cura diff --git a/include/utils/MinimumSpanningTree.h b/include/utils/MinimumSpanningTree.h index a1b7866664..9e0f53d4cf 100644 --- a/include/utils/MinimumSpanningTree.h +++ b/include/utils/MinimumSpanningTree.h @@ -8,7 +8,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -30,40 +30,40 @@ class MinimumSpanningTree /** * The point at which this edge starts. */ - const Point start; + const Point2LL start; /** * The point at which this edge ends. */ - const Point end; + const Point2LL end; }; public: MinimumSpanningTree() = default; /*! * \brief Constructs a minimum spanning tree that spans all given vertices. */ - MinimumSpanningTree(std::vector vertices); + MinimumSpanningTree(std::vector vertices); /*! * \brief Gets the nodes that are adjacent to the specified node. * \return A list of nodes that are adjacent. */ - std::vector adjacentNodes(Point node) const; + std::vector adjacentNodes(Point2LL node) const; /*! * \brief Gets the leaves of the tree. * \return A list of nodes that are all leaves of the tree. */ - std::vector leaves() const; + std::vector leaves() const; /*! * \brief Gets all vertices of the tree. * \return A list of vertices of the tree. */ - std::vector vertices() const; + std::vector vertices() const; private: - using AdjacencyGraph_t = std::unordered_map>; + using AdjacencyGraph_t = std::unordered_map>; AdjacencyGraph_t adjacency_graph; /*! @@ -73,7 +73,7 @@ class MinimumSpanningTree * \param vertices The vertices to span. * \return An adjacency graph with for each point one or more edges. */ - AdjacencyGraph_t prim(std::vector vertices) const; + AdjacencyGraph_t prim(std::vector vertices) const; }; } diff --git a/include/utils/IntPoint.h b/include/utils/Point2LL.h similarity index 68% rename from include/utils/IntPoint.h rename to include/utils/Point2LL.h index 6b35405074..76f8df39b1 100644 --- a/include/utils/IntPoint.h +++ b/include/utils/Point2LL.h @@ -19,7 +19,7 @@ Integer points are used to avoid floating point rounding errors, and because Cli #include #include "../utils/math.h" // for PI. Use relative path to avoid pulling -#include "Point3.h" //For applying Point3Matrices. +#include "Point3LL.h" //For applying Point3Matrices. #ifdef __GNUC__ #define DEPRECATED(func) func __attribute__((deprecated)) @@ -35,67 +35,67 @@ namespace cura { /* 64bit Points are used mostly throughout the code, these are the 2D points from ClipperLib */ -typedef ClipperLib::IntPoint Point; +typedef ClipperLib::IntPoint Point2LL; #define POINT_MIN std::numeric_limits::min() #define POINT_MAX std::numeric_limits::max() -static Point no_point(std::numeric_limits::min(), std::numeric_limits::min()); +static Point2LL no_point(std::numeric_limits::min(), std::numeric_limits::min()); /* Extra operators to make it easier to do math with the 64bit Point objects */ -INLINE Point operator-(const Point& p0) +INLINE Point2LL operator-(const Point2LL& p0) { - return Point(-p0.X, -p0.Y); + return Point2LL(-p0.X, -p0.Y); } -INLINE Point operator+(const Point& p0, const Point& p1) +INLINE Point2LL operator+(const Point2LL& p0, const Point2LL& p1) { - return Point(p0.X + p1.X, p0.Y + p1.Y); + return Point2LL(p0.X + p1.X, p0.Y + p1.Y); } -INLINE Point operator-(const Point& p0, const Point& p1) +INLINE Point2LL operator-(const Point2LL& p0, const Point2LL& p1) { - return Point(p0.X - p1.X, p0.Y - p1.Y); + return Point2LL(p0.X - p1.X, p0.Y - p1.Y); } -INLINE Point operator*(const Point& p0, const coord_t i) +INLINE Point2LL operator*(const Point2LL& p0, const coord_t i) { - return Point(p0.X * i, p0.Y * i); + return Point2LL(p0.X * i, p0.Y * i); } template::value, T>::type> // Use only for numeric types. -INLINE Point operator*(const Point& p0, const T i) +INLINE Point2LL operator*(const Point2LL& p0, const T i) { - return Point(std::llrint(static_cast(p0.X) * i), std::llrint(static_cast(p0.Y) * i)); + return Point2LL(std::llrint(static_cast(p0.X) * i), std::llrint(static_cast(p0.Y) * i)); } template::value, T>::type> // Use only for numeric types. -INLINE Point operator*(const T i, const Point& p0) +INLINE Point2LL operator*(const T i, const Point2LL& p0) { return p0 * i; } -INLINE Point operator/(const Point& p0, const coord_t i) +INLINE Point2LL operator/(const Point2LL& p0, const coord_t i) { - return Point(p0.X / i, p0.Y / i); + return Point2LL(p0.X / i, p0.Y / i); } -INLINE Point operator/(const Point& p0, const Point& p1) +INLINE Point2LL operator/(const Point2LL& p0, const Point2LL& p1) { - return Point(p0.X / p1.X, p0.Y / p1.Y); + return Point2LL(p0.X / p1.X, p0.Y / p1.Y); } -INLINE Point operator%(const Point& p0, const coord_t i) +INLINE Point2LL operator%(const Point2LL& p0, const coord_t i) { - return Point(p0.X % i, p0.Y % i); + return Point2LL(p0.X % i, p0.Y % i); } -INLINE Point& operator+=(Point& p0, const Point& p1) +INLINE Point2LL& operator+=(Point2LL& p0, const Point2LL& p1) { p0.X += p1.X; p0.Y += p1.Y; return p0; } -INLINE Point& operator-=(Point& p0, const Point& p1) +INLINE Point2LL& operator-=(Point2LL& p0, const Point2LL& p1) { p0.X -= p1.X; p0.Y -= p1.Y; return p0; } -INLINE bool operator<(const Point& p0, const Point& p1) +INLINE bool operator<(const Point2LL& p0, const Point2LL& p1) { return p0.X < p1.X || (p0.X == p1.X && p0.Y < p1.Y); } @@ -112,16 +112,16 @@ INLINE bool operator<(const Point& p0, const Point& p1) // INLINE bool operator==(const Point& p0, const Point& p1) { return p0.X==p1.X&&p0.Y==p1.Y; } // INLINE bool operator!=(const Point& p0, const Point& p1) { return p0.X!=p1.X||p0.Y!=p1.Y; } -INLINE coord_t vSize2(const Point& p0) +INLINE coord_t vSize2(const Point2LL& p0) { return p0.X * p0.X + p0.Y * p0.Y; } -INLINE double vSize2f(const Point& p0) +INLINE double vSize2f(const Point2LL& p0) { return static_cast(p0.X) * static_cast(p0.X) + static_cast(p0.Y) * static_cast(p0.Y); } -INLINE bool shorterThen(const Point& p0, const coord_t len) +INLINE bool shorterThen(const Point2LL& p0, const coord_t len) { if (p0.X > len || p0.X < -len) { @@ -134,56 +134,56 @@ INLINE bool shorterThen(const Point& p0, const coord_t len) return vSize2(p0) <= len * len; } -INLINE bool shorterThan(const Point& p0, const coord_t len) +INLINE bool shorterThan(const Point2LL& p0, const coord_t len) { return shorterThen(p0, len); } -INLINE coord_t vSize(const Point& p0) +INLINE coord_t vSize(const Point2LL& p0) { return std::llrint(sqrt(static_cast(vSize2(p0)))); } -INLINE double vSizeMM(const Point& p0) +INLINE double vSizeMM(const Point2LL& p0) { double fx = INT2MM(p0.X); double fy = INT2MM(p0.Y); return sqrt(fx * fx + fy * fy); } -INLINE Point normal(const Point& p0, coord_t len) +INLINE Point2LL normal(const Point2LL& p0, coord_t len) { coord_t _len = vSize(p0); if (_len < 1) - return Point(len, 0); + return Point2LL(len, 0); return p0 * len / _len; } -INLINE Point turn90CCW(const Point& p0) +INLINE Point2LL turn90CCW(const Point2LL& p0) { - return Point(-p0.Y, p0.X); + return Point2LL(-p0.Y, p0.X); } -INLINE Point rotate(const Point& p0, double angle) +INLINE Point2LL rotate(const Point2LL& p0, double angle) { const double cos_component = std::cos(angle); const double sin_component = std::sin(angle); const double x = static_cast(p0.X); const double y = static_cast(p0.Y); - return Point(std::llrint(cos_component * x - sin_component * y), std::llrint(sin_component * x + cos_component * y)); + return Point2LL(std::llrint(cos_component * x - sin_component * y), std::llrint(sin_component * x + cos_component * y)); } -INLINE coord_t dot(const Point& p0, const Point& p1) +INLINE coord_t dot(const Point2LL& p0, const Point2LL& p1) { return p0.X * p1.X + p0.Y * p1.Y; } -INLINE coord_t cross(const Point& p0, const Point& p1) +INLINE coord_t cross(const Point2LL& p0, const Point2LL& p1) { return p0.X * p1.Y - p0.Y * p1.X; } -INLINE int angle(const Point& p) +INLINE int angle(const Point2LL& p) { double angle = std::atan2(p.X, p.Y) / std::numbers::pi * 180.0; if (angle < 0.0) @@ -192,7 +192,7 @@ INLINE int angle(const Point& p) } // Identity function, used to be able to make templated algorithms where the input is sometimes points, sometimes things that contain or can be converted to points. -INLINE const Point& make_point(const Point& p) +INLINE const Point2LL& make_point(const Point2LL& p) { return p; } @@ -202,9 +202,9 @@ INLINE const Point& make_point(const Point& p) namespace std { template<> -struct hash +struct hash { - size_t operator()(const cura::Point& pp) const + size_t operator()(const cura::Point2LL& pp) const { static int prime = 31; int result = 89; @@ -240,7 +240,7 @@ class PointMatrix matrix[3] = matrix[0]; } - PointMatrix(const Point p) + PointMatrix(const Point2LL p) { matrix[0] = static_cast(p.X); matrix[1] = static_cast(p.Y); @@ -259,21 +259,21 @@ class PointMatrix return ret; } - Point apply(const Point p) const + Point2LL apply(const Point2LL p) const { const double x = static_cast(p.X); const double y = static_cast(p.Y); - return Point(std::llrint(x * matrix[0] + y * matrix[1]), std::llrint(x * matrix[2] + y * matrix[3])); + return Point2LL(std::llrint(x * matrix[0] + y * matrix[1]), std::llrint(x * matrix[2] + y * matrix[3])); } /*! * \warning only works on a rotation matrix! Output is incorrect for other types of matrix */ - Point unapply(const Point p) const + Point2LL unapply(const Point2LL p) const { const double x = static_cast(p.X); const double y = static_cast(p.Y); - return Point(std::llrint(x * matrix[0] + y * matrix[2]), std::llrint(x * matrix[1] + y * matrix[3])); + return Point2LL(std::llrint(x * matrix[0] + y * matrix[2]), std::llrint(x * matrix[1] + y * matrix[3])); } PointMatrix inverse() const @@ -323,12 +323,12 @@ class Point3Matrix matrix[8] = 1; } - Point3 apply(const Point3 p) const + Point3LL apply(const Point3LL p) const { const double x = static_cast(p.x_); const double y = static_cast(p.y_); const double z = static_cast(p.z_); - return Point3( + return Point3LL( std::llrint(x * matrix[0] + y * matrix[1] + z * matrix[2]), std::llrint(x * matrix[3] + y * matrix[4] + z * matrix[5]), std::llrint(x * matrix[6] + y * matrix[7] + z * matrix[8])); @@ -337,13 +337,13 @@ class Point3Matrix /*! * Apply matrix to vector as homogeneous coordinates. */ - Point apply(const Point p) const + Point2LL apply(const Point2LL p) const { - Point3 result = apply(Point3(p.X, p.Y, 1)); - return Point(result.x_ / result.z_, result.y_ / result.z_); + Point3LL result = apply(Point3LL(p.X, p.Y, 1)); + return Point2LL(result.x_ / result.z_, result.y_ / result.z_); } - static Point3Matrix translate(const Point p) + static Point3Matrix translate(const Point2LL p) { Point3Matrix ret; // uniform matrix ret.matrix[2] = static_cast(p.X); @@ -370,37 +370,37 @@ class Point3Matrix }; -inline Point3 operator+(const Point3& p3, const Point& p2) +inline Point3LL operator+(const Point3LL& p3, const Point2LL& p2) { - return Point3(p3.x_ + p2.X, p3.y_ + p2.Y, p3.z_); + return Point3LL(p3.x_ + p2.X, p3.y_ + p2.Y, p3.z_); } -inline Point3& operator+=(Point3& p3, const Point& p2) +inline Point3LL& operator+=(Point3LL& p3, const Point2LL& p2) { p3.x_ += p2.X; p3.y_ += p2.Y; return p3; } -inline Point operator+(const Point& p2, const Point3& p3) +inline Point2LL operator+(const Point2LL& p2, const Point3LL& p3) { - return Point(p3.x_ + p2.X, p3.y_ + p2.Y); + return Point2LL(p3.x_ + p2.X, p3.y_ + p2.Y); } -inline Point3 operator-(const Point3& p3, const Point& p2) +inline Point3LL operator-(const Point3LL& p3, const Point2LL& p2) { - return Point3(p3.x_ - p2.X, p3.y_ - p2.Y, p3.z_); + return Point3LL(p3.x_ - p2.X, p3.y_ - p2.Y, p3.z_); } -inline Point3& operator-=(Point3& p3, const Point& p2) +inline Point3LL& operator-=(Point3LL& p3, const Point2LL& p2) { p3.x_ -= p2.X; p3.y_ -= p2.Y; return p3; } -inline Point operator-(const Point& p2, const Point3& p3) +inline Point2LL operator-(const Point2LL& p2, const Point3LL& p3) { - return Point(p2.X - p3.x_, p2.Y - p3.y_); + return Point2LL(p2.X - p3.x_, p2.Y - p3.y_); } } // namespace cura diff --git a/include/utils/Point3D.h b/include/utils/Point3D.h index c44f6e79e6..8405d03c4d 100644 --- a/include/utils/Point3D.h +++ b/include/utils/Point3D.h @@ -7,7 +7,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" namespace cura @@ -33,7 +33,7 @@ class Point3D { } - Point3D(const Point3& p) + Point3D(const Point3LL& p) : x_(static_cast(p.x_) * .001) , y_(static_cast(p.y_) * .001) , z_(static_cast(p.z_) * .001) @@ -122,14 +122,14 @@ class Point3D return Point3D(y_ * p.z_ - z_ * p.y_, z_ * p.x_ - x_ * p.z_, x_ * p.y_ - y_ * p.x_); } - static Point3D cross(const Point3& a, const Point3& b) + static Point3D cross(const Point3LL& a, const Point3LL& b) { return Point3D(a).cross(Point3D(b)); } - Point3 toPoint3() + Point3LL toPoint3() { - return Point3(MM2INT(x_), MM2INT(y_), MM2INT(z_)); + return Point3LL(MM2INT(x_), MM2INT(y_), MM2INT(z_)); } }; diff --git a/include/utils/Point3F.h b/include/utils/Point3F.h index 0772521240..44262ad2b0 100644 --- a/include/utils/Point3F.h +++ b/include/utils/Point3F.h @@ -7,7 +7,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "Point3D.h" diff --git a/include/utils/Point3.h b/include/utils/Point3LL.h similarity index 68% rename from include/utils/Point3.h rename to include/utils/Point3LL.h index 54c3819e22..c992bcb3d5 100644 --- a/include/utils/Point3.h +++ b/include/utils/Point3LL.h @@ -17,47 +17,47 @@ namespace cura { -class Point3 +class Point3LL { public: coord_t x_, y_, z_; - Point3() + Point3LL() { } - Point3(const coord_t x, const coord_t y, const coord_t z) + Point3LL(const coord_t x, const coord_t y, const coord_t z) : x_(x) , y_(y) , z_(z) { } - Point3 operator+(const Point3& p) const; - Point3 operator-() const; - Point3 operator-(const Point3& p) const; - Point3 operator*(const Point3& p) const; //!< Element-wise multiplication. For dot product, use .dot()! - Point3 operator/(const Point3& p) const; + Point3LL operator+(const Point3LL& p) const; + Point3LL operator-() const; + Point3LL operator-(const Point3LL& p) const; + Point3LL operator*(const Point3LL& p) const; //!< Element-wise multiplication. For dot product, use .dot()! + Point3LL operator/(const Point3LL& p) const; template::value, num_t>::type> - Point3 operator*(const num_t i) const + Point3LL operator*(const num_t i) const { - return Point3(std::llround(static_cast(x_) * i), std::llround(static_cast(y_) * i), std::llround(static_cast(z_) * i)); + return Point3LL(std::llround(static_cast(x_) * i), std::llround(static_cast(y_) * i), std::llround(static_cast(z_) * i)); } template::value, num_t>::type> - Point3 operator/(const num_t i) const + Point3LL operator/(const num_t i) const { - return Point3(x_ / i, y_ / i, z_ / i); + return Point3LL(x_ / i, y_ / i, z_ / i); } template::value, num_t>::type> - Point3 operator%(const num_t i) const + Point3LL operator%(const num_t i) const { - return Point3(x_ % i, y_ % i, z_ % i); + return Point3LL(x_ % i, y_ % i, z_ % i); } - Point3& operator+=(const Point3& p); - Point3& operator-=(const Point3& p); - Point3& operator*=(const Point3& p); - Point3& operator/=(const Point3& p); + Point3LL& operator+=(const Point3LL& p); + Point3LL& operator-=(const Point3LL& p); + Point3LL& operator*=(const Point3LL& p); + Point3LL& operator/=(const Point3LL& p); template::value, num_t>::type> - Point3& operator*=(const num_t i) + Point3LL& operator*=(const num_t i) { x_ *= i; y_ *= i; @@ -65,7 +65,7 @@ class Point3 return *this; } template::value, num_t>::type> - Point3& operator/=(const num_t i) + Point3LL& operator/=(const num_t i) { x_ /= i; y_ /= i; @@ -73,12 +73,12 @@ class Point3 return *this; } - bool operator==(const Point3& p) const; - bool operator!=(const Point3& p) const; + bool operator==(const Point3LL& p) const; + bool operator!=(const Point3LL& p) const; template - friend std::basic_ostream& operator<<(std::basic_ostream& os, const Point3& p) + friend std::basic_ostream& operator<<(std::basic_ostream& os, const Point3LL& p) { return os << "(" << p.x_ << ", " << p.y_ << ", " << p.z_ << ")"; } @@ -122,7 +122,7 @@ class Point3 return sqrt(fx * fx + fy * fy + fz * fz); } - coord_t dot(const Point3& p) const + coord_t dot(const Point3LL& p) const { return x_ * p.x_ + y_ * p.y_ + z_ * p.z_; } @@ -142,7 +142,7 @@ class Point3 } const coord_t& operator[](const size_t index) const { - return const_cast(this)->operator[](index); + return const_cast(this)->operator[](index); } }; @@ -151,10 +151,10 @@ class Point3 * * Its value is something that is rarely used. */ -static Point3 no_point3(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); +static Point3LL no_point3(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); template::value, num_t>::type> -inline Point3 operator*(const num_t i, const Point3& rhs) +inline Point3LL operator*(const num_t i, const Point3LL& rhs) { return rhs * i; } @@ -165,9 +165,9 @@ inline Point3 operator*(const num_t i, const Point3& rhs) namespace std { template<> -struct hash +struct hash { - size_t operator()(const cura::Point3& pp) const + size_t operator()(const cura::Point3LL& pp) const { static int prime = 31; int result = 89; diff --git a/include/utils/PolygonConnector.h b/include/utils/PolygonConnector.h index 325613bb31..3dc7b75dec 100644 --- a/include/utils/PolygonConnector.h +++ b/include/utils/PolygonConnector.h @@ -9,7 +9,7 @@ #endif #include -#include "IntPoint.h" +#include "Point2LL.h" #include "linearAlg2D.h" #include "polygon.h" #include "polygonUtils.h" @@ -134,7 +134,7 @@ class PolygonConnector /*! * The precise location of the source of the connection. */ - Point from_point_; + Point2LL from_point_; /*! * The polygon at the destination of the connection. @@ -151,7 +151,7 @@ class PolygonConnector /*! * The precise location of the destination of the connection. */ - Point to_point_; + Point2LL to_point_; /*! * Create a new connection. @@ -166,7 +166,7 @@ class PolygonConnector * \param to_point The precise location at the destination of the * connection. */ - PolygonConnection(Polygonal* from_poly, const size_t from_segment, const Point from_point, Polygonal* to_poly, const size_t to_segment, const Point to_point) + PolygonConnection(Polygonal* from_poly, const size_t from_segment, const Point2LL from_point, Polygonal* to_poly, const size_t to_segment, const Point2LL to_point) : from_poly_(from_poly) , from_segment_(from_segment) , from_point_(from_point) @@ -263,7 +263,7 @@ class PolygonConnector * \param vertex The vertex to get the position of. * \return The position of that vertex. */ - Point getPosition(const Point& vertex) const; + Point2LL getPosition(const Point2LL& vertex) const; /*! * Get the position of a vertex, if the vertex is a junction. @@ -272,7 +272,7 @@ class PolygonConnector * \param vertex The vertex to get the position of. * \return The position of that vertex. */ - Point getPosition(const ExtrusionJunction& vertex) const; + Point2LL getPosition(const ExtrusionJunction& vertex) const; /*! * Get the width at a certain vertex. @@ -282,7 +282,7 @@ class PolygonConnector * \param vertex The vertex to get the width of. * \return The line width of the polygon. */ - coord_t getWidth(const Point& vertex) const; + coord_t getWidth(const Point2LL& vertex) const; /*! * Get the width at a certain junction. @@ -302,7 +302,7 @@ class PolygonConnector * \param position The position of the vertex to add. * \param width The width of the vertex to add, ignored in this overload. */ - void addVertex(Polygon& polygonal, const Point& position, const coord_t width) const; + void addVertex(Polygon& polygonal, const Point2LL& position, const coord_t width) const; /*! * Add a vertex at the end of the polygonal object. @@ -311,7 +311,7 @@ class PolygonConnector * \param polygonal The polygon to add a vertex to. * \param vertex The vertex to add. */ - void addVertex(Polygon& polygonal, const Point& vertex) const; + void addVertex(Polygon& polygonal, const Point2LL& vertex) const; /*! * Add a vertex at the end of the polygonal object. @@ -321,7 +321,7 @@ class PolygonConnector * \param position The position of the vertex to add. * \param width The width of the vertex to add. */ - void addVertex(ExtrusionLine& polygonal, const Point& position, const coord_t width) const; + void addVertex(ExtrusionLine& polygonal, const Point2LL& position, const coord_t width) const; /*! * Add a vertex at the end of the polygonal object. @@ -396,7 +396,7 @@ class PolygonConnector * \param b The other vertex between which to interpolate. */ template - coord_t interpolateWidth(const Point position, Vertex a, Vertex b) const + coord_t interpolateWidth(const Point2LL position, Vertex a, Vertex b) const { const coord_t total_length = vSize(getPosition(a) - getPosition(b)); if (total_length == 0) // Prevent division by 0 when the vertices are on top of each other. @@ -428,17 +428,17 @@ class PolygonConnector } for (size_t to_index = 0; to_index < to_polygons[poly_index].size(); ++to_index) { - const Point to_pos1 = getPosition(to_polygons[poly_index][to_index]); + const Point2LL to_pos1 = getPosition(to_polygons[poly_index][to_index]); const coord_t to_width1 = getWidth(to_polygons[poly_index][to_index]); - const Point to_pos2 = getPosition(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); + const Point2LL to_pos2 = getPosition(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); const coord_t to_width2 = getWidth(to_polygons[poly_index][(to_index + 1) % to_polygons[poly_index].size()]); const coord_t smallest_to_width = std::min(to_width1, to_width2); for (size_t from_index = 0; from_index < from_poly.size(); ++from_index) { - const Point from_pos1 = getPosition(from_poly[from_index]); + const Point2LL from_pos1 = getPosition(from_poly[from_index]); const coord_t from_width1 = getWidth(from_poly[from_index]); - const Point from_pos2 = getPosition(from_poly[(from_index + 1) % from_poly.size()]); + const Point2LL from_pos2 = getPosition(from_poly[(from_index + 1) % from_poly.size()]); const coord_t from_width2 = getWidth(from_poly[(from_index + 1) % from_poly.size()]); const coord_t smallest_from_width = std::min(from_width1, from_width2); @@ -446,7 +446,7 @@ class PolygonConnector coord_t naive_dist = LinearAlg2D::getDistFromLine(from_pos1, to_pos1, to_pos2); if (naive_dist - from_width1 - smallest_to_width < line_width_ * max_gap_) { - const Point closest_point = LinearAlg2D::getClosestOnLineSegment(from_pos1, to_pos1, to_pos2); + const Point2LL closest_point = LinearAlg2D::getClosestOnLineSegment(from_pos1, to_pos1, to_pos2); if (closest_point == to_pos2) // The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. { continue; @@ -472,7 +472,7 @@ class PolygonConnector naive_dist = LinearAlg2D::getDistFromLine(to_pos1, from_pos1, from_pos2); if (naive_dist - smallest_from_width - to_width1 < line_width_ * max_gap_) { - const Point closest_point = LinearAlg2D::getClosestOnLineSegment(to_pos1, from_pos1, from_pos2); + const Point2LL closest_point = LinearAlg2D::getClosestOnLineSegment(to_pos1, from_pos1, from_pos2); if (closest_point == from_pos2) // The last endpoint of a vertex is considered to be part of the next segment. Let that one handle it. { continue; @@ -558,8 +558,8 @@ class PolygonConnector * ``std::nullopt``. */ template - std::optional> - walkUntilDistanceFromLine(const Polygonal& poly, const size_t start_index, const coord_t distance, const Point& line_a, const Point& line_b, const short direction) + std::optional> + walkUntilDistanceFromLine(const Polygonal& poly, const size_t start_index, const coord_t distance, const Point2LL& line_a, const Point2LL& line_b, const short direction) { const size_t poly_size = poly.size(); const coord_t line_magnitude = vSize(line_b - line_a); // Pre-compute, used for line distance calculation. @@ -570,13 +570,13 @@ class PolygonConnector for (size_t index = (start_index + direction + poly_size) % poly_size; index != start_index; index = (index + direction + poly_size) % poly_size) { - const Point vertex_pos = getPosition(poly[index]); + const Point2LL vertex_pos = getPosition(poly[index]); const coord_t vertex_distance = cross(line_a - line_b, line_a - vertex_pos) / line_magnitude; // Signed distance! if (std::abs(vertex_distance) >= distance) // Further away from the line than the threshold. { // Interpolate over that last line segment to find the point at exactly the right distance. const size_t previous_index = (index - direction + poly_size) % poly_size; - const Point previous_pos = getPosition(poly[previous_index]); + const Point2LL previous_pos = getPosition(poly[previous_index]); const coord_t previous_distance = cross(line_a - line_b, line_a - previous_pos) / line_magnitude; if (previous_distance == vertex_distance) // 0-length line segment, or parallel to line. { @@ -597,7 +597,7 @@ class PolygonConnector { continue; } - const Point interpolated_point = previous_pos + (vertex_pos - previous_pos) * interpolation; + const Point2LL interpolated_point = previous_pos + (vertex_pos - previous_pos) * interpolation; return std::make_pair(interpolated_point, (direction == +1) ? previous_index : index); // Choose the "earlier" index of the two, regardless of direction. } } @@ -622,16 +622,16 @@ class PolygonConnector coord_t best_connection_length = std::numeric_limits::max(); // Find the four intersections, on both sides of the initial connection, and on both polygons. - std::optional> from_forward_intersection + std::optional> from_forward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); - std::optional> from_backward_intersection + std::optional> from_backward_intersection = walkUntilDistanceFromLine(*first.from_poly_, first.from_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); - std::optional> to_forward_intersection + std::optional> to_forward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, +1); - std::optional> to_backward_intersection + std::optional> to_backward_intersection = walkUntilDistanceFromLine(*first.to_poly_, first.to_segment_, adjacent_distance, first.from_point_, first.to_point_, -1); - for (const std::optional>& from_intersection : { from_forward_intersection, from_backward_intersection }) + for (const std::optional>& from_intersection : { from_forward_intersection, from_backward_intersection }) { if (! from_intersection) { @@ -639,7 +639,7 @@ class PolygonConnector } // Find the shortest of the connections in the to_poly. const bool original_side = LinearAlg2D::pointIsLeftOfLine(first.to_point_, first.from_point_, from_intersection->first) > 0; - for (const std::optional>& to_intersection : { to_forward_intersection, to_backward_intersection }) + for (const std::optional>& to_intersection : { to_forward_intersection, to_backward_intersection }) { if (! to_intersection) { @@ -689,10 +689,10 @@ class PolygonConnector short forwards; if (bridge.a_.from_segment_ == bridge.b_.from_segment_) // If we start and end on the same segment, iterate in the direction from A to B. { - const Point vertex = getPosition((*bridge.b_.from_poly_)[bridge.b_.from_segment_]); // Same vertex for A and B. - const Point next_vertex = getPosition((*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); - const Point direction = next_vertex - vertex; // Direction we'd go into when forward iterating. - const Point a_to_b = bridge.b_.from_point_ - bridge.a_.from_point_; + const Point2LL vertex = getPosition((*bridge.b_.from_poly_)[bridge.b_.from_segment_]); // Same vertex for A and B. + const Point2LL next_vertex = getPosition((*bridge.b_.from_poly_)[(bridge.b_.from_segment_ + 1) % from_size]); + const Point2LL direction = next_vertex - vertex; // Direction we'd go into when forward iterating. + const Point2LL a_to_b = bridge.b_.from_point_ - bridge.a_.from_point_; forwards = vSize2(direction - a_to_b) < vSize2(-direction - a_to_b); } else @@ -726,10 +726,10 @@ class PolygonConnector // Add the to_polygonal from A to B. if (bridge.a_.to_segment_ == bridge.b_.to_segment_) { - const Point vertex = getPosition((*bridge.b_.to_poly_)[bridge.b_.to_segment_]); // Same vertex for A and B. - const Point next_vertex = getPosition((*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); - const Point direction = next_vertex - vertex; - const Point a_to_b = bridge.b_.to_point_ - bridge.a_.to_point_; + const Point2LL vertex = getPosition((*bridge.b_.to_poly_)[bridge.b_.to_segment_]); // Same vertex for A and B. + const Point2LL next_vertex = getPosition((*bridge.b_.to_poly_)[(bridge.b_.to_segment_ + 1) % to_size]); + const Point2LL direction = next_vertex - vertex; + const Point2LL a_to_b = bridge.b_.to_point_ - bridge.a_.to_point_; forwards = vSize2(direction - a_to_b) > vSize2(-direction - a_to_b); } else diff --git a/include/utils/PolygonsPointIndex.h b/include/utils/PolygonsPointIndex.h index a72a33af2c..1b973f94da 100644 --- a/include/utils/PolygonsPointIndex.h +++ b/include/utils/PolygonsPointIndex.h @@ -6,7 +6,7 @@ #include -#include "IntPoint.h" +#include "Point2LL.h" #include "polygon.h" @@ -59,11 +59,11 @@ class PathsPointIndex */ PathsPointIndex(const PathsPointIndex& original) = default; - Point p() const + Point2LL p() const { if (! polygons_) { - return Point(0, 0); + return Point2LL(0, 0); } return make_point((*polygons_)[poly_idx_][point_idx_]); } @@ -153,13 +153,13 @@ using PolygonsPointIndex = PathsPointIndex; */ struct PolygonsPointIndexSegmentLocator { - std::pair operator()(const PolygonsPointIndex& val) const + std::pair operator()(const PolygonsPointIndex& val) const { ConstPolygonRef poly = (*val.polygons_)[val.poly_idx_]; - Point start = poly[val.point_idx_]; + Point2LL start = poly[val.point_idx_]; unsigned int next_point_idx = (val.point_idx_ + 1) % poly.size(); - Point end = poly[next_point_idx]; - return std::pair(start, end); + Point2LL end = poly[next_point_idx]; + return std::pair(start, end); } }; @@ -170,7 +170,7 @@ struct PolygonsPointIndexSegmentLocator template struct PathsPointIndexLocator { - Point operator()(const PathsPointIndex& val) const + Point2LL operator()(const PathsPointIndex& val) const { return make_point(val.p()); } @@ -190,7 +190,7 @@ struct hash { size_t operator()(const cura::PolygonsPointIndex& lpi) const { - return std::hash()(lpi.p()); + return std::hash()(lpi.p()); } }; } // namespace std diff --git a/include/utils/PolygonsSegmentIndex.h b/include/utils/PolygonsSegmentIndex.h index 8f0e0e2d23..b5462a7a16 100644 --- a/include/utils/PolygonsSegmentIndex.h +++ b/include/utils/PolygonsSegmentIndex.h @@ -20,9 +20,9 @@ class PolygonsSegmentIndex : public PolygonsPointIndex PolygonsSegmentIndex(); PolygonsSegmentIndex(const Polygons* polygons, unsigned int poly_idx, unsigned int point_idx); - Point from() const; + Point2LL from() const; - Point to() const; + Point2LL to() const; }; diff --git a/include/utils/PolylineStitcher.h b/include/utils/PolylineStitcher.h index 2942a0840e..7d608f1ee7 100644 --- a/include/utils/PolylineStitcher.h +++ b/include/utils/PolylineStitcher.h @@ -93,7 +93,7 @@ class PolylineStitcher while (true) { - Point from = make_point(chain.back()); + Point2LL from = make_point(chain.back()); PathsPointIndex closest; coord_t closest_distance = std::numeric_limits::max(); diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 8fda644264..82646e1df6 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -8,7 +8,7 @@ #include "AABB.h" #include "ExtrusionLine.h" //To accept variable-width paths. -#include "IntPoint.h" +#include "Point2LL.h" #include "NoCopy.h" namespace cura @@ -62,8 +62,8 @@ class SVG : NoCopy FILE* out_; // the output file const AABB aabb_; // the boundary box to display - const Point aabb_size_; - const Point canvas_size_; + const Point2LL aabb_size_; + const Point2LL canvas_size_; const double scale_; ColorObject background_; size_t layer_nr_ = 1; @@ -71,9 +71,9 @@ class SVG : NoCopy bool output_is_html_; public: - SVG(std::string filename, const AABB aabb, const Point canvas_size = Point(1024, 1024), const ColorObject background = Color::NONE); + SVG(std::string filename, const AABB aabb, const Point2LL canvas_size = Point2LL(1024, 1024), const ColorObject background = Color::NONE); SVG(std::string filename, const AABB aabb, const double scale, const ColorObject background = Color::NONE); - SVG(std::string filename, const AABB aabb, const double scale, const Point canvas_size, const ColorObject background = Color::NONE); + SVG(std::string filename, const AABB aabb, const double scale, const Point2LL canvas_size, const ColorObject background = Color::NONE); ~SVG(); @@ -87,12 +87,12 @@ class SVG : NoCopy /*! * transform a point in real space to canvas space */ - Point transform(const Point& p) const; + Point2LL transform(const Point2LL& p) const; /*! * transform a point in real space to canvas space with more precision */ - Point3D transformF(const Point& p) const; + Point3D transformF(const Point2LL& p) const; void writeComment(const std::string& comment) const; @@ -100,7 +100,7 @@ class SVG : NoCopy void writeAreas(ConstPolygonRef polygon, const ColorObject color = Color::GRAY, const ColorObject outline_color = Color::BLACK, const double stroke_width = 1.0) const; - void writePoint(const Point& p, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; + void writePoint(const Point2LL& p, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; void writePoints(ConstPolygonRef poly, const bool write_coords = false, const double size = 5.0, const ColorObject color = Color::BLACK) const; @@ -117,13 +117,13 @@ class SVG : NoCopy * \param color The colour of the line segments. If this is not specified, * black will be used. */ - void writeLines(const std::vector& polyline, const ColorObject color = Color::BLACK) const; + void writeLines(const std::vector& polyline, const ColorObject color = Color::BLACK) const; - void writeLine(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; + void writeLine(const Point2LL& a, const Point2LL& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; - void writeArrow(const Point& a, const Point& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0, const double head_size = 5.0) const; + void writeArrow(const Point2LL& a, const Point2LL& b, const ColorObject color = Color::BLACK, const double stroke_width = 1.0, const double head_size = 5.0) const; - void writeLineRGB(const Point& from, const Point& to, const int r = 0, const int g = 0, const int b = 0, const double stroke_width = 1.0) const; + void writeLineRGB(const Point2LL& from, const Point2LL& to, const int r = 0, const int g = 0, const int b = 0, const double stroke_width = 1.0) const; /*! * \brief Draws a dashed line on the canvas from point A to point B. @@ -134,12 +134,12 @@ class SVG : NoCopy * \param b The ending endpoint of the line. * \param color The stroke colour of the line. */ - void writeDashedLine(const Point& a, const Point& b, ColorObject color = Color::BLACK) const; + void writeDashedLine(const Point2LL& a, const Point2LL& b, ColorObject color = Color::BLACK) const; template void printf(const char* txt, Args&&... args) const; - void writeText(const Point& p, const std::string& txt, const ColorObject color = Color::BLACK, const double font_size = 10.0) const; + void writeText(const Point2LL& p, const std::string& txt, const ColorObject color = Color::BLACK, const double font_size = 10.0) const; void writePolygons(const Polygons& polys, const ColorObject color = Color::BLACK, const double stroke_width = 1.0) const; diff --git a/include/utils/Simplify.h b/include/utils/Simplify.h index e1cacd9a8f..91c0eeca61 100644 --- a/include/utils/Simplify.h +++ b/include/utils/Simplify.h @@ -240,7 +240,7 @@ class Simplify } // From here on out we can safely look at the vertex neighbors and assume it's a polygon. We won't go out of bounds of the polyline. - const Point& vertex = getPosition(polygon[index]); + const Point2LL& vertex = getPosition(polygon[index]); const size_t before_index = previousNotDeleted(index, to_delete); const size_t after_index = nextNotDeleted(index, to_delete); @@ -250,8 +250,8 @@ class Simplify return std::numeric_limits::max(); } - const Point& before = getPosition(polygon[before_index]); - const Point& after = getPosition(polygon[after_index]); + const Point2LL& before = getPosition(polygon[before_index]); + const Point2LL& after = getPosition(polygon[after_index]); const coord_t deviation2 = LinearAlg2D::getDist2FromLine(vertex, before, after); if (deviation2 <= min_resolution * min_resolution) // Deviation so small that it's always desired to remove them. { @@ -293,9 +293,9 @@ class Simplify const size_t before = previousNotDeleted(vertex, to_delete); const size_t after = nextNotDeleted(vertex, to_delete); - const Point& vertex_position = getPosition(polygon[vertex]); - const Point& before_position = getPosition(polygon[before]); - const Point& after_position = getPosition(polygon[after]); + const Point2LL& vertex_position = getPosition(polygon[vertex]); + const Point2LL& before_position = getPosition(polygon[before]); + const Point2LL& after_position = getPosition(polygon[after]); const coord_t length2_before = vSize2(vertex_position - before_position); const coord_t length2_after = vSize2(vertex_position - after_position); @@ -309,7 +309,7 @@ class Simplify // Otherwise, one edge next to this vertex is longer than max_resolution. The other is shorter. // In this case we want to remove the short edge by replacing it with a vertex where the two surrounding edges intersect. // Find the two line segments surrounding the short edge here ("before" and "after" edges). - Point before_from, before_to, after_from, after_to; + Point2LL before_from, before_to, after_from, after_to; if (length2_before <= length2_after) // Before is the shorter line. { if (! is_closed && before == 0) // No edge before the short edge. @@ -334,7 +334,7 @@ class Simplify after_from = getPosition(polygon[after]); after_to = getPosition(polygon[after_after]); } - Point intersection; + Point2LL intersection; const bool did_intersect = LinearAlg2D::lineLineIntersection(before_from, before_to, after_from, after_to, intersection); if (! did_intersect) // Lines are parallel. { @@ -399,7 +399,7 @@ class Simplify * \param polygon The polygon to add to. * \param vertex The vertex to add. */ - void appendVertex(Polygon& polygon, const Point& vertex) const; + void appendVertex(Polygon& polygon, const Point2LL& vertex) const; /*! * Append a vertex to this extrusion line. @@ -418,7 +418,7 @@ class Simplify * \param vertex A vertex to get the coordinates of. * \return The coordinates of that vertex. */ - const Point& getPosition(const Point& vertex) const; + const Point2LL& getPosition(const Point2LL& vertex) const; /*! * Get the coordinates of a vertex. @@ -427,7 +427,7 @@ class Simplify * \param vertex A vertex to get the coordinates of. * \return The coordinates of that vertex. */ - const Point& getPosition(const ExtrusionJunction& vertex) const; + const Point2LL& getPosition(const ExtrusionJunction& vertex) const; /*! * Create an intersection vertex that can be placed in a polygon. @@ -437,7 +437,7 @@ class Simplify * \param after One of the vertices of a removed edge. Unused in this * overload. */ - Point createIntersection(const Point& before, const Point intersection, const Point& after) const; + Point2LL createIntersection(const Point2LL& before, const Point2LL intersection, const Point2LL& after) const; /*! * Create an intersection vertex that can be placed in an ExtrusionLine. @@ -447,7 +447,7 @@ class Simplify * \param after One of the vertices of the edge that gets replaced by an * intersection vertex. */ - ExtrusionJunction createIntersection(const ExtrusionJunction& before, const Point intersection, const ExtrusionJunction& after) const; + ExtrusionJunction createIntersection(const ExtrusionJunction& before, const Point2LL intersection, const ExtrusionJunction& after) const; /*! * Get the extrusion area deviation that would be caused by removing this @@ -460,7 +460,7 @@ class Simplify * \param after The vertex after the one that is to be removed. * \return The area deviation that would be caused by removing the vertex. */ - coord_t getAreaDeviation(const Point& before, const Point& vertex, const Point& after) const; + coord_t getAreaDeviation(const Point2LL& before, const Point2LL& vertex, const Point2LL& after) const; /*! * Get the extrusion area deviation that would be caused by removing this diff --git a/include/utils/SparseGrid.h b/include/utils/SparseGrid.h index 3e403a7266..11b0708942 100644 --- a/include/utils/SparseGrid.h +++ b/include/utils/SparseGrid.h @@ -10,7 +10,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "SquareGrid.h" namespace cura @@ -80,7 +80,7 @@ class SparseGrid : public SquareGrid * \param[in] radius The search radius. * \return Vector of elements found */ - std::vector getNearby(const Point& query_pt, coord_t radius) const; + std::vector getNearby(const Point2LL& query_pt, coord_t radius) const; static const std::function no_precondition; @@ -94,7 +94,7 @@ class SparseGrid : public SquareGrid * to be considered for output * \return True if and only if an object has been found within the radius. */ - bool getNearest(const Point& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition = no_precondition) const; + bool getNearest(const Point2LL& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition = no_precondition) const; /*! \brief Process elements from cells that might contain sought after points. * @@ -109,7 +109,7 @@ class SparseGrid : public SquareGrid * called for each element in the cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function */ - bool processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const; + bool processNearby(const Point2LL& query_pt, coord_t radius, const std::function& process_func) const; /*! \brief Process elements from cells that might contain sought after points along a line. * @@ -121,7 +121,7 @@ class SparseGrid : public SquareGrid * called for each element in the cells. Processing stops if function returns false. * \return Whether we need to continue processing after this function */ - bool processLine(const std::pair query_line, const std::function& process_elem_func) const; + bool processLine(const std::pair query_line, const std::function& process_elem_func) const; protected: /*! \brief Process elements from the cell indicated by \p grid_pt. @@ -168,7 +168,7 @@ bool SGI_THIS::processFromCell(const GridPoint& grid_pt, const std::function& process_func) const +bool SGI_THIS::processNearby(const Point2LL& query_pt, coord_t radius, const std::function& process_func) const { return SquareGrid::processNearby( query_pt, @@ -180,7 +180,7 @@ bool SGI_THIS::processNearby(const Point& query_pt, coord_t radius, const std::f } SGI_TEMPLATE -bool SGI_THIS::processLine(const std::pair query_line, const std::function& process_elem_func) const +bool SGI_THIS::processLine(const std::pair query_line, const std::function& process_elem_func) const { const std::function process_cell_func = [&process_elem_func, this](GridPoint grid_loc) { @@ -190,7 +190,7 @@ bool SGI_THIS::processLine(const std::pair query_line, const std:: } SGI_TEMPLATE -std::vector SGI_THIS::getNearby(const Point& query_pt, coord_t radius) const +std::vector SGI_THIS::getNearby(const Point2LL& query_pt, coord_t radius) const { std::vector ret; const std::function process_func = [&ret](const Elem& elem) @@ -209,7 +209,7 @@ const std::function SGI_THIS::no_precondit }; SGI_TEMPLATE -bool SGI_THIS::getNearest(const Point& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition) const +bool SGI_THIS::getNearest(const Point2LL& query_pt, coord_t radius, Elem& elem_nearest, const std::function precondition) const { bool found = false; int64_t best_dist2 = static_cast(radius) * radius; diff --git a/include/utils/SparseLineGrid.h b/include/utils/SparseLineGrid.h index d5462414b1..5b22818797 100644 --- a/include/utils/SparseLineGrid.h +++ b/include/utils/SparseLineGrid.h @@ -10,7 +10,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "SVG.h" // debug #include "SparseGrid.h" @@ -71,7 +71,7 @@ SGI_THIS::SparseLineGrid(coord_t cell_size, size_t elem_reserve, double max_load SGI_TEMPLATE void SGI_THIS::insert(const Elem& elem) { - const std::pair line = m_locator(elem); + const std::pair line = m_locator(elem); // below is a workaround for the fact that lambda functions cannot access private or protected members // first we define a lambda which works on any GridMap and then we bind it to the actual protected GridMap of the parent class std::function process_cell_func_ = [&elem, this](GridMap* grid, const GridPoint grid_loc) @@ -99,10 +99,10 @@ void SGI_THIS::debugHTML(std::string filename) for (std::pair cell : SparseGrid::grid_) { // doesn't draw cells at x = 0 or y = 0 correctly (should be double size) - Point lb = SparseGrid::toLowerCorner(cell.first); - Point lt = SparseGrid::toLowerCorner(cell.first + GridPoint(0, SparseGrid::nonzero_sign(cell.first.Y))); - Point rt = SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), SparseGrid::nonzero_sign(cell.first.Y))); - Point rb = SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), 0)); + Point2LL lb = SparseGrid::toLowerCorner(cell.first); + Point2LL lt = SparseGrid::toLowerCorner(cell.first + GridPoint(0, SparseGrid::nonzero_sign(cell.first.Y))); + Point2LL rt = SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), SparseGrid::nonzero_sign(cell.first.Y))); + Point2LL rb = SparseGrid::toLowerCorner(cell.first + GridPoint(SparseGrid::nonzero_sign(cell.first.X), 0)); if (lb.X == 0) { lb.X = -SparseGrid::cell_size_; @@ -119,7 +119,7 @@ void SGI_THIS::debugHTML(std::string filename) svg.writeLine(rt, rb, SVG::Color::GRAY); svg.writeLine(rb, lb, SVG::Color::GRAY); - std::pair line = m_locator(cell.second); + std::pair line = m_locator(cell.second); svg.writePoint(line.first, true); svg.writePoint(line.second, true); svg.writeLine(line.first, line.second, SVG::Color::BLACK); @@ -131,53 +131,53 @@ void SGI_THIS::debugTest() { struct PairLocator { - std::pair operator()(const std::pair& val) const + std::pair operator()(const std::pair& val) const { return val; } }; - SparseLineGrid, PairLocator> line_grid(10); + SparseLineGrid, PairLocator> line_grid(10); // straight lines - line_grid.insert(std::make_pair(Point(50, 0), Point(50, 70))); - line_grid.insert(std::make_pair(Point(0, 90), Point(50, 90))); - line_grid.insert(std::make_pair(Point(253, 103), Point(253, 173))); - line_grid.insert(std::make_pair(Point(203, 193), Point(253, 193))); - line_grid.insert(std::make_pair(Point(-50, 0), Point(-50, -70))); - line_grid.insert(std::make_pair(Point(0, -90), Point(-50, -90))); - line_grid.insert(std::make_pair(Point(-253, -103), Point(-253, -173))); - line_grid.insert(std::make_pair(Point(-203, -193), Point(-253, -193))); + line_grid.insert(std::make_pair(Point2LL(50, 0), Point2LL(50, 70))); + line_grid.insert(std::make_pair(Point2LL(0, 90), Point2LL(50, 90))); + line_grid.insert(std::make_pair(Point2LL(253, 103), Point2LL(253, 173))); + line_grid.insert(std::make_pair(Point2LL(203, 193), Point2LL(253, 193))); + line_grid.insert(std::make_pair(Point2LL(-50, 0), Point2LL(-50, -70))); + line_grid.insert(std::make_pair(Point2LL(0, -90), Point2LL(-50, -90))); + line_grid.insert(std::make_pair(Point2LL(-253, -103), Point2LL(-253, -173))); + line_grid.insert(std::make_pair(Point2LL(-203, -193), Point2LL(-253, -193))); // diagonal lines - line_grid.insert(std::make_pair(Point(113, 133), Point(166, 125))); - line_grid.insert(std::make_pair(Point(13, 73), Point(26, 25))); - line_grid.insert(std::make_pair(Point(166, 33), Point(113, 25))); - line_grid.insert(std::make_pair(Point(26, 173), Point(13, 125))); - line_grid.insert(std::make_pair(Point(-24, -18), Point(-19, -64))); - line_grid.insert(std::make_pair(Point(-113, -133), Point(-166, -125))); - line_grid.insert(std::make_pair(Point(-166, -33), Point(-113, -25))); - line_grid.insert(std::make_pair(Point(-26, -173), Point(-13, -125))); + line_grid.insert(std::make_pair(Point2LL(113, 133), Point2LL(166, 125))); + line_grid.insert(std::make_pair(Point2LL(13, 73), Point2LL(26, 25))); + line_grid.insert(std::make_pair(Point2LL(166, 33), Point2LL(113, 25))); + line_grid.insert(std::make_pair(Point2LL(26, 173), Point2LL(13, 125))); + line_grid.insert(std::make_pair(Point2LL(-24, -18), Point2LL(-19, -64))); + line_grid.insert(std::make_pair(Point2LL(-113, -133), Point2LL(-166, -125))); + line_grid.insert(std::make_pair(Point2LL(-166, -33), Point2LL(-113, -25))); + line_grid.insert(std::make_pair(Point2LL(-26, -173), Point2LL(-13, -125))); // diagonal lines exactly crossing cell corners - line_grid.insert(std::make_pair(Point(160, 190), Point(220, 170))); - line_grid.insert(std::make_pair(Point(60, 130), Point(80, 70))); - line_grid.insert(std::make_pair(Point(220, 90), Point(160, 70))); - line_grid.insert(std::make_pair(Point(80, 220), Point(60, 160))); - line_grid.insert(std::make_pair(Point(-160, -190), Point(-220, -170))); - line_grid.insert(std::make_pair(Point(-60, -130), Point(-80, -70))); - line_grid.insert(std::make_pair(Point(-220, -90), Point(-160, -70))); - line_grid.insert(std::make_pair(Point(-80, -220), Point(-60, -160))); + line_grid.insert(std::make_pair(Point2LL(160, 190), Point2LL(220, 170))); + line_grid.insert(std::make_pair(Point2LL(60, 130), Point2LL(80, 70))); + line_grid.insert(std::make_pair(Point2LL(220, 90), Point2LL(160, 70))); + line_grid.insert(std::make_pair(Point2LL(80, 220), Point2LL(60, 160))); + line_grid.insert(std::make_pair(Point2LL(-160, -190), Point2LL(-220, -170))); + line_grid.insert(std::make_pair(Point2LL(-60, -130), Point2LL(-80, -70))); + line_grid.insert(std::make_pair(Point2LL(-220, -90), Point2LL(-160, -70))); + line_grid.insert(std::make_pair(Point2LL(-80, -220), Point2LL(-60, -160))); // single cell - line_grid.insert(std::make_pair(Point(203, 213), Point(203, 213))); - line_grid.insert(std::make_pair(Point(223, 213), Point(223, 215))); - line_grid.insert(std::make_pair(Point(243, 213), Point(245, 213))); - line_grid.insert(std::make_pair(Point(263, 213), Point(265, 215))); - line_grid.insert(std::make_pair(Point(283, 215), Point(285, 213))); - line_grid.insert(std::make_pair(Point(-203, -213), Point(-203, -213))); + line_grid.insert(std::make_pair(Point2LL(203, 213), Point2LL(203, 213))); + line_grid.insert(std::make_pair(Point2LL(223, 213), Point2LL(223, 215))); + line_grid.insert(std::make_pair(Point2LL(243, 213), Point2LL(245, 213))); + line_grid.insert(std::make_pair(Point2LL(263, 213), Point2LL(265, 215))); + line_grid.insert(std::make_pair(Point2LL(283, 215), Point2LL(285, 213))); + line_grid.insert(std::make_pair(Point2LL(-203, -213), Point2LL(-203, -213))); // around origin - line_grid.insert(std::make_pair(Point(20, -20), Point(-20, 20))); + line_grid.insert(std::make_pair(Point2LL(20, -20), Point2LL(-20, 20))); line_grid.debugHTML("line_grid.html"); } diff --git a/include/utils/SparsePointGrid.h b/include/utils/SparsePointGrid.h index 748f79124e..4565a5dc4a 100644 --- a/include/utils/SparsePointGrid.h +++ b/include/utils/SparsePointGrid.h @@ -9,7 +9,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "SparseGrid.h" namespace cura @@ -51,7 +51,7 @@ class SparsePointGrid : public SparseGrid * \param query_pt The point to query for an object nearby. * \param radius The radius of what is considered "nearby". */ - const ElemT* getAnyNearby(const Point& query_pt, coord_t radius); + const ElemT* getAnyNearby(const Point2LL& query_pt, coord_t radius); protected: using GridPoint = typename SparseGrid::GridPoint; @@ -73,14 +73,14 @@ SGI_THIS::SparsePointGrid(coord_t cell_size, size_t elem_reserve, double max_loa SGI_TEMPLATE void SGI_THIS::insert(const Elem& elem) { - Point loc = m_locator(elem); + Point2LL loc = m_locator(elem); GridPoint grid_loc = SparseGrid::toGridPoint(loc); SparseGrid::grid_.emplace(grid_loc, elem); } SGI_TEMPLATE -const ElemT* SGI_THIS::getAnyNearby(const Point& query_pt, coord_t radius) +const ElemT* SGI_THIS::getAnyNearby(const Point2LL& query_pt, coord_t radius) { const ElemT* ret = nullptr; const std::function& process_func = [&ret, query_pt, radius, this](const ElemT& maybe_nearby) diff --git a/include/utils/SparsePointGridInclusive.h b/include/utils/SparsePointGridInclusive.h index 7e4cdce82e..962c0d602e 100644 --- a/include/utils/SparsePointGridInclusive.h +++ b/include/utils/SparsePointGridInclusive.h @@ -9,7 +9,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" #include "SparsePointGrid.h" namespace cura @@ -26,20 +26,20 @@ struct SparsePointGridInclusiveElem { } - SparsePointGridInclusiveElem(const Point& point_, const Val& val_) + SparsePointGridInclusiveElem(const Point2LL& point_, const Val& val_) : point(point_) , val(val_) { } - Point point; + Point2LL point; Val val; }; template struct Locatoror { - Point operator()(const SparsePointGridInclusiveElem& elem) + Point2LL operator()(const SparsePointGridInclusiveElem& elem) { return elem.point; } @@ -73,7 +73,7 @@ class SparsePointGridInclusive : public SparsePointGrid getNearbyVals(const Point& query_pt, coord_t radius) const; + std::vector getNearbyVals(const Point2LL& query_pt, coord_t radius) const; }; #define SG_TEMPLATE template @@ -99,14 +99,14 @@ SG_THIS::SparsePointGridInclusive(coord_t cell_size, size_t elem_reserve, double } SG_TEMPLATE -void SG_THIS::insert(const Point& point, const Val& val) +void SG_THIS::insert(const Point2LL& point, const Val& val) { typename SG_THIS::Elem elem(point, val); Base::insert(elem); } SG_TEMPLATE -std::vector SG_THIS::getNearbyVals(const Point& query_pt, coord_t radius) const +std::vector SG_THIS::getNearbyVals(const Point2LL& query_pt, coord_t radius) const { std::vector ret; std::function&)> process_func = [&ret](const typename SG_THIS::Elem& elem) diff --git a/include/utils/SquareGrid.h b/include/utils/SquareGrid.h index 515cf0cf9d..ebbab19ca2 100644 --- a/include/utils/SquareGrid.h +++ b/include/utils/SquareGrid.h @@ -9,7 +9,7 @@ #include #include -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -36,7 +36,7 @@ class SquareGrid */ coord_t getCellSize() const; - using GridPoint = Point; + using GridPoint = Point2LL; using grid_coord_t = coord_t; /*! \brief Process cells along a line indicated by \p line. @@ -46,7 +46,7 @@ class SquareGrid * for each cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function. */ - bool processLineCells(const std::pair line, const std::function& process_cell_func); + bool processLineCells(const std::pair line, const std::function& process_cell_func); /*! \brief Process cells along a line indicated by \p line. * @@ -55,7 +55,7 @@ class SquareGrid * for each cell. Processing stops if function returns false. * \return Whether we need to continue processing after this function. */ - bool processLineCells(const std::pair line, const std::function& process_cell_func) const; + bool processLineCells(const std::pair line, const std::function& process_cell_func) const; /*! * Process all cells in an axis-aligned right triangle. @@ -90,8 +90,8 @@ class SquareGrid * good candidate has been found. * \return Whether we need to continue processing after this function. */ - bool processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const; - bool processAxisAlignedTriangle(const Point from, const Point to, bool to_the_right, const std::function& process_cell_func) const; + bool processAxisAlignedTriangle(const Point2LL from, const Point2LL to, const std::function& process_cell_func) const; + bool processAxisAlignedTriangle(const Point2LL from, const Point2LL to, bool to_the_right, const std::function& process_cell_func) const; /*! \brief Process cells that might contain sought after points. * @@ -105,13 +105,13 @@ class SquareGrid * ``false``. * \return Whether we need to continue processing after this function. */ - bool processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const; + bool processNearby(const Point2LL& query_pt, coord_t radius, const std::function& process_func) const; /*! \brief Compute the grid coordinates of a point. * \param point The actual location. * \return The grid coordinates that correspond to \p point. */ - GridPoint toGridPoint(const Point& point) const; + GridPoint toGridPoint(const Point2LL& point) const; /*! \brief Compute the grid coordinate of a real space coordinate. * \param coord The actual location. @@ -125,7 +125,7 @@ class SquareGrid * \param location The grid location. * \return The print space coordinates that correspond to \p location. */ - Point toLowerCorner(const GridPoint& location) const; + Point2LL toLowerCorner(const GridPoint& location) const; /*! \brief Compute the lowest coord in a grid cell. * The lowest point is the point in the grid cell closest to the origin. diff --git a/include/utils/VoronoiUtils.h b/include/utils/VoronoiUtils.h index 4c0c196cc4..287b6765b1 100644 --- a/include/utils/VoronoiUtils.h +++ b/include/utils/VoronoiUtils.h @@ -25,22 +25,22 @@ class VoronoiUtils using voronoi_data_t = double; using vd_t = boost::polygon::voronoi_diagram; - static Point getSourcePoint(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); - static const Segment& getSourceSegment(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); - static PolygonsPointIndex getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); + static Point2LL getSourcePoint(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); + static const Segment& getSourceSegment(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); + static PolygonsPointIndex getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); - static Point p(const vd_t::vertex_type* node); + static Point2LL p(const vd_t::vertex_type* node); - static bool isSourcePoint(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments, coord_t snap_dist = 10); + static bool isSourcePoint(Point2LL p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments, coord_t snap_dist = 10); - static coord_t getDistance(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); + static coord_t getDistance(Point2LL p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments); /*! * Discretize a parabola based on (approximate) step size. * The \p approximate_step_size is measured parallel to the \p source_segment, not along the parabola. */ - static std::vector - discretizeParabola(const Point& source_point, const Segment& source_segment, Point start, Point end, coord_t approximate_step_size, double transitioning_angle); + static std::vector + discretizeParabola(const Point2LL& source_point, const Segment& source_segment, Point2LL start, Point2LL end, coord_t approximate_step_size, double transitioning_angle); protected: /*! @@ -66,7 +66,7 @@ class VoronoiUtils * Important: * discretization should contain both edge endpoints initially. */ - static void discretize(const Point& point, const Segment& segment, const coord_t max_dist, std::vector* discretization); + static void discretize(const Point2LL& point, const Segment& segment, const coord_t max_dist, std::vector* discretization); /*! * adapted from boost::polygon::voronoi_visual_utils.cpp @@ -84,7 +84,7 @@ class VoronoiUtils * transformed one and vice versa. The assumption is made that projection of * the point lies between the start-point and endpoint of the segment. */ - static double getPointProjection(const Point& point, const Segment& segment); + static double getPointProjection(const Point2LL& point, const Segment& segment); }; } // namespace cura diff --git a/include/utils/VoxelUtils.h b/include/utils/VoxelUtils.h index 4cf4d97029..f6cd123677 100644 --- a/include/utils/VoxelUtils.h +++ b/include/utils/VoxelUtils.h @@ -7,13 +7,13 @@ #include #include -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/polygon.h" namespace cura { -using GridPoint3 = Point3; +using GridPoint3 = Point3LL; /*! * Class for holding the relative positiongs wrt a reference cell on which to perform a dilation. @@ -65,9 +65,9 @@ class VoxelUtils public: using grid_coord_t = coord_t; - Point3 cell_size_; + Point3LL cell_size_; - VoxelUtils(Point3 cell_size) + VoxelUtils(Point3LL cell_size) : cell_size_(cell_size) { } @@ -80,7 +80,7 @@ class VoxelUtils * \param process_cell_func Function to perform on each cell the line crosses * \return Whether executing was stopped short as indicated by the \p cell_processing_function */ - bool walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const; + bool walkLine(Point3LL start, Point3LL end, const std::function& process_cell_func) const; /*! * Process voxels which the line segments of a polygon crosses. @@ -151,7 +151,7 @@ class VoxelUtils */ std::function dilate(const DilationKernel& kernel, const std::function& process_cell_func) const; - GridPoint3 toGridPoint(const Point3& point) const + GridPoint3 toGridPoint(const Point3LL& point) const { return GridPoint3(toGridCoord(point.x_, 0), toGridCoord(point.y_, 1), toGridCoord(point.z_, 2)); } @@ -162,9 +162,9 @@ class VoxelUtils return coord / cell_size_[dim] - (coord < 0); } - Point3 toLowerCorner(const GridPoint3& location) const + Point3LL toLowerCorner(const GridPoint3& location) const { - return cura::Point3(toLowerCoord(location.x_, 0), toLowerCoord(location.y_, 1), toLowerCoord(location.z_, 2)); + return cura::Point3LL(toLowerCoord(location.x_, 0), toLowerCoord(location.y_, 1), toLowerCoord(location.z_, 2)); } coord_t toLowerCoord(const grid_coord_t& grid_coord, const size_t dim) const @@ -179,7 +179,7 @@ class VoxelUtils Polygon toPolygon(const GridPoint3 p) const { Polygon ret; - Point3 c = toLowerCorner(p); + Point3LL c = toLowerCorner(p); ret.emplace_back(c.x_, c.y_); ret.emplace_back(c.x_ + cell_size_.x_, c.y_); ret.emplace_back(c.x_ + cell_size_.x_, c.y_ + cell_size_.y_); diff --git a/include/utils/actions/smooth.h b/include/utils/actions/smooth.h index a450a9fe40..a414d9850a 100644 --- a/include/utils/actions/smooth.h +++ b/include/utils/actions/smooth.h @@ -186,7 +186,7 @@ struct smooth_fn requires utils::point2d || utils::junction inline constexpr auto cosAngle(Vector& a, Vector& b) const noexcept { - return cosAngle(a, b, magnitude(a), magnitude(b)); + return cosAngle(a, b, magnitude(a), magnitude(b)); } template diff --git a/include/utils/linearAlg2D.h b/include/utils/linearAlg2D.h index dce7acf95c..42b57a16d9 100644 --- a/include/utils/linearAlg2D.h +++ b/include/utils/linearAlg2D.h @@ -4,14 +4,14 @@ #ifndef UTILS_LINEAR_ALG_2D_H #define UTILS_LINEAR_ALG_2D_H -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { class LinearAlg2D { public: - static short pointLiesOnTheRightOfLine(const Point& p, const Point& p0, const Point& p1) + static short pointLiesOnTheRightOfLine(const Point2LL& p, const Point2LL& p0, const Point2LL& p1) { // no tests unless the segment p0-p1 is at least partly at, or to right of, p.X if (std::max(p0.X, p1.X) >= p.X) @@ -64,12 +64,12 @@ class LinearAlg2D return -1; } - static bool lineLineIntersection(const Point& a, const Point& b, const Point& c, const Point& d, Point& output) + static bool lineLineIntersection(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d, Point2LL& output) { // Adapted from Apex: https://github.com/Ghostkeeper/Apex/blob/eb75f0d96e36c7193d1670112826842d176d5214/include/apex/line_segment.hpp#L91 // Adjusted to work with lines instead of line segments. - const Point l1_delta = b - a; - const Point l2_delta = d - c; + const Point2LL l1_delta = b - a; + const Point2LL l2_delta = d - c; const coord_t divisor = cross(l1_delta, l2_delta); // Pre-compute divisor needed for the intersection check. if (divisor == 0) { @@ -82,9 +82,9 @@ class LinearAlg2D // Parametric equation is L = P + Vt (where P and V are a starting point and directional vector). // We'll map the starting point of one line onto the parameter system of the other line. // Then using the divisor we can see whether and where they cross. - const Point starts_delta = a - c; + const Point2LL starts_delta = a - c; const coord_t l1_parametric = cross(l2_delta, starts_delta); - Point result = a + Point(round_divide_signed(l1_parametric * l1_delta.X, divisor), round_divide_signed(l1_parametric * l1_delta.Y, divisor)); + Point2LL result = a + Point2LL(round_divide_signed(l1_parametric * l1_delta.X, divisor), round_divide_signed(l1_parametric * l1_delta.Y, divisor)); if (std::abs(result.X) > std::numeric_limits::max() || std::abs(result.Y) > std::numeric_limits::max()) { @@ -107,10 +107,10 @@ class LinearAlg2D * \param b The end point of the line segment * \return the sign of the projection wrt the line segment */ - inline static short pointIsProjectedBeyondLine(const Point& from, const Point& a, const Point& b) + inline static short pointIsProjectedBeyondLine(const Point2LL& from, const Point2LL& a, const Point2LL& b) { - const Point vec = b - a; - const Point point_vec = from - a; + const Point2LL vec = b - a; + const Point2LL point_vec = from - a; const coord_t dot_prod = dot(point_vec, vec); if (dot_prod < 0) { // point is projected to before ab @@ -126,10 +126,10 @@ class LinearAlg2D /*! * Find the point closest to \p from on the line segment from \p p0 to \p p1 */ - static Point getClosestOnLineSegment(const Point& from, const Point& p0, const Point& p1) + static Point2LL getClosestOnLineSegment(const Point2LL& from, const Point2LL& p0, const Point2LL& p1) { - const Point direction = p1 - p0; - const Point to_from = from - p0; + const Point2LL direction = p1 - p0; + const Point2LL to_from = from - p0; const coord_t projected_x = dot(to_from, direction); const coord_t x_p0 = 0; @@ -162,17 +162,17 @@ class LinearAlg2D /*! * Find the point closest to \p from on the line through \p p0 to \p p1 */ - static Point getClosestOnLine(const Point& from, const Point& p0, const Point& p1) + static Point2LL getClosestOnLine(const Point2LL& from, const Point2LL& p0, const Point2LL& p1) { if (p1 == p0) { return p0; } - const Point direction = p1 - p0; - const Point to_from = from - p0; + const Point2LL direction = p1 - p0; + const Point2LL to_from = from - p0; const coord_t projected_x = dot(to_from, direction); - Point ret = p0 + projected_x / vSize(direction) * direction / vSize(direction); + Point2LL ret = p0 + projected_x / vSize(direction) * direction / vSize(direction); return ret; } @@ -187,7 +187,7 @@ class LinearAlg2D * \param b2 second point on line b * \return A pair: the first point on line a and the second pouint on line b */ - static std::pair getClosestConnection(Point a1, Point a2, Point b1, Point b2); + static std::pair getClosestConnection(Point2LL a1, Point2LL a2, Point2LL b1, Point2LL b2); /*! * Get the squared distance from point \p b to a line *segment* from \p a to \p c. @@ -199,7 +199,7 @@ class LinearAlg2D * \param c the second point on the line segment * \param b_is_beyond_ac optional output parameter: whether \p b is closest to the line segment (0), to \p a (-1) or \p b (1) */ - static coord_t getDist2FromLineSegment(const Point& a, const Point& b, const Point& c, int16_t* b_is_beyond_ac = nullptr) + static coord_t getDist2FromLineSegment(const Point2LL& a, const Point2LL& b, const Point2LL& c, int16_t* b_is_beyond_ac = nullptr) { /* * a, @@ -216,10 +216,10 @@ class LinearAlg2D * xb = ab - ax * error = vSize(xb) */ - const Point ac = c - a; + const Point2LL ac = c - a; const coord_t ac_size = vSize(ac); - const Point ab = b - a; + const Point2LL ab = b - a; if (ac_size == 0) { const coord_t ab_dist2 = vSize2(ab); @@ -254,8 +254,8 @@ class LinearAlg2D { *b_is_beyond_ac = 0; } - const Point ax = ac * ax_size / ac_size; - const Point bx = ab - ax; + const Point2LL ax = ac * ax_size / ac_size; + const Point2LL bx = ab - ax; return vSize2(bx); // return vSize2(ab) - ax_size*ax_size; // less accurate } @@ -270,7 +270,7 @@ class LinearAlg2D * \param d Another end point of the second line segment * \param max_dist The maximal distance between the two line segments for which this function will return true. */ - static bool lineSegmentsAreCloserThan(const Point& a, const Point& b, const Point& c, const Point& d, const coord_t max_dist) + static bool lineSegmentsAreCloserThan(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d, const coord_t max_dist) { const coord_t max_dist2 = max_dist * max_dist; @@ -287,7 +287,7 @@ class LinearAlg2D * \param c One end point of the second line segment * \param d Another end point of the second line segment */ - static coord_t getDist2BetweenLineSegments(const Point& a, const Point& b, const Point& c, const Point& d) + static coord_t getDist2BetweenLineSegments(const Point2LL& a, const Point2LL& b, const Point2LL& c, const Point2LL& d) { return std::min(getDist2FromLineSegment(a, c, b), std::min(getDist2FromLineSegment(a, d, b), std::min(getDist2FromLineSegment(c, a, d), getDist2FromLineSegment(c, b, d)))); } @@ -306,7 +306,7 @@ class LinearAlg2D * \param b_from_transformed The transformed to location of line b * \return Whether the two line segments collide */ - static bool lineSegmentsCollide(const Point& a_from_transformed, const Point& a_to_transformed, Point b_from_transformed, Point b_to_transformed); + static bool lineSegmentsCollide(const Point2LL& a_from_transformed, const Point2LL& a_to_transformed, Point2LL b_from_transformed, Point2LL b_to_transformed); /*! * Compute the angle between two consecutive line segments. @@ -325,7 +325,7 @@ class LinearAlg2D * \param c end of second line segment * \return the angle in radians between 0 and 2 * pi of the corner in \p b */ - static double getAngleLeft(const Point& a, const Point& b, const Point& c); + static double getAngleLeft(const Point2LL& a, const Point2LL& b, const Point2LL& c); /*! * Returns the determinant of the 2D matrix defined by the the vectors ab and ap as rows. @@ -338,7 +338,7 @@ class LinearAlg2D * \param b the to point of the line * \return a positive value when \p p lies to the left of the line from \p a to \p b */ - static inline coord_t pointIsLeftOfLine(const Point& p, const Point& a, const Point& b) + static inline coord_t pointIsLeftOfLine(const Point2LL& p, const Point2LL& a, const Point2LL& b) { return (b.X - a.X) * (p.Y - a.Y) - (b.Y - a.Y) * (p.X - a.X); } @@ -355,7 +355,7 @@ class LinearAlg2D * \param[out] result The result (if any was found) * \return Whether any such point has been found */ - static bool getPointOnLineWithDist(const Point& p, const Point& a, const Point& b, const coord_t dist, Point& result); + static bool getPointOnLineWithDist(const Point2LL& p, const Point2LL& a, const Point2LL& b, const coord_t dist, Point2LL& result); /*! * Get the squared distance from a point \p p to the line on which \p a and @@ -365,7 +365,7 @@ class LinearAlg2D * \param b One of the points through which the line goes. * \return The distance between the point and the line, squared. */ - static coord_t getDist2FromLine(const Point& p, const Point& a, const Point& b); + static coord_t getDist2FromLine(const Point2LL& p, const Point2LL& a, const Point2LL& b); /*! * Get the distance from a point \p p to the line on which \p a and \p b lie. @@ -378,7 +378,7 @@ class LinearAlg2D * \param b One of the points through which the line goes. * \return The distance between the point and the line. */ - static coord_t getDistFromLine(const Point& p, const Point& a, const Point& b); + static coord_t getDistFromLine(const Point2LL& p, const Point2LL& a, const Point2LL& b); /*! * Check whether a corner is acute or obtuse. @@ -393,17 +393,17 @@ class LinearAlg2D * \param c end of second line segment * \return positive if acute, negative if obtuse, zero if 90 degree corner */ - static inline int isAcuteCorner(const Point& a, const Point& b, const Point& c) + static inline int isAcuteCorner(const Point2LL& a, const Point2LL& b, const Point2LL& c) { - const Point ba = a - b; - const Point bc = c - b; + const Point2LL ba = a - b; + const Point2LL bc = c - b; return dot(ba, bc); } /*! * Get the rotation matrix for rotating around a specific point in place. */ - static Point3Matrix rotateAround(const Point& middle, double rotation) + static Point3Matrix rotateAround(const Point2LL& middle, double rotation) { PointMatrix rotation_matrix(rotation); Point3Matrix rotation_matrix_homogeneous(rotation_matrix); @@ -417,7 +417,7 @@ class LinearAlg2D * * Test whether the \p query_point is inside of a polygon w.r.t a single corner. */ - static bool isInsideCorner(const Point a, const Point b, const Point c, const Point query_point); + static bool isInsideCorner(const Point2LL a, const Point2LL b, const Point2LL c, const Point2LL query_point); /*! * Finds the vector for the bisection of a-b as seen from the intersection point. @@ -429,7 +429,7 @@ class LinearAlg2D * \param b The second point. * \param vec_len The lenght of the resultant vector. It's not wise to set this to 1, since we do tend to do integer math here. */ - static Point getBisectorVector(const Point& intersect, const Point& a, const Point& b, const coord_t vec_len); + static Point2LL getBisectorVector(const Point2LL& intersect, const Point2LL& a, const Point2LL& b, const coord_t vec_len); }; diff --git a/include/utils/orderOptimizer.h b/include/utils/orderOptimizer.h index a72a447b54..e990cecbac 100644 --- a/include/utils/orderOptimizer.h +++ b/include/utils/orderOptimizer.h @@ -8,7 +8,7 @@ #include #include #include // pair -#include "IntPoint.h" +#include "Point2LL.h" namespace cura { @@ -23,29 +23,29 @@ template class OrderOptimizer { public: - std::vector> items; //!< the items in arbitrary order + std::vector> items; //!< the items in arbitrary order OrderOptimizer() { } - void addItem(const Point location, const T item); + void addItem(const Point2LL location, const T item); /*! * Optimize the order of \ref OrderOptimizer::items * \return A vector of the ordered indices into \ref OrderOptimizer::items */ - std::list optimize(const Point& start_position); + std::list optimize(const Point2LL& start_position); }; template -void OrderOptimizer::addItem(const Point location, const T item) +void OrderOptimizer::addItem(const Point2LL location, const T item) { items.emplace_back(location, item); } template -std::list OrderOptimizer::optimize(const Point& start_position) +std::list OrderOptimizer::optimize(const Point2LL& start_position) { // Use the nearest mesh ordering std::list order; @@ -60,7 +60,7 @@ std::list OrderOptimizer::optimize(const Point& start_position) { item_idx_list.emplace_back(i); } - const Point* last_item_position = &start_position; + const Point2LL* last_item_position = &start_position; while (!item_idx_list.empty()) { @@ -71,7 +71,7 @@ std::list OrderOptimizer::optimize(const Point& start_position) for (size_t idx = 0; idx < item_idx_list.size(); idx++) { const size_t item_idx = item_idx_list[idx]; - const Point& position = items[item_idx].first; + const Point2LL& position = items[item_idx].first; const coord_t distance = vSize(position - *last_item_position); if (distance < shortest_distance) { diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 7036e256d5..5b3eb781af 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -17,7 +17,7 @@ #include "../settings/types/Angle.h" //For angles between vertices. #include "../settings/types/Ratio.h" -#include "IntPoint.h" +#include "Point2LL.h" #define CHECK_POLY_ACCESS #ifdef CHECK_POLY_ACCESS @@ -56,7 +56,7 @@ class PolygonRef; class ListPolyIt; -typedef std::list ListPolygon; //!< A polygon represented by a linked list instead of a vector +typedef std::list ListPolygon; //!< A polygon represented by a linked list instead of a vector typedef std::vector ListPolygons; //!< Polygons represented by a vector of linked lists instead of a vector of vectors const static int clipper_init = (0); @@ -108,7 +108,7 @@ class ConstPolygonRef */ bool empty() const; - const Point& operator[](size_t index) const + const Point2LL& operator[](size_t index) const { POLY_ASSERT(index < size()); return (*path)[index]; @@ -175,10 +175,10 @@ class ConstPolygonRef coord_t polylineLength() const { coord_t length = 0; - Point p0 = path->front(); + Point2LL p0 = path->front(); for (size_t n = 1; n < path->size(); n++) { - Point p1 = (*path)[n]; + Point2LL p1 = (*path)[n]; length += vSize(p0 - p1); p0 = p1; } @@ -201,10 +201,10 @@ class ConstPolygonRef bool shorterThan(const coord_t check_length) const; - Point min() const + Point2LL min() const { - Point ret = Point(POINT_MAX, POINT_MAX); - for (Point p : *path) + Point2LL ret = Point2LL(POINT_MAX, POINT_MAX); + for (Point2LL p : *path) { ret.X = std::min(ret.X, p.X); ret.Y = std::min(ret.Y, p.Y); @@ -212,10 +212,10 @@ class ConstPolygonRef return ret; } - Point max() const + Point2LL max() const { - Point ret = Point(POINT_MIN, POINT_MIN); - for (Point p : *path) + Point2LL ret = Point2LL(POINT_MIN, POINT_MIN); + for (Point2LL p : *path) { ret.X = std::max(ret.X, p.X); ret.Y = std::max(ret.Y, p.Y); @@ -228,17 +228,17 @@ class ConstPolygonRef return ClipperLib::Area(*path); } - Point centerOfMass() const + Point2LL centerOfMass() const { if (path->size() > 0) { - Point p0 = (*path)[0]; + Point2LL p0 = (*path)[0]; if (path->size() > 1) { double x = 0, y = 0; for (size_t n = 1; n <= path->size(); n++) { - Point p1 = (*path)[n % path->size()]; + Point2LL p1 = (*path)[n % path->size()]; double second_factor = static_cast((p0.X * p1.Y) - (p1.X * p0.Y)); x += double(p0.X + p1.X) * second_factor; @@ -251,7 +251,7 @@ class ConstPolygonRef x = x / 6 / area; y = y / 6 / area; - return Point(std::llrint(x), std::llrint(y)); + return Point2LL(std::llrint(x), std::llrint(y)); } else { @@ -260,13 +260,13 @@ class ConstPolygonRef } else { - return Point(); + return Point2LL(); } } - Point closestPointTo(Point p) const + Point2LL closestPointTo(Point2LL p) const { - Point ret = p; + Point2LL ret = p; double bestDist = std::numeric_limits::max(); for (size_t n = 0; n < path->size(); n++) { @@ -298,7 +298,7 @@ class ConstPolygonRef * \param border_result What to return when the point is exactly on the border * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) */ - bool _inside(Point p, bool border_result = false) const; + bool _inside(Point2LL p, bool border_result = false) const; /*! * Clipper function. @@ -306,7 +306,7 @@ class ConstPolygonRef * * http://www.angusj.com/delphi/clipper/documentation/Docs/Units/ClipperLib/Functions/PointInPolygon.htm */ - bool inside(Point p, bool border_result = false) const + bool inside(Point2LL p, bool border_result = false) const { int res = ClipperLib::PointInPolygon(p, *path); if (res == -1) @@ -389,15 +389,15 @@ class ConstPolygonRef * \param cos_angle The cosine on the angle in L 012 */ static void smooth_corner_simple( - const Point p0, - const Point p1, - const Point p2, + const Point2LL p0, + const Point2LL p1, + const Point2LL p2, const ListPolyIt p0_it, const ListPolyIt p1_it, const ListPolyIt p2_it, - const Point v10, - const Point v12, - const Point v02, + const Point2LL v10, + const Point2LL v12, + const Point2LL v02, const int64_t shortcut_length, double cos_angle); @@ -415,7 +415,7 @@ class ConstPolygonRef * \param shortcut_length The desired length ofthe shortcutting line * \return Whether this whole polygon whould be removed by the smoothing */ - static bool smooth_corner_complex(const Point p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length); + static bool smooth_corner_complex(const Point2LL p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length); /*! * Try to take a step away from the corner point in order to take a bigger shortcut. @@ -434,7 +434,7 @@ class ConstPolygonRef * \param[in,out] backward_is_too_far Whether trying another step backward is blocked by the shortcut length condition. Updated for the next iteration. */ static void smooth_outward_step( - const Point p1, + const Point2LL p1, const int64_t shortcut_length2, ListPolyIt& p0_it, ListPolyIt& p2_it, @@ -496,13 +496,13 @@ class PolygonRef : public ConstPolygonRef return *this; } - Point& operator[](unsigned int index) + Point2LL& operator[](unsigned int index) { POLY_ASSERT(index < size()); return (*path)[index]; } - const Point& operator[](unsigned int index) const + const Point2LL& operator[](unsigned int index) const { POLY_ASSERT(index < size()); return (*path)[index]; @@ -533,7 +533,7 @@ class PolygonRef : public ConstPolygonRef return path->data(); } - void add(const Point p) + void add(const Point2LL p) { path->push_back(p); } @@ -555,7 +555,7 @@ class PolygonRef : public ConstPolygonRef path->erase(path->begin() + index); } - void insert(size_t index, Point p) + void insert(size_t index, Point2LL p) { POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); path->insert(path->begin() + static_cast(index), p); @@ -576,9 +576,9 @@ class PolygonRef : public ConstPolygonRef * * \param translation The direction in which to move the polygon */ - void translate(Point translation) + void translate(Point2LL translation) { - for (Point& p : *this) + for (Point2LL& p : *this) { p += translation; } @@ -932,7 +932,7 @@ class Polygons /*! * Add a 'polygon' consisting of two points */ - void addLine(const Point from, const Point to) + void addLine(const Point2LL from, const Point2LL to) { paths.emplace_back(ClipperLib::Path{ from, to }); } @@ -1138,7 +1138,7 @@ class Polygons * \param border_result What to return when the point is exactly on the border * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) */ - bool inside(Point p, bool border_result = false) const; + bool inside(Point2LL p, bool border_result = false) const; /*! * Check if we are inside the polygon. We do this by tracing from the point towards the positive X direction, @@ -1158,7 +1158,7 @@ class Polygons * \param border_result What to return when the point is exactly on the border * \return Whether the point \p p is inside this polygon (or \p border_result when it is on the border) */ - bool insideOld(Point p, bool border_result = false) const; + bool insideOld(Point2LL p, bool border_result = false) const; /*! * Find the polygon inside which point \p p resides. @@ -1173,7 +1173,7 @@ class Polygons * \param border_result Whether a point exactly on a polygon counts as inside * \return The index of the polygon inside which the point \p p resides */ - unsigned int findInside(Point p, bool border_result = false); + unsigned int findInside(Point2LL p, bool border_result = false); /*! * Approximates the convex hull of the polygons. @@ -1250,7 +1250,7 @@ class Polygons } } - void translate(const Point vec) + void translate(const Point2LL vec) { if (vec.X == 0 && vec.Y == 0) { @@ -1471,12 +1471,12 @@ class Polygons coord_t polyLineLength() const; - Point min() const + Point2LL min() const { - Point ret = Point(POINT_MAX, POINT_MAX); + Point2LL ret = Point2LL(POINT_MAX, POINT_MAX); for (const ClipperLib::Path& polygon : paths) { - for (Point p : polygon) + for (Point2LL p : polygon) { ret.X = std::min(ret.X, p.X); ret.Y = std::min(ret.Y, p.Y); @@ -1485,12 +1485,12 @@ class Polygons return ret; } - Point max() const + Point2LL max() const { - Point ret = Point(POINT_MIN, POINT_MIN); + Point2LL ret = Point2LL(POINT_MIN, POINT_MIN); for (const ClipperLib::Path& polygon : paths) { - for (Point p : polygon) + for (Point2LL p : polygon) { ret.X = std::max(ret.X, p.X); ret.Y = std::max(ret.Y, p.Y); @@ -1547,7 +1547,7 @@ class PolygonsPart : public Polygons * \param border_result If the point is exactly on the border, this will be * returned instead. */ - bool inside(Point p, bool border_result = false) const; + bool inside(Point2LL p, bool border_result = false) const; }; /*! diff --git a/include/utils/polygonUtils.h b/include/utils/polygonUtils.h index 9e2017d1b2..59d71a9354 100644 --- a/include/utils/polygonUtils.h +++ b/include/utils/polygonUtils.h @@ -22,12 +22,12 @@ namespace cura */ struct ClosestPolygonPoint { - Point location_; //!< Result location + Point2LL location_; //!< Result location ConstPolygonPointer poly_; //!< Polygon in which the result was found (or nullptr if no result was found) size_t poly_idx_; //!< The index of the polygon in some Polygons where ClosestPolygonPoint::poly can be found size_t point_idx_; //!< Index to the first point in the polygon of the line segment on which the result was found - ClosestPolygonPoint(Point p, size_t pos, ConstPolygonRef poly) + ClosestPolygonPoint(Point2LL p, size_t pos, ConstPolygonRef poly) : location_(p) , poly_(poly) , poly_idx_(NO_INDEX) @@ -35,7 +35,7 @@ struct ClosestPolygonPoint { } - ClosestPolygonPoint(Point p, size_t pos, ConstPolygonRef poly, size_t poly_idx) + ClosestPolygonPoint(Point2LL p, size_t pos, ConstPolygonRef poly, size_t poly_idx) : location_(p) , poly_(poly) , poly_idx_(poly_idx) @@ -56,7 +56,7 @@ struct ClosestPolygonPoint { } - Point p() const + Point2LL p() const { // conformity with other classes return location_; } @@ -83,7 +83,7 @@ struct hash { size_t operator()(const cura::ClosestPolygonPoint& cpp) const { - return std::hash()(cpp.p()); + return std::hash()(cpp.p()); } }; } // namespace std @@ -110,7 +110,7 @@ namespace cura */ struct GivenDistPoint { - Point location; //!< Result location + Point2LL location; //!< Result location int pos; //!< Index to the first point in the polygon of the line segment on which the result was found }; @@ -119,7 +119,7 @@ typedef SparseLineGrid Loc class PolygonUtils { public: - static const std::function no_penalty_function; //!< Function always returning zero + static const std::function no_penalty_function; //!< Function always returning zero /*! * compute the length of a segment of a polygon @@ -152,19 +152,19 @@ class PolygonUtils /*! * Generate a grid of dots inside of the area of the \p polygons. */ - static std::vector spreadDotsArea(const Polygons& polygons, coord_t grid_size); + static std::vector spreadDotsArea(const Polygons& polygons, coord_t grid_size); - static std::vector spreadDotsArea(const Polygons& polygons, Point grid_size); + static std::vector spreadDotsArea(const Polygons& polygons, Point2LL grid_size); /*! * Whether a polygon intersects with a line-segment. If true, the closest collision point to 'b' is stored in the result. */ static bool lineSegmentPolygonsIntersection( - const Point& a, - const Point& b, + const Point2LL& a, + const Point2LL& b, const Polygons& current_outlines, const LocToLineGrid& outline_locator, - Point& result, + Point2LL& result, const coord_t within_max_dist); /*! @@ -175,7 +175,7 @@ class PolygonUtils * \param poly The polygon. * \param point_idx The index of the point in the polygon. */ - static Point getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx); + static Point2LL getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx); /*! * Get a point from the \p poly with a given \p offset. @@ -185,7 +185,7 @@ class PolygonUtils * \param offset The distance the point has to be moved outward from the polygon. * \return A point at the given distance inward from the point on the boundary polygon. */ - static Point getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset); + static Point2LL getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset); /*! * Move a point away from the boundary by looking at the boundary normal of the nearest vert. @@ -193,7 +193,7 @@ class PolygonUtils * \param point_on_boundary The object holding the point on the boundary along with the information of which line segment the point is on. * \param offset The distance the point has to be moved inward from the polygon. */ - static Point moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset); + static Point2LL moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. @@ -207,7 +207,7 @@ class PolygonUtils * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. * \return The index to the polygon onto which we have moved the point. */ - static unsigned int moveInside(const Polygons& polygons, Point& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static unsigned int moveInside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /** * \brief Moves the point \p from onto the nearest polygon or leaves the @@ -225,7 +225,7 @@ class PolygonUtils * the polygon. * \return Always returns 0. */ - static unsigned int moveInside(const ConstPolygonRef polygon, Point& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static unsigned int moveInside(const ConstPolygonRef polygon, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. @@ -248,12 +248,12 @@ class PolygonUtils */ static ClosestPolygonPoint moveInside2( const Polygons& polygons, - Point& from, + Point2LL& from, const int distance = 0, const int64_t max_dist2 = std::numeric_limits::max(), const Polygons* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, - const std::function& penalty_function = no_penalty_function); + const std::function& penalty_function = no_penalty_function); /*! * Moves the point \p from onto the nearest segment of \p polygon or leaves the point as-is, when the comb boundary is not within the root of \p max_dist2 distance. @@ -277,11 +277,11 @@ class PolygonUtils static ClosestPolygonPoint moveInside2( const Polygons& loc_to_line_polygons, ConstPolygonRef polygon, - Point& from, + Point2LL& from, const int distance = 0, const int64_t max_dist2 = std::numeric_limits::max(), const LocToLineGrid* loc_to_line_grid = nullptr, - const std::function& penalty_function = no_penalty_function); + const std::function& penalty_function = no_penalty_function); /*! * The opposite of moveInside. @@ -298,7 +298,7 @@ class PolygonUtils * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. * \return The index to the polygon onto which we have moved the point. */ - static unsigned int moveOutside(const Polygons& polygons, Point& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static unsigned int moveOutside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /*! * Compute a point at a distance from a point on the boundary in orthogonal direction to the boundary. @@ -308,7 +308,7 @@ class PolygonUtils * \param distance The distance by which to move the point. * \return A point at a \p distance from the point in \p cpp orthogonal to the boundary there. */ - static Point moveInside(const ClosestPolygonPoint& cpp, const int distance); + static Point2LL moveInside(const ClosestPolygonPoint& cpp, const int distance); /*! * The opposite of moveInside. @@ -320,7 +320,7 @@ class PolygonUtils * \param distance The distance by which to move the point. * \return A point at a \p distance from the point in \p cpp orthogonal to the boundary there. */ - static Point moveOutside(const ClosestPolygonPoint& cpp, const int distance); + static Point2LL moveOutside(const ClosestPolygonPoint& cpp, const int distance); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within \p distance. @@ -347,12 +347,12 @@ class PolygonUtils */ static ClosestPolygonPoint ensureInsideOrOutside( const Polygons& polygons, - Point& from, + Point2LL& from, int preferred_dist_inside, int64_t max_dist2 = std::numeric_limits::max(), const Polygons* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, - const std::function& penalty_function = no_penalty_function); + const std::function& penalty_function = no_penalty_function); /*! * Moves the point \p from onto the nearest polygon or leaves the point as-is, when the comb boundary is not within \p distance. @@ -379,12 +379,12 @@ class PolygonUtils */ static ClosestPolygonPoint ensureInsideOrOutside( const Polygons& polygons, - Point& from, + Point2LL& from, const ClosestPolygonPoint& closest_polygon_point, int preferred_dist_inside, const Polygons* loc_to_line_polygons = nullptr, const LocToLineGrid* loc_to_line_grid = nullptr, - const std::function& penalty_function = no_penalty_function); + const std::function& penalty_function = no_penalty_function); /*! * @@ -400,7 +400,7 @@ class PolygonUtils * \param start_idx The index of the point in the polygon from which to start looking. * \return The nearest point from \p start_idx going along the \p polygon (in both directions) with a locally minimal distance to \p from. */ - static ClosestPolygonPoint findNearestClosest(Point from, ConstPolygonRef polygon, int start_idx); + static ClosestPolygonPoint findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx); /*! * Find the nearest closest point on a polygon from a given index walking in one direction along the polygon. @@ -411,7 +411,7 @@ class PolygonUtils * \param direction The direction to walk: 1 for walking along the \p polygon, -1 for walking in opposite direction * \return The nearest point from \p start_idx going along the \p polygon with a locally minimal distance to \p from. */ - static ClosestPolygonPoint findNearestClosest(const Point from, ConstPolygonRef polygon, int start_idx, int direction); + static ClosestPolygonPoint findNearestClosest(const Point2LL from, ConstPolygonRef polygon, int start_idx, int direction); /*! * Find the point closest to \p from in all polygons in \p polygons. @@ -420,7 +420,7 @@ class PolygonUtils * * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. */ - static ClosestPolygonPoint findClosest(Point from, const Polygons& polygons, const std::function& penalty_function = no_penalty_function); + static ClosestPolygonPoint findClosest(Point2LL from, const Polygons& polygons, const std::function& penalty_function = no_penalty_function); /*! * Find the point closest to \p from in the polygon \p polygon. @@ -429,7 +429,7 @@ class PolygonUtils * * \param penalty_function A function returning a penalty term on the squared distance score of a candidate point. */ - static ClosestPolygonPoint findClosest(Point from, ConstPolygonRef polygon, const std::function& penalty_function = no_penalty_function); + static ClosestPolygonPoint findClosest(Point2LL from, ConstPolygonRef polygon, const std::function& penalty_function = no_penalty_function); /*! * Find the nearest vertex to \p from in \p polys @@ -437,7 +437,7 @@ class PolygonUtils * \param polys The polygons in which to search * \return The nearest vertex on the polygons */ - static PolygonsPointIndex findNearestVert(const Point from, const Polygons& polys); + static PolygonsPointIndex findNearestVert(const Point2LL from, const Polygons& polys); /*! * Find the nearest vertex to \p from in \p poly @@ -445,7 +445,7 @@ class PolygonUtils * \param poly The polygon in which to search * \return The index to the nearest vertex on the polygon */ - static unsigned int findNearestVert(const Point from, ConstPolygonRef poly); + static unsigned int findNearestVert(const Point2LL from, ConstPolygonRef poly); /*! * Create a SparsePointGridInclusive mapping from locations to line segments occurring in the \p polygons @@ -471,7 +471,7 @@ class PolygonUtils * \return The nearest point on the polygon if the polygon was within a distance equal to the cell_size of the SparsePointGridInclusive */ static std::optional - findClose(Point from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function = no_penalty_function); + findClose(Point2LL from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function = no_penalty_function); /*! * Find the line segment closest to any point on \p from within cell-blocks of a size defined in the SparsePointGridInclusive \p destination_loc_to_line @@ -490,7 +490,7 @@ class PolygonUtils ConstPolygonRef from, const Polygons& destination, const LocToLineGrid& destination_loc_to_line, - const std::function& penalty_function = no_penalty_function); + const std::function& penalty_function = no_penalty_function); /*! * Checks whether a given line segment collides with polygons as given in a loc_to_line grid. @@ -506,7 +506,7 @@ class PolygonUtils * \param[out] collision_result (optional) The polygons segment intersecting with the line segment * \return whether the line segment collides with the boundary of the polygons */ - static bool polygonCollidesWithLineSegment(const Point from, const Point to, const LocToLineGrid& loc_to_line, PolygonsPointIndex* collision_result = nullptr); + static bool polygonCollidesWithLineSegment(const Point2LL from, const Point2LL to, const LocToLineGrid& loc_to_line, PolygonsPointIndex* collision_result = nullptr); /*! * Find the next point (going along the direction of the polygon) with a distance \p dist from the point \p from within the \p poly. @@ -517,7 +517,7 @@ class PolygonUtils * \param start_idx the index of the prev poly point on the poly. * \param poly_start_idx The index of the point in the polygon which is to be handled as the start of the polygon. No point further than this point will be the result. */ - static bool getNextPointWithDistance(Point from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result); + static bool getNextPointWithDistance(Point2LL from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result); /*! * Walk a given \p distance along the polygon from a given point \p from on the polygon @@ -536,7 +536,7 @@ class PolygonUtils * \param forward Whether to look forward from \p start in the direction of the polygon, or go in the other direction. * \return The earliest point on the polygon in the given direction which crosses a line parallel to the given one at the distance \p dist - if any */ - static std::optional getNextParallelIntersection(const ClosestPolygonPoint& start, const Point& line_to, const coord_t dist, const bool forward); + static std::optional getNextParallelIntersection(const ClosestPolygonPoint& start, const Point2LL& line_to, const coord_t dist, const bool forward); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -558,7 +558,8 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point& transformed_startPoint, const Point& transformed_endPoint, PointMatrix transformation_matrix); + static bool + polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -574,7 +575,7 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point& startPoint, const Point& endPoint); + static bool polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& startPoint, const Point2LL& endPoint); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -596,7 +597,8 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(const Polygons& polys, const Point& transformed_startPoint, const Point& transformed_endPoint, PointMatrix transformation_matrix); + static bool + polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& transformed_startPoint, const Point2LL& transformed_endPoint, PointMatrix transformation_matrix); /*! * Checks whether a given line segment collides with a given polygon(s). @@ -612,7 +614,7 @@ class PolygonUtils * \return whether the line segment collides with the boundary of the * polygon(s) */ - static bool polygonCollidesWithLineSegment(const Polygons& polys, const Point& startPoint, const Point& endPoint); + static bool polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& startPoint, const Point2LL& endPoint); /*! * Checks whether two polygon groups intersect - does a BB hit check first and if that succeeds, the full intersection @@ -671,7 +673,7 @@ class PolygonUtils * \param a_step The angle between segments of the circle. * \return A new Polygon containing the circle. */ - static Polygon makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step = std::numbers::pi / 8); + static Polygon makeCircle(const Point2LL mid, const coord_t radius, const AngleRadians a_step = std::numbers::pi / 8); /*! * Connect all polygons to their holes using zero widths hole channels, so that the polygons and their outlines are connected together @@ -722,7 +724,7 @@ class PolygonUtils * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. * \return The point on the polygon closest to \p from */ - static ClosestPolygonPoint _moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point& from, const int64_t max_dist2); + static ClosestPolygonPoint _moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2); }; diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index a43924362d..8c0577e3bc 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -200,7 +200,7 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS // If the user has specified a z-seam location, use the vertex closest to that location for the seam vertex // in the first layer that has a part with insets. This allows the user to alter the seam start location which // could be useful if the spiralization has a problem with a particular seam path. - Point seam_pos(0, 0); + Point2LL seam_pos(0, 0); if (mesh.settings.get("z_seam_type") == EZSeamType::USER_SPECIFIED) { seam_pos = mesh.getZSeamHint(); @@ -217,7 +217,7 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS // This case is so rare that we don't bother with finding the best polygon to start with. Just start with the first polygon (`spiral_wall[0]`). ConstPolygonRef wall = layer.parts[0].spiral_wall[0]; const size_t n_points = wall.size(); - const Point last_wall_seam_vertex = last_wall[storage.spiralize_seam_vertex_indices[last_layer_nr]]; + const Point2LL last_wall_seam_vertex = last_wall[storage.spiralize_seam_vertex_indices[last_layer_nr]]; // seam_vertex_idx is going to be the index of the seam vertex in the current wall polygon // initially we choose the vertex that is closest to the seam vertex in the last spiralized layer processed @@ -230,10 +230,10 @@ unsigned int FffGcodeWriter::findSpiralizedLayerSeamVertexIndex(const SliceDataS if (vSize(last_wall_seam_vertex - wall[seam_vertex_idx]) >= mesh.settings.get("meshfix_maximum_resolution")) { // get the inward normal of the last layer seam vertex - Point last_wall_seam_vertex_inward_normal = PolygonUtils::getVertexInwardNormal(last_wall, storage.spiralize_seam_vertex_indices[last_layer_nr]); + Point2LL last_wall_seam_vertex_inward_normal = PolygonUtils::getVertexInwardNormal(last_wall, storage.spiralize_seam_vertex_indices[last_layer_nr]); // create a vector from the normal so that we can then test the vertex following the candidate seam vertex to make sure it is on the correct side - Point last_wall_seam_vertex_vector = last_wall_seam_vertex + last_wall_seam_vertex_inward_normal; + Point2LL last_wall_seam_vertex_vector = last_wall_seam_vertex + last_wall_seam_vertex_inward_normal; // now test the vertex following the candidate seam vertex and if it lies to the left of the vector, it's good to use double a = LinearAlg2D::getAngleLeft(last_wall_seam_vertex_vector, last_wall_seam_vertex, wall[(seam_vertex_idx + 1) % n_points]); @@ -546,7 +546,7 @@ void FffGcodeWriter::processNextMeshGroupCode(const SliceDataStorage& storage) Application::getInstance().communication_->sendCurrentPosition(gcode.getPositionXY()); gcode.writeTravel(gcode.getPositionXY(), Application::getInstance().current_slice_->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); - Point start_pos(storage.model_min.x_, storage.model_min.y_); + Point2LL start_pos(storage.model_min.x_, storage.model_min.y_); gcode.writeTravel(start_pos, Application::getInstance().current_slice_->scene.extruders[gcode.getExtruderNr()].settings_.get("speed_travel")); gcode.processInitialLayerTemperature(storage, gcode.getExtruderNr()); @@ -574,7 +574,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr bool fill_gaps = true; Polygons raft_polygons; // should remain empty, since we only have the lines pattern for the raft... - std::optional last_planned_position = std::optional(); + std::optional last_planned_position = std::optional(); unsigned int current_extruder_nr = base_extruder_nr; @@ -613,7 +613,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. const coord_t line_spacing = base_settings.get("raft_base_line_spacing"); const coord_t line_spacing_prime_tower = base_settings.get("prime_tower_raft_base_line_spacing"); - const Point& infill_origin = Point(); + const Point2LL& infill_origin = Point2LL(); constexpr bool skip_stitching = false; constexpr bool connected_zigzags = false; constexpr bool use_endpieces = true; @@ -771,7 +771,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr int wall_line_count = 0; const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. - const Point infill_origin = Point(); + const Point2LL infill_origin = Point2LL(); constexpr bool skip_stitching = false; constexpr bool connected_zigzags = false; constexpr bool use_endpieces = true; @@ -890,7 +890,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr size_t wall_line_count = 0; const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. - const Point& infill_origin = Point(); + const Point2LL& infill_origin = Point2LL(); constexpr bool skip_stitching = false; constexpr bool connected_zigzags = false; constexpr bool connect_polygons = false; // midway connections between polygons can make the surface less smooth @@ -1159,11 +1159,11 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan } // Start brim close to the prime location - Point start_close_to; + Point2LL start_close_to; if (train.settings_.get("prime_blob_enable")) { const auto prime_pos_is_abs = train.settings_.get("extruder_prime_pos_abs"); - const auto prime_pos = Point(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); + const auto prime_pos = Point2LL(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); start_close_to = prime_pos_is_abs ? prime_pos : gcode_layer.getLastPlannedPositionOrStartingPosition() + prime_pos; } else @@ -1214,7 +1214,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan all_brim_lines.back().add(line.front()); } ConstPolygonPointer pp(all_brim_lines.back()); - for (Point p : line) + for (Point2LL p : line) { grid.insert(p, BrimLineReference{ inset_idx, pp }); } @@ -1227,7 +1227,7 @@ void FffGcodeWriter::processSkirtBrim(const SliceDataStorage& storage, LayerPlan for (const std::pair>& p : grid) { const BrimLineReference& here = p.second.val; - Point loc_here = p.second.point; + Point2LL loc_here = p.second.point; std::vector nearby_verts = grid.getNearbyVals(loc_here, searching_radius); for (const BrimLineReference& nearby : nearby_verts) { @@ -1457,12 +1457,12 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s if (mesh.getExtruderIsUsed(extruder_nr)) { const Mesh& mesh_data = mesh_group->meshes[mesh_idx]; - const Point3 middle = (mesh_data.getAABB().min_ + mesh_data.getAABB().max_) / 2; - mesh_idx_order_optimizer.addItem(Point(middle.x_, middle.y_), mesh_idx); + const Point3LL middle = (mesh_data.getAABB().min_ + mesh_data.getAABB().max_) / 2; + mesh_idx_order_optimizer.addItem(Point2LL(middle.x_, middle.y_), mesh_idx); } } const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; - const Point layer_start_position(train.settings_.get("layer_start_x"), train.settings_.get("layer_start_y")); + const Point2LL layer_start_position(train.settings_.get("layer_start_x"), train.settings_.get("layer_start_y")); std::list mesh_indices_order = mesh_idx_order_optimizer.optimize(layer_start_position); std::vector ret; @@ -1661,8 +1661,8 @@ bool FffGcodeWriter::processMultiLayerInfill( = std::max(uint64_t(1), round_divide(mesh.settings.get("infill_sparse_thickness"), std::max(mesh.settings.get("layer_height"), coord_t(1)))); infill_angle = mesh.infill_angles.at((gcode_layer.getLayerNr() / combined_infill_layers) % mesh.infill_angles.size()); } - const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); + const Point3LL mesh_middle = mesh.bounding_box.getMiddle(); + const Point2LL infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); // Print the thicker infill lines first. (double or more layer thickness, infill combined with previous layers) bool added_something = false; @@ -1750,7 +1750,7 @@ bool FffGcodeWriter::processMultiLayerInfill( if (! infill_lines.empty()) { - std::optional near_start_location; + std::optional near_start_location; if (mesh.settings.get("infill_randomize_start_location")) { srand(gcode_layer.getLayerNr()); @@ -1813,8 +1813,8 @@ bool FffGcodeWriter::processSingleLayerInfill( = std::max(uint64_t(1), round_divide(mesh.settings.get("infill_sparse_thickness"), std::max(mesh.settings.get("layer_height"), coord_t(1)))); infill_angle = mesh.infill_angles.at((static_cast(gcode_layer.getLayerNr()) / combined_infill_layers) % mesh.infill_angles.size()); } - const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); + const Point3LL mesh_middle = mesh.bounding_box.getMiddle(); + const Point2LL infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); auto get_cut_offset = [](const bool zig_zaggify, const coord_t line_width, const size_t line_count) { @@ -2036,7 +2036,7 @@ bool FffGcodeWriter::processSingleLayerInfill( { added_something = true; gcode_layer.setIsInside(true); // going to print stuff inside print object - std::optional near_start_location; + std::optional near_start_location; if (mesh.settings.get("infill_randomize_start_location")) { srand(gcode_layer.getLayerNr()); @@ -2582,36 +2582,36 @@ bool FffGcodeWriter::processInsets( return added_something; } -std::optional FffGcodeWriter::getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point last_position) const +std::optional FffGcodeWriter::getSeamAvoidingLocation(const Polygons& filling_part, int filling_angle, Point2LL last_position) const { if (filling_part.empty()) { - return std::optional(); + return std::optional(); } // start with the BB of the outline AABB skin_part_bb(filling_part); PointMatrix rot((double)((-filling_angle + 90) % 360)); // create a matrix to rotate a vector so that it is normal to the skin angle - const Point bb_middle = skin_part_bb.getMiddle(); + const Point2LL bb_middle = skin_part_bb.getMiddle(); // create a vector from the middle of the BB whose length is such that it can be rotated // around the middle of the BB and the end will always be a long way outside of the part's outline // and rotate the vector so that it is normal to the skin angle - const Point vec = rot.apply(Point(0, vSize(skin_part_bb.max_ - bb_middle) * 100)); + const Point2LL vec = rot.apply(Point2LL(0, vSize(skin_part_bb.max_ - bb_middle) * 100)); // find the vertex in the outline that is closest to the end of the rotated vector const PolygonsPointIndex pa = PolygonUtils::findNearestVert(bb_middle + vec, filling_part); // and find another outline vertex, this time using the vector + 180 deg const PolygonsPointIndex pb = PolygonUtils::findNearestVert(bb_middle - vec, filling_part); if (! pa.initialized() || ! pb.initialized()) { - return std::optional(); + return std::optional(); } // now go to whichever of those vertices that is closest to where we are now if (vSize2(pa.p() - last_position) < vSize2(pb.p() - last_position)) { - return std::optional(std::in_place, pa.p()); + return std::optional(std::in_place, pa.p()); } else { - return std::optional(std::in_place, pb.p()); + return std::optional(std::in_place, pb.p()); } } @@ -2920,7 +2920,7 @@ void FffGcodeWriter::processSkinPrintFeature( const bool connect_polygons = mesh.settings.get("connect_skin_polygons"); coord_t max_resolution = mesh.settings.get("meshfix_maximum_resolution"); coord_t max_deviation = mesh.settings.get("meshfix_maximum_deviation"); - const Point infill_origin; + const Point2LL infill_origin; const bool skip_line_stitching = monotonic; constexpr bool fill_gaps = true; constexpr bool connected_zigzags = false; @@ -3046,7 +3046,7 @@ void FffGcodeWriter::processSkinPrintFeature( } else { - std::optional near_start_location; + std::optional near_start_location; const EFillMethod actual_pattern = (gcode_layer.getLayerNr() == 0) ? mesh.settings.get("top_bottom_pattern_0") : mesh.settings.get("top_bottom_pattern"); if (actual_pattern == EFillMethod::LINES || actual_pattern == EFillMethod::ZIG_ZAG) @@ -3224,7 +3224,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer const auto support_connect_zigzags = infill_extruder.settings_.get("support_connect_zigzags"); const auto support_structure = infill_extruder.settings_.get("support_structure"); - const Point infill_origin; + const Point2LL infill_origin; constexpr bool use_endpieces = true; constexpr coord_t pocket_size = 0; @@ -3375,7 +3375,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer constexpr bool spiralize = false; constexpr Ratio flow_ratio = 1.0_r; constexpr bool always_retract = false; - const std::optional start_near_location = std::optional(); + const std::optional start_near_location = std::optional(); gcode_layer.addPolygonsByOptimizer( support_polygons, @@ -3395,7 +3395,7 @@ bool FffGcodeWriter::processSupportInfill(const SliceDataStorage& storage, Layer constexpr bool enable_travel_optimization = false; constexpr coord_t wipe_dist = 0; constexpr Ratio flow_ratio = 1.0; - const std::optional near_start_location = std::optional(); + const std::optional near_start_location = std::optional(); constexpr double fan_speed = GCodePathConfig::FAN_SPEED_DEFAULT; gcode_layer.addLinesByOptimizer( @@ -3483,7 +3483,7 @@ bool FffGcodeWriter::addSupportRoofsToGCode( constexpr coord_t extra_infill_shift = 0; const auto wall_line_count = roof_extruder.settings_.get("support_roof_wall_count"); const coord_t small_area_width = roof_extruder.settings_.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. - const Point infill_origin; + const Point2LL infill_origin; constexpr bool skip_stitching = false; constexpr bool fill_gaps = true; constexpr bool use_endpieces = true; @@ -3613,7 +3613,7 @@ bool FffGcodeWriter::addSupportBottomsToGCode(const SliceDataStorage& storage, L const auto wall_line_count = bottom_extruder.settings_.get("support_bottom_wall_count"); const coord_t small_area_width = bottom_extruder.settings_.get("min_even_wall_line_width") * 2; // Maximum width of a region that can still be filled with one wall. - const Point infill_origin; + const Point2LL infill_origin; constexpr bool skip_stitching = false; constexpr bool fill_gaps = true; constexpr bool use_endpieces = true; @@ -3714,7 +3714,7 @@ void FffGcodeWriter::setExtruder_addPrime(const SliceDataStorage& storage, Layer if (train.settings_.get("prime_blob_enable")) // Don't travel to the prime-blob position if not enabled though. { bool prime_pos_is_abs = train.settings_.get("extruder_prime_pos_abs"); - Point prime_pos = Point(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); + Point2LL prime_pos = Point2LL(train.settings_.get("extruder_prime_pos_x"), train.settings_.get("extruder_prime_pos_y")); gcode_layer.addTravel(prime_pos_is_abs ? prime_pos : gcode_layer.getLastPlannedPositionOrStartingPosition() + prime_pos); gcode_layer.planPrime(); } diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index ae79c909fc..fa25f1e1db 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -672,8 +672,8 @@ void FffPolygonGenerator::processDerivedWallsSkinInfill(SliceMeshStorage& mesh) // SubDivCube Pre-compute Octree if (mesh.settings.get("infill_line_distance") > 0 && mesh.settings.get("infill_pattern") == EFillMethod::CUBICSUBDIV) { - const Point3 mesh_middle = mesh.bounding_box.getMiddle(); - const Point infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); + const Point3LL mesh_middle = mesh.bounding_box.getMiddle(); + const Point2LL infill_origin(mesh_middle.x_ + mesh.settings.get("infill_offset_x"), mesh_middle.y_ + mesh.settings.get("infill_offset_y")); SubDivCube::precomputeOctree(mesh, infill_origin); } @@ -1145,21 +1145,21 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) } // 'a' is the (next) new point between p0 and p1 - const Point p0p1 = p1.p_ - p0->p_; + const Point2LL p0p1 = p1.p_ - p0->p_; const int64_t p0p1_size = vSize(p0p1); int64_t p0pa_dist = dist_left_over; if (p0pa_dist >= p0p1_size) { - const Point p = p1.p_ - (p0p1 / 2); + const Point2LL p = p1.p_ - (p0p1 / 2); const double width = (p1.w_ * vSize(p1.p_ - p) + p0->w_ * vSize(p0->p_ - p)) / p0p1_size; result.emplace_back(p, width, p1.perimeter_index_); } for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + rand() % range_random_point_dist) { const int r = rand() % (fuzziness * 2) - fuzziness; - const Point perp_to_p0p1 = turn90CCW(p0p1); - const Point fuzz = normal(perp_to_p0p1, r); - const Point pa = p0->p_ + normal(p0p1, p0pa_dist); + const Point2LL perp_to_p0p1 = turn90CCW(p0p1); + const Point2LL fuzz = normal(perp_to_p0p1, r); + const Point2LL pa = p0->p_ + normal(p0p1, p0pa_dist); const double width = (p1.w_ * vSize(p1.p_ - pa) + p0->w_ * vSize(p0->p_ - pa)) / p0p1_size; result.emplace_back(pa + fuzz, width, p1.perimeter_index_); } diff --git a/src/GCodePathConfig.cpp b/src/GCodePathConfig.cpp index 2aacd198ad..6cdfbd5d66 100644 --- a/src/GCodePathConfig.cpp +++ b/src/GCodePathConfig.cpp @@ -3,7 +3,7 @@ #include "GCodePathConfig.h" -#include "utils/IntPoint.h" // INT2MM +#include "utils/Point2LL.h" // INT2MM namespace cura { diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 13bd3141ae..ba4528eb51 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -60,7 +60,7 @@ void InterlockingGenerator::generateInterlockingStructure(std::vector& const DilationKernel air_dilation(GridPoint3(boundary_avoidance, boundary_avoidance, boundary_avoidance), DilationKernel::Type::PRISM); const coord_t cell_width = beam_width_a + beam_width_b; - const Point3 cell_size(cell_width, cell_width, 2 * beam_layer_count); + const Point3LL cell_size(cell_width, cell_width, 2 * beam_layer_count); InterlockingGenerator gen(mesh_a, mesh_b, beam_width_a, beam_width_b, rotation, cell_size, beam_layer_count, interface_dilation, air_dilation, air_filtering); gen.generateInterlockingStructure(); @@ -108,7 +108,7 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set near_interlock_per_layer.assign(std::min(mesh_a_.layers.size(), mesh_b_.layers.size()), Polygons()); for (const auto& cell : has_all_meshes) { - const Point3 bottom_corner = vu_.toLowerCorner(cell); + const Point3LL bottom_corner = vu_.toLowerCorner(cell); for (int layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < near_interlock_per_layer.size(); ++layer_nr) { near_interlock_per_layer[layer_nr].add(vu_.toPolygon(cell)); @@ -252,21 +252,21 @@ std::vector> InterlockingGenerator::generateMicrostructure const coord_t width[2] = { middle, cell_size_.x_ - middle }; for (size_t mesh_idx : { 0, 1 }) { - Point offset(mesh_idx ? middle : 0, 0); - Point area_size(width[mesh_idx], cell_size_.y_); + Point2LL offset(mesh_idx ? middle : 0, 0); + Point2LL area_size(width[mesh_idx], cell_size_.y_); PolygonRef poly = cell_area_per_mesh_per_layer[0][mesh_idx].newPoly(); poly.emplace_back(offset); - poly.emplace_back(offset + Point(area_size.X, 0)); + poly.emplace_back(offset + Point2LL(area_size.X, 0)); poly.emplace_back(offset + area_size); - poly.emplace_back(offset + Point(0, area_size.Y)); + poly.emplace_back(offset + Point2LL(0, area_size.Y)); } cell_area_per_mesh_per_layer[1] = cell_area_per_mesh_per_layer[0]; for (Polygons& polys : cell_area_per_mesh_per_layer[1]) { for (PolygonRef poly : polys) { - for (Point& p : poly) + for (Point2LL& p : poly) { std::swap(p.X, p.Y); } @@ -294,13 +294,13 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s // Only compute cell structure for half the layers, because since our beams are two layers high, every odd layer of the structure will be the same as the layer below. for (const GridPoint3& grid_loc : cells) { - Point3 bottom_corner = vu_.toLowerCorner(grid_loc); + Point3LL bottom_corner = vu_.toLowerCorner(grid_loc); for (size_t mesh_idx = 0; mesh_idx < 2; mesh_idx++) { for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count_) { Polygons areas_here = cell_area_per_mesh_per_layer[(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; - areas_here.translate(Point(bottom_corner.x_, bottom_corner.y_)); + areas_here.translate(Point2LL(bottom_corner.x_, bottom_corner.y_)); structure_per_layer[mesh_idx][layer_nr / beam_layer_count_].add(areas_here); } } diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index e4ddda09e6..9ad194fb47 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -236,14 +236,14 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) { // handle end position of the prev extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); const bool end_pos_absolute = extruder->settings_.get("machine_extruder_end_pos_abs"); - Point end_pos(extruder->settings_.get("machine_extruder_end_pos_x"), extruder->settings_.get("machine_extruder_end_pos_y")); + Point2LL end_pos(extruder->settings_.get("machine_extruder_end_pos_x"), extruder->settings_.get("machine_extruder_end_pos_y")); if (! end_pos_absolute) { end_pos += getLastPlannedPositionOrStartingPosition(); } else { - const Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); + const Point2LL extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); end_pos += extruder_offset; // absolute end pos is given as a head position } if (end_pos_absolute || last_planned_position_) @@ -269,14 +269,14 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) { // handle starting pos of the new extruder ExtruderTrain* extruder = getLastPlannedExtruderTrain(); const bool start_pos_absolute = extruder->settings_.get("machine_extruder_start_pos_abs"); - Point start_pos(extruder->settings_.get("machine_extruder_start_pos_x"), extruder->settings_.get("machine_extruder_start_pos_y")); + Point2LL start_pos(extruder->settings_.get("machine_extruder_start_pos_x"), extruder->settings_.get("machine_extruder_start_pos_y")); if (! start_pos_absolute) { start_pos += getLastPlannedPositionOrStartingPosition(); } else { - Point extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); + Point2LL extruder_offset(extruder->settings_.get("machine_nozzle_offset_x"), extruder->settings_.get("machine_nozzle_offset_y")); start_pos += extruder_offset; // absolute start pos is given as a head position } if (start_pos_absolute || last_planned_position_) @@ -295,7 +295,7 @@ void LayerPlan::moveInsideCombBoundary(const coord_t distance, const std::option { constexpr coord_t max_dist2 = MM2INT(2.0) * MM2INT(2.0); // if we are further than this distance, we conclude we are not inside even though we thought we were. // this function is to be used to move from the boundary of a part to inside the part - Point p = getLastPlannedPositionOrStartingPosition(); // copy, since we are going to move p + Point2LL p = getLastPlannedPositionOrStartingPosition(); // copy, since we are going to move p if (PolygonUtils::moveInside(comb_boundary_preferred_, p, distance, max_dist2) != NO_INDEX) { // Move inside again, so we move out of tight 90deg corners @@ -319,9 +319,9 @@ void LayerPlan::setPrimeTowerIsPlanned(unsigned int extruder_nr) has_prime_tower_planned_per_extruder_[extruder_nr] = true; } -std::optional> LayerPlan::getFirstTravelDestinationState() const +std::optional> LayerPlan::getFirstTravelDestinationState() const { - std::optional> ret; + std::optional> ret; if (first_travel_destination_) { ret = std::make_pair(*first_travel_destination_, first_travel_destination_is_inside_); @@ -329,7 +329,7 @@ std::optional> LayerPlan::getFirstTravelDestinationState( return ret; } -GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const coord_t z_offset) +GCodePath& LayerPlan::addTravel(const Point2LL& p, const bool force_retract, const coord_t z_offset) { const GCodePathConfig& travel_config = configs_storage_.travel_config_per_extruder[getExtruder()]; @@ -418,14 +418,14 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const const coord_t maximum_travel_resolution = mesh_or_extruder_settings.get("meshfix_maximum_travel_resolution"); coord_t distance = 0; - Point last_point((last_planned_position_) ? *last_planned_position_ : Point(0, 0)); + Point2LL last_point((last_planned_position_) ? *last_planned_position_ : Point2LL(0, 0)); for (CombPath& combPath : combPaths) { // add all comb paths (don't do anything special for paths which are moving through air) if (combPath.empty()) { continue; } - for (Point& comb_point : combPath) + for (Point2LL& comb_point : combPath) { if (path->points.empty() || vSize2(path->points.back() - comb_point) > maximum_travel_resolution * maximum_travel_resolution) { @@ -482,7 +482,7 @@ GCodePath& LayerPlan::addTravel(const Point& p, const bool force_retract, const return ret; } -GCodePath& LayerPlan::addTravel_simple(const Point& p, GCodePath* path) +GCodePath& LayerPlan::addTravel_simple(const Point2LL& p, GCodePath* path) { bool is_first_travel_of_layer = ! static_cast(last_planned_position_); if (is_first_travel_of_layer) @@ -502,7 +502,7 @@ GCodePath& LayerPlan::addTravel_simple(const Point& p, GCodePath* path) void LayerPlan::planPrime(double prime_blob_wipe_length) { forceNewPathStart(); - GCodePath& prime_travel = addTravel_simple(getLastPlannedPositionOrStartingPosition() + Point(0, MM2INT(prime_blob_wipe_length))); + GCodePath& prime_travel = addTravel_simple(getLastPlannedPositionOrStartingPosition() + Point2LL(0, MM2INT(prime_blob_wipe_length))); prime_travel.retract = false; prime_travel.perform_z_hop = false; prime_travel.perform_prime = true; @@ -510,7 +510,7 @@ void LayerPlan::planPrime(double prime_blob_wipe_length) } void LayerPlan::addExtrusionMove( - const Point p, + const Point2LL p, const GCodePathConfig& config, const SpaceFillType space_fill_type, const Ratio& flow, @@ -540,12 +540,12 @@ void LayerPlan::addPolygon( bool always_retract) { constexpr Ratio width_ratio = 1.0_r; // Not printed with variable line width. - Point p0 = polygon[start_idx]; + Point2LL p0 = polygon[start_idx]; addTravel(p0, always_retract, config.z_offset); const int direction = backwards ? -1 : 1; for (size_t point_idx = 1; point_idx < polygon.size(); point_idx++) { - Point p1 = polygon[(start_idx + point_idx * direction + polygon.size()) % polygon.size()]; + Point2LL p1 = polygon[(start_idx + point_idx * direction + polygon.size()) % polygon.size()]; addExtrusionMove(p1, config, SpaceFillType::Polygons, flow_ratio, width_ratio, spiralize); p0 = p1; } @@ -559,12 +559,12 @@ void LayerPlan::addPolygon( int distance_traversed = 0; for (size_t point_idx = 1;; point_idx++) { - Point p1 = polygon[(start_idx + point_idx * direction + polygon.size()) % polygon.size()]; + Point2LL p1 = polygon[(start_idx + point_idx * direction + polygon.size()) % polygon.size()]; int p0p1_dist = vSize(p1 - p0); if (distance_traversed + p0p1_dist >= wall_0_wipe_dist) { - Point vector = p1 - p0; - Point half_way = p0 + normal(vector, wall_0_wipe_dist - distance_traversed); + Point2LL vector = p1 - p0; + Point2LL half_way = p0 + normal(vector, wall_0_wipe_dist - distance_traversed); addTravel_simple(half_way); break; } @@ -593,7 +593,7 @@ void LayerPlan::addPolygonsByOptimizer( const Ratio flow_ratio, bool always_retract, bool reverse_order, - const std::optional start_near_location) + const std::optional start_near_location) { if (polygons.empty()) { @@ -626,8 +626,8 @@ void LayerPlan::addPolygonsByOptimizer( static constexpr double max_non_bridge_line_volume = MM2INT(100); // limit to accumulated "volume" of non-bridge lines which is proportional to distance x extrusion rate void LayerPlan::addWallLine( - const Point& p0, - const Point& p1, + const Point2LL& p0, + const Point2LL& p1, const Settings& settings, const GCodePathConfig& non_bridge_config, const GCodePathConfig& bridge_config, @@ -646,7 +646,7 @@ void LayerPlan::addWallLine( const Ratio bridge_wall_coast = settings.get("bridge_wall_coast"); const Ratio overhang_speed_factor = settings.get("wall_overhang_speed_factor"); - Point cur_point = p0; + Point2LL cur_point = p0; // helper function to add a single non-bridge line @@ -654,14 +654,14 @@ void LayerPlan::addWallLine( // alternatively, if the line follows a bridge line, it may be segmented and the print speed gradually increased to reduce under-extrusion - auto addNonBridgeLine = [&](const Point& line_end) + auto addNonBridgeLine = [&](const Point2LL& line_end) { coord_t distance_to_line_end = vSize(cur_point - line_end); while (distance_to_line_end > min_line_len) { // if we are accelerating after a bridge line, the segment length is less than the whole line length - Point segment_end = (speed_factor == 1 || distance_to_line_end < acceleration_segment_len) + Point2LL segment_end = (speed_factor == 1 || distance_to_line_end < acceleration_segment_len) ? line_end : cur_point + (line_end - cur_point) * acceleration_segment_len / distance_to_line_end; @@ -788,8 +788,8 @@ void LayerPlan::addWallLine( ConstPolygonRef bridge = line_polys[nearest]; // set b0 to the nearest vertex and b1 the furthest - Point b0 = bridge[0]; - Point b1 = bridge[1]; + Point2LL b0 = bridge[0]; + Point2LL b1 = bridge[1]; if (vSize2f(cur_point - b1) < vSize2f(cur_point - b0)) { @@ -870,7 +870,7 @@ void LayerPlan::addWall( std::for_each( wall.begin(), wall.end(), - [&dummy_perimeter_id, &nominal_line_width, &ewall](const Point& p) + [&dummy_perimeter_id, &nominal_line_width, &ewall](const Point2LL& p) { ewall.emplace_back(p, nominal_line_width, dummy_perimeter_id); }); @@ -956,8 +956,8 @@ void LayerPlan::addWall( ConstPolygonRef bridge = line_polys[nearest]; // set b0 to the nearest vertex and b1 the furthest - Point b0 = bridge[0]; - Point b1 = bridge[1]; + Point2LL b0 = bridge[0]; + Point2LL b1 = bridge[1]; if (vSize2f(p0.p_ - b1) < vSize2f(p0.p_ - b0)) { @@ -1036,7 +1036,7 @@ void LayerPlan::addWall( is not too short at the end. */ const coord_t delta_line_width = p1.w_ - p0.w_; - const Point line_vector = p1.p_ - p0.p_; + const Point2LL line_vector = p1.p_ - p0.p_; const coord_t line_length = vSize(line_vector); /* Calculate how much the line would deviate from the trapezoidal shape if printed at average width. @@ -1056,7 +1056,7 @@ void LayerPlan::addWall( { const double average_progress = (double(piece) + 0.5) / pieces; // How far along this line to sample the line width in the middle of this piece. const coord_t line_width = p0.w_ + average_progress * delta_line_width; - const Point destination = p0.p_ + normal(line_vector, piece_length * (piece + 1)); + const Point2LL destination = p0.p_ + normal(line_vector, piece_length * (piece + 1)); if (is_small_feature) { constexpr bool spiralize = false; @@ -1071,7 +1071,7 @@ void LayerPlan::addWall( } else { - const Point origin = p0.p_ + normal(line_vector, piece_length * piece); + const Point2LL origin = p0.p_ + normal(line_vector, piece_length * piece); addWallLine( origin, destination, @@ -1110,8 +1110,8 @@ void LayerPlan::addWall( int p0p1_dist = vSize(p1 - p0); if (distance_traversed + p0p1_dist >= wall_0_wipe_dist) { - Point vector = p1.p_ - p0.p_; - Point half_way = p0.p_ + normal(vector, wall_0_wipe_dist - distance_traversed); + Point2LL vector = p1.p_ - p0.p_; + Point2LL half_way = p0.p_ + normal(vector, wall_0_wipe_dist - distance_traversed); addTravel_simple(half_way); break; } @@ -1178,7 +1178,7 @@ void LayerPlan::addLinesByOptimizer( const bool enable_travel_optimization, const coord_t wipe_dist, const Ratio flow_ratio, - const std::optional near_start_location, + const std::optional near_start_location, const double fan_speed, const bool reverse_print_direction, const std::unordered_multimap& order_requirements) @@ -1239,7 +1239,7 @@ void LayerPlan::addLinesInGivenOrder( ConstPolygonRef polyline = *path.vertices_; const size_t start_idx = path.start_vertex_; assert(start_idx == 0 || start_idx == polyline.size() - 1 || path.is_closed_); - const Point start = polyline[start_idx]; + const Point2LL start = polyline[start_idx]; if (vSize2(getLastPlannedPositionOrStartingPosition() - start) < line_width_2) { @@ -1256,7 +1256,7 @@ void LayerPlan::addLinesInGivenOrder( addTravel(start, false, config.z_offset); } - Point p0 = start; + Point2LL p0 = start; for (size_t idx = 0; idx < polyline.size(); idx++) { size_t point_idx; @@ -1273,7 +1273,7 @@ void LayerPlan::addLinesInGivenOrder( assert(start_idx == polyline.size() - 1); point_idx = start_idx - idx; } - Point p1 = polyline[point_idx]; + Point2LL p1 = polyline[point_idx]; // ignore line segments that are less than 5uM long if (vSize2(p1 - p0) >= MINIMUM_SQUARED_LINE_LENGTH) @@ -1286,7 +1286,7 @@ void LayerPlan::addLinesInGivenOrder( } } - Point p1 = polyline[(start_idx == 0) ? polyline.size() - 1 : 0]; + Point2LL p1 = polyline[(start_idx == 0) ? polyline.size() - 1 : 0]; p0 = (polyline.size() <= 1) ? p1 : polyline[(start_idx == 0) ? polyline.size() - 2 : 1]; // Wipe @@ -1307,7 +1307,7 @@ void LayerPlan::addLinesInGivenOrder( const PathOrdering& next_path = paths[order_idx + 1]; ConstPolygonRef next_polygon = *next_path.vertices_; const size_t next_start = next_path.start_vertex_; - const Point& next_p0 = next_polygon[next_start]; + const Point2LL& next_p0 = next_polygon[next_start]; if (vSize2(next_p0 - p1) <= line_width * line_width * 4) { wipe = false; @@ -1340,7 +1340,7 @@ void LayerPlan::addLinesMonotonic( { const Polygons exclude_areas = area.tubeShape(exclude_distance, exclude_distance); const coord_t exclude_dist2 = exclude_distance * exclude_distance; - const Point last_position = getLastPlannedPositionOrStartingPosition(); + const Point2LL last_position = getLastPlannedPositionOrStartingPosition(); // First lay all adjacent lines next to each other, to have a sensible input to the monotonic part of the algorithm. PathOrderOptimizer line_order(last_position); @@ -1397,7 +1397,7 @@ void LayerPlan::spiralizeWallSlice( constexpr Ratio width_factor = 1.0_r; // once we are into the spiral we always start at the end point of the last layer (if any) - const Point origin = (last_seam_vertex_idx >= 0 && ! is_bottom_layer) ? last_wall[last_seam_vertex_idx] : wall[seam_vertex_idx]; + const Point2LL origin = (last_seam_vertex_idx >= 0 && ! is_bottom_layer) ? last_wall[last_seam_vertex_idx] : wall[seam_vertex_idx]; // NOTE: this used to use addTravel_simple() but if support is being generated then combed travel is required to avoid // the nozzle crossing the model on its return from printing the support. addTravel(origin); @@ -1407,7 +1407,7 @@ void LayerPlan::spiralizeWallSlice( // when not smoothing, we get to the (unchanged) outline for this layer as quickly as possible so that the remainder of the // outline wall has the correct direction - although this creates a little step, the end result is generally better because when the first // outline wall has the wrong direction (due to it starting from the finish point of the last layer) the visual effect is very noticeable - Point join_first_wall_at = LinearAlg2D::getClosestOnLineSegment(origin, wall[seam_vertex_idx % wall.size()], wall[(seam_vertex_idx + 1) % wall.size()]); + Point2LL join_first_wall_at = LinearAlg2D::getClosestOnLineSegment(origin, wall[seam_vertex_idx % wall.size()], wall[(seam_vertex_idx + 1) % wall.size()]); if (vSize(join_first_wall_at - origin) > 10) { constexpr Ratio flow = 1.0_r; @@ -1421,10 +1421,10 @@ void LayerPlan::spiralizeWallSlice( const int max_dist2 = config.getLineWidth() * config.getLineWidth() * 4; // (2 * lineWidth)^2; double total_length = 0.0; // determine the length of the complete wall - Point p0 = origin; + Point2LL p0 = origin; for (int wall_point_idx = 1; wall_point_idx <= n_points; ++wall_point_idx) { - const Point& p1 = wall[(seam_vertex_idx + wall_point_idx) % n_points]; + const Point2LL& p1 = wall[(seam_vertex_idx + wall_point_idx) % n_points]; total_length += vSizeMM(p1 - p0); p0 = p1; } @@ -1476,7 +1476,7 @@ void LayerPlan::spiralizeWallSlice( for (int wall_point_idx = 1; wall_point_idx <= n_points; ++wall_point_idx) { // p is a point from the current wall polygon - const Point& p = wall[(seam_vertex_idx + wall_point_idx) % n_points]; + const Point2LL& p = wall[(seam_vertex_idx + wall_point_idx) % n_points]; wall_length += vSizeMM(p - p0); p0 = p; @@ -1517,7 +1517,7 @@ void LayerPlan::spiralizeWallSlice( wall_length = 0; for (int wall_point_idx = 1; wall_point_idx <= n_points && distance_coasted < min_spiral_coast_dist; wall_point_idx++) { - const Point& p = wall[(seam_vertex_idx + wall_point_idx) % n_points]; + const Point2LL& p = wall[(seam_vertex_idx + wall_point_idx) % n_points]; const double seg_length = vSizeMM(p - p0); wall_length += seg_length; p0 = p; @@ -1620,15 +1620,15 @@ double ExtruderPlan::getRetractTime(const GCodePath& path) return retraction_config_.distance / (path.retract ? retraction_config_.speed : retraction_config_.primeSpeed); } -std::pair ExtruderPlan::getPointToPointTime(const Point& p0, const Point& p1, const GCodePath& path) +std::pair ExtruderPlan::getPointToPointTime(const Point2LL& p0, const Point2LL& p1, const GCodePath& path) { const double length = vSizeMM(p0 - p1); return { length, length / (path.config.getSpeed() * path.speed_factor) }; } -TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_position) +TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point2LL starting_position) { - Point p0 = starting_position; + Point2LL p0 = starting_position; const double min_path_speed = fan_speed_layer_time_settings_.cool_min_speed; slowest_path_speed_ = std::accumulate( @@ -1680,7 +1680,7 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos path.estimates.unretracted_travel_time += 0.5 * retract_unretract_time; } } - for (Point& p1 : path.points) + for (Point2LL& p1 : path.points) { double length = vSizeMM(p0 - p1); if (is_extrusion_path) @@ -1701,7 +1701,7 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point starting_pos return estimates_; } -void ExtruderPlan::processFanSpeedForMinimalLayerTime(Point starting_position, Duration minTime, double time_other_extr_plans) +void ExtruderPlan::processFanSpeedForMinimalLayerTime(Point2LL starting_position, Duration minTime, double time_other_extr_plans) { /* min layer time @@ -1768,7 +1768,7 @@ void ExtruderPlan::processFanSpeedForFirstLayers() } } -void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) +void LayerPlan::processFanSpeedAndMinimalLayerTime(Point2LL starting_position) { // the minimum layer time behaviour is only applied to the last extruder. const size_t last_extruder_nr = ranges::max_element( @@ -1778,7 +1778,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point starting_position) return a.extruder_nr_ < b.extruder_nr_; }) ->extruder_nr_; - Point starting_position_last_extruder; + Point2LL starting_position_last_extruder; unsigned int last_extruder_idx; double other_extr_plan_time = 0.0; Duration maximum_cool_min_layer_time; @@ -2071,7 +2071,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) if (! path.perform_z_hop && final_travel_z_ != z_ && extruder_plan_idx == (extruder_plans_.size() - 1) && path_idx == (paths.size() - 1)) { // Before the final travel, move up to the next layer height, on the current spot, with a sensible speed. - Point3 current_position = gcode.getPosition(); + Point3LL current_position = gcode.getPosition(); current_position.z_ = final_travel_z_; gcode.writeTravel(current_position, extruder.settings_.get("speed_z_hop")); @@ -2105,7 +2105,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) } if (! coasting) // not same as 'else', cause we might have changed [coasting] in the line above... { // normal path to gcode algorithm - Point prev_point = gcode.getPositionXY(); + Point2LL prev_point = gcode.getPositionXY(); for (unsigned int point_idx = 0; point_idx < path.points.size(); point_idx++) { const auto [_, time] = extruder_plan.getPointToPointTime(prev_point, path.points[point_idx], path); @@ -2123,13 +2123,13 @@ void LayerPlan::writeGCode(GCodeExport& gcode) { // SPIRALIZE // If we need to spiralize then raise the head slowly by 1 layer as this path progresses. double totalLength = 0.0; - Point p0 = gcode.getPositionXY(); + Point2LL p0 = gcode.getPositionXY(); for (unsigned int _path_idx = path_idx; _path_idx < paths.size() && ! paths[_path_idx].isTravelPath(); _path_idx++) { GCodePath& _path = paths[_path_idx]; for (unsigned int point_idx = 0; point_idx < _path.points.size(); point_idx++) { - Point p1 = _path.points[point_idx]; + Point2LL p1 = _path.points[point_idx]; totalLength += vSizeMM(p0 - p1); p0 = p1; } @@ -2143,7 +2143,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode) for (unsigned int point_idx = 0; point_idx < spiral_path.points.size(); point_idx++) { - const Point p1 = spiral_path.points[point_idx]; + const Point2LL p1 = spiral_path.points[point_idx]; length += vSizeMM(p0 - p1); p0 = p1; gcode.setZ(std::round(z_ + layer_thickness_ * length / totalLength)); @@ -2288,10 +2288,10 @@ bool LayerPlan::writePathWithCoasting( unsigned int acc_dist_idx_gt_coast_dist = NO_INDEX; // the index of the first point with accumulated_dist more than coasting_dist (= index into accumulated_dist_per_point) // == the point printed BEFORE the start point for coasting - const Point* last = &path.points[path.points.size() - 1]; + const Point2LL* last = &path.points[path.points.size() - 1]; for (unsigned int backward_point_idx = 1; backward_point_idx < path.points.size(); backward_point_idx++) { - const Point& point = path.points[path.points.size() - 1 - backward_point_idx]; + const Point2LL& point = path.points[path.points.size() - 1 - backward_point_idx]; const coord_t distance = vSize(point - *last); accumulated_dist += distance; accumulated_dist_per_point.push_back(accumulated_dist); @@ -2336,15 +2336,15 @@ bool LayerPlan::writePathWithCoasting( const size_t point_idx_before_start = path.points.size() - 1 - acc_dist_idx_gt_coast_dist; - Point start; + Point2LL start; { // computation of begin point of coasting const coord_t residual_dist = actual_coasting_dist - accumulated_dist_per_point[acc_dist_idx_gt_coast_dist - 1]; - const Point& a = path.points[point_idx_before_start]; - const Point& b = path.points[point_idx_before_start + 1]; + const Point2LL& a = path.points[point_idx_before_start]; + const Point2LL& b = path.points[point_idx_before_start + 1]; start = b + normal(a - b, residual_dist); } - Point prev_pt = gcode.getPositionXY(); + Point2LL prev_pt = gcode.getPositionXY(); { // write normal extrude path: Communication* communication = Application::getInstance().communication_; for (size_t point_idx = 0; point_idx <= point_idx_before_start; point_idx++) @@ -2438,7 +2438,7 @@ LayerIndex LayerPlan::getLayerNr() const return layer_nr_; } -Point LayerPlan::getLastPlannedPositionOrStartingPosition() const +Point2LL LayerPlan::getLastPlannedPositionOrStartingPosition() const { return last_planned_position_.value_or(layer_start_pos_per_extruder_[getExtruder()]); } diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index c2c85d9b8c..453d55f7f4 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -80,7 +80,7 @@ void LayerPlanBuffer::flush() void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const LayerPlan* newest_layer) { - std::optional> new_layer_destination_state = newest_layer->getFirstTravelDestinationState(); + std::optional> new_layer_destination_state = newest_layer->getFirstTravelDestinationState(); if (! new_layer_destination_state) { @@ -88,7 +88,7 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer return; } - Point first_location_new_layer = new_layer_destination_state->first; + Point2LL first_location_new_layer = new_layer_destination_state->first; assert(newest_layer->extruder_plans_.front().paths_[0].points.size() == 1); assert(newest_layer->extruder_plans_.front().paths_[0].points[0] == first_location_new_layer); @@ -125,7 +125,7 @@ void LayerPlanBuffer::processFanSpeedLayerTime() // Assume the print head is homed at the start of a mesh group. // This introduces small inaccuracies for the naive layer time estimates of the first layer of the second mesh group. // It's not that bad, though. They are naive estimates any way. - Point starting_position(0, 0); + Point2LL starting_position(0, 0); if (buffer_.size() >= 2) { auto prev_layer_it = newest_layer_it; diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index 4940471de3..c31623cee6 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -40,13 +40,13 @@ void* fgets_(char* ptr, size_t len, FILE* f) return nullptr; } -Point3 MeshGroup::min() const +Point3LL MeshGroup::min() const { if (meshes.size() < 1) { - return Point3(0, 0, 0); + return Point3LL(0, 0, 0); } - Point3 ret(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); + Point3LL ret(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); for (const Mesh& mesh : meshes) { if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") @@ -54,7 +54,7 @@ Point3 MeshGroup::min() const { continue; } - Point3 v = mesh.min(); + Point3LL v = mesh.min(); ret.x_ = std::min(ret.x_, v.x_); ret.y_ = std::min(ret.y_, v.y_); ret.z_ = std::min(ret.z_, v.z_); @@ -62,13 +62,13 @@ Point3 MeshGroup::min() const return ret; } -Point3 MeshGroup::max() const +Point3LL MeshGroup::max() const { if (meshes.size() < 1) { - return Point3(0, 0, 0); + return Point3LL(0, 0, 0); } - Point3 ret(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); + Point3LL ret(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); for (const Mesh& mesh : meshes) { if (mesh.settings_.get("infill_mesh") || mesh.settings_.get("cutting_mesh") @@ -76,7 +76,7 @@ Point3 MeshGroup::max() const { continue; } - Point3 v = mesh.max(); + Point3LL v = mesh.max(); ret.x_ = std::max(ret.x_, v.x_); ret.y_ = std::max(ret.y_, v.y_); ret.z_ = std::max(ret.z_, v.z_); @@ -95,7 +95,7 @@ void MeshGroup::clear() void MeshGroup::finalize() { // If the machine settings have been supplied, offset the given position vertices to the center of vertices (0,0,0) is at the bed center. - Point3 meshgroup_offset(0, 0, 0); + Point3LL meshgroup_offset(0, 0, 0); if (! settings.get("machine_center_is_zero")) { meshgroup_offset.x_ = settings.get("machine_width") / 2; @@ -105,13 +105,13 @@ void MeshGroup::finalize() // If a mesh position was given, put the mesh at this position in 3D space. for (Mesh& mesh : meshes) { - Point3 mesh_offset(mesh.settings_.get("mesh_position_x"), mesh.settings_.get("mesh_position_y"), mesh.settings_.get("mesh_position_z")); + Point3LL mesh_offset(mesh.settings_.get("mesh_position_x"), mesh.settings_.get("mesh_position_y"), mesh.settings_.get("mesh_position_z")); if (mesh.settings_.get("center_object")) { - Point3 object_min = mesh.min(); - Point3 object_max = mesh.max(); - Point3 object_size = object_max - object_min; - mesh_offset += Point3(-object_min.x_ - object_size.x_ / 2, -object_min.y_ - object_size.y_ / 2, -object_min.z_); + Point3LL object_min = mesh.min(); + Point3LL object_max = mesh.max(); + Point3LL object_size = object_max - object_min; + mesh_offset += Point3LL(-object_min.x_ - object_size.x_ / 2, -object_min.y_ - object_size.y_ / 2, -object_min.z_); } mesh.translate(mesh_offset + meshgroup_offset); } @@ -126,8 +126,8 @@ void MeshGroup::finalize() void MeshGroup::scaleFromBottom(const Ratio factor_xy, const Ratio factor_z) { - const Point3 center = (max() + min()) / 2; - const Point3 origin(center.x_, center.y_, 0); + const Point3LL center = (max() + min()) / 2; + const Point3LL origin(center.x_, center.y_, 0); const Matrix4x3D transformation = Matrix4x3D::scale(factor_xy, factor_xy, factor_z, origin); for (Mesh& mesh : meshes) @@ -142,7 +142,7 @@ bool loadMeshSTL_ascii(Mesh* mesh, const char* filename, const Matrix4x3D& matri char buffer[1024]; Point3F vertex; int n = 0; - Point3 v0(0, 0, 0), v1(0, 0, 0), v2(0, 0, 0); + Point3LL v0(0, 0, 0), v1(0, 0, 0), v2(0, 0, 0); while (fgets_(buffer, sizeof(buffer), f)) { if (sscanf(buffer, " vertex %f %f %f", &vertex.x_, &vertex.y_, &vertex.z_) == 3) @@ -212,9 +212,9 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const Matrix4x3D& matr } float* v = ((float*)buffer) + 3; - Point3 v0 = matrix.apply(Point3F(v[0], v[1], v[2]).toPoint3d()); - Point3 v1 = matrix.apply(Point3F(v[3], v[4], v[5]).toPoint3d()); - Point3 v2 = matrix.apply(Point3F(v[6], v[7], v[8]).toPoint3d()); + Point3LL v0 = matrix.apply(Point3F(v[0], v[1], v[2]).toPoint3d()); + Point3LL v1 = matrix.apply(Point3F(v[3], v[4], v[5]).toPoint3d()); + Point3LL v2 = matrix.apply(Point3F(v[6], v[7], v[8]).toPoint3d()); mesh->addFace(v0, v1, v2); } fclose(f); diff --git a/src/Mold.cpp b/src/Mold.cpp index d46a9ef402..c5149467af 100644 --- a/src/Mold.cpp +++ b/src/Mold.cpp @@ -10,7 +10,7 @@ #include "settings/types/Ratio.h" #include "sliceDataStorage.h" #include "slicer.h" -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" namespace cura { diff --git a/src/PrimeTower.cpp b/src/PrimeTower.cpp index 761103ee1c..b56c94913c 100644 --- a/src/PrimeTower.cpp +++ b/src/PrimeTower.cpp @@ -94,10 +94,10 @@ void PrimeTower::generateGroundpoly() const coord_t x = mesh_group_settings.get("prime_tower_position_x"); const coord_t y = mesh_group_settings.get("prime_tower_position_y"); const coord_t tower_radius = tower_size / 2; - outer_poly_.add(PolygonUtils::makeCircle(Point(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); - middle_ = Point(x - tower_size / 2, y + tower_size / 2); + outer_poly_.add(PolygonUtils::makeCircle(Point2LL(x - tower_radius, y + tower_radius), tower_radius, TAU / CIRCLE_RESOLUTION)); + middle_ = Point2LL(x - tower_size / 2, y + tower_size / 2); - post_wipe_point_ = Point(x - tower_size / 2, y + tower_size / 2); + post_wipe_point_ = Point2LL(x - tower_size / 2, y + tower_size / 2); } void PrimeTower::generatePaths(const SliceDataStorage& storage) @@ -230,9 +230,9 @@ void PrimeTower::addToGcode(const SliceDataStorage& storage, LayerPlan& gcode_la { // Make sure we wipe the old extruder on the prime tower. const Settings& previous_settings = Application::getInstance().current_slice_->scene.extruders[prev_extruder].settings_; - const Point previous_nozzle_offset = Point(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); + const Point2LL previous_nozzle_offset = Point2LL(previous_settings.get("machine_nozzle_offset_x"), previous_settings.get("machine_nozzle_offset_y")); const Settings& new_settings = Application::getInstance().current_slice_->scene.extruders[new_extruder].settings_; - const Point new_nozzle_offset = Point(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); + const Point2LL new_nozzle_offset = Point2LL(new_settings.get("machine_nozzle_offset_x"), new_settings.get("machine_nozzle_offset_y")); gcode_layer.addTravel(post_wipe_point_ - previous_nozzle_offset + new_nozzle_offset); } @@ -303,9 +303,9 @@ void PrimeTower::gotoStartLocation(LayerPlan& gcode_layer, const int extruder_nr const ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders[extruder_nr]; const coord_t inward_dist = train.settings_.get("machine_nozzle_size") * 3 / 2; const coord_t start_dist = train.settings_.get("machine_nozzle_size") * 2; - const Point prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); - const Point outward_dir = wipe_location.location_ - prime_end; - const Point prime_start = wipe_location.location_ + normal(outward_dir, start_dist); + const Point2LL prime_end = PolygonUtils::moveInsideDiagonally(wipe_location, inward_dist); + const Point2LL outward_dir = wipe_location.location_ - prime_end; + const Point2LL prime_start = wipe_location.location_ + normal(outward_dir, start_dist); gcode_layer.addTravel(prime_start); } diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index eaebbb1683..9cd04a3cbc 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -25,7 +25,7 @@ namespace cura { -SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_type& vd_node, Point p) +SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_type& vd_node, Point2LL p) { auto he_node_it = vd_node_to_he_node_.find(&vd_node); if (he_node_it == vd_node_to_he_node_.end()) @@ -42,13 +42,13 @@ SkeletalTrapezoidation::node_t& SkeletalTrapezoidation::makeNode(vd_t::vertex_ty } void SkeletalTrapezoidation::transferEdge( - Point from, - Point to, + Point2LL from, + Point2LL to, vd_t::edge_type& vd_edge, edge_t*& prev_edge, - Point& start_source_point, - Point& end_source_point, - const std::vector& points, + Point2LL& start_source_point, + Point2LL& end_source_point, + const std::vector& points, const std::vector& segments) { auto he_edge_it = vd_edge_to_he_edge_.find(vd_edge.twin()); @@ -105,7 +105,7 @@ void SkeletalTrapezoidation::transferEdge( } else { - std::vector discretized = discretize(vd_edge, points, segments); + std::vector discretized = discretize(vd_edge, points, segments); assert(discretized.size() >= 2); if (discretized.size() < 2) { @@ -119,10 +119,10 @@ void SkeletalTrapezoidation::transferEdge( } node_t* v0 = (prev_edge) ? prev_edge->to_ : &makeNode(*vd_edge.vertex0(), from); // TODO: investigate whether boost:voronoi can produce multiple verts and violates consistency - Point p0 = discretized.front(); + Point2LL p0 = discretized.front(); for (size_t p1_idx = 1; p1_idx < discretized.size(); p1_idx++) { - Point p1 = discretized[p1_idx]; + Point2LL p1 = discretized[p1_idx]; node_t* v1; if (p1_idx < discretized.size() - 1) { @@ -161,7 +161,7 @@ void SkeletalTrapezoidation::transferEdge( } } -std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_edge, const std::vector& points, const std::vector& segments) +std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_edge, const std::vector& points, const std::vector& segments) { /*Terminology in this function assumes that the edge moves horizontally from left to right. This is not necessarily the case; the edge can go in any @@ -169,18 +169,18 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ const vd_t::cell_type* left_cell = vd_edge.cell(); const vd_t::cell_type* right_cell = vd_edge.twin()->cell(); - Point start = VoronoiUtils::p(vd_edge.vertex0()); - Point end = VoronoiUtils::p(vd_edge.vertex1()); + Point2LL start = VoronoiUtils::p(vd_edge.vertex0()); + Point2LL end = VoronoiUtils::p(vd_edge.vertex1()); bool point_left = left_cell->contains_point(); bool point_right = right_cell->contains_point(); if ((! point_left && ! point_right) || vd_edge.is_secondary()) // Source vert is directly connected to source segment { - return std::vector({ start, end }); + return std::vector({ start, end }); } else if (point_left != point_right) // This is a parabolic edge between a point and a line. { - Point p = VoronoiUtils::getSourcePoint(*(point_left ? left_cell : right_cell), points, segments); + Point2LL p = VoronoiUtils::getSourcePoint(*(point_left ? left_cell : right_cell), points, segments); const Segment& s = VoronoiUtils::getSourceSegment(*(point_left ? right_cell : left_cell), points, segments); return VoronoiUtils::discretizeParabola(p, s, start, end, discretization_step_size_, transitioning_angle_); } @@ -189,16 +189,16 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ /*While the edge is straight, it is still discretized since the part becomes narrower between the two points. As such it may need different beadings along the way.*/ - Point left_point = VoronoiUtils::getSourcePoint(*left_cell, points, segments); - Point right_point = VoronoiUtils::getSourcePoint(*right_cell, points, segments); + Point2LL left_point = VoronoiUtils::getSourcePoint(*left_cell, points, segments); + Point2LL right_point = VoronoiUtils::getSourcePoint(*right_cell, points, segments); coord_t d = vSize(right_point - left_point); - Point middle = (left_point + right_point) / 2; - Point x_axis_dir = turn90CCW(right_point - left_point); + Point2LL middle = (left_point + right_point) / 2; + Point2LL x_axis_dir = turn90CCW(right_point - left_point); coord_t x_axis_length = vSize(x_axis_dir); - const auto projected_x = [x_axis_dir, x_axis_length, middle](Point from) // Project a point on the edge. + const auto projected_x = [x_axis_dir, x_axis_length, middle](Point2LL from) // Project a point on the edge. { - Point vec = from - middle; + Point2LL vec = from - middle; coord_t x = dot(vec, x_axis_dir) / x_axis_length; return x; }; @@ -210,8 +210,8 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ double bound = 0.5 / tan((std::numbers::pi - transitioning_angle_) * 0.5); coord_t marking_start_x = -d * bound; coord_t marking_end_x = d * bound; - Point marking_start = middle + x_axis_dir * marking_start_x / x_axis_length; - Point marking_end = middle + x_axis_dir * marking_end_x / x_axis_length; + Point2LL marking_start = middle + x_axis_dir * marking_start_x / x_axis_length; + Point2LL marking_end = middle + x_axis_dir * marking_end_x / x_axis_length; int direction = 1; if (start_x > end_x) // Oops, the Voronoi edge is the other way around. @@ -222,9 +222,9 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ } // Start generating points along the edge. - Point a = start; - Point b = end; - std::vector ret; + Point2LL a = start; + Point2LL b = end; + std::vector ret; ret.emplace_back(a); // Introduce an extra edge at the borders of the markings? @@ -232,7 +232,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ bool add_marking_end = marking_end_x * direction > start_x * direction; // The edge's length may not be divisible by the step size, so calculate an integer step count and evenly distribute the vertices among those. - Point ab = b - a; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); coord_t step_count = (ab_size + discretization_step_size_ / 2) / discretization_step_size_; if (step_count % 2 == 1) @@ -241,7 +241,7 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ } for (coord_t step = 1; step < step_count; step++) { - Point here = a + ab * step / step_count; // Now simply interpolate the coordinates to get the new vertices! + Point2LL here = a + ab * step / step_count; // Now simply interpolate the coordinates to get the new vertices! coord_t x_here = projected_x(here); // If we've surpassed the position of the extra markings, we may need to insert them first. if (add_marking_start && marking_start_x * direction < x_here * direction) { @@ -267,11 +267,11 @@ std::vector SkeletalTrapezoidation::discretize(const vd_t::edge_type& vd_ bool SkeletalTrapezoidation::computePointCellRange( vd_t::cell_type& cell, - Point& start_source_point, - Point& end_source_point, + Point2LL& start_source_point, + Point2LL& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, - const std::vector& points, + const std::vector& points, const std::vector& segments) { if (cell.incident_edge()->is_infinite()) @@ -281,9 +281,9 @@ bool SkeletalTrapezoidation::computePointCellRange( // Check if any point of the cell is inside or outside polygon // Copy whole cell into graph or not at all - const Point source_point = VoronoiUtils::getSourcePoint(cell, points, segments); + const Point2LL source_point = VoronoiUtils::getSourcePoint(cell, points, segments); const PolygonsPointIndex source_point_index = VoronoiUtils::getSourcePointIndex(cell, points, segments); - Point some_point = VoronoiUtils::p(cell.incident_edge()->vertex0()); + Point2LL some_point = VoronoiUtils::p(cell.incident_edge()->vertex0()); if (some_point == source_point) { some_point = VoronoiUtils::p(cell.incident_edge()->vertex1()); @@ -300,7 +300,7 @@ bool SkeletalTrapezoidation::computePointCellRange( do { assert(vd_edge->is_finite()); - Point p1 = VoronoiUtils::p(vd_edge->vertex1()); + Point2LL p1 = VoronoiUtils::p(vd_edge->vertex1()); if (p1 == source_point) { start_source_point = source_point; @@ -322,16 +322,16 @@ bool SkeletalTrapezoidation::computePointCellRange( void SkeletalTrapezoidation::computeSegmentCellRange( vd_t::cell_type& cell, - Point& start_source_point, - Point& end_source_point, + Point2LL& start_source_point, + Point2LL& end_source_point, vd_t::edge_type*& starting_vd_edge, vd_t::edge_type*& ending_vd_edge, - const std::vector& points, + const std::vector& points, const std::vector& segments) { const Segment& source_segment = VoronoiUtils::getSourceSegment(cell, points, segments); - Point from = source_segment.from(); - Point to = source_segment.to(); + Point2LL from = source_segment.from(); + Point2LL to = source_segment.to(); // Find starting edge // Find end edge @@ -345,8 +345,8 @@ void SkeletalTrapezoidation::computeSegmentCellRange( { continue; } - Point v0 = VoronoiUtils::p(edge->vertex0()); - Point v1 = VoronoiUtils::p(edge->vertex1()); + Point2LL v0 = VoronoiUtils::p(edge->vertex0()); + Point2LL v1 = VoronoiUtils::p(edge->vertex1()); assert(! (v0 == to && v1 == from)); if (v0 == to && ! after_start) // Use the last edge which starts in source_segment.to { @@ -400,7 +400,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) vd_edge_to_he_edge_.clear(); vd_node_to_he_node_.clear(); - std::vector points; // Remains empty + std::vector points; // Remains empty std::vector segments; for (size_t poly_idx = 0; poly_idx < polys.size(); poly_idx++) @@ -421,8 +421,8 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) { // There is no spoon continue; } - Point start_source_point; - Point end_source_point; + Point2LL start_source_point; + Point2LL end_source_point; vd_t::edge_type* starting_vonoroi_edge = nullptr; vd_t::edge_type* ending_vonoroi_edge = nullptr; // Compute and store result in above variables @@ -465,8 +465,8 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) for (vd_t::edge_type* vd_edge = starting_vonoroi_edge->next(); vd_edge != ending_vonoroi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); - Point v1 = VoronoiUtils::p(vd_edge->vertex0()); - Point v2 = VoronoiUtils::p(vd_edge->vertex1()); + Point2LL v1 = VoronoiUtils::p(vd_edge->vertex0()); + Point2LL v2 = VoronoiUtils::p(vd_edge->vertex1()); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, points, segments); graph_.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); @@ -740,9 +740,9 @@ void SkeletalTrapezoidation::updateIsCentral() } else { - Point a = edge.from_->p_; - Point b = edge.to_->p_; - Point ab = b - a; + Point2LL a = edge.from_->p_; + Point2LL b = edge.to_->p_; + Point2LL ab = b - a; coord_t dR = std::abs(edge.to_->data_.distance_to_boundary_ - edge.from_->data_.distance_to_boundary_); coord_t dD = vSize(ab); edge.data_.setIsCentral(dR < dD * cap); @@ -1009,9 +1009,9 @@ void SkeletalTrapezoidation::filterTransitionMids() assert(transitions.front().lower_bead_count_ <= transitions.back().lower_bead_count_); assert(edge.from_->data_.distance_to_boundary_ <= edge.to_->data_.distance_to_boundary_); - const Point a = edge.from_->p_; - const Point b = edge.to_->p_; - Point ab = b - a; + const Point2LL a = edge.from_->p_; + const Point2LL b = edge.to_->p_; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); bool going_up = true; @@ -1081,9 +1081,9 @@ std::list continue; } - Point a = edge->from_->p_; - Point b = edge->to_->p_; - Point ab = b - a; + Point2LL a = edge->from_->p_; + Point2LL b = edge->to_->p_; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); bool is_aligned = edge->isUpward(); edge_t* aligned_edge = is_aligned ? edge : edge->twin_; @@ -1214,9 +1214,9 @@ void SkeletalTrapezoidation::generateAllTransitionEnds(ptr_vector_t>& edge_transition_ends) { - const Point a = edge.from_->p_; - const Point b = edge.to_->p_; - const Point ab = b - a; + const Point2LL a = edge.from_->p_; + const Point2LL b = edge.to_->p_; + const Point2LL ab = b - a; const coord_t ab_size = vSize(ab); const coord_t transition_length = beading_strategy_.getTransitioningLength(lower_bead_count); @@ -1259,9 +1259,9 @@ bool SkeletalTrapezoidation::generateTransitionEnd( coord_t lower_bead_count, ptr_vector_t>& edge_transition_ends) { - Point a = edge.from_->p_; - Point b = edge.to_->p_; - Point ab = b - a; + Point2LL a = edge.from_->p_; + Point2LL b = edge.to_->p_; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); // TODO: prevent recalculation of these values assert(start_pos <= ab_size); @@ -1457,9 +1457,9 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_tp_; - Point b = to->p_; - Point ab = b - a; + Point2LL a = from->p_; + Point2LL b = to->p_; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); edge_t* last_edge_replacing_input = &edge; @@ -1474,7 +1474,7 @@ void SkeletalTrapezoidation::applyTransitions(ptr_vector_tdata_.transition_ratio_ = 0; continue; } - Point mid = a + normal(ab, end_pos); + Point2LL mid = a + normal(ab, end_pos); assert(last_edge_replacing_input->data_.isCentral()); assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); @@ -1528,9 +1528,9 @@ void SkeletalTrapezoidation::generateExtraRibs() // Preload some variables before [edge] gets changed node_t* from = edge.from_; node_t* to = edge.to_; - Point a = from->p_; - Point b = to->p_; - Point ab = b - a; + Point2LL a = from->p_; + Point2LL b = to->p_; + Point2LL ab = b - a; coord_t ab_size = vSize(ab); coord_t a_R = edge.from_->data_.distance_to_boundary_; coord_t b_R = edge.to_->data_.distance_to_boundary_; @@ -1558,7 +1558,7 @@ void SkeletalTrapezoidation::generateExtraRibs() close_node->data_.transition_ratio_ = 0; continue; } - Point mid = a + normal(ab, end_pos); + Point2LL mid = a + normal(ab, end_pos); assert(last_edge_replacing_input->data_.isCentral()); assert(last_edge_replacing_input->data_.type_ != SkeletalTrapezoidationEdge::EdgeType::EXTRA_VD); @@ -1884,9 +1884,9 @@ void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& spdlog::warn("Generated junction is beyond the center of total width."); } - Point a = edge->to_->p_; - Point b = edge->from_->p_; - Point ab = b - a; + Point2LL a = edge->to_->p_; + Point2LL b = edge->from_->p_; + Point2LL ab = b - a; const size_t num_junctions = beading->toolpath_locations.size(); size_t junction_idx; @@ -1916,7 +1916,7 @@ void SkeletalTrapezoidation::generateJunctions(ptr_vector_t& { // Junction coinciding with a node is handled by the next segment break; } - Point junction(a + ab * (bead_R - start_R) / (end_R - start_R)); + Point2LL junction(a + ab * (bead_R - start_R) / (end_R - start_R)); if (bead_R > start_R - 5) { // Snap to start node if it is really close, in order to be able to see 3-way intersection later on more robustly junction = a; @@ -2215,7 +2215,7 @@ void SkeletalTrapezoidation::generateLocalMaximaSingleBeads() for (coord_t segment = 0; segment < n_segments; segment++) { double a = 2.0 * std::numbers::pi / n_segments * segment; - line.junctions_.emplace_back(node.p_ + Point(r * cos(a), r * sin(a)), width, inset_index); + line.junctions_.emplace_back(node.p_ + Point2LL(r * cos(a), r * sin(a)), width, inset_index); } } } diff --git a/src/SkeletalTrapezoidationGraph.cpp b/src/SkeletalTrapezoidationGraph.cpp index 35dec4cd61..514277ed36 100644 --- a/src/SkeletalTrapezoidationGraph.cpp +++ b/src/SkeletalTrapezoidationGraph.cpp @@ -132,7 +132,7 @@ STHalfEdge* STHalfEdge::getNextUnconnected() return result->twin_; } -STHalfEdgeNode::STHalfEdgeNode(SkeletalTrapezoidationJoint data, Point p) +STHalfEdgeNode::STHalfEdgeNode(SkeletalTrapezoidationJoint data, Point2LL p) : HalfEdgeNode(data, p) { } @@ -329,9 +329,9 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) } } -void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point start_source_point, Point end_source_point, bool is_next_to_start_or_end) +void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point2LL start_source_point, Point2LL end_source_point, bool is_next_to_start_or_end) { - Point p = LinearAlg2D::getClosestOnLine(prev_edge->to_->p_, start_source_point, end_source_point); + Point2LL p = LinearAlg2D::getClosestOnLine(prev_edge->to_->p_, start_source_point, end_source_point); coord_t dist = vSize(prev_edge->to_->p_ - p); prev_edge->to_->data_.distance_to_boundary_ = dist; assert(dist >= 0); @@ -365,10 +365,10 @@ std::pairp_; + Point2LL p = mid_node->p_; - std::pair source_segment = getSource(edge); - Point px = LinearAlg2D::getClosestOnLineSegment(p, source_segment.first, source_segment.second); + std::pair source_segment = getSource(edge); + Point2LL px = LinearAlg2D::getClosestOnLineSegment(p, source_segment.first, source_segment.second); coord_t dist = vSize(p - px); assert(dist > 0); mid_node->data_.distance_to_boundary_ = dist; @@ -438,7 +438,7 @@ std::pair SkeletalTrapezoidationGraph::getSource(const edge_t& edge) +std::pair SkeletalTrapezoidationGraph::getSource(const edge_t& edge) { const edge_t* from_edge = &edge; while (from_edge->prev_) diff --git a/src/SkirtBrim.cpp b/src/SkirtBrim.cpp index 4567a92d6c..a2b67503ec 100644 --- a/src/SkirtBrim.cpp +++ b/src/SkirtBrim.cpp @@ -306,7 +306,7 @@ coord_t SkirtBrim::generateOffset(const Offset& offset, Polygons& covered_area, length_added = brim_lines.polyLineLength(); const coord_t max_stitch_distance = line_widths_[offset.extruder_nr_]; - PolylineStitcher::stitch(brim_lines, result.open_polylines, result.closed_polygons, max_stitch_distance); + PolylineStitcher::stitch(brim_lines, result.open_polylines, result.closed_polygons, max_stitch_distance); // clean up too small lines for (size_t line_idx = 0; line_idx < result.open_polylines.size();) diff --git a/src/TopSurface.cpp b/src/TopSurface.cpp index f3b9b8974a..acbbe94f7d 100644 --- a/src/TopSurface.cpp +++ b/src/TopSurface.cpp @@ -67,7 +67,7 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage const bool enforce_monotonic_order = mesh.settings.get("ironing_monotonic"); constexpr size_t wall_line_count = 0; const coord_t small_area_width = 0; // This shouldn't be on for ironing. - const Point infill_origin = Point(); + const Point2LL infill_origin = Point2LL(); const bool skip_line_stitching = enforce_monotonic_order; coord_t ironing_inset = -mesh.settings.get("ironing_inset"); @@ -133,12 +133,12 @@ bool TopSurface::ironing(const SliceDataStorage& storage, const SliceMeshStorage // Move to a corner of the area that is perpendicular to the ironing lines, to reduce the number of seams. const AABB bounding_box(ironed_areas); PointMatrix rotate(-direction + 90); - const Point center = bounding_box.getMiddle(); - const Point far_away = rotate.apply( - Point(0, vSize(bounding_box.max_ - center) * 100)); // Some direction very far away in the direction perpendicular to the ironing lines, relative to the centre. + const Point2LL center = bounding_box.getMiddle(); + const Point2LL far_away = rotate.apply( + Point2LL(0, vSize(bounding_box.max_ - center) * 100)); // Some direction very far away in the direction perpendicular to the ironing lines, relative to the centre. // Two options to start, both perpendicular to the ironing lines. Which is closer? - const Point front_side = PolygonUtils::findNearestVert(center + far_away, ironed_areas).p(); - const Point back_side = PolygonUtils::findNearestVert(center - far_away, ironed_areas).p(); + const Point2LL front_side = PolygonUtils::findNearestVert(center + far_away, ironed_areas).p(); + const Point2LL back_side = PolygonUtils::findNearestVert(center - far_away, ironed_areas).p(); if (vSize2(layer.getLastPlannedPositionOrStartingPosition() - front_side) < vSize2(layer.getLastPlannedPositionOrStartingPosition() - back_side)) { layer.addTravel(front_side); diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index fe2cc87e77..d12e14adbd 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -399,7 +399,7 @@ void TreeSupport::mergeHelper( // Calculate which point is closest to the point of the last merge (or tip center if no merge above it has happened) // Used at the end to estimate where to best place the branch on the bottom most layer // Could be replaced with a random point inside the new area - Point new_pos = reduced_check.first.next_position_; + Point2LL new_pos = reduced_check.first.next_position_; if (! intersect.inside(new_pos, true)) { PolygonUtils::moveInside(intersect, new_pos); @@ -1269,7 +1269,7 @@ void TreeSupport::increaseAreas( // If the bottom most point of a branch is set, later functions will assume that the position is valid, and ignore it. // But as branches connecting with the model that are to small have to be culled, the bottom most point has to be not set. // A point can be set on the top most tip layer (maybe more if it should not move for a few layers). - parent->result_on_layer_ = Point(-1, -1); + parent->result_on_layer_ = Point2LL(-1, -1); } }); } @@ -1377,7 +1377,7 @@ void TreeSupport::setPointsOnAreas(const TreeSupportElement* elem) { // Based on the branch center point of the current layer, the point on the next (further up) layer is calculated. - if (elem->result_on_layer_ == Point(-1, -1)) + if (elem->result_on_layer_ == Point2LL(-1, -1)) { spdlog::error("Uninitialized support element"); return; @@ -1386,12 +1386,12 @@ void TreeSupport::setPointsOnAreas(const TreeSupportElement* elem) for (TreeSupportElement* next_elem : elem->parents_) { if (next_elem->result_on_layer_ - != Point(-1, -1)) // If the value was set somewhere else it it kept. This happens when a branch tries not to move after being unable to create a roof. + != Point2LL(-1, -1)) // If the value was set somewhere else it it kept. This happens when a branch tries not to move after being unable to create a roof. { continue; } - Point from = elem->result_on_layer_; + Point2LL from = elem->result_on_layer_; if (! (next_elem->area_->inside(from, true))) { PolygonUtils::moveInside( @@ -1483,7 +1483,7 @@ bool TreeSupport::setToModelContact(std::vector>& } // Guess a point inside the influence area, in which the branch will be placed in. - Point best = checked[last_successfull_layer - layer_idx]->next_position_; + Point2LL best = checked[last_successfull_layer - layer_idx]->next_position_; if (! valid_place_area.inside(best, true)) { @@ -1497,7 +1497,7 @@ bool TreeSupport::setToModelContact(std::vector>& } else // can not add graceful => just place it here and hope for the best { - Point best = first_elem->next_position_; + Point2LL best = first_elem->next_position_; Polygons valid_place_area = first_elem->area_->difference(volumes_.getAvoidance(config.getCollisionRadius(first_elem), layer_idx, AvoidanceType::COLLISION, first_elem->use_min_xy_dist_)); @@ -1548,7 +1548,7 @@ void TreeSupport::createNodesFromArea(std::vector> std::unordered_set remove; for (TreeSupportElement* init : move_bounds[0]) { - Point p = init->next_position_; + Point2LL p = init->next_position_; if (! (init->area_->inside(p, true))) { PolygonUtils::moveInside(*init->area_, p, 0); @@ -1585,7 +1585,7 @@ void TreeSupport::createNodesFromArea(std::vector> for (TreeSupportElement* elem : move_bounds[layer_idx]) { bool removed = false; - if (elem->result_on_layer_ == Point(-1, -1)) // Check if the resulting center point is not yet set. + if (elem->result_on_layer_ == Point2LL(-1, -1)) // Check if the resulting center point is not yet set. { if (elem->to_buildplate_ || (! elem->to_buildplate_ && elem->distance_to_top_ < config.min_dtt_to_model && ! elem->supports_roof_)) { @@ -1604,7 +1604,7 @@ void TreeSupport::createNodesFromArea(std::vector> { // When the roof was not able to generate downwards enough, the top elements may have not moved, and have result_on_layer already set. As this branch needs // to be removed => all parents result_on_layer have to be invalidated. - parent->result_on_layer_ = Point(-1, -1); + parent->result_on_layer_ = Point2LL(-1, -1); } continue; } @@ -1647,9 +1647,9 @@ void TreeSupport::generateBranchAreas( { Polygon base_circle = TreeSupportBaseCircle::getBaseCircle(); - for (Point vertex : base_circle) + for (Point2LL vertex : base_circle) { - vertex = Point(vertex.X * config.branch_radius / TreeSupportBaseCircle::base_radius, vertex.Y * config.branch_radius / TreeSupportBaseCircle::base_radius); + vertex = Point2LL(vertex.X * config.branch_radius / TreeSupportBaseCircle::base_radius, vertex.Y * config.branch_radius / TreeSupportBaseCircle::base_radius); branch_circle.add(vertex); } } @@ -1669,24 +1669,24 @@ void TreeSupport::generateBranchAreas( TreeSupportElement* child_elem = inverse_tree_order.count(elem) ? inverse_tree_order.at(elem) : nullptr; // Calculate multiple ovalized circles, to connect with every parent and child. Also generate regular circle for the current layer. Merge all these into one area. - std::vector> movement_directions{ std::pair(Point(0, 0), radius) }; + std::vector> movement_directions{ std::pair(Point2LL(0, 0), radius) }; if (! elem->skip_ovalisation_) { if (child_elem != nullptr) { - Point movement = (child_elem->result_on_layer_ - elem->result_on_layer_); + Point2LL movement = (child_elem->result_on_layer_ - elem->result_on_layer_); movement_directions.emplace_back(movement, radius); } for (TreeSupportElement* parent : elem->parents_) { - Point movement = (parent->result_on_layer_ - elem->result_on_layer_); + Point2LL movement = (parent->result_on_layer_ - elem->result_on_layer_); movement_directions.emplace_back(movement, std::max(config.getRadius(parent), config.support_line_width)); parent_uses_min |= parent->use_min_xy_dist_; } - for (Point target : elem->additional_ovalization_targets_) + for (Point2LL target : elem->additional_ovalization_targets_) { - Point movement = (target - elem->result_on_layer_); + Point2LL movement = (target - elem->result_on_layer_); movement_directions.emplace_back(movement, std::max(radius, config.support_line_width)); } } @@ -1696,14 +1696,14 @@ void TreeSupport::generateBranchAreas( { Polygons poly; - for (std::pair movement : movement_directions) + for (std::pair movement : movement_directions) { max_speed_sqd = std::max(max_speed_sqd, vSize2(movement.first)); // Visualization: https://jsfiddle.net/0zvcq39L/2/ // Ovalizes the circle to an ellipse, that contains both old center and new target position. double used_scale = (movement.second + offset) / (1.0 * config.branch_radius); - Point center_position = elem->result_on_layer_ + movement.first / 2; + Point2LL center_position = elem->result_on_layer_ + movement.first / 2; const double moveX = movement.first.X / (used_scale * config.branch_radius); const double moveY = movement.first.Y / (used_scale * config.branch_radius); const double vsize_inv = 0.5 / (0.01 + std::sqrt(moveX * moveX + moveY * moveY)); @@ -1715,9 +1715,9 @@ void TreeSupport::generateBranchAreas( used_scale * (1 + moveY * moveY * vsize_inv), }; Polygon circle; - for (Point vertex : branch_circle) + for (Point2LL vertex : branch_circle) { - vertex = Point(matrix[0] * vertex.X + matrix[1] * vertex.Y, matrix[2] * vertex.X + matrix[3] * vertex.Y); + vertex = Point2LL(matrix[0] * vertex.X + matrix[1] * vertex.Y, matrix[2] * vertex.X + matrix[3] * vertex.Y); circle.add(center_position + vertex); } poly.add(circle.offset(0)); @@ -1762,7 +1762,7 @@ void TreeSupport::generateBranchAreas( else { // Try a fuzzy inside as sometimes the point should be on the border, but is not because of rounding errors... - Point from = elem->result_on_layer_; + Point2LL from = elem->result_on_layer_; PolygonUtils::moveInside(part, from, 0); if (vSize2(elem->result_on_layer_ - from) < (FUDGE_LENGTH * FUDGE_LENGTH) / 4) { @@ -1878,11 +1878,11 @@ void TreeSupport::smoothBranchAreas(std::vectorparents_[idx]; const coord_t max_outer_line_increase = max_radius_change_per_layer; Polygons result = layer_tree_polygons[layer_idx + 1][parent].offset(max_outer_line_increase); - const Point direction = data_pair.first->result_on_layer_ - parent->result_on_layer_; + const Point2LL direction = data_pair.first->result_on_layer_ - parent->result_on_layer_; // Move the polygons object. for (auto& outer : result) { - for (Point& p : outer) + for (Point2LL& p : outer) { p += direction; } @@ -2263,14 +2263,14 @@ void TreeSupport::drawAreas(std::vector>& move_bou // (Check if) We either come from nowhere at the final layer or we had invalid parents 2. should never happen but just to be sure: if ((layer_idx > 0 && ((! inverse_tree_order.count(elem) && elem->target_height_ == layer_idx && config.min_dtt_to_model > 0 && ! elem->to_buildplate_) - || (inverse_tree_order.count(elem) && inverse_tree_order[elem]->result_on_layer_ == Point(-1, -1))))) + || (inverse_tree_order.count(elem) && inverse_tree_order[elem]->result_on_layer_ == Point2LL(-1, -1))))) { continue; } for (TreeSupportElement* par : elem->parents_) { - if (par->result_on_layer_ == Point(-1, -1)) + if (par->result_on_layer_ == Point2LL(-1, -1)) { continue; } diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index 4c993cd487..5ec22f610c 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -117,7 +117,7 @@ std::vector TreeSupportTipGenerator::c for (const auto& line : polylines) { LineInformation res_line; - for (const Point& p : line) + for (const Point2LL& p : line) { if (config.support_rest_preference == RestPreference::BUILDPLATE && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::FAST_SAFE, false, ! xy_overrides).inside(p, true)) @@ -173,9 +173,9 @@ Polygons TreeSupportTipGenerator::convertInternalToLines(std::vector)> TreeSupportTipGenerator::getEvaluatePointForNextLayerFunction(size_t current_layer) +std::function)> TreeSupportTipGenerator::getEvaluatePointForNextLayerFunction(size_t current_layer) { - std::function)> evaluatePoint = [this, current_layer](std::pair p) + std::function)> evaluatePoint = [this, current_layer](std::pair p) { if (config.support_rest_preference != RestPreference::GRACEFUL && ! volumes_ @@ -214,7 +214,7 @@ std::function)> TreeS std::pair, std::vector> TreeSupportTipGenerator::splitLines( std::vector lines, - std::function)> evaluatePoint) + std::function)> evaluatePoint) { // Assumes all Points on the current line are valid. @@ -223,11 +223,11 @@ std::pair, std::vector keep(1); std::vector set_free(1); - for (const std::vector>& line : lines) + for (const std::vector>& line : lines) { auto current = KEEPING; LineInformation resulting_line; - for (const std::pair& me : line) + for (const std::pair& me : line) { if (evaluatePoint(me) == (current == FREEING)) { @@ -246,8 +246,8 @@ std::pair, std::vector>>, - std::vector>>>(keep, set_free); + std::vector>>, + std::vector>>>(keep, set_free); } Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& input, coord_t distance, size_t min_points, bool enforce_distance) const @@ -299,7 +299,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& while (line.size() < min_points && current_distance >= coord_t(FUDGE_LENGTH * 2)) { line.clear(); - Point current_point = part[0]; + Point2LL current_point = part[0]; line.add(part[0]); bool should_add_endpoint = min_points > 1 || vSize2(part[0] - part[optimal_end_index]) > (current_distance * current_distance); @@ -328,7 +328,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& coord_t min_distance_to_existing_point_sqd = std::numeric_limits::max(); if (enforce_distance) { - for (Point p : line) + for (Point2LL p : line) { min_distance_to_existing_point_sqd = std::min(min_distance_to_existing_point_sqd, vSize2(p - next_point.location)); } @@ -391,8 +391,8 @@ std::shared_ptr TreeSupportTipGenerator::generateCrossFi const coord_t aabb_expansion = mesh.settings.get("support_offset"); AABB3D aabb_here(mesh.bounding_box); - aabb_here.include(aabb_here.min_ - Point3(-aabb_expansion, -aabb_expansion, 0)); - aabb_here.include(aabb_here.max_ + Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.min_ - Point3LL(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.max_ + Point3LL(-aabb_expansion, -aabb_expansion, 0)); aabb.include(aabb_here); const std::string cross_subdisivion_spec_image_file = mesh.settings.get("cross_support_density_image"); @@ -619,13 +619,13 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m void TreeSupportTipGenerator::addPointAsInfluenceArea( std::vector>& move_bounds, - std::pair p, + std::pair p, size_t dtt, LayerIndex insert_layer, size_t dont_move_until, bool roof, bool skip_ovalisation, - std::vector additional_ovalization_targets) + std::vector additional_ovalization_targets) { const bool to_bp = p.second == LineStatus::TO_BP || p.second == LineStatus::TO_BP_SAFE; const bool gracious = to_bp || p.second == LineStatus::TO_MODEL_GRACIOUS || p.second == LineStatus::TO_MODEL_GRACIOUS_SAFE; @@ -637,7 +637,7 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( } Polygon circle; Polygon base_circle = TreeSupportBaseCircle::getBaseCircle(); - for (Point corner : base_circle) + for (Point2LL corner : base_circle) { circle.add(p.first + corner); } @@ -664,7 +664,7 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( support_tree_branch_reach_limit); elem->area_ = new Polygons(area); - for (Point target : additional_ovalization_targets) + for (Point2LL target : additional_ovalization_targets) { elem->additional_ovalization_targets_.emplace_back(target); } @@ -691,10 +691,10 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( { for (dtt_roof_tip = 0; dtt_roof_tip < roof_tip_layers && insert_layer_idx - dtt_roof_tip >= 1; dtt_roof_tip++) { - std::function)> evaluateRoofWillGenerate = [&](std::pair p) + std::function)> evaluateRoofWillGenerate = [&](std::pair p) { Polygon roof_circle; - for (Point corner : TreeSupportBaseCircle::getBaseCircle()) + for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { roof_circle.add(p.first + corner * std::max(config.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } @@ -708,7 +708,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( for (LineInformation line : split.second) // Add all points that would not be valid. { - for (std::pair point_data : line) + for (std::pair point_data : line) { addPointAsInfluenceArea(move_bounds, point_data, 0, insert_layer_idx - dtt_roof_tip, roof_tip_layers - dtt_roof_tip, dtt_roof_tip != 0, false); } @@ -720,7 +720,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( for (LineInformation line : split.second) { - for (std::pair point_data : line) + for (std::pair point_data : line) { addPointAsInfluenceArea(move_bounds, point_data, 0, insert_layer_idx - dtt_roof_tip, roof_tip_layers - dtt_roof_tip, dtt_roof_tip != 0, false); } @@ -730,10 +730,10 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( Polygons added_roofs; for (LineInformation line : lines) { - for (std::pair p : line) + for (std::pair p : line) { Polygon roof_circle; - for (Point corner : TreeSupportBaseCircle::getBaseCircle()) + for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { roof_circle.add(p.first + corner * std::max(config.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } @@ -757,7 +757,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( const bool disable_ovalization = ! connect_points && config.min_radius < 3 * config.support_line_width && roof_tip_layers == 0 && dtt_roof_tip == 0; for (auto [idx, point_data] : line | ranges::views::enumerate) { - std::vector additional_ovalization_targets; + std::vector additional_ovalization_targets; if (connect_points) // If the radius is to large then the ovalization would cause the area to float in the air. { if (idx != 0) @@ -809,7 +809,7 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( } else if (elem->supports_roof_) { - Point from = elem->result_on_layer_; + Point2LL from = elem->result_on_layer_; PolygonUtils::moveInside(roof_on_layer_above, from); // Remove branches should have interface above them, but dont. Should never happen. if (roof_on_layer_above.empty() @@ -992,7 +992,7 @@ void TreeSupportTipGenerator::generateTips( for (auto line : polylines) { LineInformation res_line; - for (Point p : line) + for (Point2LL p : line) { res_line.emplace_back(p, LineStatus::INVALID); } @@ -1010,7 +1010,7 @@ void TreeSupportTipGenerator::generateTips( ! xy_overrides); // It is not required to offset the forbidden area here as the points won't change: // If points here are not inside the forbidden area neither will they be later when placing these points, as these are the same points. - std::function)> evaluatePoint = [&](std::pair p) + std::function)> evaluatePoint = [&](std::pair p) { return relevant_forbidden_below.inside(p.first, true); }; @@ -1018,7 +1018,7 @@ void TreeSupportTipGenerator::generateTips( if (support_roof_layers) { // Remove all points that are for some reason part of a roof area, as the point is already supported by roof - std::function)> evaluatePartOfRoof = [&](std::pair p) + std::function)> evaluatePartOfRoof = [&](std::pair p) { return support_roof_drawn[layer_idx - lag_ctr].inside(p.first, true); }; diff --git a/src/bridge.cpp b/src/bridge.cpp index 30ed81ed9c..c5d4c25fa9 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -138,10 +138,10 @@ int bridgeAngle( double line_angle = -1; for (PolygonRef air_line : skin_perimeter_lines_over_air) { - Point p0 = air_line[0]; + Point2LL p0 = air_line[0]; for (unsigned i = 1; i < air_line.size(); ++i) { - const Point& p1(air_line[i]); + const Point2LL& p1(air_line[i]); double dist2 = vSize2(p0 - p1); if (dist2 > max_dist2) { @@ -197,8 +197,8 @@ int bridgeAngle( if (idx1 < 0 || idx2 < 0) return -1; - Point center1 = islands[idx1].centerOfMass(); - Point center2 = islands[idx2].centerOfMass(); + Point2LL center1 = islands[idx1].centerOfMass(); + Point2LL center2 = islands[idx2].centerOfMass(); return angle(center2 - center1); } diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 7f589a1312..f715e3cfe7 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -54,7 +54,7 @@ class ArcusCommunication::PathCompiler std::vector points; //!< The points used to define the line segments, the size of this vector is D*(N+1) as each line segment is defined from one point to the next. D is //!< the dimensionality of the point. - Point last_point; + Point2LL last_point; PathCompiler(const PathCompiler&) = delete; PathCompiler& operator=(const PathCompiler&) = delete; @@ -130,7 +130,7 @@ class ArcusCommunication::PathCompiler * of the path this jump is marked as `PrintFeatureType::NoneType`. * \param from The initial point of a polygon. */ - void handleInitialPoint(const Point& initial_point) + void handleInitialPoint(const Point2LL& initial_point) { if (points.size() == 0) { @@ -188,7 +188,7 @@ class ArcusCommunication::PathCompiler /*! * \brief Move the current point of this path to \p position. */ - void setCurrentPosition(const Point& position) + void setCurrentPosition(const Point2LL& position) { handleInitialPoint(position); } @@ -204,7 +204,7 @@ class ArcusCommunication::PathCompiler * \param line_thickness The thickness (in the Z direction) of the line. * \param velocity The velocity of printing this polygon. */ - void sendLineTo(const PrintFeatureType& print_feature_type, const Point& to, const coord_t& width, const coord_t& thickness, const Velocity& feedrate) + void sendLineTo(const PrintFeatureType& print_feature_type, const Point2LL& to, const coord_t& width, const coord_t& thickness, const Velocity& feedrate) { assert(! points.empty() && "A point must already be in the buffer for sendLineTo(.) to function properly."); @@ -257,7 +257,7 @@ class ArcusCommunication::PathCompiler * Each point is represented as two consecutive floats. All members adding a * 2D point to the data should use this function. */ - void addPoint2D(const Point& point) + void addPoint2D(const Point2LL& point) { points.push_back(INT2MM(point.X)); points.push_back(INT2MM(point.Y)); @@ -276,7 +276,7 @@ class ArcusCommunication::PathCompiler * \param thickness The layer thickness of the polygon. * \param velocity How fast the polygon is printed. */ - void addLineSegment(const PrintFeatureType& print_feature_type, const Point& point, const coord_t& width, const coord_t& thickness, const Velocity& velocity) + void addLineSegment(const PrintFeatureType& print_feature_type, const Point2LL& point, const coord_t& width, const coord_t& thickness, const Velocity& velocity) { addPoint2D(point); line_types.push_back(print_feature_type); @@ -368,7 +368,7 @@ bool ArcusCommunication::hasSlice() const && private_data->slice_count < 1; // Only slice once per run of CuraEngine. See documentation of slice_count. } -void ArcusCommunication::sendCurrentPosition(const Point& position) +void ArcusCommunication::sendCurrentPosition(const Point2LL& position) { path_compiler->setCurrentPosition(position); } @@ -402,7 +402,7 @@ void ArcusCommunication::sendLayerComplete(const LayerIndex::value_type& layer_n layer->set_thickness(thickness); } -void ArcusCommunication::sendLineTo(const PrintFeatureType& type, const Point& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) +void ArcusCommunication::sendLineTo(const PrintFeatureType& type, const Point2LL& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) { path_compiler->sendLineTo(type, to, line_width, line_thickness, velocity); } @@ -443,7 +443,7 @@ void ArcusCommunication::sendPolygon( void ArcusCommunication::sendPolygons(const PrintFeatureType& type, const Polygons& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity) { - for (const std::vector& polygon : polygons) + for (const std::vector& polygon : polygons) { path_compiler->sendPolygon(type, polygon, line_width, line_thickness, velocity); } diff --git a/src/communication/ArcusCommunicationPrivate.cpp b/src/communication/ArcusCommunicationPrivate.cpp index 9d5f3118b2..81101dc9b2 100644 --- a/src/communication/ArcusCommunicationPrivate.cpp +++ b/src/communication/ArcusCommunicationPrivate.cpp @@ -127,7 +127,7 @@ void ArcusCommunication::Private::readMeshGroupMessage(const proto::ObjectList& const std::string data = object.vertices().substr(face * bytes_per_face, bytes_per_face); const Point3F* float_vertices = reinterpret_cast(data.data()); - Point3 verts[3]; + Point3LL verts[3]; verts[0] = matrix.apply(float_vertices[0].toPoint3d()); verts[1] = matrix.apply(float_vertices[1].toPoint3d()); verts[2] = matrix.apply(float_vertices[2].toPoint3d()); diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index e1a7b36e37..26dcaa60c3 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -37,7 +37,7 @@ void CommandLine::beginGCode() void CommandLine::flushGCode() { } -void CommandLine::sendCurrentPosition(const Point&) +void CommandLine::sendCurrentPosition(const Point2LL&) { } void CommandLine::sendFinishedSlicing() const @@ -46,7 +46,7 @@ void CommandLine::sendFinishedSlicing() const void CommandLine::sendLayerComplete(const LayerIndex::value_type&, const coord_t&, const coord_t&) { } -void CommandLine::sendLineTo(const PrintFeatureType&, const Point&, const coord_t&, const coord_t&, const Velocity&) +void CommandLine::sendLineTo(const PrintFeatureType&, const Point2LL&, const coord_t&, const coord_t&, const Velocity&) { } void CommandLine::sendOptimizedLayerData() diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 82e45248b3..9726c9b39c 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -99,11 +99,11 @@ void GCodeExport::preSetup(const size_t start_extruder) if (use_extruder_offset_to_offset_coords_) { extruder_attr_[extruder_nr].nozzle_offset_ - = Point(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + = Point2LL(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); } else { - extruder_attr_[extruder_nr].nozzle_offset_ = Point(0, 0); + extruder_attr_[extruder_nr].nozzle_offset_ = Point2LL(0, 0); } extruder_attr_[extruder_nr].machine_firmware_retract_ = extruder_settings.get("machine_firmware_retract"); } @@ -253,8 +253,8 @@ std::string GCodeExport::getFileHeader( if (total_bounding_box_.min_.x_ > total_bounding_box_.max_.x_) // We haven't encountered any movement (yet). This probably means we're command-line slicing. { // Put some small default in there. - total_bounding_box_.min_ = Point3(0, 0, 0); - total_bounding_box_.max_ = Point3(10, 10, 10); + total_bounding_box_.min_ = Point3LL(0, 0, 0); + total_bounding_box_.max_ = Point3LL(10, 10, 10); } prefix << ";PRINT.SIZE.MIN.X:" << INT2MM(total_bounding_box_.min_.x_) << new_line_; prefix << ";PRINT.SIZE.MIN.Y:" << INT2MM(total_bounding_box_.min_.y_) << new_line_; @@ -334,9 +334,9 @@ bool GCodeExport::getExtruderIsUsed(const int extruder_nr) const return extruder_attr_[extruder_nr].is_used_; } -Point GCodeExport::getGcodePos(const coord_t x, const coord_t y, const int extruder_train) const +Point2LL GCodeExport::getGcodePos(const coord_t x, const coord_t y, const int extruder_train) const { - return Point(x, y) - extruder_attr_[extruder_train].nozzle_offset_; + return Point2LL(x, y) - extruder_attr_[extruder_train].nozzle_offset_; } void GCodeExport::setFlavor(EGCodeFlavor flavor) @@ -387,13 +387,13 @@ void GCodeExport::setFlowRateExtrusionSettings(double max_extrusion_offset, doub this->extrusion_offset_factor_ = extrusion_offset_factor; } -Point3 GCodeExport::getPosition() const +Point3LL GCodeExport::getPosition() const { return current_position_; } -Point GCodeExport::getPositionXY() const +Point2LL GCodeExport::getPositionXY() const { - return Point(current_position_.x_, current_position_.y_); + return Point2LL(current_position_.x_, current_position_.y_); } int GCodeExport::getPositionZ() const @@ -827,16 +827,16 @@ void GCodeExport::writeDelay(const Duration& time_amount) estimate_calculator_.addTime(time_amount); } -void GCodeExport::writeTravel(const Point& p, const Velocity& speed) +void GCodeExport::writeTravel(const Point2LL& p, const Velocity& speed) { - writeTravel(Point3(p.X, p.Y, current_layer_z_), speed); + writeTravel(Point3LL(p.X, p.Y, current_layer_z_), speed); } -void GCodeExport::writeExtrusion(const Point& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) +void GCodeExport::writeExtrusion(const Point2LL& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) { - writeExtrusion(Point3(p.X, p.Y, current_layer_z_), speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); + writeExtrusion(Point3LL(p.X, p.Y, current_layer_z_), speed, extrusion_mm3_per_mm, feature, update_extrusion_offset); } -void GCodeExport::writeTravel(const Point3& p, const Velocity& speed) +void GCodeExport::writeTravel(const Point3LL& p, const Velocity& speed) { if (flavor_ == EGCodeFlavor::BFB) { @@ -846,7 +846,7 @@ void GCodeExport::writeTravel(const Point3& p, const Velocity& speed) writeTravel(p.x_, p.y_, p.z_ + is_z_hopped_, speed); } -void GCodeExport::writeExtrusion(const Point3& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) +void GCodeExport::writeExtrusion(const Point3LL& p, const Velocity& speed, double extrusion_mm3_per_mm, PrintFeatureType feature, bool update_extrusion_offset) { if (flavor_ == EGCodeFlavor::BFB) { @@ -873,7 +873,7 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo double extrusion_per_mm = mm3ToE(extrusion_mm3_per_mm); - Point gcode_pos = getGcodePos(x, y, current_extruder_); + Point2LL gcode_pos = getGcodePos(x, y, current_extruder_); // For Bits From Bytes machines, we need to handle this completely differently. As they do not use E values but RPM values. double fspeed = speed * 60; @@ -900,7 +900,7 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo fspeed *= (rpm / (roundf(rpm * 100) / 100)); // Increase the extrusion amount to calculate the amount of filament used. - Point3 diff = Point3(x, y, z) - getPosition(); + Point3LL diff = Point3LL(x, y, z) - getPosition(); current_e_value_ += extrusion_per_mm * diff.vSizeMM(); } @@ -917,7 +917,7 @@ void GCodeExport::writeMoveBFB(const int x, const int y, const int z, const Velo *output_stream_ << "G1 X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y } << " Z" << MMtoStream{ z }; *output_stream_ << " F" << PrecisionedDouble{ 1, fspeed } << new_line_; - current_position_ = Point3(x, y, z); + current_position_ = Point3LL(x, y, z); estimate_calculator_.plan( TimeEstimateCalculator::Position(INT2MM(current_position_.x_), INT2MM(current_position_.y_), INT2MM(current_position_.z_), eToMm(current_e_value_)), speed, @@ -934,14 +934,14 @@ void GCodeExport::writeTravel(const coord_t x, const coord_t y, const coord_t z, #ifdef ASSERT_INSANE_OUTPUT assert(speed < 1000 && speed > 1); // normal F values occurring in UM2 gcode (this code should not be compiled for release) assert(current_position_ != no_point3); - assert(Point3(x, y, z) != no_point3); - assert((Point3(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) + assert(Point3LL(x, y, z) != no_point3); + assert((Point3LL(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) #endif // ASSERT_INSANE_OUTPUT const PrintFeatureType travel_move_type = extruder_attr_[current_extruder_].retraction_e_amount_current_ ? PrintFeatureType::MoveRetraction : PrintFeatureType::MoveCombing; const int display_width = extruder_attr_[current_extruder_].retraction_e_amount_current_ ? MM2INT(0.2) : MM2INT(0.1); const double layer_height = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("layer_height"); - Application::getInstance().communication_->sendLineTo(travel_move_type, Point(x, y), display_width, layer_height, speed); + Application::getInstance().communication_->sendLineTo(travel_move_type, Point2LL(x, y), display_width, layer_height, speed); *output_stream_ << "G0"; writeFXYZE(speed, x, y, z, current_e_value_, travel_move_type); @@ -964,8 +964,8 @@ void GCodeExport::writeExtrusion( #ifdef ASSERT_INSANE_OUTPUT assert(speed < 1000 && speed > 1); // normal F values occurring in UM2 gcode (this code should not be compiled for release) assert(current_position_ != no_point3); - assert(Point3(x, y, z) != no_point3); - assert((Point3(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) + assert(Point3LL(x, y, z) != no_point3); + assert((Point3LL(x, y, z) - current_position_).vSize() < MM2INT(1000)); // no crazy positions (this code should not be compiled for release) assert(extrusion_mm3_per_mm >= 0.0); #endif // ASSERT_INSANE_OUTPUT #ifdef DEBUG @@ -996,7 +996,7 @@ void GCodeExport::writeExtrusion( writeZhopEnd(); } - const Point3 diff = Point3(x, y, z) - current_position_; + const Point3LL diff = Point3LL(x, y, z) - current_position_; const double diff_length = diff.vSizeMM(); writeUnretractionAndPrime(); @@ -1033,8 +1033,8 @@ void GCodeExport::writeFXYZE(const Velocity& speed, const coord_t x, const coord current_speed_ = speed; } - Point gcode_pos = getGcodePos(x, y, current_extruder_); - total_bounding_box_.include(Point3(gcode_pos.X, gcode_pos.Y, z)); + Point2LL gcode_pos = getGcodePos(x, y, current_extruder_); + total_bounding_box_.include(Point3LL(gcode_pos.X, gcode_pos.Y, z)); *output_stream_ << " X" << MMtoStream{ gcode_pos.X } << " Y" << MMtoStream{ gcode_pos.Y }; if (z != current_position_.z_) @@ -1048,7 +1048,7 @@ void GCodeExport::writeFXYZE(const Velocity& speed, const coord_t x, const coord } *output_stream_ << new_line_; - current_position_ = Point3(x, y, z); + current_position_ = Point3LL(x, y, z); current_e_value_ = e; estimate_calculator_.plan(TimeEstimateCalculator::Position(INT2MM(x), INT2MM(y), INT2MM(z), eToMm(e)), speed, feature); } @@ -1357,14 +1357,14 @@ void GCodeExport::writePrimeTrain(const Velocity& travel_speed) // ideally the prime position would be respected whether we do a blob or not, // but the frontend currently doesn't support a value function of an extruder setting depending on an fdmprinter setting, // which is needed to automatically ignore the prime position for the printer when blob is disabled - Point3 prime_pos( + Point3LL prime_pos( extruder_settings.get("extruder_prime_pos_x"), extruder_settings.get("extruder_prime_pos_y"), extruder_settings.get("extruder_prime_pos_z")); if (! extruder_settings.get("extruder_prime_pos_abs")) { // currentPosition.z can be already z hopped - prime_pos += Point3(current_position_.x_, current_position_.y_, current_layer_z_); + prime_pos += Point3LL(current_position_.x_, current_position_.y_, current_layer_z_); } writeTravel(prime_pos, travel_speed); } @@ -1674,7 +1674,7 @@ void GCodeExport::ResetLastEValueAfterWipe(size_t extruder) void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) { - const Point3 prev_position = current_position_; + const Point3LL prev_position = current_position_; writeComment("WIPE_SCRIPT_BEGIN"); if (wipe_config.retraction_enable) @@ -1687,11 +1687,11 @@ void GCodeExport::insertWipeScript(const WipeScriptConfig& wipe_config) writeZhopStart(wipe_config.hop_amount, wipe_config.hop_speed); } - writeTravel(Point(wipe_config.brush_pos_x, current_position_.y_), wipe_config.move_speed); + writeTravel(Point2LL(wipe_config.brush_pos_x, current_position_.y_), wipe_config.move_speed); for (size_t i = 0; i < wipe_config.repeat_count; ++i) { coord_t x = current_position_.x_ + (i % 2 ? -wipe_config.move_distance : wipe_config.move_distance); - writeTravel(Point(x, current_position_.y_), wipe_config.move_speed); + writeTravel(Point2LL(x, current_position_.y_), wipe_config.move_speed); } writeTravel(prev_position, wipe_config.move_speed); diff --git a/src/infill.cpp b/src/infill.cpp index 2deda6f1b8..e746846c02 100644 --- a/src/infill.cpp +++ b/src/infill.cpp @@ -347,7 +347,7 @@ void Infill::_generate( || pattern_ == EFillMethod::ZIG_ZAG)) { // don't stich for non-zig-zagged line infill types Polygons stitched_lines; - PolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width_); + PolylineStitcher::stitch(result_lines, stitched_lines, result_polygons, infill_line_width_); result_lines = stitched_lines; } result_lines = simplifier.polyline(result_lines); @@ -419,7 +419,7 @@ void Infill::multiplyInfill(Polygons& result_polygons, Polygons& result_lines) } Polygons polylines = inner_contour_.intersectionPolyLines(result_polygons); result_polygons.clear(); - PolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width_); + PolylineStitcher::stitch(polylines, result_lines, result_polygons, infill_line_width_); } } @@ -427,7 +427,7 @@ void Infill::generateGyroidInfill(Polygons& result_lines, Polygons& result_polyg { Polygons line_segments; GyroidInfill::generateTotalGyroidInfill(line_segments, zig_zaggify_, line_distance_, inner_contour_, z_); - PolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width_); + PolylineStitcher::stitch(line_segments, result_lines, result_polygons, infill_line_width_); } void Infill::generateLightningInfill(const std::shared_ptr& trees, Polygons& result_lines) @@ -550,7 +550,7 @@ void Infill::generateCrossInfill(const SierpinskiFillProvider& cross_fill_provid Polygons cross_pattern_polylines; cross_pattern_polylines.add(cross_pattern_polygon); Polygons poly_lines = inner_contour_.intersectionPolyLines(cross_pattern_polylines); - PolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width_); + PolylineStitcher::stitch(poly_lines, result_lines, result_polygons, infill_line_width_); } } @@ -580,7 +580,7 @@ void Infill::addLineInfill( { // segment is too short to create infill continue; } - result.addLine(rotation_matrix.unapply(Point(x, crossings[crossing_idx])), rotation_matrix.unapply(Point(x, crossings[crossing_idx + 1]))); + result.addLine(rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx])), rotation_matrix.unapply(Point2LL(x, crossings[crossing_idx + 1]))); } scanline_idx += 1; } @@ -675,11 +675,11 @@ void Infill::generateLinearBasedInfill( // Then we can later join two crossings together to form lines and still know what polygon line segments that infill line connected to. struct Crossing { - Point coordinate_; + Point2LL coordinate_; size_t polygon_index_; size_t vertex_index_; - Crossing(Point coordinate, size_t polygon_index, size_t vertex_index) + Crossing(Point2LL coordinate, size_t polygon_index, size_t vertex_index) : coordinate_(coordinate) , polygon_index_(polygon_index) , vertex_index_(vertex_index) @@ -707,12 +707,12 @@ void Infill::generateLinearBasedInfill( { crossings_on_line_[poly_idx].resize(poly.size()); // One for each line in this polygon. } - Point p0 = poly.back(); + Point2LL p0 = poly.back(); zigzag_connector_processor.registerVertex(p0); // always adds the first point to ZigzagConnectorProcessorEndPieces::first_zigzag_connector when using a zigzag infill type for (size_t point_idx = 0; point_idx < poly.size(); point_idx++) { - Point p1 = poly[point_idx]; + Point2LL p1 = poly[point_idx]; if (p1.X == p0.X) { zigzag_connector_processor.registerVertex(p1); @@ -748,7 +748,7 @@ void Infill::generateLinearBasedInfill( int y = p1.Y + (p0.Y - p1.Y) * (x - p1.X) / (p0.X - p1.X); assert(scanline_idx - scanline_min_idx >= 0 && scanline_idx - scanline_min_idx < int(cut_list.size()) && "reading infill cutlist index out of bounds!"); cut_list[scanline_idx - scanline_min_idx].push_back(y); - Point scanline_linesegment_intersection(x, y); + Point2LL scanline_linesegment_intersection(x, y); zigzag_connector_processor.registerScanlineSegmentIntersection(scanline_linesegment_intersection, scanline_idx); crossings_per_scanline[scanline_idx - min_scanline_index].emplace_back(scanline_linesegment_intersection, poly_idx, point_idx); } @@ -772,8 +772,8 @@ void Infill::generateLinearBasedInfill( const Crossing& first = crossings[crossing_index]; const Crossing& second = crossings[crossing_index + 1]; // Avoid creating zero length crossing lines - const Point unrotated_first = rotation_matrix.unapply(first.coordinate_); - const Point unrotated_second = rotation_matrix.unapply(second.coordinate_); + const Point2LL unrotated_first = rotation_matrix.unapply(first.coordinate_); + const Point2LL unrotated_second = rotation_matrix.unapply(second.coordinate_); if (unrotated_first == unrotated_second) { continue; @@ -802,7 +802,7 @@ void Infill::generateLinearBasedInfill( } } -void Infill::resolveIntersection(const coord_t at_distance, const Point& intersect, Point& connect_start, Point& connect_end, InfillLineSegment* a, InfillLineSegment* b) +void Infill::resolveIntersection(const coord_t at_distance, const Point2LL& intersect, Point2LL& connect_start, Point2LL& connect_end, InfillLineSegment* a, InfillLineSegment* b) { // Select wich ends of the line need to 'bend'. const bool forward_line_a = a->end_ == connect_start; @@ -821,7 +821,7 @@ void Infill::resolveIntersection(const coord_t at_distance, const Point& interse // Find a bisector of the intersection; specifically, the one that crosses the connection & offset it by 1/2 distance to each side. constexpr auto large_enough_vec_len = 0xFFFFFFFF; const auto bisect = LinearAlg2D::getBisectorVector(intersect, connect_start, connect_end, large_enough_vec_len); - const auto offset = ((at_distance / 2) * Point(-bisect.Y, bisect.X)) / large_enough_vec_len; + const auto offset = ((at_distance / 2) * Point2LL(-bisect.Y, bisect.X)) / large_enough_vec_len; const auto q = intersect + offset; const auto r = q + bisect; const auto s = intersect - offset; @@ -881,12 +881,12 @@ void Infill::connectLines(Polygons& result_lines) std::vector>& crossings_on_polygon = crossings_on_line_[polygon_index]; InfillLineSegment* previous_crossing = nullptr; // The crossing that we should connect to. If nullptr, we have been skipping until we find the next crossing. InfillLineSegment* previous_segment = nullptr; // The last segment we were connecting while drawing a line along the border. - Point vertex_before = inner_contour_polygon.back(); + Point2LL vertex_before = inner_contour_polygon.back(); for (size_t vertex_index = 0; vertex_index < inner_contour_polygon.size(); vertex_index++) { assert(crossings_on_polygon.size() > vertex_index && "crossings on line for the current polygon should be bigger then vertex index"); std::vector& crossings_on_polygon_segment = crossings_on_polygon[vertex_index]; - Point vertex_after = inner_contour_polygon[vertex_index]; + Point2LL vertex_after = inner_contour_polygon[vertex_index]; // Sort crossings on every line by how far they are from their initial point. std::sort( @@ -897,8 +897,8 @@ void Infill::connectLines(Polygons& result_lines) // Find the two endpoints that are relevant. const bool choose_left = (left_hand_side->start_segment_ == vertex_index && left_hand_side->start_polygon_ == polygon_index); const bool choose_right = (right_hand_side->start_segment_ == vertex_index && right_hand_side->start_polygon_ == polygon_index); - const Point left_hand_point = choose_left ? left_hand_side->start_ : left_hand_side->end_; - const Point right_hand_point = choose_right ? right_hand_side->start_ : right_hand_side->end_; + const Point2LL left_hand_point = choose_left ? left_hand_side->start_ : left_hand_side->end_; + const Point2LL right_hand_point = choose_right ? right_hand_side->start_ : right_hand_side->end_; return vSize(left_hand_point - vertex_before) < vSize(right_hand_point - vertex_before); }); @@ -925,8 +925,8 @@ void Infill::connectLines(Polygons& result_lines) // Here the InfillLineSegments function as a linked list, so that they can easily be joined. const bool previous_forward = (previous_segment->start_segment_ == vertex_index && previous_segment->start_polygon_ == polygon_index); const bool next_forward = (crossing->start_segment_ == vertex_index && crossing->start_polygon_ == polygon_index); - Point& previous_point = previous_forward ? previous_segment->start_ : previous_segment->end_; - Point& next_point = next_forward ? crossing->start_ : crossing->end_; + Point2LL& previous_point = previous_forward ? previous_segment->start_ : previous_segment->end_; + Point2LL& next_point = next_forward ? crossing->start_ : crossing->end_; InfillLineSegment* new_segment; // If the segment is near length, we avoid creating it but still want to connect the crossing with the previous segment. @@ -938,7 +938,7 @@ void Infill::connectLines(Polygons& result_lines) else { // Resolve any intersections of the fill lines close to the boundary, by inserting extra points so the lines don't create a tiny 'loop'. - Point intersect; + Point2LL intersect; if (vSize2(previous_point - next_point) < half_line_distance_squared && LinearAlg2D::lineLineIntersection(previous_segment->start_, previous_segment->end_, crossing->start_, crossing->end_, intersect) && LinearAlg2D::pointIsProjectedBeyondLine(intersect, previous_segment->start_, previous_segment->end_) == 0 @@ -1003,12 +1003,12 @@ void Infill::connectLines(Polygons& result_lines) // Find where the polyline ends by searching through previous and next lines. // Note that the "previous" and "next" lines don't necessarily match up though, because the direction while connecting infill lines was not yet known. - Point previous_vertex = infill_line->start_; // Take one side arbitrarily to start from. This variable indicates the vertex that connects to the previous line. + Point2LL previous_vertex = infill_line->start_; // Take one side arbitrarily to start from. This variable indicates the vertex that connects to the previous line. InfillLineSegment* current_infill_line = infill_line; while (current_infill_line->next_ && current_infill_line->previous_) // Until we reached an endpoint. { const bool choose_side = (previous_vertex == current_infill_line->start_); - const Point next_vertex = choose_side ? current_infill_line->end_ : current_infill_line->start_; + const Point2LL next_vertex = choose_side ? current_infill_line->end_ : current_infill_line->start_; current_infill_line = choose_side ? current_infill_line->next_ : current_infill_line->previous_; previous_vertex = next_vertex; } @@ -1031,7 +1031,7 @@ void Infill::connectLines(Polygons& result_lines) { current_infill_line->swapDirection(); } - const Point next_vertex = current_infill_line->end_; // Opposite side of the line. + const Point2LL next_vertex = current_infill_line->end_; // Opposite side of the line. constexpr bool polyline_break = false; current_infill_line->appendTo(result_line, polyline_break); current_infill_line = current_infill_line->next_; diff --git a/src/infill/GyroidInfill.cpp b/src/infill/GyroidInfill.cpp index 253cabdea9..6a95df7d54 100644 --- a/src/infill/GyroidInfill.cpp +++ b/src/infill/GyroidInfill.cpp @@ -40,7 +40,7 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za std::vector odd_line_coords; std::vector even_line_coords; Polygons result; - std::vector chains[2]; // [start_points[], end_points[]] + std::vector chains[2]; // [start_points[], end_points[]] std::vector connected_to[2]; // [chain_indices[], chain_indices[]] std::vector line_numbers; // which row/column line a chain is part of if (std::abs(sin_z) <= std::abs(cos_z)) @@ -65,15 +65,15 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za for (coord_t x = (std::floor(aabb.min_.X / pitch) - 2.25) * pitch; x <= aabb.max_.X + pitch / 2; x += pitch / 2) { bool is_first_point = true; - Point last; + Point2LL last; bool last_inside = false; unsigned chain_end_index = 0; - Point chain_end[2]; + Point2LL chain_end[2]; for (coord_t y = (std::floor(aabb.min_.Y / pitch) - 1) * pitch; y <= aabb.max_.Y + pitch; y += pitch) { for (unsigned i = 0; i < num_coords; ++i) { - Point current(x + ((num_columns & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2 + pitch, y + (coord_t)(i * step)); + Point2LL current(x + ((num_columns & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2 + pitch, y + (coord_t)(i * step)); bool current_inside = in_outline.inside(current, true); if (! is_first_point) { @@ -157,15 +157,15 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za for (coord_t y = (std::floor(aabb.min_.Y / pitch) - 1) * pitch; y <= aabb.max_.Y + pitch / 2; y += pitch / 2) { bool is_first_point = true; - Point last; + Point2LL last; bool last_inside = false; unsigned chain_end_index = 0; - Point chain_end[2]; + Point2LL chain_end[2]; for (coord_t x = (std::floor(aabb.min_.X / pitch) - 1) * pitch; x <= aabb.max_.X + pitch; x += pitch) { for (unsigned i = 0; i < num_coords; ++i) { - Point current(x + (coord_t)(i * step), y + ((num_rows & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2); + Point2LL current(x + (coord_t)(i * step), y + ((num_rows & 1) ? odd_line_coords[i] : even_line_coords[i]) / 2); bool current_inside = in_outline.inside(current, true); if (! is_first_point) { @@ -240,12 +240,12 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za for (ConstPolygonRef outline_poly : in_outline) { - std::vector connector_points; // the points that make up a connector line + std::vector connector_points; // the points that make up a connector line // we need to remember the first chain processed and the path to it from the first outline point // so that later we can possibly connect to it from the last chain processed unsigned first_chain_chain_index = std::numeric_limits::max(); - std::vector path_to_first_chain; + std::vector path_to_first_chain; bool drawing = false; // true when a connector line is being (potentially) created @@ -253,14 +253,14 @@ void GyroidInfill::generateTotalGyroidInfill(Polygons& result_lines, bool zig_za unsigned connector_start_chain_index = std::numeric_limits::max(); unsigned connector_start_point_index = std::numeric_limits::max(); - Point cur_point; // current point of interest - either an outline point or a chain end + Point2LL cur_point; // current point of interest - either an outline point or a chain end // go round all of the region's outline and find the chain ends that meet it // quit the loop early if we have seen all the chain ends and are not currently drawing a connector for (unsigned outline_point_index = 0; (chain_ends_remaining > 0 || drawing) && outline_point_index < outline_poly.size(); ++outline_point_index) { - Point op0 = outline_poly[outline_point_index]; - Point op1 = outline_poly[(outline_point_index + 1) % outline_poly.size()]; + Point2LL op0 = outline_poly[outline_point_index]; + Point2LL op1 = outline_poly[(outline_point_index + 1) % outline_poly.size()]; std::vector points_on_outline_chain_index; std::vector points_on_outline_point_index; diff --git a/src/infill/ImageBasedDensityProvider.cpp b/src/infill/ImageBasedDensityProvider.cpp index 2835d05351..66e53fcc63 100644 --- a/src/infill/ImageBasedDensityProvider.cpp +++ b/src/infill/ImageBasedDensityProvider.cpp @@ -23,7 +23,7 @@ ImageBasedDensityProvider::ImageBasedDensityProvider(const std::string filename, int desired_channel_count = 0; // keep original amount of channels int img_x, img_y, img_z; // stbi requires pointer to int rather than to coord_t image = stbi_load(filename.c_str(), &img_x, &img_y, &img_z, desired_channel_count); - image_size = Point3(img_x, img_y, img_z); + image_size = Point3LL(img_x, img_y, img_z); if (! image) { const char* reason = "[unknown reason]"; @@ -35,12 +35,12 @@ ImageBasedDensityProvider::ImageBasedDensityProvider(const std::string filename, std::exit(-1); } { // compute aabb - Point middle = model_aabb.getMiddle(); - Point model_aabb_size = model_aabb.max_ - model_aabb.min_; - Point image_size2 = Point(image_size.x_, image_size.y_); + Point2LL middle = model_aabb.getMiddle(); + Point2LL model_aabb_size = model_aabb.max_ - model_aabb.min_; + Point2LL image_size2 = Point2LL(image_size.x_, image_size.y_); double aabb_aspect_ratio = double(model_aabb_size.X) / double(model_aabb_size.Y); double image_aspect_ratio = double(image_size.x_) / double(image_size.y_); - Point aabb_size; + Point2LL aabb_size; if (image_aspect_ratio < aabb_aspect_ratio) { aabb_size = image_size2 * model_aabb_size.X / image_size.x_; @@ -65,9 +65,9 @@ ImageBasedDensityProvider::~ImageBasedDensityProvider() double ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const { - AABB query_box(Point(query_cube.min_.x_, query_cube.min_.y_), Point(query_cube.max_.x_, query_cube.max_.y_)); - Point img_min = (query_box.min_ - print_aabb.min_ - Point(1, 1)) * image_size.x_ / (print_aabb.max_.X - print_aabb.min_.X); - Point img_max = (query_box.max_ - print_aabb.min_ + Point(1, 1)) * image_size.y_ / (print_aabb.max_.Y - print_aabb.min_.Y); + AABB query_box(Point2LL(query_cube.min_.x_, query_cube.min_.y_), Point2LL(query_cube.max_.x_, query_cube.max_.y_)); + Point2LL img_min = (query_box.min_ - print_aabb.min_ - Point2LL(1, 1)) * image_size.x_ / (print_aabb.max_.X - print_aabb.min_.X); + Point2LL img_max = (query_box.max_ - print_aabb.min_ + Point2LL(1, 1)) * image_size.y_ / (print_aabb.max_.Y - print_aabb.min_.Y); long total_lightness = 0; int value_count = 0; for (int x = std::max((coord_t)0, img_min.X); x <= std::min((coord_t)image_size.x_ - 1, img_max.X); x++) @@ -83,7 +83,7 @@ double ImageBasedDensityProvider::operator()(const AABB3D& query_cube) const } if (value_count == 0) { // triangle falls outside of image or in between pixels, so we return the closest pixel - Point closest_pixel = (img_min + img_max) / 2; + Point2LL closest_pixel = (img_min + img_max) / 2; closest_pixel.X = std::max((coord_t)0, std::min((coord_t)image_size.x_ - 1, (coord_t)closest_pixel.X)); closest_pixel.Y = std::max((coord_t)0, std::min((coord_t)image_size.y_ - 1, (coord_t)closest_pixel.Y)); assert(total_lightness == 0); diff --git a/src/infill/LightningDistanceField.cpp b/src/infill/LightningDistanceField.cpp index 0c532b8ced..923eb1e8b8 100644 --- a/src/infill/LightningDistanceField.cpp +++ b/src/infill/LightningDistanceField.cpp @@ -17,7 +17,7 @@ LightningDistanceField::LightningDistanceField(const coord_t& radius, const Poly , current_outline_(current_outline) , current_overhang_(current_overhang) { - std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size_); + std::vector regular_dots = PolygonUtils::spreadDotsArea(current_overhang, cell_size_); for (const auto& p : regular_dots) { const ClosestPolygonPoint cpp = PolygonUtils::findClosest(p, current_outline); @@ -29,7 +29,7 @@ LightningDistanceField::LightningDistanceField(const coord_t& radius, const Poly { constexpr coord_t prime_for_hash = 191; return std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius ? a.dist_to_boundary_ < b.dist_to_boundary_ - : (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); + : (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); }); for (auto it = unsupported_points_.begin(); it != unsupported_points_.end(); ++it) { @@ -38,7 +38,7 @@ LightningDistanceField::LightningDistanceField(const coord_t& radius, const Poly } } -bool LightningDistanceField::tryGetNextPoint(Point* p) const +bool LightningDistanceField::tryGetNextPoint(Point2LL* p) const { if (unsupported_points_.empty()) { @@ -48,7 +48,7 @@ bool LightningDistanceField::tryGetNextPoint(Point* p) const return true; } -void LightningDistanceField::update(const Point& to_node, const Point& added_leaf) +void LightningDistanceField::update(const Point2LL& to_node, const Point2LL& added_leaf) { auto process_func = [added_leaf, this](const SquareGrid::GridPoint& grid_loc) { @@ -65,11 +65,11 @@ void LightningDistanceField::update(const Point& to_node, const Point& added_lea } return true; }; - const Point a = to_node; - const Point b = added_leaf; - Point ab = b - a; - Point ab_T = turn90CCW(ab); - Point extent = normal(ab_T, supporting_radius_); + const Point2LL a = to_node; + const Point2LL b = added_leaf; + Point2LL ab = b - a; + Point2LL ab_T = turn90CCW(ab); + Point2LL extent = normal(ab_T, supporting_radius_); // TODO: process cells only once; make use of PolygonUtils::spreadDotsArea grid_.processLineCells( std::make_pair(a + extent, a - extent), diff --git a/src/infill/LightningLayer.cpp b/src/infill/LightningLayer.cpp index 3226c0b546..cd689e1bfc 100644 --- a/src/infill/LightningLayer.cpp +++ b/src/infill/LightningLayer.cpp @@ -14,12 +14,12 @@ using namespace cura; -coord_t LightningLayer::getWeightedDistance(const Point& boundary_loc, const Point& unsupported_location) +coord_t LightningLayer::getWeightedDistance(const Point2LL& boundary_loc, const Point2LL& unsupported_location) { return vSize(boundary_loc - unsupported_location); } -Point GroundingLocation::p() const +Point2LL GroundingLocation::p() const { if (tree_node != nullptr) { @@ -61,7 +61,7 @@ void LightningLayer::generateNewTrees // Until no more points need to be added to support all: // Determine next point from tree/outline areas via distance-field - Point unsupported_location; + Point2LL unsupported_location; while (distance_field.tryGetNextPoint(&unsupported_location)) { GroundingLocation grounding_loc = @@ -91,7 +91,7 @@ void LightningLayer::generateNewTrees GroundingLocation LightningLayer::getBestGroundingLocation ( - const Point& unsupported_location, + const Point2LL& unsupported_location, const Polygons& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, @@ -101,7 +101,7 @@ GroundingLocation LightningLayer::getBestGroundingLocation ) { ClosestPolygonPoint cpp = PolygonUtils::findClosest(unsupported_location, current_outlines); - Point node_location = cpp.p(); + Point2LL node_location = cpp.p(); const coord_t within_dist = vSize(node_location - unsupported_location); PolygonsPointIndex dummy; @@ -143,7 +143,7 @@ GroundingLocation LightningLayer::getBestGroundingLocation bool LightningLayer::attach ( - const Point& unsupported_location, + const Point2LL& unsupported_location, const GroundingLocation& grounding_loc, LightningTreeNodeSPtr& new_child, LightningTreeNodeSPtr& new_root @@ -185,10 +185,10 @@ void LightningLayer::reconnectRoots if (root_ptr->getLastGroundingLocation()) { - const Point& ground_loc = root_ptr->getLastGroundingLocation().value(); + const Point2LL& ground_loc = root_ptr->getLastGroundingLocation().value(); if (ground_loc != root_ptr->getLocation()) { - Point new_root_pt; + Point2LL new_root_pt; if (PolygonUtils::lineSegmentPolygonsIntersection(root_ptr->getLocation(), ground_loc, current_outlines, outline_locator, new_root_pt, within_max_dist)) { auto new_root = LightningTreeNode::create(new_root_pt, new_root_pt); diff --git a/src/infill/LightningTreeNode.cpp b/src/infill/LightningTreeNode.cpp index 3347a2ae63..573cffb80a 100644 --- a/src/infill/LightningTreeNode.cpp +++ b/src/infill/LightningTreeNode.cpp @@ -9,7 +9,7 @@ using namespace cura; using LightningTreeNodeSPtr = std::shared_ptr; -coord_t LightningTreeNode::getWeightedDistance(const Point& unsupported_location, const coord_t& supporting_radius) const +coord_t LightningTreeNode::getWeightedDistance(const Point2LL& unsupported_location, const coord_t& supporting_radius) const { constexpr coord_t min_valence_for_boost = 0; constexpr coord_t max_valence_for_boost = 4; @@ -35,17 +35,17 @@ bool LightningTreeNode::hasOffspring(const LightningTreeNodeSPtr& to_be_checked) return false; } -const Point& LightningTreeNode::getLocation() const +const Point2LL& LightningTreeNode::getLocation() const { return p_; } -void LightningTreeNode::setLocation(const Point& loc) +void LightningTreeNode::setLocation(const Point2LL& loc) { p_ = loc; } -LightningTreeNodeSPtr LightningTreeNode::addChild(const Point& child_loc) +LightningTreeNodeSPtr LightningTreeNode::addChild(const Point2LL& child_loc) { assert(p_ != child_loc); LightningTreeNodeSPtr child = LightningTreeNode::create(child_loc); @@ -82,7 +82,7 @@ void LightningTreeNode::propagateToNextLayer( // NOTE: Depth-first, as currently implemented. // Skips the root (because that has no root itself), but all initial nodes will have the root point anyway. -void LightningTreeNode::visitBranches(const std::function& visitor) const +void LightningTreeNode::visitBranches(const std::function& visitor) const { for (const auto& node : children_) { @@ -103,7 +103,7 @@ void LightningTreeNode::visitNodes(const std::function& last_grounding_location /*= std::nullopt*/) +LightningTreeNode::LightningTreeNode(const Point2LL& p, const std::optional& last_grounding_location /*= std::nullopt*/) : is_root_(true) , p_(p) , last_grounding_location_(last_grounding_location) @@ -150,7 +150,7 @@ void LightningTreeNode::reroot(LightningTreeNodeSPtr new_parent /*= nullptr*/) } } -LightningTreeNodeSPtr LightningTreeNode::closestNode(const Point& loc) +LightningTreeNodeSPtr LightningTreeNode::closestNode(const Point2LL& loc) { LightningTreeNodeSPtr result = shared_from_this(); coord_t closest_dist2 = vSize2(p_ - loc); @@ -179,7 +179,7 @@ bool LightningTreeNode::realign(const Polygons& outlines, const LocToLineGrid& o if (outlines.inside(p_, true)) { // Only keep children that have an unbroken connection to here, realign will put the rest in rerooted parts due to recursion: - Point coll; + Point2LL coll; bool reground_me = false; const auto remove_unconnected_func{ [&](const LightningTreeNodeSPtr& child) @@ -228,7 +228,7 @@ void LightningTreeNode::straighten(const coord_t magnitude, const coord_t max_re } LightningTreeNode::RectilinearJunction - LightningTreeNode::straighten(const coord_t magnitude, const Point& junction_above, const coord_t accumulated_dist, const coord_t max_remove_colinear_dist2) + LightningTreeNode::straighten(const coord_t magnitude, const Point2LL& junction_above, const coord_t accumulated_dist, const coord_t max_remove_colinear_dist2) { constexpr coord_t junction_magnitude_factor_numerator = 3; constexpr coord_t junction_magnitude_factor_denominator = 4; @@ -240,12 +240,12 @@ LightningTreeNode::RectilinearJunction coord_t child_dist = vSize(p_ - child_p->p_); RectilinearJunction junction_below = child_p->straighten(magnitude, junction_above, accumulated_dist + child_dist, max_remove_colinear_dist2); coord_t total_dist_to_junction_below = junction_below.total_recti_dist; - Point a = junction_above; - Point b = junction_below.junction_loc; + Point2LL a = junction_above; + Point2LL b = junction_below.junction_loc; if (a != b) // should always be true! { - Point ab = b - a; - Point destination = a + ab * accumulated_dist / std::max(coord_t(1), total_dist_to_junction_below); + Point2LL ab = b - a; + Point2LL destination = a + ab * accumulated_dist / std::max(coord_t(1), total_dist_to_junction_below); if (shorterThen(destination - p_, magnitude)) { p_ = destination; @@ -279,7 +279,7 @@ LightningTreeNode::RectilinearJunction else { constexpr coord_t weight = 1000; - Point junction_moving_dir = normal(junction_above - p_, weight); + Point2LL junction_moving_dir = normal(junction_above - p_, weight); bool prevent_junction_moving = false; for (auto& child_p : children_) { @@ -292,7 +292,7 @@ LightningTreeNode::RectilinearJunction prevent_junction_moving = true; // prevent flipflopping in branches due to straightening and junctoin moving clashing } } - if (junction_moving_dir != Point(0, 0) && ! children_.empty() && ! is_root_ && ! prevent_junction_moving) + if (junction_moving_dir != Point2LL(0, 0) && ! children_.empty() && ! is_root_ && ! prevent_junction_moving) { coord_t junction_moving_dir_len = vSize(junction_moving_dir); if (junction_moving_dir_len > junction_magnitude) @@ -325,9 +325,9 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) } else { - const Point a = getLocation(); - const Point b = child->getLocation(); - const Point ba = a - b; + const Point2LL a = getLocation(); + const Point2LL b = child->getLocation(); + const Point2LL ba = a - b; const coord_t ab_len = vSize(ba); if (dist_pruned_child + ab_len <= pruning_distance) { // we're still in the process of pruning @@ -337,7 +337,7 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) } else { // pruning stops in between this node and the child - const Point n = b + normal(ba, pruning_distance - dist_pruned_child); + const Point2LL n = b + normal(ba, pruning_distance - dist_pruned_child); assert(std::abs(vSize(n - b) + dist_pruned_child - pruning_distance) < 10 && "total pruned distance must be equal to the pruning_distance"); max_distance_pruned = std::max(max_distance_pruned, pruning_distance); child->setLocation(n); @@ -349,7 +349,7 @@ coord_t LightningTreeNode::prune(const coord_t& pruning_distance) return max_distance_pruned; } -const std::optional& LightningTreeNode::getLastGroundingLocation() const +const std::optional& LightningTreeNode::getLastGroundingLocation() const { return last_grounding_location_; } @@ -399,11 +399,11 @@ void LightningTreeNode::removeJunctionOverlap(Polygons& result_lines, const coor } coord_t to_be_reduced = reduction; - Point a = polyline.back(); + Point2LL a = polyline.back(); for (int point_idx = polyline.size() - 2; point_idx >= 0; point_idx--) { - const Point b = polyline[point_idx]; - const Point ab = b - a; + const Point2LL b = polyline[point_idx]; + const Point2LL ab = b - a; const coord_t ab_len = vSize(ab); if (ab_len >= to_be_reduced) { diff --git a/src/infill/NoZigZagConnectorProcessor.cpp b/src/infill/NoZigZagConnectorProcessor.cpp index 883f9bba98..5deaa551ac 100644 --- a/src/infill/NoZigZagConnectorProcessor.cpp +++ b/src/infill/NoZigZagConnectorProcessor.cpp @@ -9,12 +9,12 @@ namespace cura { -void NoZigZagConnectorProcessor::registerVertex(const Point&) +void NoZigZagConnectorProcessor::registerVertex(const Point2LL&) { //No need to add anything. } -void NoZigZagConnectorProcessor::registerScanlineSegmentIntersection(const Point&, int) +void NoZigZagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL&, int) { //No need to add anything. } diff --git a/src/infill/SierpinskiFill.cpp b/src/infill/SierpinskiFill.cpp index b1dc6f545a..bdb4962228 100644 --- a/src/infill/SierpinskiFill.cpp +++ b/src/infill/SierpinskiFill.cpp @@ -66,8 +66,8 @@ SierpinskiFill::~SierpinskiFill() void SierpinskiFill::createTree() { - Point lt = Point(aabb_.min_.X, aabb_.max_.Y); - Point rb = Point(aabb_.max_.X, aabb_.min_.Y); + Point2LL lt = Point2LL(aabb_.min_.X, aabb_.max_.Y); + Point2LL rb = Point2LL(aabb_.max_.X, aabb_.min_.Y); bool root_straight_corner_is_left = false; int root_depth = 1; @@ -89,7 +89,7 @@ void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) if (sub_root.depth_ < max_depth_) // We need to subdivide. { SierpinskiTriangle& t = sub_root; - Point middle = (t.a_ + t.b_) / 2; + Point2LL middle = (t.a_ + t.b_) / 2; // At each subdivision we divide the triangle in two. // Figure out which sort of triangle each child will be: SierpinskiTriangle::SierpinskiDirection first_dir, second_dir; @@ -119,7 +119,7 @@ void SierpinskiFill::createTree(SierpinskiTriangle& sub_root) } void SierpinskiFill::createTreeStatistics(SierpinskiTriangle& triangle) { - Point ac = triangle.straight_corner_ - triangle.a_; + Point2LL ac = triangle.straight_corner_ - triangle.a_; double area = 0.5 * INT2MM2(vSize2(ac)); double short_length = .5 * vSizeMM(ac); double long_length = .5 * vSizeMM(triangle.b_ - triangle.a_); @@ -140,7 +140,7 @@ void SierpinskiFill::createTreeRequestedLengths(SierpinskiTriangle& triangle) triangle_aabb.include(triangle.a_); triangle_aabb.include(triangle.b_); triangle_aabb.include(triangle.straight_corner_); - AABB3D triangle_aabb3d(Point3(triangle_aabb.min_.X, triangle_aabb.min_.Y, 0), Point3(triangle_aabb.max_.X, triangle_aabb.max_.Y, 1)); + AABB3D triangle_aabb3d(Point3LL(triangle_aabb.min_.X, triangle_aabb.min_.Y, 0), Point3LL(triangle_aabb.max_.X, triangle_aabb.max_.Y, 1)); double density = density_provider_(triangle_aabb3d); // The density of the square around the triangle is a rough estimate of the density of the triangle. triangle.requested_length_ = density * triangle.area_ / INT2MM(line_width_); } @@ -705,7 +705,7 @@ Polygon SierpinskiFill::generateCross() const for (SierpinskiTriangle* max_level_it : sequence_) { SierpinskiTriangle& triangle = *max_level_it; - Point edge_middle = triangle.a_ + triangle.b_ + triangle.straight_corner_; + Point2LL edge_middle = triangle.a_ + triangle.b_ + triangle.straight_corner_; switch (triangle.dir_) { case SierpinskiTriangle::SierpinskiDirection::AB_TO_BC: @@ -732,7 +732,7 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord { Polygon ret; - std::function get_edge_crossing_location = [z, min_dist_to_side](const coord_t period, const Edge e) + std::function get_edge_crossing_location = [z, min_dist_to_side](const coord_t period, const Edge e) { coord_t from_l = z % (period * 2); if (from_l > period) @@ -779,13 +779,13 @@ Polygon SierpinskiFill::generateCross(coord_t z, coord_t min_dist_to_side, coord Polygon pocketed; pocketed.reserve(ret.size() * 3 / 2); - Point p0 = ret.back(); + Point2LL p0 = ret.back(); for (size_t poly_idx = 0; poly_idx < ret.size(); poly_idx++) { - Point p1 = ret[poly_idx]; - Point p2 = ret[(poly_idx + 1) % ret.size()]; - Point v0 = p0 - p1; - Point v1 = p2 - p1; + Point2LL p1 = ret[poly_idx]; + Point2LL p2 = ret[(poly_idx + 1) % ret.size()]; + Point2LL v0 = p0 - p1; + Point2LL v1 = p2 - p1; coord_t prod = std::abs(dot(v0, v1)); bool is_straight_corner = prod < sqrt(vSize(v0) * vSize(v1)) * min_dist_to_side; // allow for rounding errors of up to min_dist_to_side diff --git a/src/infill/SierpinskiFillProvider.cpp b/src/infill/SierpinskiFillProvider.cpp index 17b27068bf..0123c42b04 100644 --- a/src/infill/SierpinskiFillProvider.cpp +++ b/src/infill/SierpinskiFillProvider.cpp @@ -65,9 +65,9 @@ SierpinskiFillProvider::~SierpinskiFillProvider() SierpinskiFillProvider::FractalConfig SierpinskiFillProvider::getFractalConfig(const AABB3D aabb_3d, coord_t min_line_distance) { AABB model_aabb = aabb_3d.flatten(); - Point model_aabb_size = model_aabb.max_ - model_aabb.min_; + Point2LL model_aabb_size = model_aabb.max_ - model_aabb.min_; coord_t max_side_length = std::max(model_aabb_size.X, model_aabb_size.Y); - Point model_middle = model_aabb.getMiddle(); + Point2LL model_middle = model_aabb.getMiddle(); int depth = 0; coord_t aabb_size = min_line_distance; @@ -83,7 +83,7 @@ SierpinskiFillProvider::FractalConfig SierpinskiFillProvider::getFractalConfig(c depth--; } - Point radius(aabb_size / 2, aabb_size / 2); + Point2LL radius(aabb_size / 2, aabb_size / 2); AABB aabb(model_middle - radius, model_middle + radius); return FractalConfig{ depth, aabb }; diff --git a/src/infill/SubDivCube.cpp b/src/infill/SubDivCube.cpp index 6f3a3873fb..f30affc602 100644 --- a/src/infill/SubDivCube.cpp +++ b/src/infill/SubDivCube.cpp @@ -23,7 +23,7 @@ coord_t SubDivCube::radius_addition_ = 0; Point3Matrix SubDivCube::rotation_matrix_; PointMatrix SubDivCube::infill_rotation_matrix_; -void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point& infill_origin) +void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point2LL& infill_origin) { radius_addition_ = mesh.settings.get("sub_div_rad_add"); @@ -51,7 +51,7 @@ void SubDivCube::precomputeOctree(SliceMeshStorage& mesh, const Point& infill_or curr_recursion_depth++; } } - Point3 center(infill_origin.X, infill_origin.Y, 0); + Point3LL center(infill_origin.X, infill_origin.Y, 0); Point3Matrix tilt; // rotation matrix to get from axis aligned cubes to cubes standing on their tip // The Z axis is transformed to go in positive Y direction @@ -114,8 +114,8 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona } if (z_diff < cube_properties.max_draw_z_diff) //!< this cube has lines that need to be drawn. { - Point relative_a, relative_b; //!< relative coordinates of line endpoints around cube center - Point a, b; //!< absolute coordinates of line endpoints + Point2LL relative_a, relative_b; //!< relative coordinates of line endpoints around cube center + Point2LL a, b; //!< absolute coordinates of line endpoints relative_a.X = (cube_properties.square_height / 2) * (cube_properties.max_draw_z_diff - z_diff) / cube_properties.max_draw_z_diff; relative_b.X = -relative_a.X; relative_a.Y = cube_properties.max_line_offset - ((z - (center_.z_ - cube_properties.max_draw_z_diff)) * ONE_OVER_SQRT_2); @@ -145,7 +145,7 @@ void SubDivCube::generateSubdivisionLines(const coord_t z, Polygons (&directiona } } -SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) +SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3LL& center, size_t depth) : depth_(depth) , center_(center) { @@ -159,11 +159,11 @@ SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) } CubeProperties cube_properties = cube_properties_per_recursion_step_[depth]; - Point3 child_center; + Point3LL child_center; coord_t radius = double(cube_properties.height) / 4.0 + radius_addition_; int child_nr = 0; - std::vector rel_child_centers; + std::vector rel_child_centers; rel_child_centers.emplace_back(1, 1, 1); // top rel_child_centers.emplace_back(-1, 1, 1); // top three rel_child_centers.emplace_back(1, -1, 1); @@ -172,7 +172,7 @@ SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) rel_child_centers.emplace_back(1, -1, -1); // bottom three rel_child_centers.emplace_back(-1, 1, -1); rel_child_centers.emplace_back(-1, -1, 1); - for (Point3 rel_child_center : rel_child_centers) + for (Point3LL rel_child_center : rel_child_centers) { child_center = center + rotation_matrix_.apply(rel_child_center * int32_t(cube_properties.side_length / 4)); if (isValidSubdivision(mesh, child_center, radius)) @@ -183,7 +183,7 @@ SubDivCube::SubDivCube(SliceMeshStorage& mesh, Point3& center, size_t depth) } } -bool SubDivCube::isValidSubdivision(SliceMeshStorage& mesh, Point3& center, coord_t radius) +bool SubDivCube::isValidSubdivision(SliceMeshStorage& mesh, Point3LL& center, coord_t radius) { coord_t distance2 = 0; coord_t sphere_slice_radius2; //!< squared radius of bounding sphere slice on target layer @@ -198,7 +198,7 @@ bool SubDivCube::isValidSubdivision(SliceMeshStorage& mesh, Point3& center, coor { part_dist = Ratio{ static_cast(test_layer * layer_height - center.z_) } / radius; sphere_slice_radius2 = radius * radius * (1.0 - (part_dist * part_dist)); - Point loc(center.x_, center.y_); + Point2LL loc(center.x_, center.y_); inside = distanceFromPointToMesh(mesh, test_layer, loc, &distance2); if (inside == 1) @@ -221,7 +221,7 @@ bool SubDivCube::isValidSubdivision(SliceMeshStorage& mesh, Point3& center, coor return false; } -coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerIndex layer_nr, Point& location, coord_t* distance2) +coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerIndex layer_nr, Point2LL& location, coord_t* distance2) { if (layer_nr < 0 || (unsigned int)layer_nr >= mesh.layers.size()) //!< this layer is outside of valid range { @@ -234,10 +234,10 @@ coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerI collide.add(part.infill_area); } - Point centerpoint = location; + Point2LL centerpoint = location; bool inside = collide.inside(centerpoint); ClosestPolygonPoint border_point = PolygonUtils::moveInside2(collide, centerpoint); - Point diff = border_point.location_ - location; + Point2LL diff = border_point.location_ - location; *distance2 = vSize2(diff); if (inside) { @@ -247,12 +247,12 @@ coord_t SubDivCube::distanceFromPointToMesh(SliceMeshStorage& mesh, const LayerI } -void SubDivCube::rotatePointInitial(Point& target) +void SubDivCube::rotatePointInitial(Point2LL& target) { target = infill_rotation_matrix_.apply(target); } -void SubDivCube::rotatePoint120(Point& target) +void SubDivCube::rotatePoint120(Point2LL& target) { // constexpr double sqrt_three_fourths = sqrt(3.0 / 4.0); //TODO: Reactivate once MacOS is upgraded to a more modern compiler. #define sqrt_three_fourths 0.86602540378443864676372317 @@ -261,7 +261,7 @@ void SubDivCube::rotatePoint120(Point& target) target.X = x; } -void SubDivCube::addLineAndCombine(Polygons& group, Point from, Point to) +void SubDivCube::addLineAndCombine(Polygons& group, Point2LL from, Point2LL to) { int epsilon = 10; // the smallest distance of two points which are viewed as coincident (dist > 0 due to rounding errors) for (unsigned int idx = 0; idx < group.size(); idx++) diff --git a/src/infill/ZigzagConnectorProcessor.cpp b/src/infill/ZigzagConnectorProcessor.cpp index 5c579841a8..7f75b608ff 100644 --- a/src/infill/ZigzagConnectorProcessor.cpp +++ b/src/infill/ZigzagConnectorProcessor.cpp @@ -8,7 +8,7 @@ using namespace cura; -void ZigzagConnectorProcessor::registerVertex(const Point& vertex) +void ZigzagConnectorProcessor::registerVertex(const Point2LL& vertex) { if (is_first_connector_) { @@ -84,7 +84,7 @@ bool ZigzagConnectorProcessor::shouldAddCurrentConnector(int start_scanline_idx, } -void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point& intersection, int scanline_index) +void ZigzagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL& intersection, int scanline_index) { if (is_first_connector_) { @@ -122,7 +122,7 @@ void ZigzagConnectorProcessor::registerPolyFinished() if ((is_endpiece && use_endpieces_) || (! is_endpiece && shouldAddCurrentConnector(scanline_start_index, scanline_end_index))) { // for convenience, put every point in one vector - for (const Point& point : first_connector_) + for (const Point2LL& point : first_connector_) { current_connector_.push_back(point); } @@ -136,7 +136,7 @@ void ZigzagConnectorProcessor::registerPolyFinished() } -void ZigzagConnectorProcessor::addZagConnector(std::vector& points, bool is_endpiece) +void ZigzagConnectorProcessor::addZagConnector(std::vector& points, bool is_endpiece) { // don't include the last line yet if (points.size() < 2) diff --git a/src/layerPart.cpp b/src/layerPart.cpp index ba9507725a..2a47dd8563 100644 --- a/src/layerPart.cpp +++ b/src/layerPart.cpp @@ -28,7 +28,7 @@ namespace cura { void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, SlicerLayer* layer) { - PolylineStitcher::stitch(layer->openPolylines, storageLayer.openPolyLines, layer->polygons, settings.get("wall_line_width_0")); + PolylineStitcher::stitch(layer->openPolylines, storageLayer.openPolyLines, layer->polygons, settings.get("wall_line_width_0")); storageLayer.openPolyLines = Simplify(settings).polyline(storageLayer.openPolyLines); diff --git a/src/mesh.cpp b/src/mesh.cpp index 8224fbfc2f..740dc442c8 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -15,7 +15,7 @@ const int vertex_meld_distance = MM2INT(0.03); * returns a hash for the location, but first divides by the vertex_meld_distance, * so that any point within a box of vertex_meld_distance by vertex_meld_distance would get mapped to the same hash. */ -static inline uint32_t pointHash(const Point3& p) +static inline uint32_t pointHash(const Point3LL& p) { return ((p.x_ + vertex_meld_distance / 2) / vertex_meld_distance) ^ (((p.y_ + vertex_meld_distance / 2) / vertex_meld_distance) << 10) ^ (((p.z_ + vertex_meld_distance / 2) / vertex_meld_distance) << 20); @@ -35,7 +35,7 @@ Mesh::Mesh() { } -void Mesh::addFace(Point3& v0, Point3& v1, Point3& v2) +void Mesh::addFace(Point3LL& v0, Point3LL& v1, Point3LL& v2) { int vi0 = findIndexOfVertex(v0); int vi1 = findIndexOfVertex(v1); @@ -77,11 +77,11 @@ void Mesh::finish() } } -Point3 Mesh::min() const +Point3LL Mesh::min() const { return aabb_.min_; } -Point3 Mesh::max() const +Point3LL Mesh::max() const { return aabb_.max_; } @@ -118,7 +118,7 @@ bool Mesh::canInterlock() const return ! settings_.get("infill_mesh") && ! settings_.get("anti_overhang_mesh"); } -int Mesh::findIndexOfVertex(const Point3& v) +int Mesh::findIndexOfVertex(const Point3LL& v) { uint32_t hash = pointHash(v); diff --git a/src/multiVolumes.cpp b/src/multiVolumes.cpp index 220523c723..6852469919 100644 --- a/src/multiVolumes.cpp +++ b/src/multiVolumes.cpp @@ -174,7 +174,7 @@ void MultiVolumes::carveCuttingMeshes(std::vector& volumes, const std:: if (cutting_mesh.settings_.get("magic_mesh_surface_mode") != ESurfaceMode::NORMAL) { cutting_mesh_polylines.clear(); - PolylineStitcher::stitch(new_polylines, cutting_mesh_polylines, cutting_mesh_polygons, surface_line_width); + PolylineStitcher::stitch(new_polylines, cutting_mesh_polylines, cutting_mesh_polygons, surface_line_width); } } } diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index e3243a344b..be204cb197 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -89,8 +89,8 @@ bool Comb::calc( bool perform_z_hops, bool perform_z_hops_only_when_collides, const ExtruderTrain& train, // NOTE: USe for travel settings and 'extruder-nr' only, don't use for z-hop/retraction/wipe settings, as that should also be settable per mesh! - Point start_point, - Point end_point, + Point2LL start_point, + Point2LL end_point, CombPaths& comb_paths, bool _start_inside, bool _end_inside, @@ -101,7 +101,7 @@ bool Comb::calc( { return true; } - const Point travel_end_point_before_combing = end_point; + const Point2LL travel_end_point_before_combing = end_point; // Move start and end point inside the optimal comb boundary unsigned int start_inside_poly = NO_INDEX; const bool start_inside = moveInside(boundary_inside_optimal_, _start_inside, inside_loc_to_line_optimal_.get(), start_point, start_inside_poly); @@ -387,7 +387,7 @@ void Comb::moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_insi comb_path_output.push_back(comb_path_input[0]); for (unsigned int point_idx = 1; point_idx < comb_path_input.size() - 1; point_idx++) { - Point new_point = Point(comb_path_input[point_idx]); + Point2LL new_point = Point2LL(comb_path_input[point_idx]); PolygonUtils::moveInside(boundary_inside, new_point, dist, dist2); if (boundary_inside_optimal.inside(new_point)) @@ -406,7 +406,7 @@ void Comb::moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_insi } Comb::Crossing::Crossing( - const Point& dest_point, + const Point2LL& dest_point, const bool dest_is_inside, const unsigned int dest_part_idx, const unsigned int dest_part_boundary_crossing_poly_idx, @@ -425,7 +425,7 @@ Comb::Crossing::Crossing( } } -bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point& dest_point, unsigned int& inside_poly) +bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, unsigned int& inside_poly) { if (is_inside) { @@ -444,14 +444,14 @@ bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* return false; } -void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, const Point close_to) +void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, const Point2LL close_to) { if (dest_is_inside_) { // in-case // find the point on the start inside-polygon closest to the endpoint, but also kind of close to the start point - Point _dest_point(dest_point_); // copy to local variable for lambda capture - std::function close_towards_start_penalty_function( - [_dest_point](Point candidate) + Point2LL _dest_point(dest_point_); // copy to local variable for lambda capture + std::function close_towards_start_penalty_function( + [_dest_point](Point2LL candidate) { return vSize2((candidate - _dest_point) / 10); }); @@ -472,7 +472,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons { // we're not looking at a polygon from the dest_part return true; // a.k.a. continue; } - Point closest_here = LinearAlg2D::getClosestOnLineSegment(close_to, boundary_segment.p(), boundary_segment.next().p()); + Point2LL closest_here = LinearAlg2D::getClosestOnLineSegment(close_to, boundary_segment.p(), boundary_segment.next().p()); coord_t dist2_score_here = vSize2(close_to - closest_here) + vSize2(_dest_point - closest_here) / 10; if (dist2_score_here < dist2_score) { @@ -484,7 +484,7 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons inside_loc_to_line_.processLine(std::make_pair(dest_point_, close_to), line_processor); } - Point result(boundary_crossing_point.p()); // the inside point of the crossing + Point2LL result(boundary_crossing_point.p()); // the inside point of the crossing if (! boundary_crossing_point.isValid()) { // no point has been found in the sparse grid result = dest_point_; @@ -514,14 +514,14 @@ void Comb::Crossing::findCrossingInOrMid(const PartsView& partsView_inside, cons } } -bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& outside, const Point close_to, const bool fail_on_unavoidable_obstacles, Comb& comber) +bool Comb::Crossing::findOutside(const ExtruderTrain& train, const Polygons& outside, const Point2LL close_to, const bool fail_on_unavoidable_obstacles, Comb& comber) { out_ = in_or_mid_; if (dest_is_inside_ || outside.inside(in_or_mid_, true)) // start in_between { // move outside - Point preferred_crossing_1_out = in_or_mid_ + normal(close_to - in_or_mid_, comber.offset_from_inside_to_outside_); - std::function close_to_penalty_function( - [preferred_crossing_1_out](Point candidate) + Point2LL preferred_crossing_1_out = in_or_mid_ + normal(close_to - in_or_mid_, comber.offset_from_inside_to_outside_); + std::function close_to_penalty_function( + [preferred_crossing_1_out](Point2LL candidate) { return vSize2((candidate - preferred_crossing_1_out) / 2); }); @@ -559,8 +559,8 @@ std::shared_ptr> Comb::Cross const ExtruderTrain& train, const Polygons& outside, ConstPolygonRef from, - const Point estimated_start, - const Point estimated_end, + const Point2LL estimated_start, + const Point2LL estimated_end, Comb& comber) { ClosestPolygonPoint* best_in = nullptr; diff --git a/src/pathPlanning/LinePolygonsCrossings.cpp b/src/pathPlanning/LinePolygonsCrossings.cpp index 611aaffe4c..1391dffb7a 100644 --- a/src/pathPlanning/LinePolygonsCrossings.cpp +++ b/src/pathPlanning/LinePolygonsCrossings.cpp @@ -23,10 +23,10 @@ bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obsta for (unsigned int poly_idx = 0; poly_idx < boundary_.size(); poly_idx++) { ConstPolygonRef poly = boundary_[poly_idx]; - Point p0 = transformation_matrix_.apply(poly[poly.size() - 1]); + Point2LL p0 = transformation_matrix_.apply(poly[poly.size() - 1]); for (unsigned int point_idx = 0; point_idx < poly.size(); point_idx++) { - Point p1 = transformation_matrix_.apply(poly[point_idx]); + Point2LL p1 = transformation_matrix_.apply(poly[point_idx]); if ((p0.Y >= transformed_start_point_.Y && p1.Y <= transformed_start_point_.Y) || (p1.Y >= transformed_start_point_.Y && p0.Y <= transformed_start_point_.Y)) { // if line segment crosses the line through the transformed start and end point (aka scanline) if (p1.Y == p0.Y) // Line segment is parallel with the scanline. That means that both endpoints lie on the scanline, so they will have intersected with the adjacent @@ -68,7 +68,7 @@ bool LinePolygonsCrossings::calcScanlineCrossings(bool fail_on_unavoidable_obsta bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() { - Point diff = end_point_ - start_point_; + Point2LL diff = end_point_ - start_point_; transformation_matrix_ = PointMatrix(diff); transformed_start_point_ = transformation_matrix_.apply(start_point_); @@ -76,10 +76,10 @@ bool LinePolygonsCrossings::lineSegmentCollidesWithBoundary() for (ConstPolygonRef poly : boundary_) { - Point p0 = transformation_matrix_.apply(poly.back()); - for (Point p1_ : poly) + Point2LL p0 = transformation_matrix_.apply(poly.back()); + for (Point2LL p1_ : poly) { - Point p1 = transformation_matrix_.apply(p1_); + Point2LL p1 = transformation_matrix_.apply(p1_); // when the boundary just touches the line don't disambiguate between the boundary moving on to actually cross the line // and the boundary bouncing back, resulting in not a real collision - to keep the algorithm simple. // @@ -153,21 +153,21 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const // minimise the path length by measuring the length of both paths around the polygon so we can determine the shorter path ConstPolygonRef poly = boundary_[min.poly_idx_]; - combPath.push_back(transformation_matrix_.unapply(Point(min.x_ - std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y))); + combPath.push_back(transformation_matrix_.unapply(Point2LL(min.x_ - std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y))); // follow the path in the same direction as the winding order of the boundary polygon - std::vector fwd_points; - Point prev = combPath.back(); + std::vector fwd_points; + Point2LL prev = combPath.back(); coord_t fwd_len = 0; for (unsigned int point_idx = min.point_idx_; point_idx != max.point_idx_; point_idx = (point_idx < poly.size() - 1) ? (point_idx + 1) : (0)) { - const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); + const Point2LL p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); fwd_points.push_back(p); fwd_len += vSize(p - prev); prev = p; } - const Point last = transformation_matrix_.unapply(Point(max.x_ + std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y)); + const Point2LL last = transformation_matrix_.unapply(Point2LL(max.x_ + std::abs(dist_to_move_boundary_point_outside_), transformed_start_point_.Y)); if (fwd_points.size() > 0) { @@ -175,14 +175,14 @@ void LinePolygonsCrossings::generateBasicCombingPath(const Crossing& min, const } // follow the path in the opposite direction of the winding order of the boundary polygon - std::vector rev_points; + std::vector rev_points; prev = combPath.back(); coord_t rev_len = 0; unsigned int min_idx = (min.point_idx_ == 0) ? poly.size() - 1 : min.point_idx_ - 1; unsigned int max_idx = (max.point_idx_ == 0) ? poly.size() - 1 : max.point_idx_ - 1; for (unsigned int point_idx = min_idx; point_idx != max_idx; point_idx = (point_idx > 0) ? (point_idx - 1) : (poly.size() - 1)) { - const Point p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); + const Point2LL p = PolygonUtils::getBoundaryPointWithOffset(poly, point_idx, dist_to_move_boundary_point_outside_); rev_points.push_back(p); rev_len += vSize(p - prev); prev = p; @@ -215,7 +215,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize { continue; } - Point& current_point = optimized_comb_path.back(); + Point2LL& current_point = optimized_comb_path.back(); if (PolygonUtils::polygonCollidesWithLineSegment(current_point, comb_path[point_idx], loc_to_line_grid_)) { if (PolygonUtils::polygonCollidesWithLineSegment(current_point, comb_path[point_idx - 1], loc_to_line_grid_)) @@ -255,7 +255,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize // 2----3 ... 2----3 ... // - Point p = optimized_comb_path.back(); + Point2LL p = optimized_comb_path.back(); for (double frac : { 0.9, 0.9, 0.7, 0.5 }) { // slide p towards the second point in the comb path @@ -307,7 +307,7 @@ bool LinePolygonsCrossings::optimizePath(CombPath& comb_path, CombPath& optimize for (double frac : { 0.9, 0.9, 0.7, 0.5 }) { // make a new point between the penultimate corner and the corner before that - Point p = optimized_comb_path[n - 2] + (optimized_comb_path[n - 1] - optimized_comb_path[n - 2]) * frac; + Point2LL p = optimized_comb_path[n - 2] + (optimized_comb_path[n - 1] - optimized_comb_path[n - 2]) * frac; if (! PolygonUtils::polygonCollidesWithLineSegment(p, comb_path.back(), loc_to_line_grid_)) { // using the new corner doesn't cause a conflict diff --git a/src/plugins/converters.cpp b/src/plugins/converters.cpp index 72a8166de7..c637f44c45 100644 --- a/src/plugins/converters.cpp +++ b/src/plugins/converters.cpp @@ -133,7 +133,7 @@ simplify_response::native_value_type Polygon o{}; for (const auto& point : paths.outline().path()) { - o.add(Point{ point.x(), point.y() }); + o.add(Point2LL{ point.x(), point.y() }); } poly.add(o); @@ -142,7 +142,7 @@ simplify_response::native_value_type Polygon h{}; for (const auto& point : hole.path()) { - h.add(Point{ point.x(), point.y() }); + h.add(Point2LL{ point.x(), point.y() }); } poly.add(h); } @@ -234,7 +234,7 @@ infill_generate_response::native_value_type infill_generate_response::operator() Polygon outline{}; for (auto& path_msg : polygon_msg.outline().path()) { - outline.add(Point{ path_msg.x(), path_msg.y() }); + outline.add(Point2LL{ path_msg.x(), path_msg.y() }); } polygon.add(outline); @@ -244,7 +244,7 @@ infill_generate_response::native_value_type infill_generate_response::operator() Polygon hole{}; for (auto& path_msg : hole_msg.path()) { - hole.add(Point{ path_msg.x(), path_msg.y() }); + hole.add(Point2LL{ path_msg.x(), path_msg.y() }); } polygon.add(hole); } @@ -257,7 +257,7 @@ infill_generate_response::native_value_type infill_generate_response::operator() Polygon poly_line; for (auto& p : polygon.path()) { - poly_line.emplace_back(Point{ p.x(), p.y() }); + poly_line.emplace_back(Point2LL{ p.x(), p.y() }); } result_lines.emplace_back(poly_line); } @@ -469,7 +469,7 @@ gcode_paths_modify_response::native_value_type | ranges::views::transform( [](const auto& point_msg) { - return Point{ point_msg.x(), point_msg.y() }; + return Point2LL{ point_msg.x(), point_msg.y() }; }) | ranges::to_vector; diff --git a/src/settings/ZSeamConfig.cpp b/src/settings/ZSeamConfig.cpp index ea91b0f516..2d6b9a1a05 100644 --- a/src/settings/ZSeamConfig.cpp +++ b/src/settings/ZSeamConfig.cpp @@ -6,7 +6,7 @@ namespace cura { -ZSeamConfig::ZSeamConfig(const EZSeamType type, const Point pos, const EZSeamCornerPrefType corner_pref, const coord_t simplify_curvature) +ZSeamConfig::ZSeamConfig(const EZSeamType type, const Point2LL pos, const EZSeamCornerPrefType corner_pref, const coord_t simplify_curvature) : type_(type) , pos_(pos) , corner_pref_(corner_pref) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index f0e0c79a26..a60631d70b 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -231,13 +231,13 @@ bool SliceMeshStorage::isPrinted() const return ! settings.get("infill_mesh") && ! settings.get("cutting_mesh") && ! settings.get("anti_overhang_mesh"); } -Point SliceMeshStorage::getZSeamHint() const +Point2LL SliceMeshStorage::getZSeamHint() const { - Point pos(settings.get("z_seam_x"), settings.get("z_seam_y")); + Point2LL pos(settings.get("z_seam_x"), settings.get("z_seam_y")); if (settings.get("z_seam_relative")) { - Point3 middle = bounding_box.getMiddle(); - pos += Point(middle.x_, middle.y_); + Point3LL middle = bounding_box.getMiddle(); + pos += Point2LL(middle.x_, middle.y_); } return pos; } @@ -255,8 +255,8 @@ SliceDataStorage::SliceDataStorage() , max_print_height_second_to_last_extruder(-1) { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - Point3 machine_max(mesh_group_settings.get("machine_width"), mesh_group_settings.get("machine_depth"), mesh_group_settings.get("machine_height")); - Point3 machine_min(0, 0, 0); + Point3LL machine_max(mesh_group_settings.get("machine_width"), mesh_group_settings.get("machine_depth"), mesh_group_settings.get("machine_height")); + Point3LL machine_min(0, 0, 0); if (mesh_group_settings.get("machine_center_is_zero")) { machine_max /= 2; @@ -567,9 +567,9 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { for (PolygonRef poly : disallowed_areas) { - for (Point& p : poly) + for (Point2LL& p : poly) { - p = Point(machine_size.max_.x_ / 2 + p.X, machine_size.max_.y_ / 2 - p.Y); + p = Point2LL(machine_size.max_.x_ / 2 + p.X, machine_size.max_.y_ / 2 - p.Y); } } } @@ -588,12 +588,12 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const { continue; } - Point prime_pos(extruder_settings.get("extruder_prime_pos_x"), extruder_settings.get("extruder_prime_pos_y")); - if (prime_pos == Point(0, 0)) + Point2LL prime_pos(extruder_settings.get("extruder_prime_pos_x"), extruder_settings.get("extruder_prime_pos_y")); + if (prime_pos == Point2LL(0, 0)) { continue; // Ignore extruder prime position if it is not set. } - Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + Point2LL translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); prime_pos -= translation; Polygons prime_polygons; prime_polygons.emplace_back(PolygonUtils::makeCircle(prime_pos, prime_clearance, std::numbers::pi / 32)); @@ -609,7 +609,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const continue; } Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; - Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + Point2LL translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); Polygons extruder_border = disallowed_areas; extruder_border.translate(translation); if (first) @@ -634,7 +634,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const continue; } Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder_nr].settings_; - Point translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); + Point2LL translation(extruder_settings.get("machine_nozzle_offset_x"), extruder_settings.get("machine_nozzle_offset_y")); for (size_t other_extruder_nr = 0; other_extruder_nr < extruder_is_used.size(); other_extruder_nr++) { // NOTE: the other extruder doesn't have to be used. Since the global border is the union of all extruders borders also unused extruders must be taken into account. @@ -643,7 +643,7 @@ Polygons SliceDataStorage::getMachineBorder(int checking_extruder_nr) const continue; } Settings& other_extruder_settings = Application::getInstance().current_slice_->scene.extruders[other_extruder_nr].settings_; - Point other_translation(other_extruder_settings.get("machine_nozzle_offset_x"), other_extruder_settings.get("machine_nozzle_offset_y")); + Point2LL other_translation(other_extruder_settings.get("machine_nozzle_offset_x"), other_extruder_settings.get("machine_nozzle_offset_y")); Polygons translated_border = border; translated_border.translate(translation - other_translation); border_all_extruders = border_all_extruders.intersection(translated_border); diff --git a/src/slicer.cpp b/src/slicer.cpp index ee971db3b5..22040b1480 100644 --- a/src/slicer.cpp +++ b/src/slicer.cpp @@ -71,8 +71,8 @@ int SlicerLayer::tryFaceNextSegmentIdx(const SlicerSegment& segment, const int f if (it != it_end) { const int segment_idx = (*it).second; - Point p1 = segments[segment_idx].start; - Point diff = segment.end - p1; + Point2LL p1 = segments[segment_idx].start; + Point2LL diff = segment.end - p1; if (shorterThen(diff, largest_neglected_gap_first_phase)) { if (segment_idx == static_cast(start_segment_idx)) @@ -201,12 +201,12 @@ std::priority_queue SlicerLayer::findPossibleStitch unsigned int polyline_idx; // Depending on the SparsePointGridInclusive, either the start point or the // end point of the polyline - Point polyline_term_pt; + Point2LL polyline_term_pt; }; struct StitchGridValLocator { - Point operator()(const StitchGridVal& val) const + Point2LL operator()(const StitchGridVal& val) const { return val.polyline_term_pt; } @@ -267,7 +267,7 @@ std::priority_queue SlicerLayer::findPossibleStitch nearby_ends = grid_ends.getNearby(polyline_1[0], max_dist); for (const auto& nearby_end : nearby_ends) { - Point diff = nearby_end.polyline_term_pt - polyline_1[0]; + Point2LL diff = nearby_end.polyline_term_pt - polyline_1[0]; int64_t dist2 = vSize2(diff); if (dist2 < max_dist2) { @@ -293,7 +293,7 @@ std::priority_queue SlicerLayer::findPossibleStitch continue; } - Point diff = nearby_end.polyline_term_pt - polyline_1.back(); + Point2LL diff = nearby_end.polyline_term_pt - polyline_1.back(); int64_t dist2 = vSize2(diff); if (dist2 < max_dist2) { @@ -317,7 +317,7 @@ std::priority_queue SlicerLayer::findPossibleStitch continue; } - Point diff = nearby_start.polyline_term_pt - polyline_1[0]; + Point2LL diff = nearby_start.polyline_term_pt - polyline_1[0]; int64_t dist2 = vSize2(diff); if (dist2 < max_dist2) { @@ -403,7 +403,7 @@ void SlicerLayer::joinPolylines(PolygonRef& polyline_0, PolygonRef& polyline_1, else { // append polyline_1 onto polyline_0 - for (Point& p : polyline_1) + for (Point2LL& p : polyline_1) polyline_0.add(p); } polyline_1.clear(); @@ -641,7 +641,7 @@ void SlicerLayer::stitch_extensive(Polygons& open_polylines) } } -std::optional SlicerLayer::findPolygonGapCloser(Point ip0, Point ip1) +std::optional SlicerLayer::findPolygonGapCloser(Point2LL ip0, Point2LL ip1) { std::optional c1 = findPolygonPointClosestTo(ip0); std::optional c2 = findPolygonPointClosestTo(ip1); @@ -664,11 +664,11 @@ std::optional SlicerLayer::findPolygonGapCloser(Point ip0, Poin else { // Find out if we have should go from A to B or the other way around. - Point p0 = polygons[ret.polygonIdx][ret.pointIdxA]; + Point2LL p0 = polygons[ret.polygonIdx][ret.pointIdxA]; int64_t lenA = vSize(p0 - ip0); for (unsigned int i = ret.pointIdxA; i != ret.pointIdxB; i = (i + 1) % polygons[ret.polygonIdx].size()) { - Point p1 = polygons[ret.polygonIdx][i]; + Point2LL p1 = polygons[ret.polygonIdx][i]; lenA += vSize(p0 - p1); p0 = p1; } @@ -678,7 +678,7 @@ std::optional SlicerLayer::findPolygonGapCloser(Point ip0, Poin int64_t lenB = vSize(p0 - ip1); for (unsigned int i = ret.pointIdxB; i != ret.pointIdxA; i = (i + 1) % polygons[ret.polygonIdx].size()) { - Point p1 = polygons[ret.polygonIdx][i]; + Point2LL p1 = polygons[ret.polygonIdx][i]; lenB += vSize(p0 - p1); p0 = p1; } @@ -698,24 +698,24 @@ std::optional SlicerLayer::findPolygonGapCloser(Point ip0, Poin return ret; } -std::optional SlicerLayer::findPolygonPointClosestTo(Point input) +std::optional SlicerLayer::findPolygonPointClosestTo(Point2LL input) { for (size_t n = 0; n < polygons.size(); n++) { - Point p0 = polygons[n][polygons[n].size() - 1]; + Point2LL p0 = polygons[n][polygons[n].size() - 1]; for (size_t i = 0; i < polygons[n].size(); i++) { - Point p1 = polygons[n][i]; + Point2LL p1 = polygons[n][i]; // Q = A + Normal( B - A ) * ((( B - A ) dot ( P - A )) / VSize( A - B )); - Point pDiff = p1 - p0; + Point2LL pDiff = p1 - p0; int64_t lineLength = vSize(pDiff); if (lineLength > 1) { int64_t distOnLine = dot(pDiff, input - p0) / lineLength; if (distOnLine >= 0 && distOnLine <= lineLength) { - Point q = p0 + pDiff * distOnLine / lineLength; + Point2LL q = p0 + pDiff * distOnLine / lineLength; if (shorterThen(q - input, MM2INT(0.1))) { ClosePolygonResult ret; @@ -862,9 +862,9 @@ void Slicer::buildSegments(const Mesh& mesh, const std::vector> Slicer::buildZHeightsForFaces(const Mes const MeshVertex& v2 = mesh.vertices_[face.vertex_index_[2]]; // get all vertices represented as 3D point - Point3 p0 = v0.p_; - Point3 p1 = v1.p_; - Point3 p2 = v2.p_; + Point3LL p0 = v0.p_; + Point3LL p1 = v1.p_; + Point3LL p2 = v2.p_; // find the minimum and maximum z point int32_t minZ = p0.z_; @@ -1153,7 +1153,7 @@ std::vector> Slicer::buildZHeightsForFaces(const Mes return zHeights; } -SlicerSegment Slicer::project2D(const Point3& p0, const Point3& p1, const Point3& p2, const coord_t z) +SlicerSegment Slicer::project2D(const Point3LL& p0, const Point3LL& p1, const Point3LL& p2, const coord_t z) { SlicerSegment seg; diff --git a/src/support.cpp b/src/support.cpp index 66bc59eb91..05e81fbf93 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -492,7 +492,7 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp for (unsigned int i = 0; i < circle_resolution; i++) { const AngleRadians angle = TAU * i / circle_resolution; - const Point3 machine_middle = storage.machine_size.getMiddle(); + const Point3LL machine_middle = storage.machine_size.getMiddle(); const coord_t x = machine_middle.x_ + cos(angle) * width / 2; const coord_t y = machine_middle.y_ + sin(angle) * depth / 2; border_circle.emplace_back(x, y); @@ -730,8 +730,8 @@ void AreaSupport::precomputeCrossInfillTree(SliceDataStorage& storage) } const coord_t aabb_expansion = infill_settings.get("support_offset"); AABB3D aabb_here(mesh.bounding_box); - aabb_here.include(aabb_here.min_ - Point3(-aabb_expansion, -aabb_expansion, 0)); - aabb_here.include(aabb_here.max_ + Point3(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.min_ - Point3LL(-aabb_expansion, -aabb_expansion, 0)); + aabb_here.include(aabb_here.max_ + Point3LL(-aabb_expansion, -aabb_expansion, 0)); aabb.include(aabb_here); } @@ -1722,13 +1722,13 @@ void AreaSupport::handleWallStruts(const Settings& settings, Polygons& supportLa // add square tower (strut) in the middle of the wall if (width < max_tower_supported_diameter) { - Point mid = (poly[best] + poly[(best + 1) % poly.size()]) / 2; + Point2LL mid = (poly[best] + poly[(best + 1) % poly.size()]) / 2; Polygons struts; PolygonRef strut = struts.newPoly(); - strut.add(mid + Point(tower_diameter / 2, tower_diameter / 2)); - strut.add(mid + Point(-tower_diameter / 2, tower_diameter / 2)); - strut.add(mid + Point(-tower_diameter / 2, -tower_diameter / 2)); - strut.add(mid + Point(tower_diameter / 2, -tower_diameter / 2)); + strut.add(mid + Point2LL(tower_diameter / 2, tower_diameter / 2)); + strut.add(mid + Point2LL(-tower_diameter / 2, tower_diameter / 2)); + strut.add(mid + Point2LL(-tower_diameter / 2, -tower_diameter / 2)); + strut.add(mid + Point2LL(tower_diameter / 2, -tower_diameter / 2)); supportLayer_this = supportLayer_this.unionPolygons(struts); } } diff --git a/src/utils/AABB.cpp b/src/utils/AABB.cpp index d31a64af21..f3a93cbf1d 100644 --- a/src/utils/AABB.cpp +++ b/src/utils/AABB.cpp @@ -18,7 +18,7 @@ AABB::AABB() { } -AABB::AABB(const Point& min, const Point& max) +AABB::AABB(const Point2LL& min, const Point2LL& max) : min_(min) , max_(max) { @@ -38,15 +38,15 @@ AABB::AABB(ConstPolygonRef poly) calculate(poly); } -Point AABB::getMiddle() const +Point2LL AABB::getMiddle() const { return (min_ + max_) / 2; } -coord_t AABB::distanceSquared(const Point& p) const +coord_t AABB::distanceSquared(const Point2LL& p) const { - const Point a = Point(max_.X, min_.Y); - const Point b = Point(min_.X, max_.Y); + const Point2LL a = Point2LL(max_.X, min_.Y); + const Point2LL b = Point2LL(min_.X, max_.Y); return (contains(p) ? -1 : 1) * std::min({ LinearAlg2D::getDist2FromLineSegment(min_, a, p), LinearAlg2D::getDist2FromLineSegment(a, max_, p), @@ -61,17 +61,17 @@ coord_t AABB::distanceSquared(const AABB& other) const other.distanceSquared(min_), distanceSquared(other.max_), other.distanceSquared(max_), - distanceSquared(Point(other.max_.X, other.min_.Y)), - other.distanceSquared(Point(max_.X, min_.Y)), - distanceSquared(Point(other.min_.X, other.max_.Y)), - other.distanceSquared(Point(min_.X, max_.Y)), + distanceSquared(Point2LL(other.max_.X, other.min_.Y)), + other.distanceSquared(Point2LL(max_.X, min_.Y)), + distanceSquared(Point2LL(other.min_.X, other.max_.Y)), + other.distanceSquared(Point2LL(min_.X, max_.Y)), }); } void AABB::calculate(const Polygons& polys) { - min_ = Point(POINT_MAX, POINT_MAX); - max_ = Point(POINT_MIN, POINT_MIN); + min_ = Point2LL(POINT_MAX, POINT_MAX); + max_ = Point2LL(POINT_MIN, POINT_MIN); for (unsigned int i = 0; i < polys.size(); i++) { for (unsigned int j = 0; j < polys[i].size(); j++) @@ -83,15 +83,15 @@ void AABB::calculate(const Polygons& polys) void AABB::calculate(ConstPolygonRef poly) { - min_ = Point(POINT_MAX, POINT_MAX); - max_ = Point(POINT_MIN, POINT_MIN); - for (const Point& p : poly) + min_ = Point2LL(POINT_MAX, POINT_MAX); + max_ = Point2LL(POINT_MIN, POINT_MIN); + for (const Point2LL& p : poly) { include(p); } } -bool AABB::contains(const Point& point) const +bool AABB::contains(const Point2LL& point) const { return point.X >= min_.X && point.X <= max_.X && point.Y >= min_.Y && point.Y <= max_.Y; } @@ -131,7 +131,7 @@ bool AABB::hit(const AABB& other) const return true; } -void AABB::include(Point point) +void AABB::include(Point2LL point) { min_.X = std::min(min_.X, point.X); min_.Y = std::min(min_.Y, point.Y); @@ -150,7 +150,7 @@ void AABB::include(const AABB other) void AABB::expand(int dist) { - if (min_ == Point(POINT_MAX, POINT_MAX) || max_ == Point(POINT_MIN, POINT_MIN)) + if (min_ == Point2LL(POINT_MAX, POINT_MAX) || max_ == Point2LL(POINT_MIN, POINT_MIN)) { return; } @@ -164,9 +164,9 @@ Polygon AABB::toPolygon() const { Polygon ret; ret.add(min_); - ret.add(Point(max_.X, min_.Y)); + ret.add(Point2LL(max_.X, min_.Y)); ret.add(max_); - ret.add(Point(min_.X, max_.Y)); + ret.add(Point2LL(min_.X, max_.Y)); return ret; } diff --git a/src/utils/AABB3D.cpp b/src/utils/AABB3D.cpp index 4ace7d4cea..698c4745b7 100644 --- a/src/utils/AABB3D.cpp +++ b/src/utils/AABB3D.cpp @@ -16,20 +16,20 @@ AABB3D::AABB3D() { } -AABB3D::AABB3D(Point3 min, Point3 max) +AABB3D::AABB3D(Point3LL min, Point3LL max) : min_(min) , max_(max) { } -Point3 AABB3D::getMiddle() const +Point3LL AABB3D::getMiddle() const { return (min_ + max_) / 2; } AABB AABB3D::flatten() const { - return AABB(Point(min_.x_, min_.y_), Point(max_.x_, max_.y_)); + return AABB(Point2LL(min_.x_, min_.y_), Point2LL(max_.x_, max_.y_)); } @@ -42,7 +42,7 @@ bool AABB3D::hit(const AABB3D& other) const return true; } -AABB3D AABB3D::include(Point3 p) +AABB3D AABB3D::include(Point3LL p) { min_.x_ = std::min(min_.x_, p.x_); min_.y_ = std::min(min_.y_, p.y_); @@ -72,14 +72,14 @@ AABB3D AABB3D::includeZ(coord_t z) return *this; } -AABB3D AABB3D::translate(Point3 offset) +AABB3D AABB3D::translate(Point3LL offset) { min_ += offset; max_ += offset; return *this; } -AABB3D AABB3D::translate(Point offset) +AABB3D AABB3D::translate(Point2LL offset) { min_ += offset; max_ += offset; @@ -88,8 +88,8 @@ AABB3D AABB3D::translate(Point offset) AABB3D AABB3D::expand(coord_t outset) { - min_ -= Point3(outset, outset, outset); - max_ += Point3(outset, outset, outset); + min_ -= Point3LL(outset, outset, outset); + max_ += Point3LL(outset, outset, outset); if (min_.x_ > max_.x_ || min_.y_ > max_.y_ || min_.z_ > max_.z_) { // make this AABB3D invalid *this = AABB3D(); @@ -99,8 +99,8 @@ AABB3D AABB3D::expand(coord_t outset) AABB3D AABB3D::expandXY(coord_t outset) { - min_ -= Point3(outset, outset, 0); - max_ += Point3(outset, outset, 0); + min_ -= Point3LL(outset, outset, 0); + max_ += Point3LL(outset, outset, 0); if (min_.x_ > max_.x_ || min_.y_ > max_.y_) { // make this AABB3D invalid *this = AABB3D(); diff --git a/src/utils/ExtrusionJunction.cpp b/src/utils/ExtrusionJunction.cpp index 4e83ad3c24..366d15dad3 100644 --- a/src/utils/ExtrusionJunction.cpp +++ b/src/utils/ExtrusionJunction.cpp @@ -11,7 +11,7 @@ bool ExtrusionJunction::operator==(const ExtrusionJunction& other) const return p_ == other.p_ && w_ == other.w_ && perimeter_index_ == other.perimeter_index_; } -ExtrusionJunction::ExtrusionJunction(const Point p, const coord_t w, const coord_t perimeter_index) +ExtrusionJunction::ExtrusionJunction(const Point2LL p, const coord_t w, const coord_t perimeter_index) : p_(p) , w_(w) , perimeter_index_(perimeter_index) diff --git a/src/utils/ExtrusionSegment.cpp b/src/utils/ExtrusionSegment.cpp index 9e6edb8c5d..71a2d59bef 100644 --- a/src/utils/ExtrusionSegment.cpp +++ b/src/utils/ExtrusionSegment.cpp @@ -18,7 +18,7 @@ Polygons ExtrusionSegment::toPolygons() Polygons ExtrusionSegment::toPolygons(bool reduced) { Polygons ret; - const Point vec = to_.p_ - from_.p_; + const Point2LL vec = to_.p_ - from_.p_; const coord_t vec_length = vSize(vec); if (vec_length <= 0) // Don't even output the endcaps. @@ -49,7 +49,7 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap on the "from" vertex's end. { - poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(alpha + dir), from_.w_ / 2 * sin(alpha + dir))); + poly.emplace_back(from_.p_ + Point2LL(from_.w_ / 2 * cos(alpha + dir), from_.w_ / 2 * sin(alpha + dir))); double start_a = 2 * std::numbers::pi; while (start_a > alpha + dir) @@ -67,16 +67,16 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) // Draw the endcap. for (double a = start_a; a <= end_a; a += a_step) { - poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(a), from_.w_ / 2 * sin(a))); + poly.emplace_back(from_.p_ + Point2LL(from_.w_ / 2 * cos(a), from_.w_ / 2 * sin(a))); } - poly.emplace_back(from_.p_ + Point(from_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), from_.w_ / 2 * sin(2 * std::numbers::pi - alpha + dir))); + poly.emplace_back(from_.p_ + Point2LL(from_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), from_.w_ / 2 * sin(2 * std::numbers::pi - alpha + dir))); } // Draw the endcap on the "to" vertex's end. { poly.emplace_back( to_.p_ - + Point( + + Point2LL( to_.w_ / 2 * cos(2 * std::numbers::pi - alpha + dir), to_.w_ / 2 * sin(2 * std::numbers::pi - alpha + dir))); // Also draws the main diagonal from the "from" vertex to the "to" vertex! @@ -109,23 +109,23 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) { for (double a = end_a; a >= start_a; a -= a_step) // Go in the opposite direction. { - poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); + poly.emplace_back(to_.p_ + Point2LL(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); } } else { for (double a = end_a; a <= start_a; a += a_step) { - poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); + poly.emplace_back(to_.p_ + Point2LL(to_.w_ / 2 * cos(a), to_.w_ / 2 * sin(a))); } } - poly.emplace_back(to_.p_ + Point(to_.w_ / 2 * cos(alpha + dir), to_.w_ / 2 * sin(alpha + dir))); + poly.emplace_back(to_.p_ + Point2LL(to_.w_ / 2 * cos(alpha + dir), to_.w_ / 2 * sin(alpha + dir))); // The other main diagonal from the "to" vertex to the "from" vertex is implicit in the closing of the polygon. } #ifdef DEBUG - for (Point p : poly) + for (Point2LL p : poly) { assert(p.X < 0x3FFFFFFFFFFFFFFFLL); assert(p.Y < 0x3FFFFFFFFFFFFFFFLL); @@ -138,9 +138,9 @@ Polygons ExtrusionSegment::toPolygons(bool reduced) std::vector ExtrusionSegment::discretize(coord_t step_size) { - Point a = from_.p_; - Point b = to_.p_; - Point ab = b - a; + Point2LL a = from_.p_; + Point2LL b = to_.p_; + Point2LL ab = b - a; coord_t ab_length = vSize(ab); coord_t step_count = std::max(static_cast(1), (ab_length + step_size / 2) / step_size); std::vector discretized; diff --git a/src/utils/LinearAlg2D.cpp b/src/utils/LinearAlg2D.cpp index 98a9b896fa..2292323251 100644 --- a/src/utils/LinearAlg2D.cpp +++ b/src/utils/LinearAlg2D.cpp @@ -7,15 +7,15 @@ #include #include // atan2 -#include "utils/IntPoint.h" // dot +#include "utils/Point2LL.h" // dot namespace cura { -double LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) +double LinearAlg2D::getAngleLeft(const Point2LL& a, const Point2LL& b, const Point2LL& c) { - const Point ba = a - b; - const Point bc = c - b; + const Point2LL ba = a - b; + const Point2LL bc = c - b; const coord_t dott = dot(ba, bc); // dot product const coord_t det = ba.X * bc.Y - ba.Y * bc.X; // determinant if (det == 0) @@ -41,7 +41,7 @@ double LinearAlg2D::getAngleLeft(const Point& a, const Point& b, const Point& c) } -bool LinearAlg2D::getPointOnLineWithDist(const Point& p, const Point& a, const Point& b, const coord_t dist, Point& result) +bool LinearAlg2D::getPointOnLineWithDist(const Point2LL& p, const Point2LL& a, const Point2LL& b, const coord_t dist, Point2LL& result) { // result // v @@ -49,9 +49,9 @@ bool LinearAlg2D::getPointOnLineWithDist(const Point& p, const Point& a, const P // '-. : // '-. : // '-.p - const Point ab = b - a; + const Point2LL ab = b - a; const coord_t ab_size = vSize(ab); - const Point ap = p - a; + const Point2LL ap = p - a; const coord_t ax_size = (ab_size < 50) ? dot(normal(ab, 1000), ap) / 1000 : dot(ab, ap) / ab_size; const coord_t ap_size2 = vSize2(ap); const coord_t px_size = sqrt(std::max(coord_t(0), ap_size2 - ax_size * ax_size)); @@ -124,15 +124,15 @@ bool LinearAlg2D::getPointOnLineWithDist(const Point& p, const Point& a, const P } -std::pair LinearAlg2D::getClosestConnection(Point a1, Point a2, Point b1, Point b2) +std::pair LinearAlg2D::getClosestConnection(Point2LL a1, Point2LL a2, Point2LL b1, Point2LL b2) { - Point b1_on_a = getClosestOnLineSegment(b1, a1, a2); + Point2LL b1_on_a = getClosestOnLineSegment(b1, a1, a2); coord_t b1_on_a_dist2 = vSize2(b1_on_a - b1); - Point b2_on_a = getClosestOnLineSegment(b2, a1, a2); + Point2LL b2_on_a = getClosestOnLineSegment(b2, a1, a2); coord_t b2_on_a_dist2 = vSize2(b2_on_a - b2); - Point a1_on_b = getClosestOnLineSegment(a1, b1, b2); + Point2LL a1_on_b = getClosestOnLineSegment(a1, b1, b2); coord_t a1_on_b_dist2 = vSize2(a1_on_b - a1); - Point a2_on_b = getClosestOnLineSegment(a1, b1, b2); + Point2LL a2_on_b = getClosestOnLineSegment(a1, b1, b2); coord_t a2_on_b_dist2 = vSize2(a2_on_b - a2); if (b1_on_a_dist2 < b2_on_a_dist2 && b1_on_a_dist2 < a1_on_b_dist2 && b1_on_a_dist2 < a2_on_b_dist2) { @@ -152,7 +152,7 @@ std::pair LinearAlg2D::getClosestConnection(Point a1, Point a2, Po } } -bool LinearAlg2D::lineSegmentsCollide(const Point& a_from_transformed, const Point& a_to_transformed, Point b_from_transformed, Point b_to_transformed) +bool LinearAlg2D::lineSegmentsCollide(const Point2LL& a_from_transformed, const Point2LL& a_to_transformed, Point2LL b_from_transformed, Point2LL b_to_transformed) { assert(std::abs(a_from_transformed.Y - a_to_transformed.Y) < 2 && "line a is supposed to be transformed to be aligned with the X axis!"); assert(a_from_transformed.X - 2 <= a_to_transformed.X && "line a is supposed to be aligned with X axis in positive direction!"); @@ -188,7 +188,7 @@ bool LinearAlg2D::lineSegmentsCollide(const Point& a_from_transformed, const Poi return false; } -coord_t LinearAlg2D::getDist2FromLine(const Point& p, const Point& a, const Point& b) +coord_t LinearAlg2D::getDist2FromLine(const Point2LL& p, const Point2LL& a, const Point2LL& b) { // NOTE: The version that tried to do a faster calulation wasn't actually that much faster, and introduced errors. // Use this for now, should we need this, we can reimplement later. @@ -196,7 +196,7 @@ coord_t LinearAlg2D::getDist2FromLine(const Point& p, const Point& a, const Poin return dist * dist; } -bool LinearAlg2D::isInsideCorner(const Point a, const Point b, const Point c, const Point query_point) +bool LinearAlg2D::isInsideCorner(const Point2LL a, const Point2LL b, const Point2LL c, const Point2LL query_point) { /* Visualisation for the algorithm below: @@ -214,10 +214,10 @@ bool LinearAlg2D::isInsideCorner(const Point a, const Point b, const Point c, co constexpr coord_t normal_length = 10000; // Create a normal vector of reasonable length in order to reduce rounding error. - const Point ba = normal(a - b, normal_length); - const Point bc = normal(c - b, normal_length); - const Point bq = query_point - b; - const Point perpendicular = turn90CCW(bq); // The query projects to this perpendicular to coordinate 0. + const Point2LL ba = normal(a - b, normal_length); + const Point2LL bc = normal(c - b, normal_length); + const Point2LL bq = query_point - b; + const Point2LL perpendicular = turn90CCW(bq); // The query projects to this perpendicular to coordinate 0. const coord_t project_a_perpendicular = dot(ba, perpendicular); // Project vertex A on the perpendicular line. const coord_t project_c_perpendicular = dot(bc, perpendicular); // Project vertex C on the perpendicular line. if ((project_a_perpendicular > 0) != (project_c_perpendicular > 0)) // Query is between A and C on the projection. @@ -236,15 +236,15 @@ bool LinearAlg2D::isInsideCorner(const Point a, const Point b, const Point c, co } } -coord_t LinearAlg2D::getDistFromLine(const Point& p, const Point& a, const Point& b) +coord_t LinearAlg2D::getDistFromLine(const Point2LL& p, const Point2LL& a, const Point2LL& b) { // x.......a------------b // : // : // p // return px_size - const Point vab = b - a; - const Point vap = p - a; + const Point2LL vab = b - a; + const Point2LL vap = p - a; const double ab_size = vSize(vab); if (ab_size == 0) // Line of 0 length. Assume it's a line perpendicular to the direction to p. { @@ -255,7 +255,7 @@ coord_t LinearAlg2D::getDistFromLine(const Point& p, const Point& a, const Point return px_size; } -Point LinearAlg2D::getBisectorVector(const Point& intersect, const Point& a, const Point& b, const coord_t vec_len) +Point2LL LinearAlg2D::getBisectorVector(const Point2LL& intersect, const Point2LL& a, const Point2LL& b, const coord_t vec_len) { const auto a0 = a - intersect; const auto b0 = b - intersect; diff --git a/src/utils/ListPolyIt.cpp b/src/utils/ListPolyIt.cpp index c640a9884e..c2c4a7cf0a 100644 --- a/src/utils/ListPolyIt.cpp +++ b/src/utils/ListPolyIt.cpp @@ -25,9 +25,9 @@ void ListPolyIt::convertPolygonsToLists(const Polygons& polys, ListPolygons& res void ListPolyIt::convertPolygonToList(ConstPolygonRef poly, ListPolygon& result) { #ifdef DEBUG - Point last = poly.back(); + Point2LL last = poly.back(); #endif // DEBUG - for (const Point& p : poly) + for (const Point2LL& p : poly) { result.push_back(p); #ifdef DEBUG @@ -52,13 +52,13 @@ void ListPolyIt::convertListPolygonsToPolygons(const ListPolygons& list_polygons void ListPolyIt::convertListPolygonToPolygon(const ListPolygon& list_polygon, PolygonRef polygon) { - for (const Point& p : list_polygon) + for (const Point2LL& p : list_polygon) { polygon.add(p); } } -ListPolyIt ListPolyIt::insertPointNonDuplicate(const ListPolyIt before, const ListPolyIt after, const Point to_insert) +ListPolyIt ListPolyIt::insertPointNonDuplicate(const ListPolyIt before, const ListPolyIt after, const Point2LL to_insert) { if (to_insert == before.p()) { diff --git a/src/utils/FMatrix4x3.cpp b/src/utils/Matrix4x3D.cpp similarity index 83% rename from src/utils/FMatrix4x3.cpp rename to src/utils/Matrix4x3D.cpp index 99d5bc0646..225be8db8a 100644 --- a/src/utils/FMatrix4x3.cpp +++ b/src/utils/Matrix4x3D.cpp @@ -2,19 +2,19 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "settings/types/Ratio.h" //Scale factor. -#include "utils/IntPoint.h" //Conversion directly into integer-based coordinates. +#include "utils/Point2LL.h" //Conversion directly into integer-based coordinates. #include "utils/Matrix4x3D.h" //The definitions we're implementing. #include "utils/Point3D.h" //This matrix gets applied to floating point coordinates. namespace cura { -Matrix4x3D Matrix4x3D::scale(const Ratio scale, const Point3 origin) +Matrix4x3D Matrix4x3D::scale(const Ratio scale, const Point3LL origin) { return Matrix4x3D::scale(scale, scale, scale, origin); } -Matrix4x3D Matrix4x3D::scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3 origin) +Matrix4x3D Matrix4x3D::scale(const Ratio scale_x, const Ratio scale_y, const Ratio scale_z, const Point3LL origin) { Matrix4x3D result; result.m[0][0] = scale_x; // X scale. @@ -45,17 +45,17 @@ Matrix4x3D::Matrix4x3D() m[3][2] = 0.0; } -Point3 Matrix4x3D::apply(const Point3D& p) const +Point3LL Matrix4x3D::apply(const Point3D& p) const { - return Point3( + return Point3LL( MM2INT(p.x_ * m[0][0] + p.y_ * m[1][0] + p.z_ * m[2][0] + m[3][0]), MM2INT(p.x_ * m[0][1] + p.y_ * m[1][1] + p.z_ * m[2][1] + m[3][1]), MM2INT(p.x_ * m[0][2] + p.y_ * m[1][2] + p.z_ * m[2][2] + m[3][2])); } -Point3 Matrix4x3D::apply(const Point3& p) const +Point3LL Matrix4x3D::apply(const Point3LL& p) const { - return Point3( + return Point3LL( m[0][0] * p.x_ + m[1][0] * p.y_ + m[2][0] * p.z_ + m[3][0], m[0][1] * p.x_ + m[1][1] * p.y_ + m[2][1] * p.z_ + m[3][1], m[0][2] * p.x_ + m[1][2] * p.y_ + m[2][2] * p.z_ + m[3][2]); diff --git a/src/utils/MinimumSpanningTree.cpp b/src/utils/MinimumSpanningTree.cpp index eff7757a01..f32b104913 100644 --- a/src/utils/MinimumSpanningTree.cpp +++ b/src/utils/MinimumSpanningTree.cpp @@ -9,12 +9,12 @@ namespace cura { -MinimumSpanningTree::MinimumSpanningTree(std::vector vertices) : adjacency_graph(prim(vertices)) +MinimumSpanningTree::MinimumSpanningTree(std::vector vertices) : adjacency_graph(prim(vertices)) { //Just copy over the fields. } -auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGraph_t +auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGraph_t { AdjacencyGraph_t result; if (vertices.empty()) @@ -31,10 +31,10 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr return result; } result.reserve(vertices.size()); - std::vector vertices_list(vertices.begin(), vertices.end()); + std::vector vertices_list(vertices.begin(), vertices.end()); - std::unordered_map smallest_distance; //The shortest distance to the current tree. - std::unordered_map smallest_distance_to; //Which point the shortest distance goes towards. + std::unordered_map smallest_distance; //The shortest distance to the current tree. + std::unordered_map smallest_distance_to; //Which point the shortest distance goes towards. smallest_distance.reserve(vertices_list.size()); smallest_distance_to.reserve(vertices_list.size()); for (size_t vertex_index = 1; vertex_index < vertices_list.size(); vertex_index++) @@ -50,15 +50,15 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr //This search is O(V) right now, which can be made down to O(log(V)). This reduces the overall time complexity from O(V*V) to O(V*log(E)). //However that requires an implementation of a heap that supports the decreaseKey operation, which is not in the std library. //TODO: Implement this? - using MapValue = std::pair; + using MapValue = std::pair; const auto closest = std::min_element(smallest_distance.begin(), smallest_distance.end(), [](const MapValue& a, const MapValue& b) { return a.second < b.second; }); //Add this point to the graph and remove it from the candidates. - const Point* closest_point = closest->first; - const Point other_end = *smallest_distance_to[closest_point]; + const Point2LL* closest_point = closest->first; + const Point2LL other_end = *smallest_distance_to[closest_point]; if (result.find(*closest_point) == result.end()) { result[*closest_point] = std::vector(); @@ -73,7 +73,7 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr smallest_distance_to.erase(closest_point); //Update the distances of all points that are not in the graph. - for (std::pair point_and_distance : smallest_distance) + for (std::pair point_and_distance : smallest_distance) { const coord_t new_distance = vSize2(*closest_point - *point_and_distance.first); const coord_t old_distance = point_and_distance.second; @@ -88,9 +88,9 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr return result; } -std::vector MinimumSpanningTree::adjacentNodes(Point node) const +std::vector MinimumSpanningTree::adjacentNodes(Point2LL node) const { - std::vector result; + std::vector result; AdjacencyGraph_t::const_iterator adjacency_entry = adjacency_graph.find(node); if (adjacency_entry != adjacency_graph.end()) { @@ -101,10 +101,10 @@ std::vector MinimumSpanningTree::adjacentNodes(Point node) const return result; } -std::vector MinimumSpanningTree::leaves() const +std::vector MinimumSpanningTree::leaves() const { - std::vector result; - for (std::pair> node : adjacency_graph) + std::vector result; + for (std::pair> node : adjacency_graph) { if (node.second.size() <= 1) //Leaves are nodes that have only one adjacent edge, or just the one node if the tree contains one node. { @@ -114,10 +114,10 @@ std::vector MinimumSpanningTree::leaves() const return result; } -std::vector MinimumSpanningTree::vertices() const +std::vector MinimumSpanningTree::vertices() const { - std::vector result; - using MapValue = std::pair>; + std::vector result; + using MapValue = std::pair>; std::transform(adjacency_graph.begin(), adjacency_graph.end(), std::back_inserter(result), [](const MapValue& node) { return node.first; }); return result; diff --git a/src/utils/Point3.cpp b/src/utils/Point3.cpp deleted file mode 100644 index f84d8589dd..0000000000 --- a/src/utils/Point3.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2022 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "utils/Point3.h" //The headers we're implementing. - -namespace cura -{ - -Point3 Point3::operator+(const Point3& p) const -{ - return Point3(x_ + p.x_, y_ + p.y_, z_ + p.z_); -} - -Point3 Point3::operator-() const -{ - return Point3(-x_, -y_, -z_); -} - -Point3 Point3::operator-(const Point3& p) const -{ - return Point3(x_ - p.x_, y_ - p.y_, z_ - p.z_); -} - -Point3 Point3::operator*(const Point3& p) const -{ - return Point3(x_ * p.x_, y_ * p.y_, z_ * p.z_); -} - -Point3 Point3::operator/(const Point3& p) const -{ - return Point3(x_ / p.x_, y_ / p.y_, z_ / p.z_); -} - -Point3& Point3::operator+=(const Point3& p) -{ - x_ += p.x_; - y_ += p.y_; - z_ += p.z_; - return *this; -} - -Point3& Point3::operator-=(const Point3& p) -{ - x_ -= p.x_; - y_ -= p.y_; - z_ -= p.z_; - return *this; -} - -Point3& Point3::operator*=(const Point3& p) -{ - x_ *= p.x_; - y_ *= p.y_; - z_ *= p.z_; - return *this; -} - -Point3& Point3::operator/=(const Point3& p) -{ - x_ /= p.x_; - y_ /= p.y_; - z_ /= p.z_; - return *this; -} - -bool Point3::operator==(const Point3& p) const -{ - return x_ == p.x_ && y_ == p.y_ && z_ == p.z_; -} - -bool Point3::operator!=(const Point3& p) const -{ - return x_ != p.x_ || y_ != p.y_ || z_ != p.z_; -} - -} // namespace cura diff --git a/src/utils/Point3LL.cpp b/src/utils/Point3LL.cpp new file mode 100644 index 0000000000..2420552fb6 --- /dev/null +++ b/src/utils/Point3LL.cpp @@ -0,0 +1,76 @@ +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. + +#include "utils/Point3LL.h" //The headers we're implementing. + +namespace cura +{ + +Point3LL Point3LL::operator+(const Point3LL& p) const +{ + return Point3LL(x_ + p.x_, y_ + p.y_, z_ + p.z_); +} + +Point3LL Point3LL::operator-() const +{ + return Point3LL(-x_, -y_, -z_); +} + +Point3LL Point3LL::operator-(const Point3LL& p) const +{ + return Point3LL(x_ - p.x_, y_ - p.y_, z_ - p.z_); +} + +Point3LL Point3LL::operator*(const Point3LL& p) const +{ + return Point3LL(x_ * p.x_, y_ * p.y_, z_ * p.z_); +} + +Point3LL Point3LL::operator/(const Point3LL& p) const +{ + return Point3LL(x_ / p.x_, y_ / p.y_, z_ / p.z_); +} + +Point3LL& Point3LL::operator+=(const Point3LL& p) +{ + x_ += p.x_; + y_ += p.y_; + z_ += p.z_; + return *this; +} + +Point3LL& Point3LL::operator-=(const Point3LL& p) +{ + x_ -= p.x_; + y_ -= p.y_; + z_ -= p.z_; + return *this; +} + +Point3LL& Point3LL::operator*=(const Point3LL& p) +{ + x_ *= p.x_; + y_ *= p.y_; + z_ *= p.z_; + return *this; +} + +Point3LL& Point3LL::operator/=(const Point3LL& p) +{ + x_ /= p.x_; + y_ /= p.y_; + z_ /= p.z_; + return *this; +} + +bool Point3LL::operator==(const Point3LL& p) const +{ + return x_ == p.x_ && y_ == p.y_ && z_ == p.z_; +} + +bool Point3LL::operator!=(const Point3LL& p) const +{ + return x_ != p.x_ || y_ != p.y_ || z_ != p.z_; +} + +} // namespace cura diff --git a/src/utils/PolygonConnector.cpp b/src/utils/PolygonConnector.cpp index 62b7b968a3..936ad69850 100644 --- a/src/utils/PolygonConnector.cpp +++ b/src/utils/PolygonConnector.cpp @@ -45,17 +45,17 @@ void PolygonConnector::connect(Polygons& output_polygons, std::vector::can } template<> -bool PolylineStitcher::canReverse(const PathsPointIndex&) +bool PolylineStitcher::canReverse(const PathsPointIndex&) { return true; } @@ -35,7 +35,7 @@ bool PolylineStitcher::can } template<> -bool PolylineStitcher::canConnect(const Polygon&, const Polygon&) +bool PolylineStitcher::canConnect(const Polygon&, const Polygon&) { return true; } @@ -47,7 +47,7 @@ bool PolylineStitcher::isO } template<> -bool PolylineStitcher::isOdd(const Polygon&) +bool PolylineStitcher::isOdd(const Polygon&) { return false; } diff --git a/src/utils/SVG.cpp b/src/utils/SVG.cpp index 497f3fe6b7..a5ee2c14b8 100644 --- a/src/utils/SVG.cpp +++ b/src/utils/SVG.cpp @@ -59,7 +59,7 @@ std::string SVG::toString(const ColorObject& color) const } -SVG::SVG(std::string filename, AABB aabb, Point canvas_size, ColorObject background) +SVG::SVG(std::string filename, AABB aabb, Point2LL canvas_size, ColorObject background) : SVG( filename, aabb, @@ -76,7 +76,7 @@ SVG::SVG(std::string filename, AABB aabb, double scale, ColorObject background) { } -SVG::SVG(std::string filename, AABB aabb, double scale, Point canvas_size, ColorObject background) +SVG::SVG(std::string filename, AABB aabb, double scale, Point2LL canvas_size, ColorObject background) : aabb_(aabb) , aabb_size_(aabb.max_ - aabb.min_) , canvas_size_(canvas_size) @@ -140,12 +140,12 @@ void SVG::nextLayer() fprintf(out_, " id=\"layer%zu\">\n", layer_nr_); } -Point SVG::transform(const Point& p) const +Point2LL SVG::transform(const Point2LL& p) const { - return Point(std::llrint(static_cast(p.X - aabb_.min_.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min_.Y) * scale_)); + return Point2LL(std::llrint(static_cast(p.X - aabb_.min_.X) * scale_), std::llrint(static_cast(p.Y - aabb_.min_.Y) * scale_)); } -Point3D SVG::transformF(const Point& p) const +Point3D SVG::transformF(const Point2LL& p) const { return Point3D(static_cast(p.X - aabb_.min_.X) * scale_, static_cast(p.Y - aabb_.min_.Y) * scale_, 0.0); } @@ -164,7 +164,7 @@ void SVG::writeAreas(const Polygons& polygons, const ColorObject color, const Co for (size_t j = 0; j < part.size(); j++) { fprintf(out_, "(fp.x_), static_cast(fp.y_)); @@ -185,7 +185,7 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col toString(color).c_str(), toString(outline_color).c_str(), static_cast(stroke_width)); // The beginning of the polygon tag. - for (const Point& point : polygon) // Add every point to the list of points. + for (const Point2LL& point : polygon) // Add every point to the list of points. { Point3D transformed = transformF(point); fprintf(out_, "%f,%f ", static_cast(transformed.x_), static_cast(transformed.y_)); @@ -193,7 +193,7 @@ void SVG::writeAreas(ConstPolygonRef polygon, const ColorObject color, const Col fprintf(out_, "\" />\n"); // The end of the polygon tag. } -void SVG::writePoint(const Point& p, const bool write_coords, const double size, const ColorObject color) const +void SVG::writePoint(const Point2LL& p, const bool write_coords, const double size, const ColorObject color) const { Point3D pf = transformF(p); fprintf( @@ -212,7 +212,7 @@ void SVG::writePoint(const Point& p, const bool write_coords, const double size, void SVG::writePoints(ConstPolygonRef poly, const bool write_coords, const double size, const ColorObject color) const { - for (const Point& p : poly) + for (const Point2LL& p : poly) { writePoint(p, write_coords, size, color); } @@ -226,7 +226,7 @@ void SVG::writePoints(const Polygons& polygons, const bool write_coords, const d } } -void SVG::writeLines(const std::vector& polyline, const ColorObject color) const +void SVG::writeLines(const std::vector& polyline, const ColorObject color) const { if (polyline.size() <= 1) // Need at least 2 points. { @@ -248,7 +248,7 @@ void SVG::writeLines(const std::vector& polyline, const ColorObject color fprintf(out_, "\" />\n"); // Write the end of the tag. } -void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, const double stroke_width) const +void SVG::writeLine(const Point2LL& a, const Point2LL& b, const ColorObject color, const double stroke_width) const { Point3D fa = transformF(a); Point3D fb = transformF(b); @@ -263,7 +263,7 @@ void SVG::writeLine(const Point& a, const Point& b, const ColorObject color, con static_cast(stroke_width)); } -void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, const double stroke_width, const double head_size) const +void SVG::writeArrow(const Point2LL& a, const Point2LL& b, const ColorObject color, const double stroke_width, const double head_size) const { Point3D fa = transformF(a); Point3D fb = transformF(b); @@ -290,7 +290,7 @@ void SVG::writeArrow(const Point& a, const Point& b, const ColorObject color, co static_cast(a_base.y_)); } -void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const int g, const int b, const double stroke_width) const +void SVG::writeLineRGB(const Point2LL& from, const Point2LL& to, const int r, const int g, const int b, const double stroke_width) const { Point3D fa = transformF(from); Point3D fb = transformF(to); @@ -307,7 +307,7 @@ void SVG::writeLineRGB(const Point& from, const Point& to, const int r, const in static_cast(stroke_width)); } -void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) const +void SVG::writeDashedLine(const Point2LL& a, const Point2LL& b, ColorObject color) const { Point3D fa = transformF(a); Point3D fb = transformF(b); @@ -321,7 +321,7 @@ void SVG::writeDashedLine(const Point& a, const Point& b, ColorObject color) con toString(color).c_str()); } -void SVG::writeText(const Point& p, const std::string& txt, const ColorObject color, const double font_size) const +void SVG::writeText(const Point2LL& p, const std::string& txt, const ColorObject color, const double font_size) const { Point3D pf = transformF(p); fprintf( @@ -349,9 +349,9 @@ void SVG::writePolygon(ConstPolygonRef poly, const ColorObject color, const doub return; } int size = static_cast(poly.size()); - Point p0 = poly.back(); + Point2LL p0 = poly.back(); int i = 0; - for (Point p1 : poly) + for (Point2LL p1 : poly) { if (color.color_ == Color::RAINBOW) { @@ -392,11 +392,11 @@ void SVG::writePolyline(ConstPolygonRef poly, const ColorObject color, const dou return; } const int size = static_cast(poly.size()); - Point p0 = poly[0]; + Point2LL p0 = poly[0]; int i = 0; for (size_t p_idx = 1; p_idx < poly.size(); p_idx++) { - Point p1 = poly[p_idx]; + Point2LL p1 = poly[p_idx]; if (color.color_ == Color::RAINBOW) { int g = (i * 255 * 11 / size) % (255 * 2); @@ -445,9 +445,9 @@ void SVG::writeLine(const ExtrusionLine& line, const ColorObject color, const do ExtrusionJunction end_vertex = line.junctions_[index]; // Compute the corners of the trapezoid for this variable-width line segment. - const Point direction_vector = end_vertex.p_ - start_vertex.p_; - const Point direction_left = turn90CCW(direction_vector); - const Point direction_right = -direction_left; // Opposite of left. + const Point2LL direction_vector = end_vertex.p_ - start_vertex.p_; + const Point2LL direction_left = turn90CCW(direction_vector); + const Point2LL direction_right = -direction_left; // Opposite of left. const Point3D start_left = transformF(start_vertex.p_ + normal(direction_left, std::llrint(std::max(minimum_line_width, static_cast(start_vertex.w_) * width_factor)))); const Point3D start_right @@ -480,17 +480,17 @@ void SVG::writeCoordinateGrid(const coord_t grid_size, const Color color, const for (coord_t x = min_x; x < aabb_.max_.X; x += grid_size) { - writeLine(Point(x, aabb_.min_.Y), Point(x, aabb_.max_.Y), color, stroke_width); + writeLine(Point2LL(x, aabb_.min_.Y), Point2LL(x, aabb_.max_.Y), color, stroke_width); std::stringstream ss; ss << INT2MM(x); - writeText(Point(x, std::llrint(static_cast(aabb_.min_.Y) + static_cast(aabb_.max_.Y - aabb_.min_.Y) * dist_from_edge)), ss.str(), color, font_size); + writeText(Point2LL(x, std::llrint(static_cast(aabb_.min_.Y) + static_cast(aabb_.max_.Y - aabb_.min_.Y) * dist_from_edge)), ss.str(), color, font_size); } for (coord_t y = min_y; y < aabb_.max_.Y; y += grid_size) { - writeLine(Point(aabb_.min_.X, y), Point(aabb_.max_.Y, y), color, stroke_width); + writeLine(Point2LL(aabb_.min_.X, y), Point2LL(aabb_.max_.Y, y), color, stroke_width); std::stringstream ss; ss << INT2MM(y); - writeText(Point(std::llrint(static_cast(aabb_.min_.X) + static_cast(aabb_.max_.X - aabb_.min_.X) * dist_from_edge), y), ss.str(), color, font_size); + writeText(Point2LL(std::llrint(static_cast(aabb_.min_.X) + static_cast(aabb_.max_.X - aabb_.min_.X) * dist_from_edge), y), ss.str(), color, font_size); } } diff --git a/src/utils/Simplify.cpp b/src/utils/Simplify.cpp index caefbf74de..cad210b30b 100644 --- a/src/utils/Simplify.cpp +++ b/src/utils/Simplify.cpp @@ -95,7 +95,7 @@ ExtrusionLine Simplify::createEmpty(const ExtrusionLine& original) const return result; } -void Simplify::appendVertex(Polygon& polygon, const Point& vertex) const +void Simplify::appendVertex(Polygon& polygon, const Point2LL& vertex) const { polygon.add(vertex); } @@ -105,22 +105,22 @@ void Simplify::appendVertex(ExtrusionLine& extrusion_line, const ExtrusionJuncti extrusion_line.junctions_.push_back(vertex); } -const Point& Simplify::getPosition(const Point& vertex) const +const Point2LL& Simplify::getPosition(const Point2LL& vertex) const { return vertex; } -const Point& Simplify::getPosition(const ExtrusionJunction& vertex) const +const Point2LL& Simplify::getPosition(const ExtrusionJunction& vertex) const { return vertex.p_; } -Point Simplify::createIntersection(const Point& before, const Point intersection, const Point& after) const +Point2LL Simplify::createIntersection(const Point2LL& before, const Point2LL intersection, const Point2LL& after) const { return intersection; } -ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, const Point intersection, const ExtrusionJunction& after) const +ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, const Point2LL intersection, const ExtrusionJunction& after) const { // Average the extrusion width of the line. // More correct would be to see where along the line the intersection occurs with a projection or something. @@ -128,7 +128,7 @@ ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, return ExtrusionJunction(intersection, (before.w_ + after.w_) / 2, before.perimeter_index_); } -coord_t Simplify::getAreaDeviation(const Point& before, const Point& vertex, const Point& after) const +coord_t Simplify::getAreaDeviation(const Point2LL& before, const Point2LL& vertex, const Point2LL& after) const { return 0; // Fixed-width polygons don't have any deviation. } diff --git a/src/utils/SquareGrid.cpp b/src/utils/SquareGrid.cpp index 29d1d9fec8..4c66c49334 100644 --- a/src/utils/SquareGrid.cpp +++ b/src/utils/SquareGrid.cpp @@ -15,9 +15,9 @@ SquareGrid::SquareGrid(coord_t cell_size) } -SquareGrid::GridPoint SquareGrid::toGridPoint(const Point& point) const +SquareGrid::GridPoint SquareGrid::toGridPoint(const Point2LL& point) const { - return Point(toGridCoord(point.X), toGridCoord(point.Y)); + return Point2LL(toGridCoord(point.X), toGridCoord(point.Y)); } @@ -33,9 +33,9 @@ SquareGrid::grid_coord_t SquareGrid::toGridCoord(const coord_t& coord) const } -cura::Point SquareGrid::toLowerCorner(const GridPoint& location) const +cura::Point2LL SquareGrid::toLowerCorner(const GridPoint& location) const { - return cura::Point(toLowerCoord(location.X), toLowerCoord(location.Y)); + return cura::Point2LL(toLowerCoord(location.X), toLowerCoord(location.Y)); } @@ -51,16 +51,16 @@ cura::coord_t SquareGrid::toLowerCoord(const grid_coord_t& grid_coord) const } -bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) +bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) { return static_cast(this)->processLineCells(line, process_cell_func); } -bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) const +bool SquareGrid::processLineCells(const std::pair line, const std::function& process_cell_func) const { - Point start = line.first; - Point end = line.second; + Point2LL start = line.first; + Point2LL end = line.second; if (end.X < start.X) { // make sure X increases between start and end std::swap(start, end); @@ -118,10 +118,10 @@ bool SquareGrid::processLineCells(const std::pair line, const std: return false; } -bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, bool to_the_right, const std::function& process_cell_func) const +bool SquareGrid::processAxisAlignedTriangle(const Point2LL from, const Point2LL to, bool to_the_right, const std::function& process_cell_func) const { - Point a = from; - Point b = to; + Point2LL a = from; + Point2LL b = to; if ((a.X < b.X == a.Y < b.Y) != to_the_right) { std::swap(a, b); @@ -129,7 +129,7 @@ bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, bo return processAxisAlignedTriangle(a, b, process_cell_func); } -bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, const std::function& process_cell_func) const +bool SquareGrid::processAxisAlignedTriangle(const Point2LL from, const Point2LL to, const std::function& process_cell_func) const { GridPoint last; GridPoint grid_to = toGridPoint(to); @@ -160,10 +160,10 @@ bool SquareGrid::processAxisAlignedTriangle(const Point from, const Point to, co }); } -bool SquareGrid::processNearby(const Point& query_pt, coord_t radius, const std::function& process_func) const +bool SquareGrid::processNearby(const Point2LL& query_pt, coord_t radius, const std::function& process_func) const { - const Point min_loc(query_pt.X - radius, query_pt.Y - radius); - const Point max_loc(query_pt.X + radius, query_pt.Y + radius); + const Point2LL min_loc(query_pt.X - radius, query_pt.Y - radius); + const Point2LL max_loc(query_pt.X + radius, query_pt.Y + radius); GridPoint min_grid = toGridPoint(min_loc); GridPoint max_grid = toGridPoint(max_loc); diff --git a/src/utils/ToolpathVisualizer.cpp b/src/utils/ToolpathVisualizer.cpp index 22b3b489f3..34526f8dca 100644 --- a/src/utils/ToolpathVisualizer.cpp +++ b/src/utils/ToolpathVisualizer.cpp @@ -65,8 +65,8 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size return ss.str(); }; AABB aabb(input); - ExtrusionJunction legend_btm(Point(aabb.max_.X + nozzle_size + max_dev, aabb.max_.Y), nozzle_size - max_dev, 0); - ExtrusionJunction legend_top(Point(aabb.max_.X + nozzle_size + max_dev, aabb.min_.Y), nozzle_size + max_dev, 0); + ExtrusionJunction legend_btm(Point2LL(aabb.max_.X + nozzle_size + max_dev, aabb.max_.Y), nozzle_size - max_dev, 0); + ExtrusionJunction legend_top(Point2LL(aabb.max_.X + nozzle_size + max_dev, aabb.min_.Y), nozzle_size + max_dev, 0); ExtrusionJunction legend_mid((legend_top.p_ + legend_btm.p_) / 2, (legend_top.w_ + legend_btm.w_) / 2, 0); legend_btm.p_ += (legend_mid.p_ - legend_btm.p_) / 4; legend_top.p_ += (legend_mid.p_ - legend_top.p_) / 4; @@ -75,7 +75,7 @@ void ToolpathVisualizer::width_legend(const Polygons& input, coord_t nozzle_size std::vector all_segments_plus; all_segments_plus.emplace_back(legend_segment); // colored - Point legend_text_offset(nozzle_size, 0); + Point2LL legend_text_offset(nozzle_size, 0); svg_.writeText(legend_top.p_ + legend_text_offset, to_string(INT2MM(legend_top.w_))); svg_.writeText(legend_btm.p_ + legend_text_offset, to_string(INT2MM(legend_btm.w_))); svg_.writeText(legend_mid.p_ + legend_text_offset, to_string(INT2MM(legend_mid.w_))); @@ -95,9 +95,9 @@ void ToolpathVisualizer::widths( bool exaggerate_widths) { // Point3 middle = rounded_visualization? Point3(255,255,255) : Point3(192,192,192); - Point3 middle(255, 255, 255); - Point3 wide(255, 0, 0); - Point3 narrow(0, 0, 255); + Point3LL middle(255, 255, 255); + Point3LL wide(255, 0, 0); + Point3LL narrow(0, 0, 255); // Polygons connecteds = PolygonUtils::connect(area_covered); // for (PolygonRef connected : connecteds) @@ -114,7 +114,7 @@ void ToolpathVisualizer::widths( for (ExtrusionSegment s : ss.discretize(MM2INT(0.1))) { coord_t avg_w = (s.from_.w_ + s.to_.w_) / 2; - Point3 clr; + Point3LL clr; double color_ratio = std::min(1.0, double(std::abs(avg_w - nozzle_size)) / max_dev); color_ratio = color_ratio * .5 + .5 * sqrt(color_ratio); if (avg_w > nozzle_size) diff --git a/src/utils/VoronoiUtils.cpp b/src/utils/VoronoiUtils.cpp index fa1d5dc6e5..564a48e99b 100644 --- a/src/utils/VoronoiUtils.cpp +++ b/src/utils/VoronoiUtils.cpp @@ -14,14 +14,14 @@ namespace cura { -Point VoronoiUtils::p(const vd_t::vertex_type* node) +Point2LL VoronoiUtils::p(const vd_t::vertex_type* node) { const double x = node->x(); const double y = node->y(); - return Point(x + 0.5 - (x < 0), y + 0.5 - (y < 0)); // Round to nearest integer coordinates. + return Point2LL(x + 0.5 - (x < 0), y + 0.5 - (y < 0)); // Round to nearest integer coordinates. } -bool VoronoiUtils::isSourcePoint(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments, coord_t snap_dist) +bool VoronoiUtils::isSourcePoint(Point2LL p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments, coord_t snap_dist) { if (cell.contains_point()) { @@ -34,7 +34,7 @@ bool VoronoiUtils::isSourcePoint(Point p, const vd_t::cell_type& cell, const std } } -coord_t VoronoiUtils::getDistance(Point p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) +coord_t VoronoiUtils::getDistance(Point2LL p, const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) { if (cell.contains_point()) { @@ -47,7 +47,7 @@ coord_t VoronoiUtils::getDistance(Point p, const vd_t::cell_type& cell, const st } } -Point VoronoiUtils::getSourcePoint(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) +Point2LL VoronoiUtils::getSourcePoint(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) { assert(cell.contains_point()); if (! cell.contains_point()) @@ -74,7 +74,7 @@ Point VoronoiUtils::getSourcePoint(const vd_t::cell_type& cell, const std::vecto return points[cell.source_index()]; } -PolygonsPointIndex VoronoiUtils::getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) +PolygonsPointIndex VoronoiUtils::getSourcePointIndex(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) { assert(cell.contains_point()); if (! cell.contains_point()) @@ -106,7 +106,7 @@ PolygonsPointIndex VoronoiUtils::getSourcePointIndex(const vd_t::cell_type& cell return ++ret; } -const VoronoiUtils::Segment& VoronoiUtils::getSourceSegment(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) +const VoronoiUtils::Segment& VoronoiUtils::getSourceSegment(const vd_t::cell_type& cell, const std::vector& points, const std::vector& segments) { assert(cell.contains_segment()); if (! cell.contains_segment()) @@ -117,26 +117,26 @@ const VoronoiUtils::Segment& VoronoiUtils::getSourceSegment(const vd_t::cell_typ } -std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segment& segment, Point s, Point e, coord_t approximate_step_size, double transitioning_angle) +std::vector VoronoiUtils::discretizeParabola(const Point2LL& p, const Segment& segment, Point2LL s, Point2LL e, coord_t approximate_step_size, double transitioning_angle) { - std::vector discretized; + std::vector discretized; // x is distance of point projected on the segment ab // xx is point projected on the segment ab - const Point a = segment.from(); - const Point b = segment.to(); - const Point ab = b - a; - const Point as = s - a; - const Point ae = e - a; + const Point2LL a = segment.from(); + const Point2LL b = segment.to(); + const Point2LL ab = b - a; + const Point2LL as = s - a; + const Point2LL ae = e - a; const coord_t ab_size = vSize(ab); const coord_t sx = dot(as, ab) / ab_size; const coord_t ex = dot(ae, ab) / ab_size; const coord_t sxex = ex - sx; - const Point ap = p - a; + const Point2LL ap = p - a; const coord_t px = dot(ap, ab) / ab_size; - const Point pxx = LinearAlg2D::getClosestOnLine(p, a, b); - const Point ppxx = pxx - p; + const Point2LL pxx = LinearAlg2D::getClosestOnLine(p, a, b); + const Point2LL ppxx = pxx - p; const coord_t d = vSize(ppxx); const PointMatrix rot = PointMatrix(turn90CCW(ppxx)); @@ -151,8 +151,8 @@ std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segmen coord_t msx = -marking_bound * d; // projected marking_start coord_t mex = marking_bound * d; // projected marking_end const coord_t marking_start_end_h = msx * msx / (2 * d) + d / 2; - Point marking_start = rot.unapply(Point(msx, marking_start_end_h)) + pxx; - Point marking_end = rot.unapply(Point(mex, marking_start_end_h)) + pxx; + Point2LL marking_start = rot.unapply(Point2LL(msx, marking_start_end_h)) + pxx; + Point2LL marking_end = rot.unapply(Point2LL(mex, marking_start_end_h)) + pxx; const int dir = (sx > ex) ? -1 : 1; if (dir < 0) { @@ -163,7 +163,7 @@ std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segmen bool add_marking_start = msx * dir > (sx - px) * dir && msx * dir < (ex - px) * dir; bool add_marking_end = mex * dir > (sx - px) * dir && mex * dir < (ex - px) * dir; - const Point apex = rot.unapply(Point(0, d / 2)) + pxx; + const Point2LL apex = rot.unapply(Point2LL(0, d / 2)) + pxx; // Only at the apex point if the projected start and end points // are more than 10 microns away from the projected apex bool add_apex = (sx - px) * dir < -10 && (ex - px) * dir > 10; @@ -197,7 +197,7 @@ std::vector VoronoiUtils::discretizeParabola(const Point& p, const Segmen discretized.emplace_back(marking_end); add_marking_end = false; } - const Point result = rot.unapply(Point(x, y)) + pxx; + const Point2LL result = rot.unapply(Point2LL(x, y)) + pxx; discretized.emplace_back(result); } if (add_apex) @@ -241,12 +241,12 @@ DEALINGS IN THE SOFTWARE. */ // adapted from boost::polygon::voronoi_visual_utils.cpp -void VoronoiUtils::discretize(const Point& point, const Segment& segment, const coord_t max_dist, std::vector* discretization) +void VoronoiUtils::discretize(const Point2LL& point, const Segment& segment, const coord_t max_dist, std::vector* discretization) { // Apply the linear transformation to move start point of the segment to // the point with coordinates (0, 0) and the direction of the segment to // coincide the positive direction of the x-axis. - const Point segm_vec = segment.to() - segment.from(); + const Point2LL segm_vec = segment.to() - segment.from(); const coord_t segment_length2 = vSize2(segm_vec); // Compute x-coordinates of the endpoints of the edge @@ -257,31 +257,31 @@ void VoronoiUtils::discretize(const Point& point, const Segment& segment, const // Compute parabola parameters in the transformed space. // Parabola has next representation: // f(x) = ((x-rot_x)^2 + rot_y^2) / (2.0*rot_y). - const Point point_vec = point - segment.from(); + const Point2LL point_vec = point - segment.from(); const coord_t rot_x = dot(segm_vec, point_vec); const coord_t rot_y = cross(segm_vec, point_vec); // Save the last point. - const Point last_point = (*discretization)[1]; + const Point2LL last_point = (*discretization)[1]; discretization->pop_back(); // Use stack to avoid recursion. std::stack point_stack; point_stack.push(projection_end); - Point cur(projection_start, parabolaY(projection_start, rot_x, rot_y)); + Point2LL cur(projection_start, parabolaY(projection_start, rot_x, rot_y)); // Adjust max_dist parameter in the transformed space. const coord_t max_dist_transformed = max_dist * max_dist * segment_length2; while (! point_stack.empty()) { - const Point new_(point_stack.top(), parabolaY(point_stack.top(), rot_x, rot_y)); - const Point new_vec = new_ - cur; + const Point2LL new_(point_stack.top(), parabolaY(point_stack.top(), rot_x, rot_y)); + const Point2LL new_vec = new_ - cur; // Compute coordinates of the point of the parabola that is // furthest from the current line segment. const coord_t mid_x = new_vec.Y * rot_y / new_vec.X + rot_x; const coord_t mid_y = parabolaY(mid_x, rot_x, rot_y); - Point mid_vec = Point(mid_x, mid_y) - cur; + Point2LL mid_vec = Point2LL(mid_x, mid_y) - cur; // Compute maximum distance between the given parabolic arc // and line segment that discretize it. @@ -293,7 +293,7 @@ void VoronoiUtils::discretize(const Point& point, const Segment& segment, const point_stack.pop(); const coord_t inter_x = (segm_vec.X * new_.X - segm_vec.Y * new_.Y) / segment_length2 + segment.from().X; const coord_t inter_y = (segm_vec.X * new_.Y + segm_vec.Y * new_.X) / segment_length2 + segment.from().Y; - discretization->push_back(Point(inter_x, inter_y)); + discretization->push_back(Point2LL(inter_x, inter_y)); cur = new_; } else @@ -313,10 +313,10 @@ coord_t VoronoiUtils::parabolaY(coord_t x, coord_t a, coord_t b) } // adapted from boost::polygon::voronoi_visual_utils.cpp -double VoronoiUtils::getPointProjection(const Point& point, const Segment& segment) +double VoronoiUtils::getPointProjection(const Point2LL& point, const Segment& segment) { - Point segment_vec = segment.to() - segment.from(); - Point point_vec = point - segment.from(); + Point2LL segment_vec = segment.to() - segment.from(); + Point2LL point_vec = point - segment.from(); coord_t sqr_segment_length = vSize2(segment_vec); coord_t vec_dot = dot(segment_vec, point_vec); return static_cast(vec_dot) / sqr_segment_length; diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index 31ecf2bf4c..b55f40c0ce 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -46,9 +46,9 @@ DilationKernel::DilationKernel(GridPoint3 kernel_size, DilationKernel::Type type } } -bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const +bool VoxelUtils::walkLine(Point3LL start, Point3LL end, const std::function& process_cell_func) const { - Point3 diff = end - start; + Point3LL diff = end - start; const GridPoint3 start_cell = toGridPoint(start); const GridPoint3 end_cell = toGridPoint(end); @@ -57,7 +57,7 @@ bool VoxelUtils::walkLine(Point3 start, Point3 end, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2; + const Point3LL translation = (Point3LL(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2; if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x_, translation.y_)); + translated.translate(Point2LL(translation.x_, translation.y_)); } return walkPolygons(translated, z + translation.z_, dilate(kernel, process_cell_func)); } @@ -127,20 +127,20 @@ bool VoxelUtils::walkDilatedPolygons(const Polygons& polys, coord_t z, const Dil bool VoxelUtils::walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = -cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + const Point3LL translation = -cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x_, translation.y_)); + translated.translate(Point2LL(translation.x_, translation.y_)); } return _walkAreas(translated, z, process_cell_func); } bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::function& process_cell_func) const { - std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point(cell_size_.x_, cell_size_.y_)); - for (Point p : skin_points) + std::vector skin_points = PolygonUtils::spreadDotsArea(polys, Point2LL(cell_size_.x_, cell_size_.y_)); + for (Point2LL p : skin_points) { - bool continue_ = process_cell_func(toGridPoint(Point3(p.X + cell_size_.x_ / 2, p.Y + cell_size_.y_ / 2, z))); + bool continue_ = process_cell_func(toGridPoint(Point3LL(p.X + cell_size_.x_ / 2, p.Y + cell_size_.y_ / 2, z))); if (! continue_) { return false; @@ -152,11 +152,11 @@ bool VoxelUtils::_walkAreas(const Polygons& polys, coord_t z, const std::functio bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const DilationKernel& kernel, const std::function& process_cell_func) const { Polygons translated = polys; - const Point3 translation = (Point3(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel + const Point3LL translation = (Point3LL(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { - translated.translate(Point(translation.x_, translation.y_)); + translated.translate(Point2LL(translation.x_, translation.y_)); } return _walkAreas(translated, z + translation.z_, dilate(kernel, process_cell_func)); } diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index d289a606ad..52708890ab 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -32,7 +32,7 @@ bool ConstPolygonRef::shorterThan(const coord_t check_length) const return cura::shorterThan(*this, check_length); } -bool ConstPolygonRef::_inside(Point p, bool border_result) const +bool ConstPolygonRef::_inside(Point2LL p, bool border_result) const { const ConstPolygonRef thiss = *this; if (size() < 1) @@ -41,10 +41,10 @@ bool ConstPolygonRef::_inside(Point p, bool border_result) const } int crossings = 0; - Point p0 = back(); + Point2LL p0 = back(); for (unsigned int n = 0; n < size(); n++) { - Point p1 = thiss[n]; + Point2LL p1 = thiss[n]; // no tests unless the segment p0-p1 is at least partly at, or to right of, p.X short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); if (comp == 1) @@ -110,7 +110,7 @@ void Polygons::makeConvex() const size_t start_index = std::min_element( poly.begin(), poly.end(), - [](Point a, Point b) + [](Point2LL a, Point2LL b) { return a.X == b.X ? a.Y < b.Y : a.X < b.X; }) @@ -119,7 +119,7 @@ void Polygons::makeConvex() for (size_t i = 1; i <= poly.size(); ++i) { - const Point& current = poly[(start_index + i) % poly.size()]; + const Point2LL& current = poly[(start_index + i) % poly.size()]; // Track backwards to make sure we haven't been in a concave pocket for multiple vertices already. while (convexified.size() >= 2 @@ -147,7 +147,7 @@ unsigned int Polygons::pointCount() const return count; } -bool Polygons::inside(Point p, bool border_result) const +bool Polygons::inside(Point2LL p, bool border_result) const { int poly_count_inside = 0; for (const ClipperLib::Path& poly : *this) @@ -162,7 +162,7 @@ bool Polygons::inside(Point p, bool border_result) const return (poly_count_inside % 2) == 1; } -bool PolygonsPart::inside(Point p, bool border_result) const +bool PolygonsPart::inside(Point2LL p, bool border_result) const { if (size() < 1) { @@ -182,7 +182,7 @@ bool PolygonsPart::inside(Point p, bool border_result) const return true; } -bool Polygons::insideOld(Point p, bool border_result) const +bool Polygons::insideOld(Point2LL p, bool border_result) const { const Polygons& thiss = *this; if (size() < 1) @@ -193,8 +193,8 @@ bool Polygons::insideOld(Point p, bool border_result) const int crossings = 0; for (const ClipperLib::Path& poly : thiss) { - Point p0 = poly.back(); - for (const Point& p1 : poly) + Point2LL p0 = poly.back(); + for (const Point2LL& p1 : poly) { short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); if (comp == 1) @@ -211,7 +211,7 @@ bool Polygons::insideOld(Point p, bool border_result) const return (crossings % 2) == 1; } -unsigned int Polygons::findInside(Point p, bool border_result) +unsigned int Polygons::findInside(Point2LL p, bool border_result) { Polygons& thiss = *this; if (size() < 1) @@ -226,8 +226,8 @@ unsigned int Polygons::findInside(Point p, bool border_result) for (unsigned int poly_idx = 0; poly_idx < size(); poly_idx++) { PolygonRef poly = thiss[poly_idx]; - Point p0 = poly.back(); - for (Point& p1 : poly) + Point2LL p0 = poly.back(); + for (Point2LL& p1 : poly) { short comp = LinearAlg2D::pointLiesOnTheRightOfLine(p, p0, p1); if (comp == 1) @@ -293,7 +293,7 @@ Polygons Polygons::intersectionPolyLines(const Polygons& polylines, bool restitc { Polygons result_lines, result_polygons; const coord_t snap_distance = 10_mu; - PolylineStitcher::stitch(ret, result_lines, result_polygons, max_stitch_distance, snap_distance); + PolylineStitcher::stitch(ret, result_lines, result_polygons, max_stitch_distance, snap_distance); ret = result_lines; // if polylines got stitched into polygons, split them back up into a polyline again, because the result only admits polylines for (PolygonRef poly : result_polygons) @@ -481,9 +481,9 @@ void PolygonRef::removeColinearEdges(const AngleRadians max_deviation_angle) break; } - const Point& prev = rpath[(point_idx - 1 + pathlen) % pathlen]; - const Point& pt = rpath[point_idx]; - const Point& next = rpath[(point_idx + 1) % pathlen]; + const Point2LL& prev = rpath[(point_idx - 1 + pathlen) % pathlen]; + const Point2LL& pt = rpath[point_idx]; + const Point2LL& next = rpath[(point_idx + 1) % pathlen]; double angle = LinearAlg2D::getAngleLeft(prev, pt, next); // [0 : 2 * pi] if (angle >= std::numbers::pi) @@ -721,10 +721,10 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) PolygonRef poly = thiss[poly_idx]; Polygon result; - auto isDegenerate = [](const Point& last, const Point& now, const Point& next) + auto isDegenerate = [](const Point2LL& last, const Point2LL& now, const Point2LL& next) { - Point last_line = now - last; - Point next_line = next - now; + Point2LL last_line = now - last; + Point2LL next_line = next - now; return dot(last_line, next_line) == -1 * vSize(last_line) * vSize(next_line); }; @@ -739,12 +739,12 @@ void Polygons::_removeDegenerateVerts(const bool for_polyline) bool isChanged = false; for (size_t idx = start_vertex; idx < end_vertex; idx++) { - const Point& last = (result.size() == 0) ? poly.back() : result.back(); + const Point2LL& last = (result.size() == 0) ? poly.back() : result.back(); if (idx + 1 >= poly.size() && result.size() == 0) { break; } - const Point& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; + const Point2LL& next = (idx + 1 >= poly.size()) ? result[0] : poly[idx + 1]; if (isDegenerate(last, poly[idx], next)) { // lines are in the opposite direction // don't add vert to the result @@ -787,7 +787,7 @@ Polygons Polygons::toPolygons(ClipperLib::PolyTree& poly_tree) return ret; } -bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length) +bool ConstPolygonRef::smooth_corner_complex(const Point2LL p1, ListPolyIt& p0_it, ListPolyIt& p2_it, const int64_t shortcut_length) { // walk away from the corner until the shortcut > shortcut_length or it would smooth a piece inward // - walk in both directions untill shortcut > shortcut_length @@ -855,7 +855,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L } } - const Point v02 = p2_it.p() - p0_it.p(); + const Point2LL v02 = p2_it.p() - p0_it.p(); const int64_t v02_size2 = vSize2(v02); // set the following: // p0_it = start point of line @@ -879,16 +879,16 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L const ListPolyIt p0_2_it = p0_it.prev(); const ListPolyIt p2_2_it = p2_it.next(); - const Point p2_2 = p2_2_it.p(); - const Point p0_2 = p0_2_it.p(); - const Point v02_2 = p0_2 - p2_2; + const Point2LL p2_2 = p2_2_it.p(); + const Point2LL p0_2 = p0_2_it.p(); + const Point2LL v02_2 = p0_2 - p2_2; const int64_t v02_2_size = vSize(v02_2); double progress = std::min(1.0, INT2MM(shortcut_length - v02_size) / INT2MM(v02_2_size - v02_size)); // account for rounding error when v02_2_size is approx equal to v02_size assert(progress >= 0.0f && progress <= 1.0f && "shortcut length must be between last length and new length"); - const Point new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; + const Point2LL new_p0 = p0_it.p() + (p0_2 - p0_it.p()) * progress; p0_it = ListPolyIt::insertPointNonDuplicate(p0_2_it, p0_it, new_p0); - const Point new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; + const Point2LL new_p2 = p2_it.p() + (p2_2 - p2_it.p()) * progress; p2_it = ListPolyIt::insertPointNonDuplicate(p2_it, p2_2_it, new_p2); } else if (! backward_is_blocked) @@ -903,10 +903,10 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L // | // 0_2 const ListPolyIt p0_2_it = p0_it.prev(); - const Point p0 = p0_it.p(); - const Point p0_2 = p0_2_it.p(); - const Point p2 = p2_it.p(); - Point new_p0; + const Point2LL p0 = p0_it.p(); + const Point2LL p0_2 = p0_2_it.p(); + const Point2LL p2 = p2_it.p(); + Point2LL new_p0; bool success = LinearAlg2D::getPointOnLineWithDist(p2, p0, p0_2, shortcut_length, new_p0); // shortcut length must be possible given that last length was ok and new length is too long if (success) @@ -932,10 +932,10 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L //--0.-' // a const ListPolyIt p2_2_it = p2_it.next(); - const Point p0 = p0_it.p(); - const Point p2 = p2_it.p(); - const Point p2_2 = p2_2_it.p(); - Point new_p2; + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); + const Point2LL p2_2 = p2_2_it.p(); + Point2LL new_p2; bool success = LinearAlg2D::getPointOnLineWithDist(p0, p2, p2_2, shortcut_length, new_p2); // shortcut length must be possible given that last length was ok and new length is too long if (success) @@ -971,7 +971,7 @@ bool ConstPolygonRef::smooth_corner_complex(const Point p1, ListPolyIt& p0_it, L } void ConstPolygonRef::smooth_outward_step( - const Point p1, + const Point2LL p1, const int64_t shortcut_length2, ListPolyIt& p0_it, ListPolyIt& p2_it, @@ -982,15 +982,15 @@ void ConstPolygonRef::smooth_outward_step( { const bool forward_has_converged = forward_is_blocked || forward_is_too_far; const bool backward_has_converged = backward_is_blocked || backward_is_too_far; - const Point p0 = p0_it.p(); - const Point p2 = p2_it.p(); + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); bool walk_forward = ! forward_has_converged && (backward_has_converged || (vSize2(p2 - p1) < vSize2(p0 - p1))); // whether to walk along the p1-p2 direction or in the p1-p0 direction if (walk_forward) { const ListPolyIt p2_2_it = p2_it.next(); - const Point p2_2 = p2_2_it.p(); + const Point2LL p2_2 = p2_2_it.p(); bool p2_is_left = LinearAlg2D::pointIsLeftOfLine(p2, p0, p2_2) >= 0; if (! p2_is_left) { @@ -998,7 +998,7 @@ void ConstPolygonRef::smooth_outward_step( return; } - const Point v02_2 = p2_2 - p0_it.p(); + const Point2LL v02_2 = p2_2 - p0_it.p(); if (vSize2(v02_2) > shortcut_length2) { forward_is_too_far = true; @@ -1013,7 +1013,7 @@ void ConstPolygonRef::smooth_outward_step( else { const ListPolyIt p0_2_it = p0_it.prev(); - const Point p0_2 = p0_2_it.p(); + const Point2LL p0_2 = p0_2_it.p(); bool p0_is_left = LinearAlg2D::pointIsLeftOfLine(p0, p0_2, p2) >= 0; if (! p0_is_left) { @@ -1021,7 +1021,7 @@ void ConstPolygonRef::smooth_outward_step( return; } - const Point v02_2 = p2_it.p() - p0_2; + const Point2LL v02_2 = p2_it.p() - p0_2; if (vSize2(v02_2) > shortcut_length2) { backward_is_too_far = true; @@ -1036,15 +1036,15 @@ void ConstPolygonRef::smooth_outward_step( } void ConstPolygonRef::smooth_corner_simple( - const Point p0, - const Point p1, - const Point p2, + const Point2LL p0, + const Point2LL p1, + const Point2LL p2, const ListPolyIt p0_it, const ListPolyIt p1_it, const ListPolyIt p2_it, - const Point v10, - const Point v12, - const Point v02, + const Point2LL v10, + const Point2LL v12, + const Point2LL v02, const int64_t shortcut_length, double cos_angle) { @@ -1079,8 +1079,8 @@ void ConstPolygonRef::smooth_corner_simple( const int64_t a1_size = shortcut_length / 2 / sin(a1m_angle); if (a1_size * a1_size < vSize2(v10) && a1_size * a1_size < vSize2(v12)) { - Point a = p1 + normal(v10, a1_size); - Point b = p1 + normal(v12, a1_size); + Point2LL a = p1 + normal(v10, a1_size); + Point2LL b = p1 + normal(v12, a1_size); #ifdef ASSERT_INSANE_OUTPUT assert(vSize(a) < 4000000); assert(vSize(b) < 4000000); @@ -1100,8 +1100,8 @@ void ConstPolygonRef::smooth_corner_simple( // |a // | // 0 - const Point& b = p2_it.p(); - Point a; + const Point2LL& b = p2_it.p(); + Point2LL a; bool success = LinearAlg2D::getPointOnLineWithDist(b, p1, p0, shortcut_length, a); // v02 has to be longer than ab! if (success) @@ -1120,8 +1120,8 @@ void ConstPolygonRef::smooth_corner_simple( // | ,-' // 0.-' // a - const Point& a = p0_it.p(); - Point b; + const Point2LL& a = p0_it.p(); + Point2LL b; bool success = LinearAlg2D::getPointOnLineWithDist(a, p1, p2, shortcut_length, b); // v02 has to be longer than ab! if (success) @@ -1176,20 +1176,20 @@ void ConstPolygonRef::smooth_outward(const AngleDegrees min_angle, int shortcut_ ListPolyIt p1_it(poly, poly.begin()); do { - const Point p1 = p1_it.p(); + const Point2LL p1 = p1_it.p(); ListPolyIt p0_it = p1_it.prev(); ListPolyIt p2_it = p1_it.next(); - const Point p0 = p0_it.p(); - const Point p2 = p2_it.p(); + const Point2LL p0 = p0_it.p(); + const Point2LL p2 = p2_it.p(); - const Point v10 = p0 - p1; - const Point v12 = p2 - p1; + const Point2LL v10 = p0 - p1; + const Point2LL v12 = p2 - p1; double cos_angle = INT2MM(INT2MM(dot(v10, v12))) / vSizeMM(v10) / vSizeMM(v12); bool is_left_angle = LinearAlg2D::pointIsLeftOfLine(p1, p0, p2) > 0; if (cos_angle > cos_min_angle && is_left_angle) { // angle is so sharp that it can be removed - Point v02 = p2_it.p() - p0_it.p(); + Point2LL v02 = p2_it.p() - p0_it.p(); if (vSize2(v02) >= shortcut_length2) { smooth_corner_simple(p0, p1, p2, p0_it, p1_it, p2_it, v10, v12, v02, shortcut_length, cos_angle); @@ -1242,10 +1242,10 @@ Polygons Polygons::smooth_outward(const AngleDegrees max_angle, int shortcut_len void ConstPolygonRef::splitPolylineIntoSegments(Polygons& result) const { - Point last = front(); + Point2LL last = front(); for (size_t idx = 1; idx < size(); idx++) { - Point p = (*this)[idx]; + Point2LL p = (*this)[idx]; result.addLine(last, p); last = p; } @@ -1318,25 +1318,25 @@ void ConstPolygonRef::smooth(int remove_length, PolygonRef result) const } return true; }; - Point v02 = thiss[2] - thiss[0]; - Point v02T = turn90CCW(v02); + Point2LL v02 = thiss[2] - thiss[0]; + Point2LL v02T = turn90CCW(v02); int64_t v02_size = vSize(v02); bool force_push = false; for (unsigned int poly_idx = 1; poly_idx < size(); poly_idx++) { - const Point& p1 = thiss[poly_idx]; - const Point& p2 = thiss[(poly_idx + 1) % size()]; - const Point& p3 = thiss[(poly_idx + 2) % size()]; + const Point2LL& p1 = thiss[poly_idx]; + const Point2LL& p2 = thiss[(poly_idx + 1) % size()]; + const Point2LL& p3 = thiss[(poly_idx + 2) % size()]; // v02 computed in last iteration // v02_size as well - const Point v12 = p2 - p1; + const Point2LL v12 = p2 - p1; const int64_t v12_size = vSize(v12); - const Point v13 = p3 - p1; + const Point2LL v13 = p3 - p1; const int64_t v13_size = vSize(v13); // v02T computed in last iteration const int64_t dot1 = dot(v02T, v12); - const Point v13T = turn90CCW(v13); + const Point2LL v13T = turn90CCW(v13); const int64_t dot2 = dot(v13T, v12); bool push_point = force_push || ! is_zigzag(v02_size, v12_size, v13_size, dot1, dot2); force_push = false; @@ -1390,9 +1390,9 @@ void ConstPolygonRef::smooth2(int remove_length, PolygonRef result) const } for (unsigned int poly_idx = 1; poly_idx < thiss.size(); poly_idx++) { - const Point& last = thiss[poly_idx - 1]; - const Point& now = thiss[poly_idx]; - const Point& next = thiss[(poly_idx + 1) % thiss.size()]; + const Point2LL& last = thiss[poly_idx - 1]; + const Point2LL& now = thiss[poly_idx]; + const Point2LL& next = thiss[(poly_idx + 1) % thiss.size()]; if (shorterThen(last - now, remove_length) && shorterThen(now - next, remove_length)) { poly_idx++; // skip the next line piece (dont escalate the removal of edges) @@ -1595,14 +1595,14 @@ void Polygons::splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Poly void Polygons::ensureManifold() { const Polygons& polys = *this; - std::vector duplicate_locations; - std::unordered_set poly_locations; + std::vector duplicate_locations; + std::unordered_set poly_locations; for (size_t poly_idx = 0; poly_idx < polys.size(); poly_idx++) { ConstPolygonRef poly = polys[poly_idx]; for (size_t point_idx = 0; point_idx < poly.size(); point_idx++) { - Point p = poly[point_idx]; + Point2LL p = poly[point_idx]; if (poly_locations.find(p) != poly_locations.end()) { duplicate_locations.push_back(p); @@ -1611,13 +1611,13 @@ void Polygons::ensureManifold() } } Polygons removal_dots; - for (Point p : duplicate_locations) + for (Point2LL p : duplicate_locations) { PolygonRef dot = removal_dots.newPoly(); - dot.add(p + Point(0, 5)); - dot.add(p + Point(5, 0)); - dot.add(p + Point(0, -5)); - dot.add(p + Point(-5, 0)); + dot.add(p + Point2LL(0, 5)); + dot.add(p + Point2LL(5, 0)); + dot.add(p + Point2LL(0, -5)); + dot.add(p + Point2LL(-5, 0)); } if (! removal_dots.empty()) { diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index e314c1e5f9..42f9204a05 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -24,7 +24,7 @@ namespace cura { -const std::function PolygonUtils::no_penalty_function = [](Point) +const std::function PolygonUtils::no_penalty_function = [](Point2LL) { return 0; }; @@ -33,12 +33,12 @@ int64_t PolygonUtils::segmentLength(PolygonsPointIndex start, PolygonsPointIndex { assert(start.poly_idx_ == end.poly_idx_); int64_t segment_length = 0; - Point prev_vert = start.p(); + Point2LL prev_vert = start.p(); ConstPolygonRef poly = (*start.polygons_)[start.poly_idx_]; for (unsigned int point_idx = 1; point_idx <= poly.size(); point_idx++) { unsigned int vert_idx = (start.point_idx_ + point_idx) % poly.size(); - Point vert = poly[vert_idx]; + Point2LL vert = poly[vert_idx]; segment_length += vSize(vert - prev_vert); if (vert_idx == end.point_idx_) @@ -71,9 +71,9 @@ void PolygonUtils::spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, PolygonsPointIndex vert = start; while (true) { - Point p0 = vert.p(); - Point p1 = vert.next().p(); - Point p0p1 = p1 - p0; + Point2LL p0 = vert.p(); + Point2LL p1 = vert.next().p(); + Point2LL p0p1 = p1 - p0; int64_t p0p1_length = vSize(p0p1); for (; dist_past_vert_to_insert_point < p0p1_length && n_points_generated < n_dots_in_between; dist_past_vert_to_insert_point += wipe_point_dist) @@ -92,12 +92,12 @@ void PolygonUtils::spreadDots(PolygonsPointIndex start, PolygonsPointIndex end, assert(result.size() == n_dots && "we didn't generate as many wipe locations as we asked for."); } -std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, coord_t grid_size) +std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, coord_t grid_size) { - return spreadDotsArea(polygons, Point(grid_size, grid_size)); + return spreadDotsArea(polygons, Point2LL(grid_size, grid_size)); } -std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Point grid_size) +std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Point2LL grid_size) { std::vector dummy_toolpaths; Settings dummy_settings; @@ -105,12 +105,12 @@ std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Point Polygons result_polygons; Polygons result_lines; infill_gen.generate(dummy_toolpaths, result_polygons, result_lines, dummy_settings, 0, SectionType::DOTS); // FIXME: @jellespijker make sure the propper layer nr is used - std::vector result; + std::vector result; for (PolygonRef line : result_lines) { assert(line.size() == 2); - Point a = line[0]; - Point b = line[1]; + Point2LL a = line[0]; + Point2LL b = line[1]; assert(a.X == b.X); if (a.Y > b.Y) { @@ -127,19 +127,19 @@ std::vector PolygonUtils::spreadDotsArea(const Polygons& polygons, Point } bool PolygonUtils::lineSegmentPolygonsIntersection( - const Point& a, - const Point& b, + const Point2LL& a, + const Point2LL& b, const Polygons& current_outlines, const LocToLineGrid& outline_locator, - Point& result, + Point2LL& result, const coord_t within_max_dist) { const coord_t within_max_dist2 = within_max_dist * within_max_dist; - Point coll; + Point2LL coll; coord_t closest_dist2 = within_max_dist2; - const auto processOnIntersect = [&result, &closest_dist2, &a, &b, &coll](const Point& p_start, const Point& p_end) + const auto processOnIntersect = [&result, &closest_dist2, &a, &b, &coll](const Point2LL& p_start, const Point2LL& p_end) { if (LinearAlg2D::lineLineIntersection(a, b, p_start, p_end, coll) && LinearAlg2D::pointIsProjectedBeyondLine(coll, p_start, p_end) == 0 && LinearAlg2D::pointIsProjectedBeyondLine(coll, a, b) == 0) @@ -179,9 +179,9 @@ bool PolygonUtils::lineSegmentPolygonsIntersection( return closest_dist2 < within_max_dist2; } -Point PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx) +Point2LL PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int point_idx) { - Point p1 = poly[point_idx]; + Point2LL p1 = poly[point_idx]; int p0_idx; for (p0_idx = int(point_idx) - 1; (unsigned int)p0_idx != point_idx; p0_idx = p0_idx - 1) @@ -195,7 +195,7 @@ Point PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int poi break; } } - Point p0 = poly[p0_idx]; + Point2LL p0 = poly[p0_idx]; unsigned int p2_idx; for (p2_idx = point_idx + 1; p2_idx != point_idx; p2_idx = p2_idx + 1) @@ -209,28 +209,28 @@ Point PolygonUtils::getVertexInwardNormal(ConstPolygonRef poly, unsigned int poi break; } } - const Point& p2 = poly[p2_idx]; + const Point2LL& p2 = poly[p2_idx]; - Point off0 = turn90CCW(normal(p1 - p0, MM2INT(10.0))); // 10.0 for some precision - Point off1 = turn90CCW(normal(p2 - p1, MM2INT(10.0))); // 10.0 for some precision - Point n = off0 + off1; + Point2LL off0 = turn90CCW(normal(p1 - p0, MM2INT(10.0))); // 10.0 for some precision + Point2LL off1 = turn90CCW(normal(p2 - p1, MM2INT(10.0))); // 10.0 for some precision + Point2LL n = off0 + off1; return n; } -Point PolygonUtils::getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset) +Point2LL PolygonUtils::getBoundaryPointWithOffset(ConstPolygonRef poly, unsigned int point_idx, int64_t offset) { return poly[point_idx] + normal(getVertexInwardNormal(poly, point_idx), -offset); } -Point PolygonUtils::moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset) +Point2LL PolygonUtils::moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, int64_t inset) { if (! point_on_boundary.isValid()) { return no_point; } ConstPolygonRef poly = **point_on_boundary.poly_; - Point p0 = poly[point_on_boundary.point_idx_]; - Point p1 = poly[(point_on_boundary.point_idx_ + 1) % poly.size()]; + Point2LL p0 = poly[point_on_boundary.point_idx_]; + Point2LL p1 = poly[(point_on_boundary.point_idx_ + 1) % poly.size()]; if (vSize2(p0 - point_on_boundary.location_) < vSize2(p1 - point_on_boundary.location_)) { return point_on_boundary.location_ + normal(getVertexInwardNormal(poly, point_on_boundary.point_idx_), inset); @@ -241,19 +241,19 @@ Point PolygonUtils::moveInsideDiagonally(ClosestPolygonPoint point_on_boundary, } } -unsigned int PolygonUtils::moveOutside(const Polygons& polygons, Point& from, int distance, int64_t maxDist2) +unsigned int PolygonUtils::moveOutside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) { return moveInside(polygons, from, -distance, maxDist2); } ClosestPolygonPoint PolygonUtils::moveInside2( const Polygons& polygons, - Point& from, + Point2LL& from, const int distance, const int64_t max_dist2, const Polygons* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, - const std::function& penalty_function) + const std::function& penalty_function) { std::optional closest_polygon_point; if (loc_to_line_grid) @@ -270,11 +270,11 @@ ClosestPolygonPoint PolygonUtils::moveInside2( ClosestPolygonPoint PolygonUtils::moveInside2( const Polygons& loc_to_line_polygons, ConstPolygonRef polygon, - Point& from, + Point2LL& from, const int distance, const int64_t max_dist2, const LocToLineGrid* loc_to_line_grid, - const std::function& penalty_function) + const std::function& penalty_function) { std::optional closest_polygon_point; if (loc_to_line_grid) @@ -288,15 +288,15 @@ ClosestPolygonPoint PolygonUtils::moveInside2( return _moveInside2(*closest_polygon_point, distance, from, max_dist2); } -ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point& from, const int64_t max_dist2) +ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closest_polygon_point, const int distance, Point2LL& from, const int64_t max_dist2) { if (! closest_polygon_point.isValid()) { return ClosestPolygonPoint(); // stub with invalid indices to signify we haven't found any } - const Point v_boundary_from = from - closest_polygon_point.location_; - Point result = moveInside(closest_polygon_point, distance); - const Point v_boundary_result = result - closest_polygon_point.location_; + const Point2LL v_boundary_from = from - closest_polygon_point.location_; + Point2LL result = moveInside(closest_polygon_point, distance); + const Point2LL v_boundary_result = result - closest_polygon_point.location_; if (dot(v_boundary_result, v_boundary_from) > 0) { // point was already on the correct side of the polygon if (vSize2(v_boundary_from) > distance * distance) @@ -327,9 +327,9 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes /* * Implementation assumes moving inside, but moving outside should just as well be possible. */ -unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int distance, int64_t maxDist2) +unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) { - Point ret = from; + Point2LL ret = from; int64_t bestDist2 = std::numeric_limits::max(); unsigned int bestPoly = NO_INDEX; bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary @@ -338,21 +338,21 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int ConstPolygonRef poly = polygons[poly_idx]; if (poly.size() < 2) continue; - Point p0 = poly[poly.size() - 2]; - Point p1 = poly.back(); + Point2LL p0 = poly[poly.size() - 2]; + Point2LL p1 = poly.back(); // because we compare with vSize2 here (no division by zero), we also need to compare by vSize2 inside the loop // to avoid integer rounding edge cases bool projected_p_beyond_prev_segment = dot(p1 - p0, from - p0) >= vSize2(p1 - p0); - for (const Point& p2 : poly) + for (const Point2LL& p2 : poly) { // X = A + Normal(B-A) * (((B-A) dot (P-A)) / VSize(B-A)); // = A + (B-A) * ((B-A) dot (P-A)) / VSize2(B-A); // X = P projected on AB - const Point& a = p1; - const Point& b = p2; - const Point& p = from; - Point ab = b - a; - Point ap = p - a; + const Point2LL& a = p1; + const Point2LL& b = p2; + const Point2LL& p = from; + Point2LL ab = b - a; + Point2LL ap = p - a; int64_t ab_length2 = vSize2(ab); if (ab_length2 <= 0) // A = B, i.e. the input polygon had two adjacent points on top of each other. { @@ -365,7 +365,7 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int if (projected_p_beyond_prev_segment) { // case which looks like: > . projected_p_beyond_prev_segment = false; - Point& x = p1; + Point2LL& x = p1; int64_t dist2 = vSize2(x - p); if (dist2 < bestDist2) @@ -378,7 +378,7 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int } else { - Point inward_dir = turn90CCW(normal(ab, MM2INT(10.0)) + normal(p1 - p0, MM2INT(10.0))); // inward direction irrespective of sign of [distance] + Point2LL inward_dir = turn90CCW(normal(ab, MM2INT(10.0)) + normal(p1 - p0, MM2INT(10.0))); // inward direction irrespective of sign of [distance] // MM2INT(10.0) to retain precision for the eventual normalization ret = x + normal(inward_dir, distance); is_already_on_correct_side_of_boundary = dot(inward_dir, p - x) * distance >= 0; @@ -403,7 +403,7 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int else { // x is projected to a point properly on the line segment (not onto a vertex). The case which looks like | . projected_p_beyond_prev_segment = false; - Point x = a + ab * dot_prod / ab_length2; + Point2LL x = a + ab * dot_prod / ab_length2; int64_t dist2 = vSize2(p - x); if (dist2 < bestDist2) @@ -416,7 +416,7 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int } else { - Point inward_dir = turn90CCW(normal(ab, distance)); // inward or outward depending on the sign of [distance] + Point2LL inward_dir = turn90CCW(normal(ab, distance)); // inward or outward depending on the sign of [distance] ret = x + inward_dir; is_already_on_correct_side_of_boundary = dot(inward_dir, p - x) >= 0; } @@ -447,7 +447,7 @@ unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point& from, int } // Version that works on single PolygonRef. -unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from, int distance, int64_t maxDist2) +unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point2LL& from, int distance, int64_t maxDist2) { // TODO: This is copied from the moveInside of Polygons. /* @@ -456,7 +456,7 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from is expensive. Or we need to return the distance. We need the distance there to compare with the distance to other polygons. */ - Point ret = from; + Point2LL ret = from; int64_t bestDist2 = std::numeric_limits::max(); bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary @@ -464,21 +464,21 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from { return 0; } - Point p0 = polygon[polygon.size() - 2]; - Point p1 = polygon.back(); + Point2LL p0 = polygon[polygon.size() - 2]; + Point2LL p1 = polygon.back(); // because we compare with vSize2 here (no division by zero), we also need to compare by vSize2 inside the loop // to avoid integer rounding edge cases bool projected_p_beyond_prev_segment = dot(p1 - p0, from - p0) >= vSize2(p1 - p0); - for (const Point& p2 : polygon) + for (const Point2LL& p2 : polygon) { // X = A + Normal(B-A) * (((B-A) dot (P-A)) / VSize(B-A)); // = A + (B-A) * ((B-A) dot (P-A)) / VSize2(B-A); // X = P projected on AB - const Point& a = p1; - const Point& b = p2; - const Point& p = from; - Point ab = b - a; - Point ap = p - a; + const Point2LL& a = p1; + const Point2LL& b = p2; + const Point2LL& p = from; + Point2LL ab = b - a; + Point2LL ap = p - a; int64_t ab_length2 = vSize2(ab); if (ab_length2 <= 0) // A = B, i.e. the input polygon had two adjacent points on top of each other. { @@ -491,7 +491,7 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from if (projected_p_beyond_prev_segment) { // case which looks like: > . projected_p_beyond_prev_segment = false; - Point& x = p1; + Point2LL& x = p1; int64_t dist2 = vSize2(x - p); if (dist2 < bestDist2) @@ -503,7 +503,7 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from } else { - Point inward_dir = turn90CCW(normal(ab, MM2INT(10.0)) + normal(p1 - p0, MM2INT(10.0))); // inward direction irrespective of sign of [distance] + Point2LL inward_dir = turn90CCW(normal(ab, MM2INT(10.0)) + normal(p1 - p0, MM2INT(10.0))); // inward direction irrespective of sign of [distance] // MM2INT(10.0) to retain precision for the eventual normalization ret = x + normal(inward_dir, distance); is_already_on_correct_side_of_boundary = dot(inward_dir, p - x) * distance >= 0; @@ -528,7 +528,7 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from else { // x is projected to a point properly on the line segment (not onto a vertex). The case which looks like | . projected_p_beyond_prev_segment = false; - Point x = a + ab * dot_prod / ab_length2; + Point2LL x = a + ab * dot_prod / ab_length2; int64_t dist2 = vSize2(p - x); if (dist2 < bestDist2) @@ -540,7 +540,7 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from } else { - Point inward_dir = turn90CCW(normal(ab, distance)); // inward or outward depending on the sign of [distance] + Point2LL inward_dir = turn90CCW(normal(ab, distance)); // inward or outward depending on the sign of [distance] ret = x + inward_dir; is_already_on_correct_side_of_boundary = dot(inward_dir, p - x) >= 0; } @@ -565,12 +565,12 @@ unsigned int PolygonUtils::moveInside(const ConstPolygonRef polygon, Point& from return 0; } -Point PolygonUtils::moveOutside(const ClosestPolygonPoint& cpp, const int distance) +Point2LL PolygonUtils::moveOutside(const ClosestPolygonPoint& cpp, const int distance) { return moveInside(cpp, -distance); } -Point PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distance) +Point2LL PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distance) { if (! cpp.isValid()) { @@ -582,9 +582,9 @@ Point PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distanc } ConstPolygonRef poly = *cpp.poly_; unsigned int point_idx = cpp.point_idx_; - const Point& on_boundary = cpp.location_; + const Point2LL& on_boundary = cpp.location_; - const Point& p1 = poly[point_idx]; + const Point2LL& p1 = poly[point_idx]; unsigned int p2_idx; for (p2_idx = point_idx + 1; p2_idx != point_idx; p2_idx = p2_idx + 1) { // find the next point different from p1 @@ -597,7 +597,7 @@ Point PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distanc break; } } - const Point& p2 = poly[p2_idx]; + const Point2LL& p2 = poly[p2_idx]; if (on_boundary == p1) { @@ -609,21 +609,21 @@ Point PolygonUtils::moveInside(const ClosestPolygonPoint& cpp, const int distanc } else { - const Point& x = on_boundary; // on_boundary is already projected on p1-p2 + const Point2LL& x = on_boundary; // on_boundary is already projected on p1-p2 - Point inward_dir = turn90CCW(normal(p2 - p1, distance)); + Point2LL inward_dir = turn90CCW(normal(p2 - p1, distance)); return x + inward_dir; } } ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( const Polygons& polygons, - Point& from, + Point2LL& from, int preferred_dist_inside, int64_t max_dist2, const Polygons* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, - const std::function& penalty_function) + const std::function& penalty_function) { const ClosestPolygonPoint closest_polygon_point = moveInside2(polygons, from, preferred_dist_inside, max_dist2, loc_to_line_polygons, loc_to_line_grid, penalty_function); return ensureInsideOrOutside(polygons, from, closest_polygon_point, preferred_dist_inside, loc_to_line_polygons, loc_to_line_grid, penalty_function); @@ -631,12 +631,12 @@ ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( ClosestPolygonPoint PolygonUtils::ensureInsideOrOutside( const Polygons& polygons, - Point& from, + Point2LL& from, const ClosestPolygonPoint& closest_polygon_point, int preferred_dist_inside, const Polygons* loc_to_line_polygons, const LocToLineGrid* loc_to_line_grid, - const std::function& penalty_function) + const std::function& penalty_function) { if (! closest_polygon_point.isValid()) { @@ -783,7 +783,7 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re auto check_neighboring_vert = [&best_distance2](ConstPolygonRef from_poly, ConstPolygonRef to_poly, ClosestPolygonPoint& from_poly_result, ClosestPolygonPoint& to_poly_result, bool vertex_after) { - const Point after_poly2_result = to_poly[(to_poly_result.point_idx_ + vertex_after) % to_poly.size()]; + const Point2LL after_poly2_result = to_poly[(to_poly_result.point_idx_ + vertex_after) % to_poly.size()]; const ClosestPolygonPoint poly1_after_poly2_result = findNearestClosest(after_poly2_result, from_poly, from_poly_result.point_idx_); const coord_t poly1_after_poly2_result_dist2 = vSize2(poly1_after_poly2_result.p() - after_poly2_result); if (poly1_after_poly2_result_dist2 < best_distance2) @@ -802,7 +802,7 @@ void PolygonUtils::walkToNearestSmallestConnection(ClosestPolygonPoint& poly1_re poly2_result.poly_idx_ = poly2_idx; } -ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef polygon, int start_idx) +ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx) { ClosestPolygonPoint forth = findNearestClosest(from, polygon, start_idx, 1); if (! forth.isValid()) @@ -821,14 +821,14 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef } } -ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef polygon, int start_idx, int direction) +ClosestPolygonPoint PolygonUtils::findNearestClosest(Point2LL from, ConstPolygonRef polygon, int start_idx, int direction) { if (polygon.size() == 0) { return ClosestPolygonPoint(polygon); } - Point aPoint = polygon[0]; - Point best = aPoint; + Point2LL aPoint = polygon[0]; + Point2LL best = aPoint; int64_t closestDist = vSize2(from - best); int bestPos = 0; @@ -838,10 +838,10 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef { int p1_idx = (poly_size + direction * p + start_idx) % poly_size; int p2_idx = (poly_size + direction * (p + 1) + start_idx) % poly_size; - const Point& p1 = polygon[p1_idx]; - const Point& p2 = polygon[p2_idx]; + const Point2LL& p1 = polygon[p1_idx]; + const Point2LL& p2 = polygon[p2_idx]; - Point closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); + Point2LL closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); int64_t dist = vSize2(from - closest_here); if (dist < closestDist) { @@ -858,7 +858,7 @@ ClosestPolygonPoint PolygonUtils::findNearestClosest(Point from, ConstPolygonRef return ClosestPolygonPoint(best, bestPos, polygon); } -ClosestPolygonPoint PolygonUtils::findClosest(Point from, const Polygons& polygons, const std::function& penalty_function) +ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, const Polygons& polygons, const std::function& penalty_function) { ClosestPolygonPoint none; @@ -906,28 +906,28 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point from, const Polygons& polygo return best; } -ClosestPolygonPoint PolygonUtils::findClosest(Point from, ConstPolygonRef polygon, const std::function& penalty_function) +ClosestPolygonPoint PolygonUtils::findClosest(Point2LL from, ConstPolygonRef polygon, const std::function& penalty_function) { if (polygon.size() == 0) { return ClosestPolygonPoint(polygon); } - Point aPoint = polygon[0]; - Point best = aPoint; + Point2LL aPoint = polygon[0]; + Point2LL best = aPoint; int64_t closestDist2_score = vSize2(from - best) + penalty_function(best); int bestPos = 0; for (unsigned int p = 0; p < polygon.size(); p++) { - const Point& p1 = polygon[p]; + const Point2LL& p1 = polygon[p]; unsigned int p2_idx = p + 1; if (p2_idx >= polygon.size()) p2_idx = 0; - const Point& p2 = polygon[p2_idx]; + const Point2LL& p2 = polygon[p2_idx]; - Point closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); + Point2LL closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); int64_t dist2_score = vSize2(from - closest_here) + penalty_function(closest_here); if (dist2_score < closestDist2_score) { @@ -940,7 +940,7 @@ ClosestPolygonPoint PolygonUtils::findClosest(Point from, ConstPolygonRef polygo return ClosestPolygonPoint(best, bestPos, polygon); } -PolygonsPointIndex PolygonUtils::findNearestVert(const Point from, const Polygons& polys) +PolygonsPointIndex PolygonUtils::findNearestVert(const Point2LL from, const Polygons& polys) { int64_t best_dist2 = std::numeric_limits::max(); PolygonsPointIndex closest_vert; @@ -960,7 +960,7 @@ PolygonsPointIndex PolygonUtils::findNearestVert(const Point from, const Polygon return closest_vert; } -unsigned int PolygonUtils::findNearestVert(const Point from, ConstPolygonRef poly) +unsigned int PolygonUtils::findNearestVert(const Point2LL from, ConstPolygonRef poly) { int64_t best_dist2 = std::numeric_limits::max(); unsigned int closest_vert_idx = -1; @@ -1005,21 +1005,21 @@ std::unique_ptr PolygonUtils::createLocToLineGrid(const Polygons& * We could skip the duplication by keeping a vector of vectors of bools. */ std::optional - PolygonUtils::findClose(Point from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function) + PolygonUtils::findClose(Point2LL from, const Polygons& polygons, const LocToLineGrid& loc_to_line, const std::function& penalty_function) { std::vector near_lines = loc_to_line.getNearby(from, loc_to_line.getCellSize()); - Point best(0, 0); + Point2LL best(0, 0); int64_t closest_dist2_score = std::numeric_limits::max(); PolygonsPointIndex best_point_poly_idx(nullptr, NO_INDEX, NO_INDEX); for (PolygonsPointIndex& point_poly_index : near_lines) { ConstPolygonRef poly = polygons[point_poly_index.poly_idx_]; - const Point& p1 = poly[point_poly_index.point_idx_]; - const Point& p2 = poly[(point_poly_index.point_idx_ + 1) % poly.size()]; + const Point2LL& p1 = poly[point_poly_index.point_idx_]; + const Point2LL& p2 = poly[(point_poly_index.point_idx_ + 1) % poly.size()]; - Point closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); + Point2LL closest_here = LinearAlg2D::getClosestOnLineSegment(from, p1, p2); int64_t dist2_score = vSize2(from - closest_here) + penalty_function(closest_here); if (dist2_score < closest_dist2_score) { @@ -1039,25 +1039,25 @@ std::optional } std::vector> - PolygonUtils::findClose(ConstPolygonRef from, const Polygons& destination, const LocToLineGrid& destination_loc_to_line, const std::function& penalty_function) + PolygonUtils::findClose(ConstPolygonRef from, const Polygons& destination, const LocToLineGrid& destination_loc_to_line, const std::function& penalty_function) { std::vector> ret; int p0_idx = from.size() - 1; - Point p0(from[p0_idx]); + Point2LL p0(from[p0_idx]); int grid_size = destination_loc_to_line.getCellSize(); for (unsigned int p1_idx = 0; p1_idx < from.size(); p1_idx++) { - const Point& p1 = from[p1_idx]; + const Point2LL& p1 = from[p1_idx]; std::optional best_here = findClose(p1, destination, destination_loc_to_line, penalty_function); if (best_here) { ret.push_back(std::make_pair(ClosestPolygonPoint(p1, p1_idx, from), *best_here)); } - Point p0p1 = p1 - p0; + Point2LL p0p1 = p1 - p0; int dist_to_p1 = vSize(p0p1); for (unsigned int middle_point_nr = 1; dist_to_p1 > grid_size * 2; ++middle_point_nr) { - Point x = p0 + normal(p0p1, middle_point_nr * grid_size); + Point2LL x = p0 + normal(p0p1, middle_point_nr * grid_size); dist_to_p1 -= grid_size; best_here = findClose(x, destination, destination_loc_to_line, penalty_function); @@ -1072,14 +1072,14 @@ std::vector> return ret; } -bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result) +bool PolygonUtils::getNextPointWithDistance(Point2LL from, int64_t dist, ConstPolygonRef poly, int start_idx, int poly_start_idx, GivenDistPoint& result) { - Point prev_poly_point = poly[(start_idx + poly_start_idx) % poly.size()]; + Point2LL prev_poly_point = poly[(start_idx + poly_start_idx) % poly.size()]; for (unsigned int prev_idx = start_idx; prev_idx < poly.size(); prev_idx++) { int next_idx = (prev_idx + 1 + poly_start_idx) % poly.size(); // last checked segment is between last point in poly and poly[0]... - const Point& next_poly_point = poly[next_idx]; + const Point2LL& next_poly_point = poly[next_idx]; if (! shorterThen(next_poly_point - from, dist)) { /* @@ -1097,11 +1097,11 @@ bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolyg * r=result point at distance [dist] from f */ - Point pn = next_poly_point - prev_poly_point; + Point2LL pn = next_poly_point - prev_poly_point; if (shorterThen(pn, 100)) // when precision is limited { - Point middle = (next_poly_point + prev_poly_point) / 2; + Point2LL middle = (next_poly_point + prev_poly_point) / 2; coord_t dist_to_middle = vSize(from - middle); if (dist_to_middle - dist < 100 && dist_to_middle - dist > -100) { @@ -1116,9 +1116,9 @@ bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolyg } } - Point pf = from - prev_poly_point; - Point px = dot(pf, pn) / vSize(pn) * pn / vSize(pn); - Point xf = pf - px; + Point2LL pf = from - prev_poly_point; + Point2LL px = dot(pf, pn) / vSize(pn) * pn / vSize(pn); + Point2LL xf = pf - px; if (! shorterThen(xf, dist)) // line lies wholly further than pn { @@ -1134,8 +1134,8 @@ bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolyg continue; } - Point xr = xr_dist * pn / vSize(pn); - Point pr = px + xr; + Point2LL xr = xr_dist * pn / vSize(pn); + Point2LL pr = px + xr; result.location = prev_poly_point + pr; result.pos = prev_idx; @@ -1149,8 +1149,8 @@ bool PolygonUtils::getNextPointWithDistance(Point from, int64_t dist, ConstPolyg ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t distance) { ConstPolygonRef poly = *from.poly_; - Point last_vertex = from.p(); - Point next_vertex; + Point2LL last_vertex = from.p(); + Point2LL next_vertex; size_t last_point_idx = from.point_idx_; for (size_t point_idx = from.point_idx_ + 1;; point_idx++) { @@ -1165,11 +1165,11 @@ ClosestPolygonPoint PolygonUtils::walk(const ClosestPolygonPoint& from, coord_t last_vertex = next_vertex; last_point_idx = point_idx; } - Point result = next_vertex + normal(last_vertex - next_vertex, -distance); + Point2LL result = next_vertex + normal(last_vertex - next_vertex, -distance); return ClosestPolygonPoint(result, last_point_idx, poly, from.poly_idx_); } -std::optional PolygonUtils::getNextParallelIntersection(const ClosestPolygonPoint& start, const Point& line_to, const coord_t dist, const bool forward) +std::optional PolygonUtils::getNextParallelIntersection(const ClosestPolygonPoint& start, const Point2LL& line_to, const coord_t dist, const bool forward) { // <--o--t-----y----< poly 1 // : : @@ -1184,32 +1184,32 @@ std::optional PolygonUtils::getNextParallelIntersection(con // t=line_to ConstPolygonRef poly = *start.poly_; - const Point s = start.p(); - const Point t = line_to; + const Point2LL s = start.p(); + const Point2LL t = line_to; - const Point st = t - s; - const Point shift = normal(turn90CCW(st), dist); + const Point2LL st = t - s; + const Point2LL shift = normal(turn90CCW(st), dist); - Point prev_vert = s; + Point2LL prev_vert = s; coord_t prev_projected = 0; for (unsigned int next_point_nr = 0; next_point_nr < poly.size(); next_point_nr++) { const unsigned int next_point_idx = forward ? (start.point_idx_ + 1 + next_point_nr) % poly.size() : (static_cast(start.point_idx_) - next_point_nr + poly.size()) % poly.size(); // cast in order to accomodate subtracting - const Point next_vert = poly[next_point_idx]; - const Point so = next_vert - s; + const Point2LL next_vert = poly[next_point_idx]; + const Point2LL so = next_vert - s; const coord_t projected = dot(shift, so) / dist; if (std::abs(projected) > dist) { // segment crosses the line through xy (or the one on the other side of st) - const Point segment_vector = next_vert - prev_vert; + const Point2LL segment_vector = next_vert - prev_vert; const coord_t segment_length = vSize(segment_vector); const coord_t projected_segment_length = std::abs(projected - prev_projected); const int16_t sign = (projected > 0) ? 1 : -1; const coord_t projected_inter_segment_length = dist - sign * prev_projected; // add the prev_projected to dist if it is projected to the other side of the input line than where the intersection occurs. const coord_t inter_segment_length = segment_length * projected_inter_segment_length / projected_segment_length; - const Point intersection = prev_vert + normal(next_vert - prev_vert, inter_segment_length); + const Point2LL intersection = prev_vert + normal(next_vert - prev_vert, inter_segment_length); size_t vert_before_idx = next_point_idx; if (forward) @@ -1228,26 +1228,26 @@ std::optional PolygonUtils::getNextParallelIntersection(con } -bool PolygonUtils::polygonCollidesWithLineSegment(const Point from, const Point to, const LocToLineGrid& loc_to_line, PolygonsPointIndex* collision_result) +bool PolygonUtils::polygonCollidesWithLineSegment(const Point2LL from, const Point2LL to, const LocToLineGrid& loc_to_line, PolygonsPointIndex* collision_result) { bool ret = false; - Point diff = to - from; + Point2LL diff = to - from; if (vSize2(diff) < 2) { // transformation matrix would fail return false; } PointMatrix transformation_matrix = PointMatrix(diff); - Point transformed_from = transformation_matrix.apply(from); - Point transformed_to = transformation_matrix.apply(to); + Point2LL transformed_from = transformation_matrix.apply(from); + Point2LL transformed_to = transformation_matrix.apply(to); PolygonsPointIndex result; std::function process_elem_func = [transformed_from, transformed_to, &transformation_matrix, &result, &ret](const PolygonsPointIndex& line_start) { - Point p0 = transformation_matrix.apply(line_start.p()); - Point p1 = transformation_matrix.apply(line_start.next().p()); + Point2LL p0 = transformation_matrix.apply(line_start.p()); + Point2LL p1 = transformation_matrix.apply(line_start.next().p()); if (LinearAlg2D::lineSegmentsCollide(transformed_from, transformed_to, p0, p1)) { @@ -1266,12 +1266,16 @@ bool PolygonUtils::polygonCollidesWithLineSegment(const Point from, const Point return ret; } -bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point& transformed_startPoint, const Point& transformed_endPoint, PointMatrix transformation_matrix) +bool PolygonUtils::polygonCollidesWithLineSegment( + ConstPolygonRef poly, + const Point2LL& transformed_startPoint, + const Point2LL& transformed_endPoint, + PointMatrix transformation_matrix) { - Point p0 = transformation_matrix.apply(poly.back()); - for (Point p1_ : poly) + Point2LL p0 = transformation_matrix.apply(poly.back()); + for (Point2LL p1_ : poly) { - Point p1 = transformation_matrix.apply(p1_); + Point2LL p1 = transformation_matrix.apply(p1_); if (LinearAlg2D::lineSegmentsCollide(transformed_startPoint, transformed_endPoint, p0, p1)) { return true; @@ -1281,18 +1285,22 @@ bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Po return false; } -bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point& startPoint, const Point& endPoint) +bool PolygonUtils::polygonCollidesWithLineSegment(ConstPolygonRef poly, const Point2LL& startPoint, const Point2LL& endPoint) { - Point diff = endPoint - startPoint; + Point2LL diff = endPoint - startPoint; PointMatrix transformation_matrix = PointMatrix(diff); - Point transformed_startPoint = transformation_matrix.apply(startPoint); - Point transformed_endPoint = transformation_matrix.apply(endPoint); + Point2LL transformed_startPoint = transformation_matrix.apply(startPoint); + Point2LL transformed_endPoint = transformation_matrix.apply(endPoint); return PolygonUtils::polygonCollidesWithLineSegment(poly, transformed_startPoint, transformed_endPoint, transformation_matrix); } -bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const Point& transformed_startPoint, const Point& transformed_endPoint, PointMatrix transformation_matrix) +bool PolygonUtils::polygonCollidesWithLineSegment( + const Polygons& polys, + const Point2LL& transformed_startPoint, + const Point2LL& transformed_endPoint, + PointMatrix transformation_matrix) { for (ConstPolygonRef poly : polys) { @@ -1310,17 +1318,17 @@ bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const P } -bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const Point& startPoint, const Point& endPoint) +bool PolygonUtils::polygonCollidesWithLineSegment(const Polygons& polys, const Point2LL& startPoint, const Point2LL& endPoint) { if (endPoint == startPoint) { return false; // Zero-length line segments never collide. } - Point diff = endPoint - startPoint; + Point2LL diff = endPoint - startPoint; PointMatrix transformation_matrix = PointMatrix(diff); - Point transformed_startPoint = transformation_matrix.apply(startPoint); - Point transformed_endPoint = transformation_matrix.apply(endPoint); + Point2LL transformed_startPoint = transformation_matrix.apply(startPoint); + Point2LL transformed_endPoint = transformation_matrix.apply(endPoint); return polygonCollidesWithLineSegment(polys, transformed_startPoint, transformed_endPoint, transformation_matrix); } @@ -1338,8 +1346,8 @@ bool PolygonUtils::polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, con // Heuristic check if their AABBs are near first. AABB inner_aabb(inner_poly); AABB outer_aabb(outer_poly); - inner_aabb.max_ += Point(max_gap, max_gap); // Expand one of them by way of a "distance" by checking intersection with the expanded rectangle. - inner_aabb.min_ -= Point(max_gap, max_gap); + inner_aabb.max_ += Point2LL(max_gap, max_gap); // Expand one of them by way of a "distance" by checking intersection with the expanded rectangle. + inner_aabb.min_ -= Point2LL(max_gap, max_gap); if (! inner_aabb.hit(outer_aabb)) { return false; @@ -1350,9 +1358,9 @@ bool PolygonUtils::polygonOutlinesAdjacent(const ConstPolygonRef inner_poly, con const unsigned outer_poly_size = outer_poly.size(); for (unsigned line_index = 0; line_index < outer_poly_size; ++line_index) { - const Point lp0 = outer_poly[line_index]; - const Point lp1 = outer_poly[(line_index + 1) % outer_poly_size]; - for (Point inner_poly_point : inner_poly) + const Point2LL lp0 = outer_poly[line_index]; + const Point2LL lp1 = outer_poly[(line_index + 1) % outer_poly_size]; + for (Point2LL inner_poly_point : inner_poly) { if (LinearAlg2D::getDist2FromLineSegment(lp0, inner_poly_point, lp1) < max_gap2) { @@ -1391,7 +1399,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg { for (const ConstPolygonRef& polygon_a : poly_a) { - for (Point point : polygon_a) + for (Point2LL point : polygon_a) { if (! poly_b.inside(point, borders_allowed)) { @@ -1401,7 +1409,7 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg } for (const ConstPolygonRef& polygon_b : poly_b) { - for (Point point : polygon_b) + for (Point2LL point : polygon_b) { if (! poly_a.inside(point, borders_allowed)) { @@ -1417,12 +1425,12 @@ double PolygonUtils::relativeHammingDistance(const Polygons& poly_a, const Polyg return hamming_distance / total_area; } -Polygon PolygonUtils::makeCircle(const Point mid, const coord_t radius, const AngleRadians a_step) +Polygon PolygonUtils::makeCircle(const Point2LL mid, const coord_t radius, const AngleRadians a_step) { Polygon circle; for (double a = 0; a < 2 * std::numbers::pi; a += a_step) { - circle.emplace_back(mid + Point(radius * cos(a), radius * sin(a))); + circle.emplace_back(mid + Point2LL(radius * cos(a), radius * sin(a))); } return circle; } @@ -1438,20 +1446,20 @@ Polygons PolygonUtils::connect(const Polygons& input) for (size_t hole_idx = 1; hole_idx < part.size(); hole_idx++) { PolygonRef hole = part[hole_idx]; - Point hole_point = hole[0]; + Point2LL hole_point = hole[0]; hole.add(hole_point); // find where the scanline passes the Y size_t best_segment_to_idx = 0; coord_t best_dist = std::numeric_limits::max(); - Point best_intersection_point = outline.back(); + Point2LL best_intersection_point = outline.back(); - Point prev = outline.back(); + Point2LL prev = outline.back(); for (size_t point_idx = 0; point_idx < outline.size(); point_idx++) { - Point here = outline[point_idx]; + Point2LL here = outline[point_idx]; if (here.Y > hole_point.Y && prev.Y <= hole_point.Y && here.Y != prev.Y) { - Point intersection_point = prev + (here - prev) * (hole_point.Y - prev.Y) / (here.Y - prev.Y); + Point2LL intersection_point = prev + (here - prev) * (hole_point.Y - prev.Y) / (here.Y - prev.Y); coord_t dist = hole_point.X - intersection_point.X; if (dist > 0 && dist < best_dist) { @@ -1496,7 +1504,7 @@ void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) const size_t pathlen = thiss[poly_idx].size(); for (size_t point_idx = 0; point_idx < pathlen; ++point_idx) { - Point& pt = thiss[poly_idx][point_idx]; + Point2LL& pt = thiss[poly_idx][point_idx]; for (const auto& line : query_grid->getNearby(pt, epsilon * 2)) { const size_t line_next_idx = (line.point_idx_ + 1) % thiss[line.poly_idx_].size(); @@ -1505,13 +1513,13 @@ void PolygonUtils::fixSelfIntersections(const coord_t epsilon, Polygons& thiss) continue; } - const Point& a = thiss[line.poly_idx_][line.point_idx_]; - const Point& b = thiss[line.poly_idx_][line_next_idx]; + const Point2LL& a = thiss[line.poly_idx_][line.point_idx_]; + const Point2LL& b = thiss[line.poly_idx_][line_next_idx]; if (half_epsilon_sqrd >= vSize2(pt - LinearAlg2D::getClosestOnLineSegment(pt, a, b))) { - const Point& other = thiss[poly_idx][(point_idx + 1) % pathlen]; - const Point vec = LinearAlg2D::pointIsLeftOfLine(other, a, b) > 0 ? b - a : a - b; + const Point2LL& other = thiss[poly_idx][(point_idx + 1) % pathlen]; + const Point2LL vec = LinearAlg2D::pointIsLeftOfLine(other, a, b) > 0 ? b - a : a - b; const coord_t len = vSize(vec); pt.X += (-vec.Y * move_dist) / len; pt.Y += (vec.X * move_dist) / len; @@ -1562,7 +1570,7 @@ Polygons PolygonUtils::clipPolygonWithAABB(const Polygons& src, const AABB& aabb Bottom = 8 }; - auto sides = [aabb](const Point& p) + auto sides = [aabb](const Point2LL& p) { return int(p.X < aabb.min_.X) * int(Side::Left) + int(p.X > aabb.max_.X) * int(Side::Right) + int(p.Y < aabb.min_.Y) * int(Side::Bottom) + int(p.Y > aabb.max_.Y) * int(Side::Top); diff --git a/tests/ExtruderPlanTest.cpp b/tests/ExtruderPlanTest.cpp index d0d2772979..2aa6f6e59d 100644 --- a/tests/ExtruderPlanTest.cpp +++ b/tests/ExtruderPlanTest.cpp @@ -87,7 +87,7 @@ class ExtruderPlanTestPathCollection .spiralize = no_spiralize, .speed_factor = speed_1 } }); - square.back().points = { Point(0, 0), Point(1000, 0), Point(1000, 1000), Point(0, 1000), Point(0, 0) }; + square.back().points = { Point2LL(0, 0), Point2LL(1000, 0), Point2LL(1000, 1000), Point2LL(0, 1000), Point2LL(0, 0) }; lines.assign({ GCodePath{ .config = extrusion_config, .mesh = mesh, @@ -124,11 +124,11 @@ class ExtruderPlanTestPathCollection .width_factor = width_1, .spiralize = no_spiralize, .speed_factor = speed_1 } }); - lines[0].points = { Point(0, 0), Point(1000, 0) }; - lines[1].points = { Point(1000, 0), Point(1000, 400) }; - lines[2].points = { Point(1000, 400), Point(0, 400) }; - lines[3].points = { Point(0, 400), Point(0, 800) }; - lines[4].points = { Point(0, 800), Point(1000, 800) }; + lines[0].points = { Point2LL(0, 0), Point2LL(1000, 0) }; + lines[1].points = { Point2LL(1000, 0), Point2LL(1000, 400) }; + lines[2].points = { Point2LL(1000, 400), Point2LL(0, 400) }; + lines[3].points = { Point2LL(0, 400), Point2LL(0, 800) }; + lines[4].points = { Point2LL(0, 800), Point2LL(1000, 800) }; constexpr Ratio flow_12 = 1.2_r; constexpr Ratio flow_08 = 0.8_r; @@ -168,11 +168,11 @@ class ExtruderPlanTestPathCollection .width_factor = width_1, .spiralize = no_spiralize, .speed_factor = speed_1 } }); - decreasing_flow[0].points = { Point(0, 0), Point(1000, 0) }; - decreasing_flow[1].points = { Point(1000, 0), Point(1000, 400) }; - decreasing_flow[2].points = { Point(1000, 400), Point(0, 400) }; - decreasing_flow[3].points = { Point(0, 400), Point(0, 800) }; - decreasing_flow[4].points = { Point(0, 800), Point(1000, 800) }; + decreasing_flow[0].points = { Point2LL(0, 0), Point2LL(1000, 0) }; + decreasing_flow[1].points = { Point2LL(1000, 0), Point2LL(1000, 400) }; + decreasing_flow[2].points = { Point2LL(1000, 400), Point2LL(0, 400) }; + decreasing_flow[3].points = { Point2LL(0, 400), Point2LL(0, 800) }; + decreasing_flow[4].points = { Point2LL(0, 800), Point2LL(1000, 800) }; constexpr Ratio speed_12 = 1.2_r; constexpr Ratio speed_08 = 0.8_r; @@ -212,11 +212,11 @@ class ExtruderPlanTestPathCollection .width_factor = width_1, .spiralize = no_spiralize, .speed_factor = speed_04 } }); - decreasing_speed[0].points = { Point(0, 0), Point(1000, 0) }; - decreasing_speed[1].points = { Point(1000, 0), Point(1000, 400) }; - decreasing_speed[2].points = { Point(1000, 400), Point(0, 400) }; - decreasing_speed[3].points = { Point(0, 400), Point(0, 800) }; - decreasing_speed[4].points = { Point(0, 800), Point(1000, 800) }; + decreasing_speed[0].points = { Point2LL(0, 0), Point2LL(1000, 0) }; + decreasing_speed[1].points = { Point2LL(1000, 0), Point2LL(1000, 400) }; + decreasing_speed[2].points = { Point2LL(1000, 400), Point2LL(0, 400) }; + decreasing_speed[3].points = { Point2LL(0, 400), Point2LL(0, 800) }; + decreasing_speed[4].points = { Point2LL(0, 800), Point2LL(1000, 800) }; variable_width.assign({ GCodePath{ .config = extrusion_config, @@ -262,12 +262,12 @@ class ExtruderPlanTestPathCollection .spiralize = no_spiralize, .speed_factor = speed_1 }, }); - variable_width[0].points = { Point(0, 0), Point(1000, 0) }; - variable_width[1].points = { Point(1000, 0), Point(2000, 0) }; - variable_width[2].points = { Point(2000, 0), Point(3000, 0) }; - variable_width[3].points = { Point(3000, 0), Point(4000, 0) }; - variable_width[4].points = { Point(4000, 0), Point(5000, 0) }; - variable_width[5].points = { Point(5000, 0), Point(6000, 0) }; + variable_width[0].points = { Point2LL(0, 0), Point2LL(1000, 0) }; + variable_width[1].points = { Point2LL(1000, 0), Point2LL(2000, 0) }; + variable_width[2].points = { Point2LL(2000, 0), Point2LL(3000, 0) }; + variable_width[3].points = { Point2LL(3000, 0), Point2LL(4000, 0) }; + variable_width[4].points = { Point2LL(4000, 0), Point2LL(5000, 0) }; + variable_width[5].points = { Point2LL(5000, 0), Point2LL(6000, 0) }; } }; // NOLINTEND(misc-non-private-member-variables-in-classes) diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index 5302a02ae4..e43ba1fee9 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -46,7 +46,7 @@ class GCodeExportTest : public testing::Test gcode.output_stream_ = &output; // Since GCodeExport doesn't support copying, we have to reset everything in-place. - gcode.current_position_ = Point3(0, 0, MM2INT(20)); + gcode.current_position_ = Point3LL(0, 0, MM2INT(20)); gcode.layer_nr_ = 0; gcode.current_e_value_ = 0; gcode.current_e_offset_ = 0; @@ -207,7 +207,7 @@ class GriffinHeaderTest : public testing::TestWithParam gcode.output_stream_ = &output; // Since GCodeExport doesn't support copying, we have to reset everything in-place. - gcode.current_position_ = Point3(0, 0, MM2INT(20)); + gcode.current_position_ = Point3LL(0, 0, MM2INT(20)); gcode.layer_nr_ = 0; gcode.current_e_value_ = 0; gcode.current_extruder_ = 0; @@ -328,7 +328,7 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders.back(); train.settings_.add("machine_nozzle_size", "0.4"); } - gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); + gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -348,7 +348,7 @@ TEST_F(GCodeExportTest, HeaderRepRap) const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); + gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -368,7 +368,7 @@ TEST_F(GCodeExportTest, HeaderMarlin) const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); + gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -386,7 +386,7 @@ TEST_F(GCodeExportTest, HeaderMarlinVolumetric) const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3(0, 0, 0), Point3(1000, 1000, 1000)); + gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -544,7 +544,7 @@ TEST_F(GCodeExportTest, WriteZHopEndCustomSpeed) TEST_F(GCodeExportTest, insertWipeScriptSingleMove) { - gcode.currentPosition = Point3(1000, 1000, 1000); + gcode.currentPosition = Point3LL(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); @@ -576,7 +576,7 @@ TEST_F(GCodeExportTest, insertWipeScriptSingleMove) TEST_F(GCodeExportTest, insertWipeScriptMultipleMoves) { - gcode.currentPosition = Point3(1000, 1000, 1000); + gcode.currentPosition = Point3LL(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); @@ -614,7 +614,7 @@ TEST_F(GCodeExportTest, insertWipeScriptMultipleMoves) TEST_F(GCodeExportTest, insertWipeScriptOptionalDelay) { - gcode.currentPosition = Point3(1000, 1000, 1000); + gcode.currentPosition = Point3LL(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); @@ -645,7 +645,7 @@ TEST_F(GCodeExportTest, insertWipeScriptOptionalDelay) TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) { - gcode.currentPosition = Point3(1000, 1000, 1000); + gcode.currentPosition = Point3LL(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.current_e_value = 100; gcode.use_extruder_offset_to_offset_coords = false; @@ -693,7 +693,7 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) TEST_F(GCodeExportTest, insertWipeScriptHopEnable) { - gcode.currentPosition = Point3(1000, 1000, 1000); + gcode.currentPosition = Point3LL(1000, 1000, 1000); gcode.current_layer_z = 1000; gcode.use_extruder_offset_to_offset_coords = false; gcode.currentSpeed = 1.0; diff --git a/tests/LayerPlanTest.cpp b/tests/LayerPlanTest.cpp index f04a22e605..455e59c82a 100644 --- a/tests/LayerPlanTest.cpp +++ b/tests/LayerPlanTest.cpp @@ -207,7 +207,7 @@ class LayerPlanTest : public testing::Test void SetUp() override { - layer_plan.addTravel_simple(Point(0, 0)); // Make sure that it appears as if we have already done things in this layer plan. Just the standard case. + layer_plan.addTravel_simple(Point2LL(0, 0)); // Make sure that it appears as if we have already done things in this layer plan. Just the standard case. } /*! @@ -310,30 +310,30 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterface("false", "false", "off", false, false, AddTravelTestScene::OPEN)) { - around_start_end.add(Point(-100, -100)); - around_start_end.add(Point(500100, -100)); - around_start_end.add(Point(500100, 500100)); - around_start_end.add(Point(-100, 500100)); - - around_start.add(Point(-100, -100)); - around_start.add(Point(100, -100)); - around_start.add(Point(100, 100)); - around_start.add(Point(-100, 100)); - - around_end.add(Point(249900, 249900)); - around_end.add(Point(250100, 249900)); - around_end.add(Point(250100, 250100)); - around_end.add(Point(249900, 249900)); - - between.add(Point(250000, 240000)); - between.add(Point(260000, 240000)); - between.add(Point(260000, 300000)); - between.add(Point(250000, 300000)); - - between_hole.add(Point(250000, 240000)); - between_hole.add(Point(250000, 300000)); - between_hole.add(Point(260000, 300000)); - between_hole.add(Point(260000, 240000)); + around_start_end.add(Point2LL(-100, -100)); + around_start_end.add(Point2LL(500100, -100)); + around_start_end.add(Point2LL(500100, 500100)); + around_start_end.add(Point2LL(-100, 500100)); + + around_start.add(Point2LL(-100, -100)); + around_start.add(Point2LL(100, -100)); + around_start.add(Point2LL(100, 100)); + around_start.add(Point2LL(-100, 100)); + + around_end.add(Point2LL(249900, 249900)); + around_end.add(Point2LL(250100, 249900)); + around_end.add(Point2LL(250100, 250100)); + around_end.add(Point2LL(249900, 249900)); + + between.add(Point2LL(250000, 240000)); + between.add(Point2LL(260000, 240000)); + between.add(Point2LL(260000, 300000)); + between.add(Point2LL(250000, 300000)); + + between_hole.add(Point2LL(250000, 240000)); + between_hole.add(Point2LL(250000, 300000)); + between_hole.add(Point2LL(260000, 300000)); + between_hole.add(Point2LL(260000, 240000)); } /*! @@ -401,7 +401,7 @@ class AddTravelTest : public LayerPlanTest, public testing::WithParamInterface& path) +inline Point2LL startVertex(const PathOrdering& path) { return (*path.vertices_)[path.start_vertex_]; } -inline Point endVertex(const PathOrdering& path) +inline Point2LL endVertex(const PathOrdering& path) { return (*path.vertices_)[path.vertices_->size() - (1 + path.start_vertex_)]; } -coord_t projectPathAlongAxis(const PathOrdering& path, const Point& vector) +coord_t projectPathAlongAxis(const PathOrdering& path, const Point2LL& vector) { return dot(startVertex(path), vector); } -coord_t projectEndAlongAxis(const PathOrdering& path, const Point& vector) +coord_t projectEndAlongAxis(const PathOrdering& path, const Point2LL& vector) { return dot(endVertex(path), vector); } @@ -139,11 +139,11 @@ TEST_P(PathOrderMonotonicTest, SectionsTest) Polygons polylines; ASSERT_TRUE(getInfillLines(filename, angle_radians, polylines)) << "Input test-file could not be read, check setup."; - const Point& pt_r = polylines.begin()->at(0); - const Point& pt_s = polylines.begin()->at(1); + const Point2LL& pt_r = polylines.begin()->at(0); + const Point2LL& pt_s = polylines.begin()->at(1); const double angle_from_first_line = std::atan2(pt_s.Y - pt_r.Y, pt_s.X - pt_r.X) + 0.5 * std::numbers::pi; - const Point monotonic_axis(static_cast(std::cos(angle_from_first_line)) * 1000, static_cast(std::sin(angle_from_first_line)) * 1000); - const Point perpendicular_axis{ turn90CCW(monotonic_axis) }; + const Point2LL monotonic_axis(static_cast(std::cos(angle_from_first_line)) * 1000, static_cast(std::sin(angle_from_first_line)) * 1000); + const Point2LL perpendicular_axis{ turn90CCW(monotonic_axis) }; constexpr coord_t max_adjacent_distance = line_distance + 1; PathOrderMonotonic object_under_test(angle_from_first_line, max_adjacent_distance, monotonic_axis * -1000); diff --git a/tests/PathOrderOptimizerTest.cpp b/tests/PathOrderOptimizerTest.cpp index 4c8da0924c..3b895e1360 100644 --- a/tests/PathOrderOptimizerTest.cpp +++ b/tests/PathOrderOptimizerTest.cpp @@ -21,18 +21,18 @@ class PathOrderOptimizerTest : public testing::Test */ Polygon triangle; - PathOrderOptimizerTest() : optimizer(Point(0, 0)) + PathOrderOptimizerTest() : optimizer(Point2LL(0, 0)) { } void SetUp() override { - optimizer = PathOrderOptimizer(Point(0, 0)); + optimizer = PathOrderOptimizer(Point2LL(0, 0)); triangle.clear(); - triangle.add(Point(0, 0)); - triangle.add(Point(50, 0)); - triangle.add(Point(25, 50)); + triangle.add(Point2LL(0, 0)); + triangle.add(Point2LL(50, 0)); + triangle.add(Point2LL(25, 50)); } }; // NOLINTEND(misc-non-private-member-variables-in-classes) @@ -53,11 +53,11 @@ TEST_F(PathOrderOptimizerTest, OptimizeWhileEmpty) TEST_F(PathOrderOptimizerTest, ThreeTrianglesShortestOrder) { Polygon near = triangle; // Copy, then translate. - near.translate(Point(100, 100)); + near.translate(Point2LL(100, 100)); Polygon middle = triangle; - middle.translate(Point(500, 500)); + middle.translate(Point2LL(500, 500)); Polygon far = triangle; - far.translate(Point(1000, 1000)); + far.translate(Point2LL(1000, 1000)); // Add them out of order so that it's clear that the optimization changes the order. optimizer.addPolygon(middle); @@ -66,9 +66,9 @@ TEST_F(PathOrderOptimizerTest, ThreeTrianglesShortestOrder) optimizer.optimize(); - EXPECT_EQ(optimizer.paths[0].vertices->front(), Point(100, 100)) << "Nearest triangle first."; - EXPECT_EQ(optimizer.paths[1].vertices->front(), Point(500, 500)) << "Middle triangle second."; - EXPECT_EQ(optimizer.paths[2].vertices->front(), Point(1000, 1000)) << "Far triangle last."; + EXPECT_EQ(optimizer.paths[0].vertices->front(), Point2LL(100, 100)) << "Nearest triangle first."; + EXPECT_EQ(optimizer.paths[1].vertices->front(), Point2LL(500, 500)) << "Middle triangle second."; + EXPECT_EQ(optimizer.paths[2].vertices->front(), Point2LL(1000, 1000)) << "Far triangle last."; } } // namespace cura diff --git a/tests/arcus/ArcusCommunicationTest.cpp b/tests/arcus/ArcusCommunicationTest.cpp index 6f5692fec6..7c1036166e 100644 --- a/tests/arcus/ArcusCommunicationTest.cpp +++ b/tests/arcus/ArcusCommunicationTest.cpp @@ -62,7 +62,7 @@ class ArcusCommunicationTest : public testing::Test for (double a = 0; a < 1.0; a += .05) { - test_circle.add(Point(2050, 2050) + Point(std::cos(a * 2 * std::numbers::pi) * 500, std::sin(a * 2 * std::numbers::pi) * 500)); + test_circle.add(Point2LL(2050, 2050) + Point2LL(std::cos(a * 2 * std::numbers::pi) * 500, std::sin(a * 2 * std::numbers::pi) * 500)); } test_shapes.add(test_circle); diff --git a/tests/utils/AABB3DTest.cpp b/tests/utils/AABB3DTest.cpp index 7bfb51d7db..711e20849c 100644 --- a/tests/utils/AABB3DTest.cpp +++ b/tests/utils/AABB3DTest.cpp @@ -13,7 +13,7 @@ namespace cura { inline AABB3D toBox(const coord_t& x, const coord_t& y, const coord_t& z) { - const Point3 pt(x, y, z); + const Point3LL pt(x, y, z); return { pt, pt }; } @@ -24,8 +24,8 @@ TEST(AABB3DTest, TestConstructEmpty) EXPECT_FALSE(empty_box.hit(toBox(0, 0, 0))) << "Empty box shouldn't contain anything."; EXPECT_FALSE(empty_box.hit(empty_box)) << "Empty boxes shouldn't intersect."; - empty_box.include(Point3(-10, -5, -2)); - empty_box.include(Point3(5, 10, 2)); + empty_box.include(Point3LL(-10, -5, -2)); + empty_box.include(Point3LL(5, 10, 2)); EXPECT_TRUE(empty_box.hit(toBox(0, 0, 0))) << "The previously empty box should now contain this point."; EXPECT_FALSE(empty_box.hit(toBox(11, 5, 0))) << "The previously empty box should now still not contain this point."; @@ -33,7 +33,7 @@ TEST(AABB3DTest, TestConstructEmpty) TEST(AABB3DTest, TestConstructPoint) { - AABB3D point_box(Point3(-10, -5, -2), Point3(5, 10, 2)); + AABB3D point_box(Point3LL(-10, -5, -2), Point3LL(5, 10, 2)); EXPECT_TRUE(point_box.hit(toBox(0, 0, 0))) << "Box constructed from points around the origin should contain it."; EXPECT_FALSE(point_box.hit(toBox(11, 5, 0))) << "The box shouldn't contain a point outside of it."; @@ -41,13 +41,13 @@ TEST(AABB3DTest, TestConstructPoint) TEST(AABB3DTest, TestConstructInverse) { - AABB3D inverse_box(Point3(5, 10, 2), Point3(-10, -5, -2)); + AABB3D inverse_box(Point3LL(5, 10, 2), Point3LL(-10, -5, -2)); EXPECT_FALSE(inverse_box.hit(toBox(0, 0, 0))) << "'Inverse' box shouldn't contain anything."; EXPECT_FALSE(inverse_box.hit(inverse_box)) << "'Inverse' boxes shouldn't intersect."; - inverse_box.include(Point3(-5, -2, -1)); - inverse_box.include(Point3(2, 5, 1)); + inverse_box.include(Point3LL(-5, -2, -1)); + inverse_box.include(Point3LL(2, 5, 1)); EXPECT_TRUE(inverse_box.hit(toBox(0, 0, 0))) << "The previously 'inverse' box should now contain this point."; EXPECT_FALSE(inverse_box.hit(toBox(4, 8, -1))) << "The previously 'inverse' box should now still not contain this point."; @@ -55,9 +55,9 @@ TEST(AABB3DTest, TestConstructInverse) TEST(AABB3DTest, TestHit) { - AABB3D box_a(Point3(-10, -5, -2), Point3(5, 10, 2)); - AABB3D box_b(Point3(4, 9, 0), Point3(12, 12, 12)); - AABB3D box_c(Point3(11, 11, 11), Point3(14, 14, 14)); + AABB3D box_a(Point3LL(-10, -5, -2), Point3LL(5, 10, 2)); + AABB3D box_b(Point3LL(4, 9, 0), Point3LL(12, 12, 12)); + AABB3D box_c(Point3LL(11, 11, 11), Point3LL(14, 14, 14)); EXPECT_TRUE(box_a.hit(box_a)) << "Box should overlap itself."; @@ -69,8 +69,8 @@ TEST(AABB3DTest, TestHit) EXPECT_FALSE(box_a.hit(box_c)) << "These boxes should not overlap (case AC)."; EXPECT_FALSE(box_c.hit(box_a)) << "These boxes should not overlap (case CA)."; - AABB3D box_d(Point3(3, 10, 2), Point3(12, 12, 12)); - AABB3D box_e(Point3(5, 10, 2), Point3(12, 12, 12)); + AABB3D box_d(Point3LL(3, 10, 2), Point3LL(12, 12, 12)); + AABB3D box_e(Point3LL(5, 10, 2), Point3LL(12, 12, 12)); EXPECT_TRUE(box_a.hit(box_d)) << "Overlap-check is inclusive (case AD)."; EXPECT_TRUE(box_d.hit(box_a)) << "Overlap-check is inclusive (case DA)."; @@ -80,25 +80,25 @@ TEST(AABB3DTest, TestHit) TEST(AABB3DTest, TestGetMiddle) { - AABB3D box_a(Point3(-10, -6, -5), Point3(6, 10, 3)); - AABB3D box_b(Point3(4, 10, 2), Point3(12, 12, 12)); + AABB3D box_a(Point3LL(-10, -6, -5), Point3LL(6, 10, 3)); + AABB3D box_b(Point3LL(4, 10, 2), Point3LL(12, 12, 12)); - EXPECT_EQ(box_a.getMiddle(), Point3(-2, 2, -1)) << "The middle of the AABB should be this point (case A)."; - EXPECT_EQ(box_b.getMiddle(), Point3(8, 11, 7)) << "The middle of the AABB should be this point (case B)."; + EXPECT_EQ(box_a.getMiddle(), Point3LL(-2, 2, -1)) << "The middle of the AABB should be this point (case A)."; + EXPECT_EQ(box_b.getMiddle(), Point3LL(8, 11, 7)) << "The middle of the AABB should be this point (case B)."; } TEST(AABB3DTest, TestInclude) { - AABB3D box(Point3(2, 2, 2), Point3(5, 10, 3)); + AABB3D box(Point3LL(2, 2, 2), Point3LL(5, 10, 3)); EXPECT_FALSE(box.hit(toBox(1, 1, 1))) << "The unexpanded (via include/point) box should not contain a point in the (future) expanded area."; - box.include(Point3(0, 0, 0)); + box.include(Point3LL(0, 0, 0)); EXPECT_TRUE(box.hit(toBox(1, 1, 1))) << "The expanded (via include/point) box should contain a point in the expanded area."; EXPECT_FALSE(box.hit(toBox(6, 9, -1))) << "The unexpanded (via include/other) box should not contain a point in the (future) expanded area."; - box.include(AABB3D(Point3(7, 9, -2), Point3(8, 10, 0))); + box.include(AABB3D(Point3LL(7, 9, -2), Point3LL(8, 10, 0))); EXPECT_TRUE(box.hit(toBox(6, 9, -1))) << "The expanded (via include/other) box should contain a point in the expanded area."; @@ -106,8 +106,8 @@ TEST(AABB3DTest, TestInclude) EXPECT_TRUE(box.hit(toBox(6, 9, -3))) << "The expanded (via includeZ/scalar) box should contain a point in the expanded area."; - const Point3 a(2, 2, 2); - const Point3 b(5, 10, 15); + const Point3LL a(2, 2, 2); + const Point3LL b(5, 10, 15); AABB3D box2(a, b); AABB3D empty; box2.include(empty); @@ -118,23 +118,23 @@ TEST(AABB3DTest, TestInclude) TEST(AABB3DTest, TestTranslate) { - AABB3D box(Point3(2, 2, 2), Point3(5, 10, 3)); + AABB3D box(Point3LL(2, 2, 2), Point3LL(5, 10, 3)); EXPECT_FALSE(box.hit(toBox(1, 1, 1))) << "The unexpanded (via offset-3D) box should not contain a point in the (future) expanded area."; - box.translate(Point3(-2, -2, -2)); + box.translate(Point3LL(-2, -2, -2)); EXPECT_TRUE(box.hit(toBox(1, 1, 1))) << "The expanded (via offset-3D) box should contain a point in the expanded area."; EXPECT_FALSE(box.hit(toBox(6, 9, -1))) << "The unexpanded (via offset-3D) box should not contain a point in the (future) expanded area."; - box.translate(Point(-2, -2)); + box.translate(Point2LL(-2, -2)); EXPECT_TRUE(box.hit(toBox(-1, -1, 0))) << "The expanded (via offset-2D) box should contain a point in the expanded area."; } TEST(AABB3DTest, TestExpand) { - AABB3D box(Point3(-10, -5, -2), Point3(5, 10, 2)); + AABB3D box(Point3LL(-10, -5, -2), Point3LL(5, 10, 2)); EXPECT_FALSE(box.hit(toBox(6, 11, 3))) << "Before expanding, the box shouldn't contain this point."; @@ -149,12 +149,12 @@ TEST(AABB3DTest, TestExpand) TEST(AABB3DTest, TestFlatten) { - AABB3D box(Point3(-10, -5, -2), Point3(5, 10, 2)); + AABB3D box(Point3LL(-10, -5, -2), Point3LL(5, 10, 2)); AABB flat = box.flatten(); - EXPECT_TRUE(flat.contains(Point(1, 1))) << "The flattened box should contain this point."; - EXPECT_FALSE(flat.contains(Point(-11, 3))) << "The flattened box shouldn't contain this point."; + EXPECT_TRUE(flat.contains(Point2LL(1, 1))) << "The flattened box should contain this point."; + EXPECT_FALSE(flat.contains(Point2LL(-11, 3))) << "The flattened box shouldn't contain this point."; } } // namespace cura // NOLINTEND(*-magic-numbers) diff --git a/tests/utils/AABBTest.cpp b/tests/utils/AABBTest.cpp index e09245e3bb..bb39a91b4f 100644 --- a/tests/utils/AABBTest.cpp +++ b/tests/utils/AABBTest.cpp @@ -13,23 +13,23 @@ TEST(AABBTest, TestConstructEmpty) { AABB empty_box; - EXPECT_FALSE(empty_box.contains(Point(0, 0))) << "Empty box shouldn't contain anything."; + EXPECT_FALSE(empty_box.contains(Point2LL(0, 0))) << "Empty box shouldn't contain anything."; EXPECT_FALSE(empty_box.contains(empty_box.getMiddle())) << "Empty box shouldn't contain anything, even it's own middle."; EXPECT_FALSE(empty_box.hit(empty_box)) << "Empty boxes shouldn't intersect."; - empty_box.include(Point(-10, -5)); - empty_box.include(Point(5, 10)); + empty_box.include(Point2LL(-10, -5)); + empty_box.include(Point2LL(5, 10)); - EXPECT_TRUE(empty_box.contains(Point(0, 0))) << "The previously empty box should now contain this point."; - EXPECT_FALSE(empty_box.contains(Point(11, 5))) << "The previously empty box should now still not contain this point."; + EXPECT_TRUE(empty_box.contains(Point2LL(0, 0))) << "The previously empty box should now contain this point."; + EXPECT_FALSE(empty_box.contains(Point2LL(11, 5))) << "The previously empty box should now still not contain this point."; } TEST(AABBTest, TestConstructPoint) { - AABB point_box(Point(-10, -5), Point(5, 10)); + AABB point_box(Point2LL(-10, -5), Point2LL(5, 10)); - EXPECT_TRUE(point_box.contains(Point(0, 0))) << "Box constructed from points around the origin should contain it."; - EXPECT_FALSE(point_box.contains(Point(11, 5))) << "The box shouldn't contain a point outside of it."; + EXPECT_TRUE(point_box.contains(Point2LL(0, 0))) << "Box constructed from points around the origin should contain it."; + EXPECT_FALSE(point_box.contains(Point2LL(11, 5))) << "The box shouldn't contain a point outside of it."; } TEST(AABBTest, TestConstructPolygons) @@ -37,7 +37,7 @@ TEST(AABBTest, TestConstructPolygons) Polygons empty_polygon; AABB polygons_box_a(empty_polygon); - EXPECT_FALSE(polygons_box_a.contains(Point(0, 0))) << "Box constructed from empty polygon shouldn't contain anything."; + EXPECT_FALSE(polygons_box_a.contains(Point2LL(0, 0))) << "Box constructed from empty polygon shouldn't contain anything."; Polygons polygons; polygons.add(Polygon(ClipperLib::Path({ ClipperLib::IntPoint{ -10, -10 }, ClipperLib::IntPoint{ 10, -10 }, ClipperLib::IntPoint{ -5, -5 }, ClipperLib::IntPoint{ -10, 10 } }))); @@ -46,41 +46,41 @@ TEST(AABBTest, TestConstructPolygons) AABB polygons_box_b(polygons); - EXPECT_TRUE(polygons_box_b.contains(Point(0, 0))) << "Polygon box should contain origin, even though origin is outside of the original polygons."; - EXPECT_TRUE(polygons_box_b.contains(Point(-7, -7))) << "Polygon box should contain point that was inside of the original polygons."; - EXPECT_FALSE(polygons_box_b.contains(Point(12, 12))) << "Polygon box should not contain point outside of the AABB of the polygon."; + EXPECT_TRUE(polygons_box_b.contains(Point2LL(0, 0))) << "Polygon box should contain origin, even though origin is outside of the original polygons."; + EXPECT_TRUE(polygons_box_b.contains(Point2LL(-7, -7))) << "Polygon box should contain point that was inside of the original polygons."; + EXPECT_FALSE(polygons_box_b.contains(Point2LL(12, 12))) << "Polygon box should not contain point outside of the AABB of the polygon."; } TEST(AABBTest, TestConstructInverse) { - AABB inverse_box(Point(5, 10), Point(-10, -5)); + AABB inverse_box(Point2LL(5, 10), Point2LL(-10, -5)); - EXPECT_FALSE(inverse_box.contains(Point(0, 0))) << "'Inverse' box shouldn't contain anything."; + EXPECT_FALSE(inverse_box.contains(Point2LL(0, 0))) << "'Inverse' box shouldn't contain anything."; EXPECT_FALSE(inverse_box.contains(inverse_box.getMiddle())) << "'Inverse' box shouldn't contain anything, even it's own middle."; EXPECT_FALSE(inverse_box.hit(inverse_box)) << "'Inverse' boxes shouldn't intersect."; - inverse_box.include(Point(-5, -2)); - inverse_box.include(Point(2, 5)); + inverse_box.include(Point2LL(-5, -2)); + inverse_box.include(Point2LL(2, 5)); - EXPECT_TRUE(inverse_box.contains(Point(0, 0))) << "The previously 'inverse' box should now contain this point."; - EXPECT_FALSE(inverse_box.contains(Point(4, 8))) << "The previously 'inverse' box should now still not contain this point."; + EXPECT_TRUE(inverse_box.contains(Point2LL(0, 0))) << "The previously 'inverse' box should now contain this point."; + EXPECT_FALSE(inverse_box.contains(Point2LL(4, 8))) << "The previously 'inverse' box should now still not contain this point."; } TEST(AABBTest, TestContains) { - AABB box(Point(-10, -5), Point(5, 10)); + AABB box(Point2LL(-10, -5), Point2LL(5, 10)); - EXPECT_FALSE(box.contains(Point(-16, 16))) << "Box constructed from points shouldn't contain a point outside of the box."; - EXPECT_TRUE(box.contains(Point(3, 10))) << "Box constructed from points should contain a point on its edge."; - EXPECT_TRUE(box.contains(Point(5, 10))) << "Box constructed from points should contain its edge-points."; - EXPECT_TRUE(box.contains(Point(0, 0))) << "Box constructed from points should contain the origin."; + EXPECT_FALSE(box.contains(Point2LL(-16, 16))) << "Box constructed from points shouldn't contain a point outside of the box."; + EXPECT_TRUE(box.contains(Point2LL(3, 10))) << "Box constructed from points should contain a point on its edge."; + EXPECT_TRUE(box.contains(Point2LL(5, 10))) << "Box constructed from points should contain its edge-points."; + EXPECT_TRUE(box.contains(Point2LL(0, 0))) << "Box constructed from points should contain the origin."; } TEST(AABBTest, TestHit) { - AABB box_a(Point(-10, -5), Point(5, 10)); - AABB box_b(Point(4, 9), Point(12, 12)); - AABB box_c(Point(11, 11), Point(14, 14)); + AABB box_a(Point2LL(-10, -5), Point2LL(5, 10)); + AABB box_b(Point2LL(4, 9), Point2LL(12, 12)); + AABB box_c(Point2LL(11, 11), Point2LL(14, 14)); EXPECT_TRUE(box_a.hit(box_a)) << "Box should overlap itself."; @@ -92,8 +92,8 @@ TEST(AABBTest, TestHit) EXPECT_FALSE(box_a.hit(box_c)) << "These boxes should not overlap (case AC)."; EXPECT_FALSE(box_c.hit(box_a)) << "These boxes should not overlap (case CA)."; - AABB box_d(Point(3, 10), Point(12, 12)); - AABB box_e(Point(5, 10), Point(12, 12)); + AABB box_d(Point2LL(3, 10), Point2LL(12, 12)); + AABB box_e(Point2LL(5, 10), Point2LL(12, 12)); EXPECT_TRUE(box_a.hit(box_d)) << "Overlap-check is inclusive (case AD)."; EXPECT_TRUE(box_d.hit(box_a)) << "Overlap-check is inclusive (case DA)."; @@ -103,30 +103,30 @@ TEST(AABBTest, TestHit) TEST(AABBTest, TestGetMiddle) { - AABB box_a(Point(-10, -6), Point(6, 10)); - AABB box_b(Point(4, 10), Point(12, 12)); + AABB box_a(Point2LL(-10, -6), Point2LL(6, 10)); + AABB box_b(Point2LL(4, 10), Point2LL(12, 12)); - EXPECT_EQ(box_a.getMiddle(), Point(-2, 2)) << "The middle of the AABB should be this point (case A)."; - EXPECT_EQ(box_b.getMiddle(), Point(8, 11)) << "The middle of the AABB should be this point (case B)."; + EXPECT_EQ(box_a.getMiddle(), Point2LL(-2, 2)) << "The middle of the AABB should be this point (case A)."; + EXPECT_EQ(box_b.getMiddle(), Point2LL(8, 11)) << "The middle of the AABB should be this point (case B)."; } TEST(AABBTest, TestInclude) { - AABB box(Point(2, 2), Point(5, 10)); + AABB box(Point2LL(2, 2), Point2LL(5, 10)); - EXPECT_FALSE(box.contains(Point(1, 1))) << "The unexpanded (via include/point) box should not contain a point in the (future) expanded area."; + EXPECT_FALSE(box.contains(Point2LL(1, 1))) << "The unexpanded (via include/point) box should not contain a point in the (future) expanded area."; - box.include(Point(0, 0)); + box.include(Point2LL(0, 0)); - EXPECT_TRUE(box.contains(Point(1, 1))) << "The expanded (via include/point) box should contain a point in the expanded area."; - EXPECT_FALSE(box.contains(Point(6, 9))) << "The unexpanded (via include/other) box should not contain a point in the (future) expanded area."; + EXPECT_TRUE(box.contains(Point2LL(1, 1))) << "The expanded (via include/point) box should contain a point in the expanded area."; + EXPECT_FALSE(box.contains(Point2LL(6, 9))) << "The unexpanded (via include/other) box should not contain a point in the (future) expanded area."; - box.include(AABB(Point(7, 9), Point(8, 10))); + box.include(AABB(Point2LL(7, 9), Point2LL(8, 10))); - EXPECT_TRUE(box.contains(Point(6, 9))) << "The expanded (via include/other) box should contain a point in the expanded area."; + EXPECT_TRUE(box.contains(Point2LL(6, 9))) << "The expanded (via include/other) box should contain a point in the expanded area."; - const Point a(2, 2); - const Point b(5, 10); + const Point2LL a(2, 2); + const Point2LL b(5, 10); AABB box2(a, b); AABB empty; box2.include(empty); @@ -137,22 +137,22 @@ TEST(AABBTest, TestInclude) TEST(AABBTest, TestExpand) { - AABB box(Point(-10, -5), Point(5, 10)); + AABB box(Point2LL(-10, -5), Point2LL(5, 10)); - EXPECT_FALSE(box.contains(Point(6, 11))) << "Before expanding, the box shouldn't contain this point."; + EXPECT_FALSE(box.contains(Point2LL(6, 11))) << "Before expanding, the box shouldn't contain this point."; box.expand(2); - EXPECT_TRUE(box.contains(Point(6, 11))) << "After expanding, the box should contain this point."; + EXPECT_TRUE(box.contains(Point2LL(6, 11))) << "After expanding, the box should contain this point."; box.expand(-2); - EXPECT_FALSE(box.contains(Point(6, 11))) << "After shrinking, the box shouldn't contain this point anymore."; + EXPECT_FALSE(box.contains(Point2LL(6, 11))) << "After shrinking, the box shouldn't contain this point anymore."; } TEST(AABBTest, TestToPolygon) { - AABB box(Point(-10, -5), Point(5, 10)); + AABB box(Point2LL(-10, -5), Point2LL(5, 10)); Polygon polygon = box.toPolygon(); diff --git a/tests/utils/IntPointTest.cpp b/tests/utils/IntPointTest.cpp index ee2f2bbeef..1332e1b8db 100644 --- a/tests/utils/IntPointTest.cpp +++ b/tests/utils/IntPointTest.cpp @@ -1,7 +1,7 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include // NOLINTBEGIN(*-magic-numbers) @@ -11,21 +11,21 @@ TEST(IntPointTest, TestRotationMatrix) { PointMatrix rot2d(90); Point3Matrix rot_homogeneous(rot2d); - Point a(20, 10); - Point b(30, 20); - Point translated = Point3Matrix::translate(-a).apply(b); - Point rotated = rot_homogeneous.apply(translated); - Point rotated_in_place = Point3Matrix::translate(a).apply(rotated); + Point2LL a(20, 10); + Point2LL b(30, 20); + Point2LL translated = Point3Matrix::translate(-a).apply(b); + Point2LL rotated = rot_homogeneous.apply(translated); + Point2LL rotated_in_place = Point3Matrix::translate(a).apply(rotated); Point3Matrix all_in_one = Point3Matrix::translate(a).compose(rot_homogeneous).compose(Point3Matrix::translate(-a)); - Point rotated_in_place_2 = all_in_one.apply(b); + Point2LL rotated_in_place_2 = all_in_one.apply(b); ASSERT_EQ(rotated_in_place, rotated_in_place_2) << "Matrix composition with translate and rotate failed."; } TEST(IntPointTest, TestSize) { - ASSERT_EQ(sizeof(Point::X), sizeof(coord_t)); + ASSERT_EQ(sizeof(Point2LL::X), sizeof(coord_t)); ASSERT_LE(sizeof(coord_t), sizeof(int64_t)); } diff --git a/tests/utils/LinearAlg2DTest.cpp b/tests/utils/LinearAlg2DTest.cpp index 5d471dff36..4593c4c57c 100644 --- a/tests/utils/LinearAlg2DTest.cpp +++ b/tests/utils/LinearAlg2DTest.cpp @@ -14,13 +14,13 @@ namespace cura */ struct GetDist2FromLineSegmentParameters { - Point line_start; - Point line_end; - Point point; + Point2LL line_start; + Point2LL line_end; + Point2LL point; coord_t actual_distance2; int16_t actual_is_beyond; - GetDist2FromLineSegmentParameters(Point line_start, Point line_end, Point point, coord_t actual_distance2, int16_t actual_is_beyond) + GetDist2FromLineSegmentParameters(Point2LL line_start, Point2LL line_end, Point2LL point, coord_t actual_distance2, int16_t actual_is_beyond) : line_start(line_start) , line_end(line_end) , point(point) @@ -46,9 +46,9 @@ class GetDist2FromLineSegmentTest : public testing::TestWithParam TEST_P(GetAngleTest, GetAngle) { const GetAngleParameters parameters = GetParam(); - const Point a = parameters.a; - const Point b = parameters.b; - const Point c = parameters.c; + const Point2LL a = parameters.a; + const Point2LL b = parameters.b; + const Point2LL c = parameters.c; const double angle_degrees = parameters.angle; const double angle = angle_degrees * std::numbers::pi / 180.0; @@ -140,37 +140,37 @@ TEST_P(GetAngleTest, GetAngle) INSTANTIATE_TEST_CASE_P(GetAngleInstantiation, GetAngleTest, - testing::Values(GetAngleParameters(Point(-100, 0), Point(0, 0), Point(100, 1), 180), // Almost straight line. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(100, 0), 180), // Completely straight line. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(-100, -100), 315), //-45 degrees. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(0, -100), 270), //-90 degrees. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(0, 100), 90), // Straight angle. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(-100, 1), 0), // Almost straight back. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(-100, -1), 360), // Almost straight back but the other way around. - GetAngleParameters(Point(-100, 0), Point(0, 0), Point(-100, 0), 0) // Completely straight back. + testing::Values(GetAngleParameters(Point2LL(-100, 0)Point2LLnt2LL(0, 0), Point2LL(100, Point2LL80), // Almost straight line. + GetAngleParametersPoint2LLt(-100, 0Point2LLt2LLnt(0, 0)Point2LLnt(100Point2LL 180), // Completely straight line. + Point2LLgleParameters(Point(-100, Point2LLt2LLint(0, 0Point2LLint(-100Point2LL0), 315), //-45 degrees. + GetAngleParameters(Point(-100Point2LLnt2LLoint(0, Point2LLoint(Point2LL00), 270)Point2LL90 degrees. + GetAngleParameters(Point(-Point2LLint2LL Point(0Point2LL Point2LL(0, 100), 90Point2LL Straight angle. + GetAngleParameters(Point(Point2LLt2LL0), Point(Point2LL, Point2LL(-100, 1), Point2LL/ Almost straight back. + GetAngleParameters(PointPoint2LLt2LL 0), PointPoint2LL), Point2LL(-100, -1)Point2LL), // Almost straight back but the other way around. + GetAngleParameters(Point2LLPoint2LL, 0), Point2LL(0, 0), Point(-100, 0), 0) // Completely straight back. )); TEST(GetAngleTest, GetAngleLeftAABTest) { - LinearAlg2D::getAngleLeft(Point(0, 0), Point(0, 0), Point(100, 0)); // Any output is allowed. Just don't crash! + LinearAlg2D::getAngleLeft(Point2LL(0, 0), Point2LL(0, 0), Point2LL(100, 0)); // Any output is allowed. Just don't crash! } TEST(GetAngleTest, GetAngleLeftABBTest) { - LinearAlg2D::getAngleLeft(Point(0, 0), Point(100, 0), Point(100, 100)); // Any output is allowed. Just don't crash! + LinearAlg2D::getAngleLeft(Point2LL(0, 0), Point2LL(100, 0), Point2LL(100, 100)); // Any output is allowed. Just don't crash! } TEST(GetAngleTest, GetAngleLeftAAATest) { - LinearAlg2D::getAngleLeft(Point(0, 0), Point(0, 0), Point(0, 0)); // Any output is allowed. Just don't crash! + LinearAlg2D::getAngleLeft(Point2LL(0, 0), Point2LL(0, 0), Point2LL(0, 0)); // Any output is allowed. Just don't crash! } TEST(PointIsLeftOfLineTest, LeftOfLine) { constexpr short actual = 1; - const Point p(0, 10); // ^ - const Point a(10, 0); // . | - const Point b(10, 20); // | + const Point2LL p(0, 10); // ^ + const Point2LL a(10, 0); // . | + const Point2LL b(10, 20); // | const coord_t supposed = LinearAlg2D::pointIsLeftOfLine(p, a, b); @@ -182,9 +182,9 @@ TEST(PointIsLeftOfLineTest, LeftOfLine) TEST(PointIsLeftOfLineTest, Sharp) { constexpr short actual = -1; - const Point p(3896, 3975); // ^ - const Point a(1599, 3975); // \ . - const Point b(200, 3996); // \ . + const Point2LL p(3896, 3975); // ^ + const Point2LL a(1599, 3975); // \ . + const Point2LL b(200, 3996); // \ . const coord_t supposed = LinearAlg2D::pointIsLeftOfLine(p, a, b); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 @@ -195,14 +195,14 @@ TEST(PointIsLeftOfLineTest, Sharp) // NOLINTBEGIN(misc-non-private-member-variables-in-classes) struct GetPointOnLineWithDistParameters { - Point p; - Point a; - Point b; + Point2LL p; + Point2LL a; + Point2LL b; coord_t dist; - Point actual_result; + Point2LL actual_result; bool actual_returned; - GetPointOnLineWithDistParameters(Point p, Point a, Point b, coord_t dist, Point actual_result, bool actual_returned) : p(p), a(a), b(b), dist(dist), actual_result(actual_result), actual_returned(actual_returned) + GetPointOnLineWithDistParameters(Point2LL p, Point2LL a, Point2LL b, coord_t dist, Point2LL actual_result, bool actual_returned) : p(p), a(a), b(b), dist(dist), actual_result(actual_result), actual_returned(actual_returned) { } }; @@ -219,14 +219,14 @@ class GetPointOnLineWithDistTest : public testing::TestWithParam TEST_P(RotateAroundTest, RotateAround) { const RotateAroundParameters parameters = GetParam(); - const Point point = parameters.point; - const Point origin = parameters.origin; + const Point2LL point = parameters.point; + const Point2LL origin = parameters.origin; const double angle = parameters.angle; - const Point actual_result = parameters.actual_result; + const Point2LL actual_result = parameters.actual_result; const Point3Matrix mat = LinearAlg2D::rotateAround(origin, angle); - const Point supposed_result = mat.apply(point); + const Point2LL supposed_result = mat.apply(point); ASSERT_LT(vSize(supposed_result - actual_result), 2) << "LinearAlg2D::rotateAround failed: Rotating " << point << " around " << origin << " for " << angle << " degrees resulted in " << supposed_result << " instead of expected " << actual_result << "."; } INSTANTIATE_TEST_SUITE_P(RotateAroundInstantiation, RotateAroundTest, - testing::Values(RotateAroundParameters(Point(25, 30), Point(10, 17), 90, Point(-3, 32)), // 90 degrees rotation. - RotateAroundParameters(Point(25, 30), Point(10, 17), -90, Point(23, 2)), //-90 degrees rotation. - RotateAroundParameters(Point(-67, 14), Point(50, 50), 0, Point(-67, 14)), // No rotation at all. - RotateAroundParameters(Point(-67, 14), Point(50, 50), 12, Point(-57, -9)) // 12 degrees rotation. Actually ends up at [-57, -9.5]! + testing::Values(RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), 90, Point2LL(-3, 32)), // 90 degrees rotation. + RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), -90, Point2LL(23, 2)), //-90 degrees rotation. + RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 0, Point2LL(-67, 14)), // No rotation at all. + RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 12, Point2LL(-57, -9)) // 12 degrees rotation. Actually ends up at [-57, -9.5]! )); class Temp {}; @@ -304,17 +304,17 @@ TEST(Temp, LineDistTests) std::srand(987); for (int z = 0; z < 100; ++z) { - const Point p{ 500000 + (std::rand() % 4000) - 2000, 500000 + (std::rand() % 4000) - 2000 }; + const Point2LL p{ 500000 + (std::rand() % 4000) - 2000, 500000 + (std::rand() % 4000) - 2000 }; const coord_t d = (std::rand() % 2000) - 1000 /2; const double rang = std::rand() / (static_cast(RAND_MAX) / 6.29); - const Point x{ p.X + static_cast(d * std::cos(rang)), p.Y - static_cast(d * std::sin(rang)) }; + const Point2LL x{ p.X + static_cast(d * std::cos(rang)), p.Y - static_cast(d * std::sin(rang)) }; // Use positive lengths here, so line and line-segment should give the same answers. coord_t len = std::rand() % 1000; - const Point a{ x.X + static_cast(len * std::sin(rang)), x.Y + static_cast(len * std::cos(rang)) }; + const Point2LL a{ x.X + static_cast(len * std::sin(rang)), x.Y + static_cast(len * std::cos(rang)) }; len = std::rand() % 1000; - const Point b{ x.X - static_cast(len * std::sin(rang)), x.Y - static_cast(len * std::cos(rang)) }; + const Point2LL b{ x.X - static_cast(len * std::sin(rang)), x.Y - static_cast(len * std::cos(rang)) }; const coord_t abs_d = std::abs(d); ASSERT_NEAR(LinearAlg2D::getDistFromLine(p, a, b), abs_d, 5); diff --git a/tests/utils/MinimumSpanningTreeTest.cpp b/tests/utils/MinimumSpanningTreeTest.cpp index 00b22d16fa..2b4b101fc8 100644 --- a/tests/utils/MinimumSpanningTreeTest.cpp +++ b/tests/utils/MinimumSpanningTreeTest.cpp @@ -9,7 +9,7 @@ // NOLINTBEGIN(*-magic-numbers) namespace cura { -bool has(const Point& pt, const std::vector& list) +bool has(const Point2LL& pt, const std::vector& list) { return std::find(list.begin(), list.end(), pt) != list.end(); } @@ -20,9 +20,9 @@ class MinimumSpanningTreeTest : public ::testing::Test void SetUp() override { pts = { - Point(-3, -4), Point(3, -4), Point(0, -3), Point(0, 0), Point(1, 1), Point(5, 1), Point(-1, 6), Point(0, 5), Point(5, 7), Point(12, 12), Point(12, 13), + Point2LL(-3, -4), Point2LL(3, -4), Point2LL(0, -3), Point2LL(0, 0), Point2LL(1, 1), Point2LL(5, 1), Point2LL(-1, 6), Point2LL(0, 5), Point2LL(5, 7), Point2LL(12, 12), Point2LL(12, 13), }; - std::vector pts_set(pts.begin(), pts.end()); + std::vector pts_set(pts.begin(), pts.end()); p_mst = new MinimumSpanningTree(pts_set); } @@ -32,13 +32,13 @@ class MinimumSpanningTreeTest : public ::testing::Test p_mst = nullptr; } - std::vector pts; + std::vector pts; MinimumSpanningTree* p_mst; // Needs to be a pointer, because SetUp isn't a constructor and the copy function is deleted. }; TEST(SimpleMinimumSpanningTreeTest, TestConstructEmpty) { - std::vector vertices; + std::vector vertices; MinimumSpanningTree tree(vertices); ASSERT_TRUE(tree.leaves().empty()) << "Empty tree should be empty."; @@ -46,26 +46,26 @@ TEST(SimpleMinimumSpanningTreeTest, TestConstructEmpty) TEST(SimpleMinimumSpanningTreeTest, TestConstructOne) { - const Point pt_a(1, 1); - std::vector vertices = { pt_a }; + const Point2LL pt_a(1, 1); + std::vector vertices = { pt_a }; MinimumSpanningTree tree(vertices); ASSERT_FALSE(tree.leaves().empty()) << "Tree with one point shouldn't have no vertices."; - std::vector points = tree.vertices(); + std::vector points = tree.vertices(); EXPECT_EQ(points.size(), 1) << "Tree with one point should have exactly one vertex."; EXPECT_EQ(points[0], pt_a) << "Tree with one point should have that point among its vertices."; } TEST(SimpleMinimumSpanningTreeTest, TestSimpleAdjacent) { - const Point pt_a(1, 1); - const Point pt_b(2, 2); - const Point pt_c(3, 3); - const Point pt_d(4, 4); - std::vector vertices = { pt_a, pt_b, pt_c, pt_d }; + const Point2LL pt_a(1, 1); + const Point2LL pt_b(2, 2); + const Point2LL pt_c(3, 3); + const Point2LL pt_d(4, 4); + std::vector vertices = { pt_a, pt_b, pt_c, pt_d }; MinimumSpanningTree tree(vertices); - std::vector adjacent; + std::vector adjacent; adjacent = tree.adjacentNodes(pt_b); EXPECT_EQ(adjacent.size(), 2) << "2 points should be adjacent to point B (simple case)."; @@ -79,20 +79,20 @@ TEST(SimpleMinimumSpanningTreeTest, TestSimpleAdjacent) EXPECT_TRUE(has(pt_c, adjacent)) << "Point C should be adjacent to Point D (simple case)."; EXPECT_FALSE(has(pt_d, adjacent)) << "Point D should not be adjacent to itself (simple case)."; - adjacent = tree.adjacentNodes(Point(5, 5)); // point E, a non-existent node + adjacent = tree.adjacentNodes(Point2LL(5, 5)); // point E, a non-existent node EXPECT_EQ(adjacent.size(), 0) << "No points should be adjacent to point E."; } TEST(SimpleMinimumSpanningTreeTest, TestSimpleLeaves) { - const Point pt_a(1, 1); - const Point pt_b(5, 2); - const Point pt_c(2, 5); - const Point pt_d(3, 3); - std::vector vertices = { pt_a, pt_b, pt_c, pt_d }; + const Point2LL pt_a(1, 1); + const Point2LL pt_b(5, 2); + const Point2LL pt_c(2, 5); + const Point2LL pt_d(3, 3); + std::vector vertices = { pt_a, pt_b, pt_c, pt_d }; MinimumSpanningTree tree(vertices); - std::vector leaves = tree.leaves(); + std::vector leaves = tree.leaves(); EXPECT_EQ(leaves.size(), 3) << "Three out of four points should be leaves (simple case)."; EXPECT_TRUE(has(pt_a, leaves)) << "Point A should be one of the leaves (simple case)."; EXPECT_TRUE(has(pt_b, leaves)) << "Point B should be one of the leaves (simple case)."; @@ -120,7 +120,7 @@ TEST_F(MinimumSpanningTreeTest, TestLeaves) // constexpr won't work here (yet) on Win. MinimumSpanningTree& mst = *p_mst; - const std::vector leaves = mst.leaves(); + const std::vector leaves = mst.leaves(); const size_t len = pts.size(); for (size_t i_pt = 0; i_pt < len; ++i_pt) diff --git a/tests/utils/PolygonConnectorTest.cpp b/tests/utils/PolygonConnectorTest.cpp index dc7c7b832e..b423d74d31 100644 --- a/tests/utils/PolygonConnectorTest.cpp +++ b/tests/utils/PolygonConnectorTest.cpp @@ -113,8 +113,8 @@ TEST_F(PolygonConnectorTest, getBridgeClosest) ASSERT_NE(bridge, std::nullopt) << "The two polygons are adjacent and spaced closely enough to bridge along their entire side, even with the slant."; - EXPECT_EQ(bridge->b_.from_point_, Point(1000, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; - EXPECT_EQ(bridge->b_.to_point_, Point(1100, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_EQ(bridge->b_.from_point_, Point2LL(1000, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; + EXPECT_EQ(bridge->b_.to_point_, Point2LL(1100, 200)) << "The closest connection is [1000,200] -> [1100,200]. There is no space to the right of that, so bridge B should be there."; EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.from_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; EXPECT_GT(LinearAlg2D::pointIsLeftOfLine(bridge->a_.to_point_, bridge->b_.from_point_, bridge->b_.to_point_), 0) << "Connection A should be to the left of connection B."; } diff --git a/tests/utils/PolygonTest.cpp b/tests/utils/PolygonTest.cpp index a65298bb89..bdf84466e1 100644 --- a/tests/utils/PolygonTest.cpp +++ b/tests/utils/PolygonTest.cpp @@ -79,7 +79,7 @@ class PolygonTest : public testing::Test } void twoPolygonsAreEqual(Polygons& polygon1, Polygons& polygon2) const { - auto poly_cmp = [](const ClipperLib::Path& a, const ClipperLib::Path& b) { return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), [](const Point& p1, const Point& p2) { return p1 < p2; }); }; + auto poly_cmp = [](const ClipperLib::Path& a, const ClipperLib::Path& b) { return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), [](const Point2LL& p1, const Point2LL& p2) { return p1 < p2; }); }; std::sort(polygon1.begin(), polygon1.end(), poly_cmp); std::sort(polygon2.begin(), polygon2.end(), poly_cmp); @@ -121,7 +121,7 @@ TEST_F(PolygonTest, polygonOffsetBugTest) for (const ConstPolygonRef poly : offsetted) { - for (const Point& p : poly) + for (const Point2LL& p : poly) { ASSERT_TRUE(polys.inside(p)) << "A negative offset should move the point towards the inside!"; } @@ -133,32 +133,32 @@ TEST_F(PolygonTest, isOutsideTest) Polygons test_triangle; test_triangle.add(triangle); - EXPECT_FALSE(test_triangle.inside(Point(0, 100))) << "Left point should be outside the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(100, 100))) << "Middle left point should be outside the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(300, 100))) << "Middle right point should be outside the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(500, 100))) << "Right point should be outside the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(100, 200))) << "Above point should be outside the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(100, -100))) << "Below point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(0, 100))) << "Left point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(100, 100))) << "Middle left point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(300, 100))) << "Middle right point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(500, 100))) << "Right point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(100, 200))) << "Above point should be outside the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(100, -100))) << "Below point should be outside the triangle."; } TEST_F(PolygonTest, isInsideTest) { Polygons test_polys; PolygonRef poly = test_polys.newPoly(); - poly.add(Point(82124, 98235)); - poly.add(Point(83179, 98691)); - poly.add(Point(83434, 98950)); - poly.add(Point(82751, 99026)); - poly.add(Point(82528, 99019)); - poly.add(Point(81605, 98854)); - poly.add(Point(80401, 98686)); - poly.add(Point(79191, 98595)); - poly.add(Point(78191, 98441)); - poly.add(Point(78998, 98299)); - poly.add(Point(79747, 98179)); - poly.add(Point(80960, 98095)); - - EXPECT_TRUE(test_polys.inside(Point(78315, 98440))) << "Point should be inside the polygons!"; + poly.add(Point2LL(82124, 98235)); + poly.add(Point2LL(83179, 98691)); + poly.add(Point2LL(83434, 98950)); + poly.add(Point2LL(82751, 99026)); + poly.add(Point2LL(82528, 99019)); + poly.add(Point2LL(81605, 98854)); + poly.add(Point2LL(80401, 98686)); + poly.add(Point2LL(79191, 98595)); + poly.add(Point2LL(78191, 98441)); + poly.add(Point2LL(78998, 98299)); + poly.add(Point2LL(79747, 98179)); + poly.add(Point2LL(80960, 98095)); + + EXPECT_TRUE(test_polys.inside(Point2LL(78315, 98440))) << "Point should be inside the polygons!"; } TEST_F(PolygonTest, isOnBorderTest) @@ -166,10 +166,10 @@ TEST_F(PolygonTest, isOnBorderTest) Polygons test_triangle; test_triangle.add(triangle); - EXPECT_FALSE(test_triangle.inside(Point(200, 0), false)) << "Point is on the bottom edge of the triangle."; - EXPECT_TRUE(test_triangle.inside(Point(200, 0), true)) << "Point is on the bottom edge of the triangle."; - EXPECT_FALSE(test_triangle.inside(Point(150, 50), false)) << "Point is on a diagonal side of the triangle."; - EXPECT_TRUE(test_triangle.inside(Point(150, 50), true)) << "Point is on a diagonal side of the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(200, 0), false)) << "Point is on the bottom edge of the triangle."; + EXPECT_TRUE(test_triangle.inside(Point2LL(200, 0), true)) << "Point is on the bottom edge of the triangle."; + EXPECT_FALSE(test_triangle.inside(Point2LL(150, 50), false)) << "Point is on a diagonal side of the triangle."; + EXPECT_TRUE(test_triangle.inside(Point2LL(150, 50), true)) << "Point is on a diagonal side of the triangle."; } TEST_F(PolygonTest, DISABLED_isInsideLineTest) // Disabled because this fails due to a bug in Clipper. @@ -177,8 +177,8 @@ TEST_F(PolygonTest, DISABLED_isInsideLineTest) // Disabled because this fails du Polygons polys; polys.add(line); - EXPECT_FALSE(polys.inside(Point(50, 0), false)) << "Should be outside since it is on the border and border is considered outside."; - EXPECT_TRUE(polys.inside(Point(50, 0), true)) << "Should be inside since it is on the border and border is considered inside."; + EXPECT_FALSE(polys.inside(Point2LL(50, 0), false)) << "Should be outside since it is on the border and border is considered outside."; + EXPECT_TRUE(polys.inside(Point2LL(50, 0), true)) << "Should be inside since it is on the border and border is considered inside."; } TEST_F(PolygonTest, splitIntoPartsWithHoleTest) @@ -207,8 +207,8 @@ TEST_F(PolygonTest, differenceClockwiseTest) for (size_t point_index = 0; point_index < outer.size(); point_index++) { const size_t next_index = (point_index + 1) % outer.size(); - const Point point = outer[point_index]; - const Point next = outer[next_index]; + const Point2LL point = outer[point_index]; + const Point2LL next = outer[next_index]; area += (next.X - point.X) * (point.Y + next.Y); } EXPECT_LT(area, 0) << "Outer polygon should be counter-clockwise."; @@ -218,8 +218,8 @@ TEST_F(PolygonTest, differenceClockwiseTest) for (size_t point_index = 0; point_index < inner.size(); point_index++) { const size_t next_index = (point_index + 1) % inner.size(); - const Point point = inner[point_index]; - const Point next = inner[next_index]; + const Point2LL point = inner[point_index]; + const Point2LL next = inner[next_index]; area += (next.X - point.X) * (point.Y + next.Y); } EXPECT_GT(area, 0) << "Inner polygon should be clockwise."; @@ -244,18 +244,18 @@ TEST_F(PolygonTest, convexTestCube) { Polygons d_polygons; PolygonRef d = d_polygons.newPoly(); - d.add(Point(0, 0)); - d.add(Point(10, 0)); - d.add(Point(10, 10)); - d.add(Point(0, 10)); + d.add(Point2LL(0, 0)); + d.add(Point2LL(10, 0)); + d.add(Point2LL(10, 10)); + d.add(Point2LL(0, 10)); d_polygons.makeConvex(); EXPECT_EQ(d.size(), 4); - EXPECT_EQ(d[0], Point(0, 0)); - EXPECT_EQ(d[1], Point(10, 0)); - EXPECT_EQ(d[2], Point(10, 10)); - EXPECT_EQ(d[3], Point(0, 10)); + EXPECT_EQ(d[0], Point2LL(0, 0)); + EXPECT_EQ(d[1], Point2LL(10, 0)); + EXPECT_EQ(d[2], Point2LL(10, 10)); + EXPECT_EQ(d[3], Point2LL(0, 10)); } /* @@ -274,11 +274,11 @@ TEST_F(PolygonTest, convexHullStar) { coord_t x_outer = -std::cos(angle_step * i) * outer_radius; coord_t y_outer = -std::sin(angle_step * i) * outer_radius; - d.add(Point(x_outer, y_outer)); + d.add(Point2LL(x_outer, y_outer)); coord_t x_inner = -std::cos(angle_step * (i + 0.5)) * inner_radius; coord_t y_inner = -std::sin(angle_step * (i + 0.5)) * inner_radius; - d.add(Point(x_inner, y_inner)); + d.add(Point2LL(x_inner, y_inner)); } d_polygons.makeConvex(); @@ -289,7 +289,7 @@ TEST_F(PolygonTest, convexHullStar) double angle = angle_step * i; coord_t x = -std::cos(angle) * outer_radius; coord_t y = -std::sin(angle) * outer_radius; - EXPECT_EQ(d[i], Point(x, y)); + EXPECT_EQ(d[i], Point2LL(x, y)); } } @@ -301,10 +301,10 @@ TEST_F(PolygonTest, convexHullMultipleMinX) { Polygons d_polygons; PolygonRef d = d_polygons.newPoly(); - d.add(Point(0, 0)); - d.add(Point(0, -10)); - d.add(Point(10, 0)); - d.add(Point(0, 10)); + d.add(Point2LL(0, 0)); + d.add(Point2LL(0, -10)); + d.add(Point2LL(10, 0)); + d.add(Point2LL(0, 10)); /* * x\ x\ @@ -327,22 +327,22 @@ TEST_F(PolygonTest, convexTestCubeColinear) { Polygons d_polygons; PolygonRef d = d_polygons.newPoly(); - d.add(Point(0, 0)); - d.add(Point(5, 0)); - d.add(Point(10, 0)); - d.add(Point(10, 5)); - d.add(Point(10, 10)); - d.add(Point(5, 10)); - d.add(Point(0, 10)); - d.add(Point(0, 5)); + d.add(Point2LL(0, 0)); + d.add(Point2LL(5, 0)); + d.add(Point2LL(10, 0)); + d.add(Point2LL(10, 5)); + d.add(Point2LL(10, 10)); + d.add(Point2LL(5, 10)); + d.add(Point2LL(0, 10)); + d.add(Point2LL(0, 5)); d_polygons.makeConvex(); EXPECT_EQ(d.size(), 4); - EXPECT_EQ(d[0], Point(0, 0)); - EXPECT_EQ(d[1], Point(10, 0)); - EXPECT_EQ(d[2], Point(10, 10)); - EXPECT_EQ(d[3], Point(0, 10)); + EXPECT_EQ(d[0], Point2LL(0, 0)); + EXPECT_EQ(d[1], Point2LL(10, 0)); + EXPECT_EQ(d[2], Point2LL(10, 10)); + EXPECT_EQ(d[3], Point2LL(0, 10)); } /* @@ -352,22 +352,22 @@ TEST_F(PolygonTest, convexHullRemoveDuplicatePoints) { Polygons d_polygons; PolygonRef d = d_polygons.newPoly(); - d.add(Point(0, 0)); - d.add(Point(0, 0)); - d.add(Point(10, 0)); - d.add(Point(10, 0)); - d.add(Point(10, 10)); - d.add(Point(10, 10)); - d.add(Point(0, 10)); - d.add(Point(0, 10)); + d.add(Point2LL(0, 0)); + d.add(Point2LL(0, 0)); + d.add(Point2LL(10, 0)); + d.add(Point2LL(10, 0)); + d.add(Point2LL(10, 10)); + d.add(Point2LL(10, 10)); + d.add(Point2LL(0, 10)); + d.add(Point2LL(0, 10)); d_polygons.makeConvex(); EXPECT_EQ(d.size(), 4); - EXPECT_EQ(d[0], Point(0, 0)); - EXPECT_EQ(d[1], Point(10, 0)); - EXPECT_EQ(d[2], Point(10, 10)); - EXPECT_EQ(d[3], Point(0, 10)); + EXPECT_EQ(d[0], Point2LL(0, 0)); + EXPECT_EQ(d[1], Point2LL(10, 0)); + EXPECT_EQ(d[2], Point2LL(10, 10)); + EXPECT_EQ(d[3], Point2LL(0, 10)); } /* @@ -378,7 +378,7 @@ TEST_F(PolygonTest, removeSmallAreas_simple) { // basic set of polygons auto test_square_2 = test_square; - test_square_2.translate(Point(0, 500)); + test_square_2.translate(Point2LL(0, 500)); auto d_polygons = Polygons{}; d_polygons.add(test_square); d_polygons.add(test_square_2); @@ -403,11 +403,11 @@ TEST_F(PolygonTest, removeSmallAreas_small_area) { // make some areas. auto small_area_1 = small_area; // Area = 100 micron^2 = 1e-4 mm^2 - small_area_1.translate(Point(350, 450)); + small_area_1.translate(Point2LL(350, 450)); auto small_area_2 = small_area; - small_area_2.translate(Point(450, 350)); + small_area_2.translate(Point2LL(450, 350)); auto triangle_1 = triangle; // area = 10000 micron^2 = 1e-2 mm^2 - triangle_1.translate(Point(50, 0)); + triangle_1.translate(Point2LL(50, 0)); // add areas to polygons auto d_polygons = Polygons{}; @@ -441,7 +441,7 @@ TEST_F(PolygonTest, removeSmallAreas_hole) // make some areas. auto small_hole_1 = small_area; // Area = 100 micron^2 = 1e-4 mm^2 small_hole_1.reverse(); - small_hole_1.translate(Point(10, 10)); + small_hole_1.translate(Point2LL(10, 10)); // add areas to polygons auto d_polygons = Polygons{}; @@ -472,14 +472,14 @@ TEST_F(PolygonTest, removeSmallAreas_hole_2) auto small_hole_1 = small_area; // Area = 100 micron^2 = 1e-4 mm^2 small_hole_1.reverse(); auto small_hole_2 = small_hole_1; - small_hole_1.translate(Point(10, 10)); - small_hole_2.translate(Point(160, 160)); + small_hole_1.translate(Point2LL(10, 10)); + small_hole_2.translate(Point2LL(160, 160)); auto med_square_1 = Polygon{}; // area = 2500 micron^2 = 2.5e-3 mm^2 - med_square_1.add(Point(0, 0)); - med_square_1.add(Point(50, 0)); - med_square_1.add(Point(50, 50)); - med_square_1.add(Point(0, 50)); - med_square_1.translate(Point(150, 150)); + med_square_1.add(Point2LL(0, 0)); + med_square_1.add(Point2LL(50, 0)); + med_square_1.add(Point2LL(50, 50)); + med_square_1.add(Point2LL(0, 50)); + med_square_1.translate(Point2LL(150, 150)); // add areas to polygons auto d_polygons = Polygons{}; @@ -516,16 +516,16 @@ TEST_F(PolygonTest, removeSmallAreas_complex) { // make some areas. auto small_area_1 = small_area; // Area = 100 micron^2 = 1e-4 mm^2 - small_area_1.translate(Point(350, 450)); + small_area_1.translate(Point2LL(350, 450)); auto small_area_2 = small_area; - small_area_2.translate(Point(450, 350)); + small_area_2.translate(Point2LL(450, 350)); auto small_hole_1 = small_area; // Area = 100 micron^2 = 1e-4 mm^2 small_hole_1.reverse(); auto small_hole_2 = small_hole_1; - small_hole_1.translate(Point(3, 3)); - small_hole_2.translate(Point(22, 50)); + small_hole_1.translate(Point2LL(3, 3)); + small_hole_2.translate(Point2LL(22, 50)); auto triangle_1 = triangle; // area = 10000 micron^2 = 1e-2 mm^2 - triangle_1.translate(Point(600, 0)); + triangle_1.translate(Point2LL(600, 0)); // add areas to polygons auto d_polygons = Polygons{}; diff --git a/tests/utils/PolygonUtilsTest.cpp b/tests/utils/PolygonUtilsTest.cpp index b8b5226910..04f668cab2 100644 --- a/tests/utils/PolygonUtilsTest.cpp +++ b/tests/utils/PolygonUtilsTest.cpp @@ -3,7 +3,7 @@ #include "utils/polygonUtils.h" // The class under test. #include "utils/Coord_t.h" -#include "utils/IntPoint.h" // Creating and testing with points. +#include "utils/Point2LL.h" // Creating and testing with points. #include "utils/polygon.h" // Creating polygons to test with. #include @@ -13,11 +13,11 @@ namespace cura struct MoveInsideParameters { - Point close_to; + Point2LL close_to; coord_t distance; - Point supposed; + Point2LL supposed; - MoveInsideParameters(Point close_to, const coord_t distance, Point supposed) : close_to(close_to), distance(distance), supposed(supposed) + MoveInsideParameters(Point2LL close_to, const coord_t distance, Point2LL supposed) : close_to(close_to), distance(distance), supposed(supposed) { } }; @@ -52,7 +52,7 @@ TEST_P(MoveInsideTest, MoveInside) { const MoveInsideParameters parameters = GetParam(); const ClosestPolygonPoint cpp = PolygonUtils::findClosest(parameters.close_to, test_square); - Point result = PolygonUtils::moveInside(cpp, parameters.distance); + Point2LL result = PolygonUtils::moveInside(cpp, parameters.distance); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << " rather than " << parameters.supposed << ".\n" @@ -65,32 +65,32 @@ TEST_P(MoveInsideTest, MoveInside2) const MoveInsideParameters parameters = GetParam(); Polygons polys; polys.add(test_square); - Point result = parameters.close_to; + Point2LL result = parameters.close_to; PolygonUtils::moveInside2(polys, result, parameters.distance); ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << "rather than " << parameters.supposed << "."; } INSTANTIATE_TEST_SUITE_P(MoveInsideInstantiation, MoveInsideTest, - testing::Values(MoveInsideParameters(Point(110, 110), 28, Point(80, 80)), // Near a corner, moving inside. - MoveInsideParameters(Point(50, 110), 20, Point(50, 80)), // Near an edge, moving inside. - MoveInsideParameters(Point(110, 110), -28, Point(120, 120)), // Near a corner, moving outside. - MoveInsideParameters(Point(50, 110), -20, Point(50, 120)), // Near an edge, moving outside. - MoveInsideParameters(Point(110, 105), 28, Point(80, 80)), // Near a corner but not exactly diagonal. - MoveInsideParameters(Point(100, 50), 20, Point(80, 50)), // Starting on the border. - MoveInsideParameters(Point(80, 50), 20, Point(80, 50)), // Already inside. - MoveInsideParameters(Point(110, 50), 0, Point(100, 50)), // Not keeping any distance from the border. - MoveInsideParameters(Point(110, 50), 100000, Point(-99900, 50)) // A very far move. + testing::Values(MoveInsideParameters(Point2LL(110, 110), 28, Point2LL(80, 80)), // Near a corner, moving inside. + MoveInsideParameters(Point2LL(50, 110), 20, Point2LL(50, 80)), // Near an edge, moving inside. + MoveInsideParameters(Point2LL(110, 110), -28, Point2LL(120, 120)), // Near a corner, moving outside. + MoveInsideParameters(Point2LL(50, 110), -20, Point2LL(50, 120)), // Near an edge, moving outside. + MoveInsideParameters(Point2LL(110, 105), 28, Point2LL(80, 80)), // Near a corner but not exactly diagonal. + MoveInsideParameters(Point2LL(100, 50), 20, Point2LL(80, 50)), // Starting on the border. + MoveInsideParameters(Point2LL(80, 50), 20, Point2LL(80, 50)), // Already inside. + MoveInsideParameters(Point2LL(110, 50), 0, Point2LL(100, 50)), // Not keeping any distance from the border. + MoveInsideParameters(Point2LL(110, 50), 100000, Point2LL(-99900, 50)) // A very far move. )); TEST_F(MoveInsideTest, cornerEdgeTest) { - const Point close_to(110, 100); - const Point supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. - const Point supposed2(72, 100); + const Point2LL close_to(110, 100); + const Point2LL supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. + const Point2LL supposed2(72, 100); constexpr coord_t distance = 28; const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square); - const Point result = PolygonUtils::moveInside(cpp, distance); + const Point2LL result = PolygonUtils::moveInside(cpp, distance); constexpr coord_t maximum_error = 10; @@ -103,14 +103,14 @@ TEST_F(MoveInsideTest, cornerEdgeTest) TEST_F(MoveInsideTest, middleTest) { - const Point close_to(50, 50); - const Point supposed1(80, 50); // Allow four possible values here, since the behaviour for this edge case is not specified. - const Point supposed2(50, 80); - const Point supposed3(20, 50); - const Point supposed4(50, 20); + const Point2LL close_to(50, 50); + const Point2LL supposed1(80, 50); // Allow four possible values here, since the behaviour for this edge case is not specified. + const Point2LL supposed2(50, 80); + const Point2LL supposed3(20, 50); + const Point2LL supposed4(50, 20); constexpr coord_t distance = 20; const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square); - const Point result = PolygonUtils::moveInside(cpp, distance); + const Point2LL result = PolygonUtils::moveInside(cpp, distance); constexpr coord_t maximum_error = 10; @@ -124,12 +124,12 @@ TEST_F(MoveInsideTest, middleTest) TEST_F(MoveInsideTest, middleTestPenalty) { - const Point close_to(50, 50); - const Point supposed(80, 50); - const Point preferred_dir(120, 60); + const Point2LL close_to(50, 50); + const Point2LL supposed(80, 50); + const Point2LL preferred_dir(120, 60); constexpr coord_t distance = 20; - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square, [preferred_dir](Point candidate) { return vSize2(candidate - preferred_dir); }); - const Point result = PolygonUtils::moveInside(cpp, distance); + const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square, [preferred_dir](Point2LL candidate) { return vSize2(candidate - preferred_dir); }); + const Point2LL result = PolygonUtils::moveInside(cpp, distance); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 ASSERT_LE(vSize(result - supposed), 10) << close_to << " moved with " << distance << " micron inside to " << result << " rather than " << supposed << ".\n" @@ -139,13 +139,13 @@ TEST_F(MoveInsideTest, middleTestPenalty) TEST_F(MoveInsideTest, cornerEdgeTest2) { - const Point close_to(110, 100); - const Point supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. - const Point supposed2(72, 100); + const Point2LL close_to(110, 100); + const Point2LL supposed1(80, 80); // Allow two possible values here, since the behaviour for this edge case is not specified. + const Point2LL supposed2(72, 100); constexpr coord_t distance = 28; Polygons polys; polys.add(test_square); - Point result = close_to; + Point2LL result = close_to; PolygonUtils::moveInside2(polys, result, distance); constexpr coord_t maximum_error = 10; @@ -155,8 +155,8 @@ TEST_F(MoveInsideTest, cornerEdgeTest2) TEST_F(MoveInsideTest, pointyCorner) { - const Point from(55, 100); // Above pointy bit. - Point result(from); + const Point2LL from(55, 100); // Above pointy bit. + Point2LL result(from); Polygons inside; inside.add(pointy_square); ClosestPolygonPoint cpp = PolygonUtils::ensureInsideOrOutside(inside, result, 10); @@ -169,8 +169,8 @@ TEST_F(MoveInsideTest, pointyCorner) TEST_F(MoveInsideTest, pointyCornerFail) { // Should fail with normal moveInside2 (and the like). - const Point from(55, 170); // Above pointy bit. - Point result(from); + const Point2LL from(55, 170); // Above pointy bit. + Point2LL result(from); Polygons inside; inside.add(pointy_square); @@ -182,9 +182,9 @@ TEST_F(MoveInsideTest, pointyCornerFail) TEST_F(MoveInsideTest, outsidePointyCorner) { - const Point from(60, 70); // Above pointy bit. - Point result(from); - const Point supposed(50, 70); // 10 below pointy bit. + const Point2LL from(60, 70); // Above pointy bit. + Point2LL result(from); + const Point2LL supposed(50, 70); // 10 below pointy bit. Polygons inside; inside.add(pointy_square); @@ -197,9 +197,9 @@ TEST_F(MoveInsideTest, outsidePointyCorner) TEST_F(MoveInsideTest, outsidePointyCornerFail) { // Should fail with normal moveInside2 (and the like). - const Point from(60, 70); // Above pointy bit. - Point result(from); - const Point supposed(50, 70); // 10 below pointy bit. + const Point2LL from(60, 70); // Above pointy bit. + Point2LL result(from); + const Point2LL supposed(50, 70); // 10 below pointy bit. Polygons inside; inside.add(pointy_square); @@ -211,12 +211,12 @@ TEST_F(MoveInsideTest, outsidePointyCornerFail) struct FindCloseParameters { - Point close_to; - Point supposed; + Point2LL close_to; + Point2LL supposed; coord_t cell_size; std::function* penalty_function; - FindCloseParameters(const Point close_to, const Point supposed, const coord_t cell_size, std::function* penalty_function = nullptr) + FindCloseParameters(const Point2LL close_to, const Point2LL supposed, const coord_t cell_size, std::function* penalty_function = nullptr) : close_to(close_to) , supposed(supposed) , cell_size(cell_size) @@ -260,7 +260,7 @@ TEST_P(FindCloseTest, FindClose) if (cpp) { - const Point result = cpp->location; + const Point2LL result = cpp->location; ASSERT_LE(vSize(result - parameters.supposed), 10) << "Close to " << parameters.close_to << " we found " << result << " rather than " << parameters.supposed << ".\n"; } else @@ -273,16 +273,16 @@ TEST_P(FindCloseTest, FindClose) * Test penalty function to use with findClose. */ std::function testPenalty( - [](Point candidate) + [](Point2LL candidate) { - return -vSize2(candidate - Point(50, 100)); // The further from 50, 100, the lower the penalty. + return -vSize2(candidate - Point2LL(50, 100)); // The further from 50, 100, the lower the penalty. }); INSTANTIATE_TEST_SUITE_P(FindCloseInstantiation, FindCloseTest, - testing::Values(FindCloseParameters(Point(110, 110), Point(100, 100), 15), // Near a corner. - FindCloseParameters(Point(50, 110), Point(50, 100), 15), // Near a side. - FindCloseParameters(Point(50, 50), Point(50, 0), 60, &testPenalty) // Using a penalty function. + testing::Values(FindCloseParameters(Point2LL(110, 110), Point2LL(100, 100), 15), // Near a corner. + FindCloseParameters(Point2LL(50, 110), Point2LL(50, 100), 15), // Near a side. + FindCloseParameters(Point2LL(50, 50), Point2LL(50, 0), 60, &testPenalty) // Using a penalty function. )); // NOLINTBEGIN(misc-non-private-member-variables-in-classes) @@ -319,9 +319,9 @@ class PolygonUtilsTest : public testing::Test TEST_F(PolygonUtilsTest, spreadDotsSegment) { std::vector supposed; - supposed.emplace_back(Point(50, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point(100, 0), 1, test_squares[0], 0); - supposed.emplace_back(Point(100, 50), 1, test_squares[0], 0); + supposed.emplace_back(Point2LL(50, 0), 0, test_squares[0], 0); + supposed.emplace_back(Point2LL(100, 0), 1, test_squares[0], 0); + supposed.emplace_back(Point2LL(100, 50), 1, test_squares[0], 0); std::vector result; PolygonUtils::spreadDots(PolygonsPointIndex(&test_squares, 0, 0), PolygonsPointIndex(&test_squares, 0, 2), 3, result); @@ -336,14 +336,14 @@ TEST_F(PolygonUtilsTest, spreadDotsSegment) TEST_F(PolygonUtilsTest, spreadDotsFull) { std::vector supposed; - supposed.emplace_back(Point(0, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point(50, 0), 0, test_squares[0], 0); - supposed.emplace_back(Point(100, 0), 1, test_squares[0], 0); - supposed.emplace_back(Point(100, 50), 1, test_squares[0], 0); - supposed.emplace_back(Point(100, 100), 2, test_squares[0], 0); - supposed.emplace_back(Point(50, 100), 2, test_squares[0], 0); - supposed.emplace_back(Point(0, 100), 3, test_squares[0], 0); - supposed.emplace_back(Point(0, 50), 3, test_squares[0], 0); + supposed.emplace_back(Point2LL(0, 0), 0, test_squares[0], 0); + supposed.emplace_back(Point2LL(50, 0), 0, test_squares[0], 0); + supposed.emplace_back(Point2LL(100, 0), 1, test_squares[0], 0); + supposed.emplace_back(Point2LL(100, 50), 1, test_squares[0], 0); + supposed.emplace_back(Point2LL(100, 100), 2, test_squares[0], 0); + supposed.emplace_back(Point2LL(50, 100), 2, test_squares[0], 0); + supposed.emplace_back(Point2LL(0, 100), 3, test_squares[0], 0); + supposed.emplace_back(Point2LL(0, 50), 3, test_squares[0], 0); std::vector result; PolygonUtils::spreadDots(PolygonsPointIndex(&test_squares, 0, 0), PolygonsPointIndex(&test_squares, 0, 0), 8, result); @@ -357,13 +357,13 @@ TEST_F(PolygonUtilsTest, spreadDotsFull) struct GetNextParallelIntersectionParameters { - std::optional predicted; - Point start_point; - Point line_to; + std::optional predicted; + Point2LL start_point; + Point2LL line_to; bool forward; coord_t dist; - GetNextParallelIntersectionParameters(const std::optional predicted, const Point start_point, const Point line_to, const bool forward, const coord_t dist) + GetNextParallelIntersectionParameters(const std::optional predicted, const Point2LL start_point, const Point2LL line_to, const bool forward, const coord_t dist) : predicted(predicted) , start_point(start_point) , line_to(line_to) @@ -405,16 +405,16 @@ TEST_P(GetNextParallelIntersectionTest, GetNextParallelIntersection) INSTANTIATE_TEST_SUITE_P(GetNextParallelIntersectionInstantiation, GetNextParallelIntersectionTest, - testing::Values(GetNextParallelIntersectionParameters(Point(0, 40), Point(20, 100), Point(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point(37, 100), Point(80, 100), Point(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point(70, 100), Point(20, 100), Point(120, 200), false, 35), - GetNextParallelIntersectionParameters(Point(0, 0), Point(50, 100), Point(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point(60, 0), Point(10, 0), Point(-90, -100), true, 35), - GetNextParallelIntersectionParameters(Point(0, 40), Point(10, 0), Point(-90, -100), false, 35), - GetNextParallelIntersectionParameters(Point(0, 75), Point(50, 100), Point(150, 100), true, 25), - GetNextParallelIntersectionParameters(Point(25, 100), Point(50, 100), Point(50, 200), true, 25), - GetNextParallelIntersectionParameters(std::optional(), Point(100, 100), Point(200, 200), true, 80), - GetNextParallelIntersectionParameters(Point(0, 45), Point(5, 100), Point(105, 200), true, 35))); + testing::Values(GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(20, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(37, 100), Point2LL(80, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(70, 100), Point2LL(20, 100), Point2LL(120, 200), false, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 0), Point2LL(50, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(60, 0), Point2LL(10, 0), Point2LL(-90, -100), true, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(10, 0), Point2LL(-90, -100), false, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 75), Point2LL(50, 100), Point2LL(150, 100), true, 25), + GetNextParallelIntersectionParameters(Point2LL(25, 100), Point2LL(50, 100), Point2LL(50, 200), true, 25), + GetNextParallelIntersectionParameters(std::optional(), Point2LL(100, 100), Point2LL(200, 200), true, 80), + GetNextParallelIntersectionParameters(Point2LL(0, 45), Point2LL(5, 100), Point2LL(105, 200), true, 35))); TEST_F(PolygonUtilsTest, RelativeHammingSquaresOverlap) { @@ -424,7 +424,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingSquaresOverlap) TEST_F(PolygonUtilsTest, RelativeHammingDisjunct) { Polygons shifted_polys = test_squares; // Make a copy. - shifted_polys[0].translate(Point(200, 0)); + shifted_polys[0].translate(Point2LL(200, 0)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 1.0); } @@ -432,7 +432,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingDisjunct) TEST_F(PolygonUtilsTest, RelativeHammingHalfOverlap) { Polygons shifted_polys = test_squares; // Make a copy. - shifted_polys[0].translate(Point(50, 0)); + shifted_polys[0].translate(Point2LL(50, 0)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 0.5); } @@ -445,7 +445,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingHalfOverlap) TEST_F(PolygonUtilsTest, RelativeHammingQuarterOverlap) { Polygons shifted_polys = test_squares; // Make a copy. - shifted_polys[0].translate(Point(50, 50)); + shifted_polys[0].translate(Point2LL(50, 50)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, shifted_polys), 0.75); } @@ -467,7 +467,7 @@ TEST_F(PolygonUtilsTest, RelativeHammingLineSquare) */ TEST_F(PolygonUtilsTest, RelativeHammingLineSquareDisjunct) { - test_line[0].translate(Point(0, 200)); + test_line[0].translate(Point2LL(0, 200)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, test_line), 1.0); } @@ -481,7 +481,7 @@ TEST_F(PolygonUtilsTest, TEST_F(PolygonUtilsTest, RelativeHammingLineLineDisjunct) { Polygons shifted_line = test_line; // Make a copy. - shifted_line[0].translate(Point(0, 1)); + shifted_line[0].translate(Point2LL(0, 1)); ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_line, test_line), 1.0); } diff --git a/tests/utils/SimplifyTest.cpp b/tests/utils/SimplifyTest.cpp index 118e909644..1e45d8e9fb 100644 --- a/tests/utils/SimplifyTest.cpp +++ b/tests/utils/SimplifyTest.cpp @@ -47,7 +47,7 @@ class SimplifyTest : public testing::Test const double increment = segment_length / radius; // Segments of 990 units. for (double angle = 0; angle < tau; angle += increment) { - circle.add(Point(std::cos(angle) * radius, std::sin(angle) * radius)); + circle.add(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); } square_collinear.clear(); @@ -63,16 +63,16 @@ class SimplifyTest : public testing::Test switch (side) { case 0: - square_collinear.add(Point(longitude, latitude)); + square_collinear.add(Point2LL(longitude, latitude)); break; case 1: - square_collinear.add(Point(width + latitude, longitude)); + square_collinear.add(Point2LL(width + latitude, longitude)); break; case 2: - square_collinear.add(Point(width - longitude, width + latitude)); + square_collinear.add(Point2LL(width - longitude, width + latitude)); break; case 3: - square_collinear.add(Point(latitude, width - longitude)); + square_collinear.add(Point2LL(latitude, width - longitude)); break; } } @@ -85,7 +85,7 @@ class SimplifyTest : public testing::Test constexpr size_t periods = 10; // How many waves of the sine to construct. for (double current_sine = 0; current_sine < std::numbers::pi * periods; current_sine += sine_step) { - sine.add(Point(std::sin(current_sine) * amplitude, y_step * sine.size())); + sine.add(Point2LL(std::sin(current_sine) * amplitude, y_step * sine.size())); } spiral.clear(); @@ -96,7 +96,7 @@ class SimplifyTest : public testing::Test radius = 0; for (size_t i = 0; i < vertex_count; ++i) { - spiral.add(Point(std::cos(angle) * radius, std::sin(angle) * radius)); + spiral.add(Point2LL(std::cos(angle) * radius, std::sin(angle) * radius)); angle += angle_step; radius += radius_step; } @@ -105,7 +105,7 @@ class SimplifyTest : public testing::Test constexpr coord_t invfreq = 30; for (size_t i = 0; i < vertex_count; ++i) { - zigzag.add(Point(-amplitude + (i % 2) * 2 * amplitude, i * invfreq)); + zigzag.add(Point2LL(-amplitude + (i % 2) * 2 * amplitude, i * invfreq)); } } }; @@ -142,17 +142,17 @@ TEST_F(SimplifyTest, CircleMaxDeviation) Polygon simplified = simplifier.polygon(circle); // Check on each vertex if it didn't deviate too much. - for (Point v : circle) + for (Point2LL v : circle) { - Point moved_point = v; + Point2LL moved_point = v; PolygonUtils::moveInside(simplified, moved_point); const coord_t deviation = vSize(moved_point - v); EXPECT_LE(deviation, simplifier.max_deviation); } // Also check the other way around, since the longest distance may also be on a vertex of the new polygon. - for (Point v : simplified) + for (Point2LL v : simplified) { - Point moved_point = v; + Point2LL moved_point = v; PolygonUtils::moveInside(circle, moved_point); const coord_t deviation = vSize(moved_point - v); EXPECT_LE(deviation, simplifier.max_deviation); @@ -221,14 +221,14 @@ TEST_F(SimplifyTest, LimitedError) // Generate a zig-zag with gradually increasing deviation. Polygon increasing_zigzag; - increasing_zigzag.add(Point(0, 0)); + increasing_zigzag.add(Point2LL(0, 0)); constexpr coord_t amplitude_step = 1; // Every 2 vertices, the amplitude increases by this much. constexpr coord_t y_step = 100; const coord_t amplitude_limit = simplifier.max_deviation * 2; // Increase amplitude up to this point. About half of the vertices should get removed. for (coord_t amplitude = 0; amplitude < amplitude_limit; amplitude += amplitude_step) { - increasing_zigzag.add(Point(amplitude, increasing_zigzag.size() * y_step)); - increasing_zigzag.add(Point(0, increasing_zigzag.size() * y_step)); + increasing_zigzag.add(Point2LL(amplitude, increasing_zigzag.size() * y_step)); + increasing_zigzag.add(Point2LL(0, increasing_zigzag.size() * y_step)); } size_t limit_vertex = 2 * simplifier.max_deviation / amplitude_step + 3; // 2 vertices per zag. Deviation/step zags. Add 3 since deviation equal to max +- epsilon is allowed. @@ -257,10 +257,10 @@ TEST_F(SimplifyTest, LimitedError) TEST_F(SimplifyTest, LongEdgesNotMoved) { Polygon polyline; - polyline.add(Point(0, 0)); - polyline.add(Point(10000, 10000)); // Long edge. - polyline.add(Point(10010, 10000)); // Short edge. - polyline.add(Point(21010, 0)); // Long edge. + polyline.add(Point2LL(0, 0)); + polyline.add(Point2LL(10000, 10000)); // Long edge. + polyline.add(Point2LL(10010, 10000)); // Short edge. + polyline.add(Point2LL(21010, 0)); // Long edge. Polygon simplified = simplifier.polyline(polyline); @@ -277,7 +277,7 @@ TEST_F(SimplifyTest, LongEdgesNotMoved) { // Both endpoints of this line segment must have a distance to the simplified polygon of 0, theoretically. // Due to rounding errors we'll allow up to 1 unit. - Point moved_point = polyline[i]; + Point2LL moved_point = polyline[i]; PolygonUtils::moveInside(simplified, moved_point); const coord_t deviation = vSize(moved_point - polyline[i]); EXPECT_LE(deviation, 1) << "The endpoints of long segments must still be in the simplified result."; @@ -294,10 +294,10 @@ TEST_F(SimplifyTest, LongEdgesNotMoved) TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) { Polygon polyline; - polyline.add(Point(0, 0)); - polyline.add(Point(0, 10000)); // Long edge. - polyline.add(Point(10, 10000)); // Short edge. - polyline.add(Point(20, 0)); // Long edge. Intersection with previous long edge is at 0,20000, which is too far. + polyline.add(Point2LL(0, 0)); + polyline.add(Point2LL(0, 10000)); // Long edge. + polyline.add(Point2LL(10, 10000)); // Short edge. + polyline.add(Point2LL(20, 0)); // Long edge. Intersection with previous long edge is at 0,20000, which is too far. Polygon simplified = simplifier.polyline(polyline); @@ -309,7 +309,7 @@ TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) } polyline.pop_back(); - polyline.add(Point(10, 0)); // Replace last vertex with one that makes the two long edges exactly parallel. + polyline.add(Point2LL(10, 0)); // Replace last vertex with one that makes the two long edges exactly parallel. simplified = simplifier.polyline(polyline); @@ -361,13 +361,13 @@ TEST_F(SimplifyTest, IdenticalVertices) switch (vertex) { case 0: - polygon.add(Point(0, 0)); + polygon.add(Point2LL(0, 0)); break; case 1: - polygon.add(Point(10000, 0)); + polygon.add(Point2LL(10000, 0)); break; case 2: - polygon.add(Point(5000, 10000)); + polygon.add(Point2LL(5000, 10000)); break; } } @@ -384,17 +384,17 @@ TEST_F(SimplifyTest, ToDegenerate) { // Create a triangle where one of the vertices could be removed. Polygon triangle; - triangle.add(Point(0, 0)); - triangle.add(Point(1100, 0)); - triangle.add(Point(550, 50)); // Deviates by 50, and both adjacent edges are just over 550 long. Could be removed. + triangle.add(Point2LL(0, 0)); + triangle.add(Point2LL(1100, 0)); + triangle.add(Point2LL(550, 50)); // Deviates by 50, and both adjacent edges are just over 550 long. Could be removed. triangle = simplifier.polygon(triangle); EXPECT_EQ(triangle.size(), 3) << "The triangle did not get simplified because that would reduce its vertices to less than 3, making it degenerate."; // Create a polyline that is shorter than the minimum resolution. Polygon segment; - segment.add(Point(0, 0)); - segment.add(Point(4, 0)); // Less than 5 micron long, so vertices would always be removed. + segment.add(Point2LL(0, 0)); + segment.add(Point2LL(4, 0)); // Less than 5 micron long, so vertices would always be removed. segment = simplifier.polyline(segment); EXPECT_EQ(segment.size(), 0) << "The segment got removed entirely, because simplification would reduce its vertices to less than 2, making it degenerate."; diff --git a/tests/utils/SmoothTest.cpp b/tests/utils/SmoothTest.cpp index 8288d605e9..1864e4b706 100644 --- a/tests/utils/SmoothTest.cpp +++ b/tests/utils/SmoothTest.cpp @@ -7,7 +7,7 @@ #include -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include "utils/actions/smooth.h" #include "utils/polygon.h" @@ -30,10 +30,10 @@ TEST(SmoothTest, TestSmooth) * */ - auto A = cura::Point { 0, 0 }; - auto B = cura::Point { 0, 100 }; - auto C = cura::Point { 1, 100 }; - auto D = cura::Point { 1, 200 }; + auto A = cura::Point2LL { 0, 0 }; + auto B = cura::Point2LL { 0, 100 }; + auto C = cura::Point2LL { 1, 100 }; + auto D = cura::Point2LL { 1, 200 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); @@ -51,10 +51,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point { 0, 0 }; - auto B = cura::Point { 100, 0 }; - auto C = cura::Point { 101, 1 }; - auto D = cura::Point { 101, 101 }; + auto A = cura::Point2LL { 0, 0 }; + auto B = cura::Point2LL { 100, 0 }; + auto C = cura::Point2LL { 101, 1 }; + auto D = cura::Point2LL { 101, 101 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -66,10 +66,10 @@ TEST(SmoothTest, TestSmooth) * A ----------- B - C -------------D * */ - auto A = cura::Point { 0, 0 }; - auto B = cura::Point { 100, 0 }; - auto C = cura::Point { 101, 0 }; - auto D = cura::Point { 201, 0 }; + auto A = cura::Point2LL { 0, 0 }; + auto B = cura::Point2LL { 100, 0 }; + auto C = cura::Point2LL { 101, 0 }; + auto D = cura::Point2LL { 201, 0 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -81,10 +81,10 @@ TEST(SmoothTest, TestSmooth) * D ----------- C - B -------------A * */ - auto A = cura::Point { 201, 0 }; - auto B = cura::Point { 101, 0 }; - auto C = cura::Point { 100, 0 }; - auto D = cura::Point { 0, 0 }; + auto A = cura::Point2LL { 201, 0 }; + auto B = cura::Point2LL { 101, 0 }; + auto C = cura::Point2LL { 100, 0 }; + auto D = cura::Point2LL { 0, 0 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -105,10 +105,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point { 0, 0 }; - auto B = cura::Point { 100, 0 }; - auto C = cura::Point { 99, -1 }; - auto D = cura::Point { 199, 99 }; + auto A = cura::Point2LL { 0, 0 }; + auto B = cura::Point2LL { 100, 0 }; + auto C = cura::Point2LL { 99, -1 }; + auto D = cura::Point2LL { 199, 99 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); @@ -127,10 +127,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - auto A = cura::Point { 0, 0 }; - auto B = cura::Point { 100, 0 }; - auto C = cura::Point { 101, 1 }; - auto D = cura::Point { 201, 101 }; + auto A = cura::Point2LL { 0, 0 }; + auto B = cura::Point2LL { 100, 0 }; + auto C = cura::Point2LL { 101, 1 }; + auto D = cura::Point2LL { 201, 101 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -147,10 +147,10 @@ TEST(SmoothTest, TestSmooth) * D * */ - cura::Point A = { 0, 0 }; - cura::Point B = { 100, 0 }; - cura::Point C = { 101, 0 }; - cura::Point D = { 101, 100 }; + cura::Point2LL A = { 0, 0 }; + cura::Point2LL B = { 100, 0 }; + cura::Point2LL C = { 101, 0 }; + cura::Point2LL D = { 101, 100 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, true); @@ -158,10 +158,10 @@ TEST(SmoothTest, TestSmooth) { // real life example of a line that is clearly not smooth - auto A = cura::Point{ 148451, 162177 }; - auto B = cura::Point{ 148854, 162229 }; - auto C = cura::Point{ 148866, 162244 }; - auto D = cura::Point{ 149772, 162297 }; + auto A = cura::Point2LL{ 148451, 162177 }; + auto B = cura::Point2LL{ 148854, 162229 }; + auto C = cura::Point2LL{ 148866, 162244 }; + auto D = cura::Point2LL{ 149772, 162297 }; const auto is_smooth = smooth.isSmooth(A, B, C, D, COS_FLUID_ANGLE); EXPECT_EQ(is_smooth, false); diff --git a/tests/utils/SparseGridTest.cpp b/tests/utils/SparseGridTest.cpp index 2849a6207e..5f60ec5491 100644 --- a/tests/utils/SparseGridTest.cpp +++ b/tests/utils/SparseGridTest.cpp @@ -14,11 +14,11 @@ namespace cura struct GetNearbyParameters { - std::vector registered_points; - std::unordered_set expected_near; - std::unordered_set expected_far; + std::vector registered_points; + std::unordered_set expected_near; + std::unordered_set expected_far; - GetNearbyParameters(const std::vector registered_points, const std::unordered_set expected_near, const std::unordered_set expected_far) + GetNearbyParameters(const std::vector registered_points, const std::unordered_set expected_near, const std::unordered_set expected_far) : registered_points(registered_points) , expected_near(expected_near) , expected_far(expected_far) @@ -32,54 +32,52 @@ class GetNearbyTest : public testing::TestWithParam TEST_P(GetNearbyTest, GetNearby) { - const Point target(100, 100); + const Point2LL target(100, 100); constexpr coord_t grid_size = 10; const GetNearbyParameters parameters = GetParam(); - SparsePointGridInclusive grid(grid_size); - for (const Point point : parameters.registered_points) + SparsePointGridInclusive grid(grid_size); + for (const Point2LL point : parameters.registered_points) { grid.insert(point, point); } - const std::vector::Elem> result = grid.getNearby(target, grid_size); + const std::vector::Elem> result = grid.getNearby(target, grid_size); // Are all near points reported as near? - for (const Point point : parameters.expected_near) + for (const Point2LL point : parameters.expected_near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? - for (const Point point : parameters.expected_far) + for (const Point2LL point : parameters.expected_far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } INSTANTIATE_TEST_CASE_P(GetNearbyInstantiation, GetNearbyTest, - testing::Values(GetNearbyParameters({ Point(0, 100) }, std::unordered_set(), std::unordered_set({ Point(0, 100) })), // A far point. - GetNearbyParameters({ Point(95, 100) }, - std::unordered_set({ Point(95, 100) }), - std::unordered_set()), // A near point. - GetNearbyParameters({ Point(100, 100) }, - std::unordered_set({ Point(100, 100) }), - std::unordered_set()) // On top of the target. + testing::Values(Point2LLarbyParameters({ Point2LL(0, 100) }, stdPoint2LLrdered_set(), stdPoint2LLrdered_set(Point2LLnt(95, 100) }), + Point2LLunordered_setPoint2LLt>())Point2LLA near point. + GetNearbyParametersPoint2LLint(100, 100) }Point2LL std::Point2LLered_setPoint2LLt>Point2LLint(100, 100) })Point2LL std::Point2LLered_set()) // On top of the target. )); TEST_F(GetNearbyTest, getNearbyLine2) { - std::vector input; + std::vector input; for (coord_t x = 0; x < 200; x++) { input.emplace_back(x, 95); } - const Point target(99, 100); // Slightly shifted. + const Point2LL target(99, 100); // Slightly shifted. constexpr coord_t grid_size = 10; - std::unordered_set near; - std::unordered_set far; - for (const Point point : input) + std::unordered_set near; + std::unordered_set far; + for (const Point2LL point : input) { const coord_t distance = vSize(point - target); if (distance < grid_size) @@ -92,39 +90,39 @@ TEST_F(GetNearbyTest, getNearbyLine2) } } - SparsePointGridInclusive grid(grid_size); - for (const Point point : input) + SparsePointGridInclusive grid(grid_size); + for (const Point2LL point : input) { grid.insert(point, point); } - const std::vector::Elem> result = grid.getNearby(target, grid_size); + const std::vector::Elem> result = grid.getNearby(target, grid_size); // Are all near points reported as near? - for (const Point point : near) + for (const Point2LL point : near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? - for (const Point point : far) + for (const Point2LL point : far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } TEST_F(GetNearbyTest, getNearbyLine) { - std::vector input; + std::vector input; for (coord_t x = 0; x < 200; x++) { input.emplace_back(x, 95); } - const Point target(100, 100); + const Point2LL target(100, 100); constexpr coord_t grid_size = 10; - std::unordered_set near; - std::unordered_set far; - for (const Point point : input) + std::unordered_set near; + std::unordered_set far; + for (const Point2LL point : input) { const coord_t distance = vSize(point - target); if (distance < grid_size) @@ -137,34 +135,34 @@ TEST_F(GetNearbyTest, getNearbyLine) } } - SparsePointGridInclusive grid(grid_size); - for (const Point point : input) + SparsePointGridInclusive grid(grid_size); + for (const Point2LL point : input) { grid.insert(point, point); } - const std::vector::Elem> result = grid.getNearby(target, grid_size); + const std::vector::Elem> result = grid.getNearby(target, grid_size); // Are all near points reported as near? - for (const Point point : near) + for (const Point2LL point : near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? - for (const Point point : far) + for (const Point2LL point : far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } struct GetNearestParameters { - std::vector registered_points; - Point* result; + std::vector registered_points; + Point2LL* result; std::function::Elem&)> filter; - GetNearestParameters(const std::vector registered_points, Point* result, const std::function::Elem&)>& filter = SparsePointGridInclusive::no_precondition) + GetNearestParameters(const std::vector registered_points, Point2LL* result, const std::function::Elem&)>& filter = SparsePointGridInclusive::no_precondition) : registered_points(registered_points) , result(result) , filter(filter) @@ -180,15 +178,15 @@ TEST_P(GetNearestTest, GetNearest) { const GetNearestParameters parameters = GetParam(); constexpr coord_t grid_size = 10; - const Point target(100, 100); + const Point2LL target(100, 100); - SparsePointGridInclusive grid(grid_size); - for (Point point : parameters.registered_points) + SparsePointGridInclusive grid(grid_size); + for (Point2LL point : parameters.registered_points) { grid.insert(point, point); } - typename SparsePointGridInclusive::Elem result; + typename SparsePointGridInclusive::Elem result; const bool success = grid.getNearest(target, grid_size, result, parameters.filter); ASSERT_EQ(success, parameters.result != nullptr) << "getNearest returned " << success << " but should've returned " << (parameters.result != nullptr) << "."; @@ -201,33 +199,33 @@ TEST_P(GetNearestTest, GetNearest) INSTANTIATE_TEST_SUITE_P(GetNearestInstantiation, GetNearestTest, - testing::Values(GetNearestParameters(std::vector({ Point(95, 100), Point(103, 100), Point(200, 100) }), new Point(103, 100)), // Choose the nearest out of 3 points. - GetNearestParameters(std::vector({ Point(95, 100), Point(98, 100), Point(106, 100) }), - new Point(106, 100), - [](const typename SparsePointGridInclusive::Elem& elem) -> bool { return elem.point.X > 100; }), // With a filter. - GetNearestParameters(std::vector(), nullptr), // No points, no answer. - GetNearestParameters(std::vector({ Point(100, 100) }), new Point(100, 100)) // Same point as target. + testing::Values(GetNearestParameters(std::vector({ Point2LL(95, 100), Point2LL(103, 100), Point2LL(200, 100) }), new Point2LL(103, 100)), // Choose the nearest out of 3 points. + GetNearestParameters(std::vector({ Point2LL(95, 100), Point2LL(98, 100), Point2LL(106, 100) }), + new Point2LL(106, 100), + [](const typename SparsePointGridInclusive::Elem& elem) -> bool { return elem.point.X > 100; }), // With a filter. + GetNearestParameters(std::vector(), nullptr), // No points, no answer. + GetNearestParameters(std::vector({ Point2LL(100, 100) }), new Point2LL(100, 100)) // Same point as target. )); TEST_F(GetNearestTest, Equal) { - std::vector registered_points; + std::vector registered_points; registered_points.emplace_back(95, 100); registered_points.emplace_back(105, 100); - const Point target = Point(100, 100); + const Point2LL target = Point2LL(100, 100); constexpr coord_t grid_size = 10; - const Point expected1 = Point(95, 100); - const Point expected2 = Point(105, 100); + const Point2LL expected1 = Point2LL(95, 100); + const Point2LL expected2 = Point2LL(105, 100); - SparsePointGridInclusive grid(grid_size); - for (const Point point : registered_points) + SparsePointGridInclusive grid(grid_size); + for (const Point2LL point : registered_points) { grid.insert(point, point); } - typename SparsePointGridInclusive::Elem result; + typename SparsePointGridInclusive::Elem result; // The actual call to test. - const bool success = grid.getNearest(target, grid_size, result, SparsePointGridInclusive::no_precondition); + const bool success = grid.getNearest(target, grid_size, result, SparsePointGridInclusive::no_precondition); ASSERT_TRUE(success); ASSERT_TRUE(result.val == expected1 || result.val == expected2) << "getNearest reported the nearest point to be " << result.val << " (distance " << vSize(target - result.val) << "), but it should've been " << expected1 << "(distance " diff --git a/tests/utils/StringTest.cpp b/tests/utils/StringTest.cpp index 8ae5fe1f20..829c4c3da7 100644 --- a/tests/utils/StringTest.cpp +++ b/tests/utils/StringTest.cpp @@ -2,7 +2,7 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/string.h" // The file under test. -#include "utils/IntPoint.h" +#include "utils/Point2LL.h" #include // NOLINTBEGIN(*-magic-numbers) From c74f4bbdabb8b7e2b11e824e1a42fce08d5da053 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 10:27:07 +0100 Subject: [PATCH 091/218] Fixed variable initialization ordering warnings --- include/PathOrderOptimizer.h | 2 +- include/TreeSupportElement.h | 8 +- include/TreeSupportTipGenerator.h | 61 ++-- src/BeadingStrategy/BeadingStrategy.cpp | 8 +- src/SkeletalTrapezoidation.cpp | 2 +- src/TreeSupportTipGenerator.cpp | 388 ++++++++++++------------ src/pathPlanning/Comb.cpp | 2 +- 7 files changed, 234 insertions(+), 237 deletions(-) diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 56212693d2..4dd1e47332 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -116,8 +116,8 @@ class PathOrderOptimizer , combing_boundary_((combing_boundary != nullptr && ! combing_boundary->empty()) ? combing_boundary : nullptr) , detect_loops_(detect_loops) , reverse_direction_(reverse_direction) - , order_requirements_(&order_requirements) , _group_outer_walls(group_outer_walls) + , order_requirements_(&order_requirements) { } diff --git a/include/TreeSupportElement.h b/include/TreeSupportElement.h index 3fa5c3eafd..3c160b1042 100644 --- a/include/TreeSupportElement.h +++ b/include/TreeSupportElement.h @@ -117,9 +117,9 @@ struct TreeSupportElement , missing_roof_layers_(elem.missing_roof_layers_) , skip_ovalisation_(elem.skip_ovalisation_) , all_tips_(elem.all_tips_) - , influence_area_limit_area_(elem.influence_area_limit_area_) - , influence_area_limit_range_(elem.influence_area_limit_range_) , influence_area_limit_active_(elem.influence_area_limit_active_) + , influence_area_limit_range_(elem.influence_area_limit_range_) + , influence_area_limit_area_(elem.influence_area_limit_area_) { parents_.insert(parents_.begin(), elem.parents_.begin(), elem.parents_.end()); } @@ -149,9 +149,9 @@ struct TreeSupportElement , missing_roof_layers_(element_above->missing_roof_layers_) , skip_ovalisation_(false) , all_tips_(element_above->all_tips_) - , influence_area_limit_area_(element_above->influence_area_limit_area_) - , influence_area_limit_range_(element_above->influence_area_limit_range_) , influence_area_limit_active_(element_above->influence_area_limit_active_) + , influence_area_limit_range_(element_above->influence_area_limit_range_) + , influence_area_limit_area_(element_above->influence_area_limit_area_) { parents_ = { element_above }; } diff --git a/include/TreeSupportTipGenerator.h b/include/TreeSupportTipGenerator.h index eaf85c0c3d..b6ffd3d351 100644 --- a/include/TreeSupportTipGenerator.h +++ b/include/TreeSupportTipGenerator.h @@ -176,138 +176,135 @@ class TreeSupportTipGenerator */ void removeUselessAddedPoints(std::vector>& move_bounds, SliceDataStorage& storage, std::vector& additional_support_areas); + /*! + * \brief Contains config settings to avoid loading them in every function. This was done to improve readability of the code. + */ + TreeSupportSettings config_; /*! * \brief If large areas should be supported by a roof out of regular support lines. */ - bool use_fake_roof; + bool use_fake_roof_; /*! * \brief Generator for model collision, avoidance and internal guide volumes. */ TreeModelVolumes& volumes_; - /*! - * \brief Contains config settings to avoid loading them in every function. This was done to improve readability of the code. - */ - TreeSupportSettings config; - - /*! * \brief Minimum area an overhang has to have to be supported. */ - const double minimum_support_area; + const double minimum_support_area_; /*! * \brief Minimum area an overhang has to have to become a roof. */ - const double minimum_roof_area; + const double minimum_roof_area_; /*! * \brief Amount of layers of roof. Zero if roof is disabled */ - const size_t support_roof_layers; + const size_t support_roof_layers_; /*! * \brief Distance between tips, so that the tips form a lime. Is smaller than Tip Diameter. */ - const coord_t connect_length; + const coord_t connect_length_; /*! * \brief Distance between tips, if the tips support an overhang. */ - const coord_t support_tree_branch_distance; + const coord_t support_tree_branch_distance_; /*! * \brief Distance between support roof lines. Is required for generating roof patterns. */ - const coord_t support_roof_line_distance; + const coord_t support_roof_line_distance_; /*! * \brief Amount of offset to each overhang for support with regular branches (as opposed to roof). */ - const coord_t support_outset; + const coord_t support_outset_; /*! * \brief Amount of offset to each overhang for support with roof (as opposed to regular branches). */ - const coord_t roof_outset; + const coord_t roof_outset_; /*! * \brief Whether tips should be printed as roof */ - const bool force_tip_to_roof; + const bool force_tip_to_roof_; /*! * \brief Whether the maximum distance a branch should from a point they support should be limited. Can be violated if required. */ - const bool support_tree_limit_branch_reach; + const bool support_tree_limit_branch_reach_; /*! * \brief Maximum distance a branch should from a point they support (in the xy plane). Can be violated if required. */ - const coord_t support_tree_branch_reach_limit; + const coord_t support_tree_branch_reach_limit_; /*! * \brief Distance in layers from the overhang to the first layer with support. This is the z distance in layers+1 */ - const size_t z_distance_delta; + const size_t z_distance_delta_; /*! * \brief Whether the Support Distance Priority is X/Y Overrides Z */ - const bool xy_overrides; + const bool xy_overrides_; /*! * \brief Amount of layers further down than required an overhang can be supported, when Support Distance Priority is X/Y Overrides Z */ - size_t max_overhang_insert_lag; + size_t max_overhang_insert_lag_; /*! * \brief Area of a tip. */ - const double tip_roof_size; + const double tip_roof_size_; /*! * \brief Whether only support that can rest on a flat surface should be supported. */ - const bool only_gracious = SUPPORT_TREE_ONLY_GRACIOUS_TO_MODEL; + const bool only_gracious_ = SUPPORT_TREE_ONLY_GRACIOUS_TO_MODEL; /*! * \brief Whether minimum_roof_area is a hard limit. If false the roof will be combined with roof above and below, to see if a part of this roof may be part of a valid roof * further up/down. */ - const bool force_minimum_roof_area = SUPPORT_TREE_MINIMUM_ROOF_AREA_HARD_LIMIT; + const bool force_minimum_roof_area_ = SUPPORT_TREE_MINIMUM_ROOF_AREA_HARD_LIMIT; /*! * \brief Distance between branches when the branches support a support pattern */ - coord_t support_supporting_branch_distance; + coord_t support_supporting_branch_distance_; /*! * \brief Required to generate cross infill patterns */ - std::shared_ptr cross_fill_provider; + std::shared_ptr cross_fill_provider_; /*! * \brief Map that saves locations of already inserted tips. Used to prevent tips far to close together from being added. */ - std::vector> already_inserted; + std::vector> already_inserted_; /*! * \brief Areas that will be saved as support roof */ - std::vector support_roof_drawn; + std::vector support_roof_drawn_; /*! * \brief Areas that will be saved as support roof, originating from tips being replaced with roof areas. */ - std::vector roof_tips_drawn; - + std::vector roof_tips_drawn_; - std::mutex critical_move_bounds; - std::mutex critical_roof_tips; + std::mutex critical_move_bounds_; + std::mutex critical_roof_tips_; }; } // namespace cura diff --git a/src/BeadingStrategy/BeadingStrategy.cpp b/src/BeadingStrategy/BeadingStrategy.cpp index 5b3f81583f..88b295b7ad 100644 --- a/src/BeadingStrategy/BeadingStrategy.cpp +++ b/src/BeadingStrategy/BeadingStrategy.cpp @@ -14,22 +14,22 @@ BeadingStrategy::BeadingStrategy( Ratio wall_add_middle_threshold, coord_t default_transition_length, double transitioning_angle) - : optimal_width_(optimal_width) + : name_("Unknown") + , optimal_width_(optimal_width) , wall_split_middle_threshold_(wall_split_middle_threshold) , wall_add_middle_threshold_(wall_add_middle_threshold) , default_transition_length_(default_transition_length) , transitioning_angle_(transitioning_angle) { - name_ = "Unknown"; } BeadingStrategy::BeadingStrategy(const BeadingStrategy& other) - : optimal_width_(other.optimal_width_) + : name_(other.name_) + , optimal_width_(other.optimal_width_) , wall_split_middle_threshold_(other.wall_split_middle_threshold_) , wall_add_middle_threshold_(other.wall_add_middle_threshold_) , default_transition_length_(other.default_transition_length_) , transitioning_angle_(other.transitioning_angle_) - , name_(other.name_) { } diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 9cd04a3cbc..3aca0644db 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -387,9 +387,9 @@ SkeletalTrapezoidation::SkeletalTrapezoidation( , transition_filter_dist_(transition_filter_dist) , allowed_filter_deviation_(allowed_filter_deviation) , beading_propagation_transition_dist_(beading_propagation_transition_dist) - , beading_strategy_(beading_strategy) , layer_idx_(layer_idx) , section_type_(section_type) + , beading_strategy_(beading_strategy) { scripta::log("skeletal_trapezoidation_0", polys, section_type, layer_idx); constructFromPolygons(polys); diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index 5ec22f610c..c5292dbf2b 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -29,54 +29,54 @@ namespace cura { TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceDataStorage& storage, const SliceMeshStorage& mesh, TreeModelVolumes& volumes_s) - : config(mesh.settings) - , use_fake_roof(! mesh.settings.get("support_roof_enable")) - , minimum_support_area(mesh.settings.get("minimum_support_area")) - , minimum_roof_area(! use_fake_roof ? mesh.settings.get("minimum_roof_area") : std::max(SUPPORT_TREE_MINIMUM_FAKE_ROOF_AREA, minimum_support_area)) - , support_roof_layers( - mesh.settings.get("support_roof_enable") ? round_divide(mesh.settings.get("support_roof_height"), config.layer_height) - : use_fake_roof ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS + : config_(mesh.settings) + , use_fake_roof_(! mesh.settings.get("support_roof_enable")) + , volumes_(volumes_s) + , minimum_support_area_(mesh.settings.get("minimum_support_area")) + , minimum_roof_area_(! use_fake_roof_ ? mesh.settings.get("minimum_roof_area") : std::max(SUPPORT_TREE_MINIMUM_FAKE_ROOF_AREA, minimum_support_area_)) + , support_roof_layers_( + mesh.settings.get("support_roof_enable") ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) + : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS : 0) - , connect_length( - (config.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) + std::max(2 * config.min_radius - 1.0 * config.support_line_width, 0.0)) - , support_tree_branch_distance((config.support_pattern == EFillMethod::TRIANGLES ? 3 : (config.support_pattern == EFillMethod::GRID ? 2 : 1)) * connect_length) - , support_roof_line_distance( - use_fake_roof ? (config.support_pattern == EFillMethod::TRIANGLES ? 3 : (config.support_pattern == EFillMethod::GRID ? 2 : 1)) - * (config.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) - : mesh.settings.get("support_roof_line_distance")) + , connect_length_( + (config_.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) + std::max(2 * config_.min_radius - 1.0 * config_.support_line_width, 0.0)) + , support_tree_branch_distance_((config_.support_pattern == EFillMethod::TRIANGLES ? 3 : (config_.support_pattern == EFillMethod::GRID ? 2 : 1)) * connect_length_) + , support_roof_line_distance_( + use_fake_roof_ ? (config_.support_pattern == EFillMethod::TRIANGLES ? 3 : (config_.support_pattern == EFillMethod::GRID ? 2 : 1)) + * (config_.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) + : mesh.settings.get("support_roof_line_distance")) , // todo propper - support_outset(0) + support_outset_(0) , // Since we disable support offset when tree support is enabled we use an offset of 0 rather than the setting value mesh.settings.get("support_offset") - roof_outset(use_fake_roof ? support_outset : mesh.settings.get("support_roof_offset")) - , force_tip_to_roof((config.min_radius * config.min_radius * std::numbers::pi > minimum_roof_area * (1000 * 1000)) && support_roof_layers && ! use_fake_roof) - , support_tree_limit_branch_reach(mesh.settings.get("support_tree_limit_branch_reach")) - , support_tree_branch_reach_limit(support_tree_limit_branch_reach ? mesh.settings.get("support_tree_branch_reach_limit") : 0) - , z_distance_delta(std::min(config.z_distance_top_layers + 1, mesh.overhang_areas.size())) - , xy_overrides(config.support_overrides == SupportDistPriority::XY_OVERRIDES_Z) - , tip_roof_size(force_tip_to_roof ? config.min_radius * config.min_radius * std::numbers::pi : 0) - , already_inserted(mesh.overhang_areas.size()) - , support_roof_drawn(mesh.overhang_areas.size(), Polygons()) - , roof_tips_drawn(mesh.overhang_areas.size(), Polygons()) - , volumes_(volumes_s) - , force_minimum_roof_area(use_fake_roof || SUPPORT_TREE_MINIMUM_ROOF_AREA_HARD_LIMIT) + roof_outset_(use_fake_roof_ ? support_outset_ : mesh.settings.get("support_roof_offset")) + , force_tip_to_roof_((config_.min_radius * config_.min_radius * std::numbers::pi > minimum_roof_area_ * (1000 * 1000)) && support_roof_layers_ && ! use_fake_roof_) + , support_tree_limit_branch_reach_(mesh.settings.get("support_tree_limit_branch_reach")) + , support_tree_branch_reach_limit_(support_tree_limit_branch_reach_ ? mesh.settings.get("support_tree_branch_reach_limit") : 0) + , z_distance_delta_(std::min(config_.z_distance_top_layers + 1, mesh.overhang_areas.size())) + , xy_overrides_(config_.support_overrides == SupportDistPriority::XY_OVERRIDES_Z) + , tip_roof_size_(force_tip_to_roof_ ? config_.min_radius * config_.min_radius * std::numbers::pi : 0) + , force_minimum_roof_area_(use_fake_roof_ || SUPPORT_TREE_MINIMUM_ROOF_AREA_HARD_LIMIT) + , already_inserted_(mesh.overhang_areas.size()) + , support_roof_drawn_(mesh.overhang_areas.size(), Polygons()) + , roof_tips_drawn_(mesh.overhang_areas.size(), Polygons()) { const double support_overhang_angle = mesh.settings.get("support_angle"); - const coord_t max_overhang_speed = (support_overhang_angle < TAU / 4) ? (coord_t)(tan(support_overhang_angle) * config.layer_height) : std::numeric_limits::max(); + const coord_t max_overhang_speed = (support_overhang_angle < TAU / 4) ? (coord_t)(tan(support_overhang_angle) * config_.layer_height) : std::numeric_limits::max(); if (max_overhang_speed == 0) { - max_overhang_insert_lag = std::numeric_limits::max(); + max_overhang_insert_lag_ = std::numeric_limits::max(); } else { - max_overhang_insert_lag = std::max((size_t)round_up_divide(config.xy_distance, max_overhang_speed / 2), 2 * config.z_distance_top_layers); + max_overhang_insert_lag_ = std::max((size_t)round_up_divide(config_.xy_distance, max_overhang_speed / 2), 2 * config_.z_distance_top_layers); // ^^^ Cap for how much layer below the overhang a new support point may be added, as other than with regular support every new inserted point may cause extra material and // time cost. // Could also be an user setting or differently calculated. Idea is that if an overhang does not turn valid in double the amount of layers a slope of support angle // would take to travel xy_distance, nothing reasonable will come from it. The 2*z_distance_delta is only a catch for when the support angle is very high. } - cross_fill_provider = generateCrossFillProvider(mesh, support_tree_branch_distance, config.support_line_width); + cross_fill_provider_ = generateCrossFillProvider(mesh, support_tree_branch_distance_, config_.support_line_width); std::vector known_z(mesh.layers.size()); @@ -84,23 +84,23 @@ TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceDataStorage& storage { known_z[z] = layer.printZ; } - config.setActualZ(known_z); + config_.setActualZ(known_z); coord_t dtt_when_tips_can_merge = 1; - if (config.branch_radius * config.diameter_angle_scale_factor < 2 * config.maximum_move_distance_slow) + if (config_.branch_radius * config_.diameter_angle_scale_factor < 2 * config_.maximum_move_distance_slow) { - while ((2 * config.maximum_move_distance_slow * dtt_when_tips_can_merge - config.support_line_width) < config.getRadius(dtt_when_tips_can_merge)) + while ((2 * config_.maximum_move_distance_slow * dtt_when_tips_can_merge - config_.support_line_width) < config_.getRadius(dtt_when_tips_can_merge)) { dtt_when_tips_can_merge++; } } else { - dtt_when_tips_can_merge = config.tip_layers; // arbitrary default for when there is no guarantee that the while loop above will terminate + dtt_when_tips_can_merge = config_.tip_layers; // arbitrary default for when there is no guarantee that the while loop above will terminate } - support_supporting_branch_distance = 2 * config.getRadius(dtt_when_tips_can_merge) + config.support_line_width + FUDGE_LENGTH; + support_supporting_branch_distance_ = 2 * config_.getRadius(dtt_when_tips_can_merge) + config_.support_line_width + FUDGE_LENGTH; } @@ -119,26 +119,26 @@ std::vector TreeSupportTipGenerator::c LineInformation res_line; for (const Point2LL& p : line) { - if (config.support_rest_preference == RestPreference::BUILDPLATE - && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::FAST_SAFE, false, ! xy_overrides).inside(p, true)) + if (config_.support_rest_preference == RestPreference::BUILDPLATE + && ! volumes_.getAvoidance(config_.getRadius(0), layer_idx, AvoidanceType::FAST_SAFE, false, ! xy_overrides_).inside(p, true)) { res_line.emplace_back(p, LineStatus::TO_BP_SAFE); } else if ( - config.support_rest_preference == RestPreference::BUILDPLATE - && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::FAST, false, ! xy_overrides).inside(p, true)) + config_.support_rest_preference == RestPreference::BUILDPLATE + && ! volumes_.getAvoidance(config_.getRadius(0), layer_idx, AvoidanceType::FAST, false, ! xy_overrides_).inside(p, true)) { res_line.emplace_back(p, LineStatus::TO_BP); } - else if (config.support_rests_on_model && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::FAST_SAFE, true, ! xy_overrides).inside(p, true)) + else if (config_.support_rests_on_model && ! volumes_.getAvoidance(config_.getRadius(0), layer_idx, AvoidanceType::FAST_SAFE, true, ! xy_overrides_).inside(p, true)) { res_line.emplace_back(p, LineStatus::TO_MODEL_GRACIOUS_SAFE); } - else if (config.support_rests_on_model && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::FAST, true, ! xy_overrides).inside(p, true)) + else if (config_.support_rests_on_model && ! volumes_.getAvoidance(config_.getRadius(0), layer_idx, AvoidanceType::FAST, true, ! xy_overrides_).inside(p, true)) { res_line.emplace_back(p, LineStatus::TO_MODEL_GRACIOUS); } - else if (config.support_rests_on_model && ! volumes_.getAvoidance(config.getRadius(0), layer_idx, AvoidanceType::COLLISION, true, ! xy_overrides).inside(p, true)) + else if (config_.support_rests_on_model && ! volumes_.getAvoidance(config_.getRadius(0), layer_idx, AvoidanceType::COLLISION, true, ! xy_overrides_).inside(p, true)) { res_line.emplace_back(p, LineStatus::TO_MODEL); } @@ -177,34 +177,34 @@ std::function)> Tr { std::function)> evaluatePoint = [this, current_layer](std::pair p) { - if (config.support_rest_preference != RestPreference::GRACEFUL + if (config_.support_rest_preference != RestPreference::GRACEFUL && ! volumes_ .getAvoidance( - config.getRadius(0), + config_.getRadius(0), current_layer - 1, p.second == LineStatus::TO_BP_SAFE ? AvoidanceType::FAST_SAFE : AvoidanceType::FAST, false, - ! xy_overrides) + ! xy_overrides_) .inside(p.first, true)) { return true; } - if (config.support_rests_on_model && (p.second != LineStatus::TO_BP && p.second != LineStatus::TO_BP_SAFE)) + if (config_.support_rests_on_model && (p.second != LineStatus::TO_BP && p.second != LineStatus::TO_BP_SAFE)) { if (p.second == LineStatus::TO_MODEL_GRACIOUS || p.second == LineStatus::TO_MODEL_GRACIOUS_SAFE) { return ! volumes_ .getAvoidance( - config.getRadius(0), + config_.getRadius(0), current_layer - 1, p.second == LineStatus::TO_MODEL_GRACIOUS_SAFE ? AvoidanceType::FAST_SAFE : AvoidanceType::FAST, true, - ! xy_overrides) + ! xy_overrides_) .inside(p.first, true); } else { - return ! volumes_.getAvoidance(config.getRadius(0), current_layer - 1, AvoidanceType::COLLISION, true, ! xy_overrides).inside(p.first, true); + return ! volumes_.getAvoidance(config_.getRadius(0), current_layer - 1, AvoidanceType::COLLISION, true, ! xy_overrides_).inside(p.first, true); } } return false; @@ -380,7 +380,7 @@ Polygons TreeSupportTipGenerator::ensureMaximumDistancePolyline(const Polygons& std::shared_ptr TreeSupportTipGenerator::generateCrossFillProvider(const SliceMeshStorage& mesh, coord_t line_distance, coord_t line_width) const { - if (config.support_pattern == EFillMethod::CROSS || config.support_pattern == EFillMethod::CROSS_3D) + if (config_.support_pattern == EFillMethod::CROSS || config_.support_pattern == EFillMethod::CROSS_3D) { AABB3D aabb; if (mesh.settings.get("infill_mesh") || mesh.settings.get("anti_overhang_mesh")) @@ -413,42 +413,42 @@ void TreeSupportTipGenerator::dropOverhangAreas(const SliceMeshStorage& mesh, st // this is ugly, but as far as i can see there is not way to ensure a parallel_for loop is calculated for each iteration up to a certain point before it continues; cura::parallel_for( 1, - mesh.overhang_areas.size() - z_distance_delta, + mesh.overhang_areas.size() - z_distance_delta_, [&](const LayerIndex layer_idx) { - if (mesh.overhang_areas[layer_idx + z_distance_delta].empty() || result.size() < layer_idx) + if (mesh.overhang_areas[layer_idx + z_distance_delta_].empty() || result.size() < layer_idx) { return; // This is a continue if imagined in a loop context. } - Polygons relevant_forbidden = volumes_.getCollision(roof ? 0 : config.getRadius(0), layer_idx, ! xy_overrides); + Polygons relevant_forbidden = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx, ! xy_overrides_); // ^^^ Take the least restrictive avoidance possible // Technically this also makes support blocker smaller, which is wrong as they do not have a xy_distance, but it should be good enough. - Polygons model_outline = volumes_.getCollision(0, layer_idx, ! xy_overrides).offset(-config.xy_min_distance, ClipperLib::jtRound); + Polygons model_outline = volumes_.getCollision(0, layer_idx, ! xy_overrides_).offset(-config_.xy_min_distance, ClipperLib::jtRound); Polygons overhang_regular = TreeSupportUtils::safeOffsetInc( - mesh.overhang_areas[layer_idx + z_distance_delta], - roof ? roof_outset : support_outset, + mesh.overhang_areas[layer_idx + z_distance_delta_], + roof ? roof_outset_ : support_outset_, relevant_forbidden, - config.min_radius * 1.75 + config.xy_min_distance, + config_.min_radius * 1.75 + config_.xy_min_distance, 0, 1, - config.support_line_distance / 2, - &config.simplifier); - Polygons remaining_overhang = mesh.overhang_areas[layer_idx + z_distance_delta] - .offset(roof ? roof_outset : support_outset) + config_.support_line_distance / 2, + &config_.simplifier); + Polygons remaining_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_] + .offset(roof ? roof_outset_ : support_outset_) .difference(overhang_regular) .intersection(relevant_forbidden) .difference(model_outline); - for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag && layer_idx - coord_t(lag_ctr) >= 1 && ! remaining_overhang.empty(); lag_ctr++) + for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag_ && layer_idx - coord_t(lag_ctr) >= 1 && ! remaining_overhang.empty(); lag_ctr++) { { std::lock_guard critical_section_storage(critical); result[layer_idx - lag_ctr].add(remaining_overhang); } - Polygons relevant_forbidden_below = volumes_.getCollision(roof ? 0 : config.getRadius(0), layer_idx - lag_ctr, ! xy_overrides).offset(EPSILON); + Polygons relevant_forbidden_below = volumes_.getCollision(roof ? 0 : config_.getRadius(0), layer_idx - lag_ctr, ! xy_overrides_).offset(EPSILON); remaining_overhang = remaining_overhang.intersection(relevant_forbidden_below).unionPolygons().difference(model_outline); } }); @@ -468,17 +468,17 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m std::mutex critical_potential_support_roofs; std::vector dropped_overhangs(mesh.overhang_areas.size(), Polygons()); - if (xy_overrides) + if (xy_overrides_) { dropOverhangAreas(mesh, dropped_overhangs, true); } cura::parallel_for( 0, - mesh.overhang_areas.size() - z_distance_delta, + mesh.overhang_areas.size() - z_distance_delta_, [&](const LayerIndex layer_idx) { - if (mesh.overhang_areas[layer_idx + z_distance_delta].empty()) + if (mesh.overhang_areas[layer_idx + z_distance_delta_].empty()) { return; // This is a continue if imagined in a loop context. } @@ -487,42 +487,42 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m // -radius. This is intentional here, as support roof is still valid if only a part of the tip may reach it. Polygons forbidden_here = volumes_ .getAvoidance( - config.getRadius(0), + config_.getRadius(0), layer_idx, - (only_gracious || ! config.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config.support_rests_on_model, - ! xy_overrides) - .offset(-config.getRadius(0), ClipperLib::jtRound); + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-config_.getRadius(0), ClipperLib::jtRound); // todo Since arachnea the assumption that an area smaller then line_width is not printed is no longer true all such safeOffset should have config.support_line_width // replaced with another setting. It should still work in most cases, but it should be possible to create a situation where a overhang outset lags though a wall. I will // take a look at this later. Polygons full_overhang_area = TreeSupportUtils::safeOffsetInc( - mesh.full_overhang_areas[layer_idx + z_distance_delta].unionPolygons(dropped_overhangs[layer_idx]), - roof_outset, + mesh.full_overhang_areas[layer_idx + z_distance_delta_].unionPolygons(dropped_overhangs[layer_idx]), + roof_outset_, forbidden_here, - config.support_line_width, + config_.support_line_width, 0, 1, - config.support_line_distance / 2, - &config.simplifier); + config_.support_line_distance / 2, + &config_.simplifier); - for (LayerIndex dtt_roof = 0; dtt_roof < support_roof_layers && layer_idx - dtt_roof >= 1; dtt_roof++) + for (LayerIndex dtt_roof = 0; dtt_roof < support_roof_layers_ && layer_idx - dtt_roof >= 1; dtt_roof++) { const Polygons forbidden_next = volumes_ .getAvoidance( - config.getRadius(0), + config_.getRadius(0), layer_idx - (dtt_roof + 1), - (only_gracious || ! config.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config.support_rests_on_model, - ! xy_overrides) - .offset(-config.getRadius(0), ClipperLib::jtRound); + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-config_.getRadius(0), ClipperLib::jtRound); full_overhang_area = full_overhang_area.difference(forbidden_next); - if (force_minimum_roof_area) + if (force_minimum_roof_area_) { - full_overhang_area.removeSmallAreas(minimum_roof_area); + full_overhang_area.removeSmallAreas(minimum_roof_area_); } if (full_overhang_area.area() > EPSILON) @@ -548,9 +548,9 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m // with using the default mitered here. Could be that i just have not encountered an issue with it yet though. potential_support_roofs[layer_idx] = potential_support_roofs[layer_idx] .unionPolygons() - .offset(config.xy_min_distance) + .offset(config_.xy_min_distance) .unionPolygons() - .offset(-config.xy_min_distance) + .offset(-config_.xy_min_distance) .unionPolygons(potential_support_roofs[layer_idx]); }); @@ -567,28 +567,28 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m // -radius. This is intentional here, as support roof is still valid if only a part of the tip may reach it. Polygons forbidden_here = volumes_ .getAvoidance( - config.getRadius(0), + config_.getRadius(0), layer_idx, - (only_gracious || ! config.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config.support_rests_on_model, - ! xy_overrides) - .offset(-(config.getRadius(0)), ClipperLib::jtRound); + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_) + .offset(-(config_.getRadius(0)), ClipperLib::jtRound); - if (! force_minimum_roof_area) + if (! force_minimum_roof_area_) { Polygons fuzzy_area = Polygons(); // the roof will be combined with roof above and below, to see if a part of this roof may be part of a valid roof further up/down. // This prevents the situation where a roof gets removed even tough its area would contribute to a (better) printable roof area further down. for (const LayerIndex layer_offset : ranges::views::iota( - -LayerIndex{ std::min(layer_idx, LayerIndex{ support_roof_layers }) }, - LayerIndex{ std::min(LayerIndex{ potential_support_roofs.size() - layer_idx }, LayerIndex{ support_roof_layers + 1 }) })) + -LayerIndex{ std::min(layer_idx, LayerIndex{ support_roof_layers_ }) }, + LayerIndex{ std::min(LayerIndex{ potential_support_roofs.size() - layer_idx }, LayerIndex{ support_roof_layers_ + 1 }) })) { - fuzzy_area.add(support_roof_drawn[layer_idx + layer_offset]); + fuzzy_area.add(support_roof_drawn_[layer_idx + layer_offset]); fuzzy_area.add(potential_support_roofs[layer_idx + layer_offset]); } fuzzy_area = fuzzy_area.unionPolygons(); - fuzzy_area.removeSmallAreas(std::max(minimum_roof_area, tip_roof_size)); + fuzzy_area.removeSmallAreas(std::max(minimum_roof_area_, tip_roof_size_)); for (Polygons potential_roof : potential_support_roofs[layer_idx].difference(forbidden_here).splitIntoParts()) { @@ -601,7 +601,7 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m else { Polygons valid_roof = potential_support_roofs[layer_idx].difference(forbidden_here); - valid_roof.removeSmallAreas(std::max(minimum_roof_area, tip_roof_size)); + valid_roof.removeSmallAreas(std::max(minimum_roof_area_, tip_roof_size_)); additional_support_roofs[layer_idx].add(valid_roof); } } @@ -612,7 +612,7 @@ void TreeSupportTipGenerator::calculateRoofAreas(const cura::SliceMeshStorage& m additional_support_roofs.size(), [&](const LayerIndex layer_idx) { - support_roof_drawn[layer_idx] = support_roof_drawn[layer_idx].unionPolygons(additional_support_roofs[layer_idx]); + support_roof_drawn_[layer_idx] = support_roof_drawn_[layer_idx].unionPolygons(additional_support_roofs[layer_idx]); }); } @@ -630,7 +630,7 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( const bool to_bp = p.second == LineStatus::TO_BP || p.second == LineStatus::TO_BP_SAFE; const bool gracious = to_bp || p.second == LineStatus::TO_MODEL_GRACIOUS || p.second == LineStatus::TO_MODEL_GRACIOUS_SAFE; const bool safe_radius = p.second == LineStatus::TO_BP_SAFE || p.second == LineStatus::TO_MODEL_GRACIOUS_SAFE; - if (! config.support_rests_on_model && ! to_bp) + if (! config_.support_rests_on_model && ! to_bp) { spdlog::warn("Tried to add an invalid support point"); return; @@ -643,25 +643,25 @@ void TreeSupportTipGenerator::addPointAsInfluenceArea( } Polygons area = circle.offset(0); { - std::lock_guard critical_section_movebounds(critical_move_bounds); - if (! already_inserted[insert_layer].count(p.first / ((config.min_radius + 1) / 10))) + std::lock_guard critical_section_movebounds(critical_move_bounds_); + if (! already_inserted_[insert_layer].count(p.first / ((config_.min_radius + 1) / 10))) { // Normalize the point a bit to also catch points which are so close that inserting it would achieve nothing. - already_inserted[insert_layer].emplace(p.first / ((config.min_radius + 1) / 10)); + already_inserted_[insert_layer].emplace(p.first / ((config_.min_radius + 1) / 10)); TreeSupportElement* elem = new TreeSupportElement( dtt, insert_layer, p.first, to_bp, gracious, - ! xy_overrides, + ! xy_overrides_, dont_move_until, roof, safe_radius, - force_tip_to_roof, + force_tip_to_roof_, skip_ovalisation, - support_tree_limit_branch_reach, - support_tree_branch_reach_limit); + support_tree_limit_branch_reach_, + support_tree_branch_reach_limit_); elem->area_ = new Polygons(area); for (Point2LL target : additional_ovalization_targets) @@ -687,7 +687,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( // Add tip area as roof (happens when minimum roof area > minimum tip area) if possible. This is required as there is no guarantee that if support_roof_wall_count == 0 that a // certain roof area will actually have lines. size_t dtt_roof_tip = 0; - if (config.support_roof_wall_count == 0) + if (config_.support_roof_wall_count == 0) { for (dtt_roof_tip = 0; dtt_roof_tip < roof_tip_layers && insert_layer_idx - dtt_roof_tip >= 1; dtt_roof_tip++) { @@ -696,10 +696,10 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( Polygon roof_circle; for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { - roof_circle.add(p.first + corner * std::max(config.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); + roof_circle.add(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } Polygons area = roof_circle.offset(0); - return ! TreeSupportUtils::generateSupportInfillLines(area, config, true, insert_layer_idx - dtt_roof_tip, support_roof_line_distance, cross_fill_provider, true) + return ! TreeSupportUtils::generateSupportInfillLines(area, config_, true, insert_layer_idx - dtt_roof_tip, support_roof_line_distance_, cross_fill_provider_, true) .empty(); }; @@ -735,16 +735,16 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( Polygon roof_circle; for (Point2LL corner : TreeSupportBaseCircle::getBaseCircle()) { - roof_circle.add(p.first + corner * std::max(config.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); + roof_circle.add(p.first + corner * std::max(config_.min_radius / TreeSupportBaseCircle::base_radius, coord_t(1))); } added_roofs.add(roof_circle); } } added_roofs = added_roofs.unionPolygons(); { - std::lock_guard critical_section_roof(critical_roof_tips); + std::lock_guard critical_section_roof(critical_roof_tips_); - roof_tips_drawn[insert_layer_idx - dtt_roof_tip].add(added_roofs); + roof_tips_drawn_[insert_layer_idx - dtt_roof_tip].add(added_roofs); } } } @@ -754,7 +754,7 @@ void TreeSupportTipGenerator::addLinesAsInfluenceAreas( // If a line consists of enough tips, the assumption is that it is not a single tip, but part of a simulated support pattern. // Ovalisation should be disabled if they may be placed close to each other to prevent tip-areas merging. If the tips has to turn into roof, the area is most likely not // large enough for this to cause issues. - const bool disable_ovalization = ! connect_points && config.min_radius < 3 * config.support_line_width && roof_tip_layers == 0 && dtt_roof_tip == 0; + const bool disable_ovalization = ! connect_points && config_.min_radius < 3 * config_.support_line_width && roof_tip_layers == 0 && dtt_roof_tip == 0; for (auto [idx, point_data] : line | ranges::views::enumerate) { std::vector additional_ovalization_targets; @@ -796,10 +796,10 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( if (layer_idx + 1 < storage.support.supportLayers.size()) { std::vector to_be_removed; - Polygons roof_on_layer_above = use_fake_roof ? support_roof_drawn[layer_idx + 1] - : storage.support.supportLayers[layer_idx + 1].support_roof.unionPolygons(additional_support_areas[layer_idx + 1]); + Polygons roof_on_layer_above = use_fake_roof_ ? support_roof_drawn_[layer_idx + 1] + : storage.support.supportLayers[layer_idx + 1].support_roof.unionPolygons(additional_support_areas[layer_idx + 1]); Polygons roof_on_layer - = use_fake_roof ? support_roof_drawn[layer_idx] : storage.support.supportLayers[layer_idx].support_roof.unionPolygons(additional_support_areas[layer_idx]); + = use_fake_roof_ ? support_roof_drawn_[layer_idx] : storage.support.supportLayers[layer_idx].support_roof.unionPolygons(additional_support_areas[layer_idx]); for (TreeSupportElement* elem : move_bounds[layer_idx]) { @@ -814,7 +814,7 @@ void TreeSupportTipGenerator::removeUselessAddedPoints( // Remove branches should have interface above them, but dont. Should never happen. if (roof_on_layer_above.empty() || (! roof_on_layer_above.inside(elem->result_on_layer_) - && vSize2(from - elem->result_on_layer_) > config.getRadius(0) * config.getRadius(0) + FUDGE_LENGTH * FUDGE_LENGTH)) + && vSize2(from - elem->result_on_layer_) > config_.getRadius(0) * config_.getRadius(0) + FUDGE_LENGTH * FUDGE_LENGTH)) { to_be_removed.emplace_back(elem); spdlog::warn("Removing already placed tip that should have roof above it?"); @@ -843,37 +843,37 @@ void TreeSupportTipGenerator::generateTips( std::vector> new_tips(move_bounds.size()); const coord_t circle_length_to_half_linewidth_change - = config.min_radius < config.support_line_width ? config.min_radius / 2 : sqrt(square(config.min_radius) - square(config.min_radius - config.support_line_width / 2)); + = config_.min_radius < config_.support_line_width ? config_.min_radius / 2 : sqrt(square(config_.min_radius) - square(config_.min_radius - config_.support_line_width / 2)); // ^^^ As r*r=x*x+y*y (circle equation): If a circle with center at (0,0) the top most point is at (0,r) as in y=r. This calculates how far one has to move on the x-axis so // that y=r-support_line_width/2. // In other words how far does one need to move on the x-axis to be support_line_width/2 away from the circle line. As a circle is round this length is identical for every // axis as long as the 90� angle between both remains. - const coord_t extra_outset = std::max(coord_t(0), config.min_radius - config.support_line_width / 2) + (xy_overrides ? 0 : config.support_line_width / 2); + const coord_t extra_outset = std::max(coord_t(0), config_.min_radius - config_.support_line_width / 2) + (xy_overrides_ ? 0 : config_.support_line_width / 2); // ^^^ Extra support offset to compensate for larger tip radiis. Also outset a bit more when z overwrites xy, because supporting something with a part of a support line is // better than not supporting it at all. - if (support_roof_layers) + if (support_roof_layers_) { calculateRoofAreas(mesh); } cura::parallel_for( 1, - mesh.overhang_areas.size() - z_distance_delta, + mesh.overhang_areas.size() - z_distance_delta_, [&](const LayerIndex layer_idx) { - if (mesh.overhang_areas[layer_idx + z_distance_delta].empty() && (layer_idx + 1 >= support_roof_drawn.size() || support_roof_drawn[layer_idx + 1].empty())) + if (mesh.overhang_areas[layer_idx + z_distance_delta_].empty() && (layer_idx + 1 >= support_roof_drawn_.size() || support_roof_drawn_[layer_idx + 1].empty())) { return; // This is a continue if imagined in a loop context. } Polygons relevant_forbidden = volumes_.getAvoidance( - config.getRadius(0), + config_.getRadius(0), layer_idx, - (only_gracious || ! config.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config.support_rests_on_model, - ! xy_overrides); + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_); // ^^^ Take the least restrictive avoidance possible relevant_forbidden = relevant_forbidden.offset(EPSILON) @@ -881,17 +881,17 @@ void TreeSupportTipGenerator::generateTips( std::function generateLines = [&](const Polygons& area, bool roof, LayerIndex generate_layer_idx) { - coord_t upper_line_distance = support_supporting_branch_distance; - coord_t line_distance = std::max(roof ? support_roof_line_distance : support_tree_branch_distance, upper_line_distance); + coord_t upper_line_distance = support_supporting_branch_distance_; + coord_t line_distance = std::max(roof ? support_roof_line_distance_ : support_tree_branch_distance_, upper_line_distance); return TreeSupportUtils::generateSupportInfillLines( area, - config, - roof && ! use_fake_roof, + config_, + roof && ! use_fake_roof_, generate_layer_idx, line_distance, - cross_fill_provider, - roof && ! use_fake_roof, + cross_fill_provider_, + roof && ! use_fake_roof_, line_distance == upper_line_distance); }; @@ -902,14 +902,14 @@ void TreeSupportTipGenerator::generateTips( // horizontal expansion and it would not have a roof if the overhang is offset by support roof horizontal expansion instead. (At least this is the current behavior // of the regular support) - Polygons core_overhang = mesh.overhang_areas[layer_idx + z_distance_delta]; + Polygons core_overhang = mesh.overhang_areas[layer_idx + z_distance_delta_]; - if (support_roof_layers && layer_idx + 1 < support_roof_drawn.size()) + if (support_roof_layers_ && layer_idx + 1 < support_roof_drawn_.size()) { - core_overhang = core_overhang.difference(support_roof_drawn[layer_idx]); - for (Polygons roof_part : support_roof_drawn[layer_idx + 1] - .difference(support_roof_drawn[layer_idx]) + core_overhang = core_overhang.difference(support_roof_drawn_[layer_idx]); + for (Polygons roof_part : support_roof_drawn_[layer_idx + 1] + .difference(support_roof_drawn_[layer_idx]) .splitIntoParts(true)) // If there is a roof, the roof will be one layer above the tips. { //^^^Technically one should also subtract the avoidance of radius 0 (similarly how calculated in calculateRoofArea), as there can be some rounding errors @@ -920,65 +920,65 @@ void TreeSupportTipGenerator::generateTips( Polygons overhang_regular = TreeSupportUtils::safeOffsetInc( core_overhang, - support_outset, + support_outset_, relevant_forbidden, - config.min_radius * 1.75 + config.xy_min_distance, + config_.min_radius * 1.75 + config_.xy_min_distance, 0, 1, - config.support_line_distance / 2, - &config.simplifier); + config_.support_line_distance / 2, + &config_.simplifier); Polygons remaining_overhang - = core_overhang.offset(support_outset).difference(overhang_regular.offset(config.support_line_width * 0.5)).intersection(relevant_forbidden); + = core_overhang.offset(support_outset_).difference(overhang_regular.offset(config_.support_line_width * 0.5)).intersection(relevant_forbidden); // Offset ensures that areas that could be supported by a part of a support line, are not considered unsupported overhang coord_t extra_total_offset_acc = 0; // Offset the area to compensate for large tip radiis. Offset happens in multiple steps to ensure the tip is as close to the original overhang as possible. - while (extra_total_offset_acc + config.support_line_width / 8 + while (extra_total_offset_acc + config_.support_line_width / 8 < extra_outset) //+mesh_config.support_line_width / 8 to avoid calculating very small (useless) offsets because of rounding errors. { - coord_t offset_current_step = extra_total_offset_acc + 2 * config.support_line_width > config.min_radius - ? std::min(config.support_line_width / 8, extra_outset - extra_total_offset_acc) + coord_t offset_current_step = extra_total_offset_acc + 2 * config_.support_line_width > config_.min_radius + ? std::min(config_.support_line_width / 8, extra_outset - extra_total_offset_acc) : std::min(circle_length_to_half_linewidth_change, extra_outset - extra_total_offset_acc); extra_total_offset_acc += offset_current_step; Polygons overhang_offset = TreeSupportUtils::safeOffsetInc( overhang_regular, 1.5 * extra_total_offset_acc, volumes_.getCollision(0, layer_idx, true), - config.xy_min_distance + config.support_line_width, + config_.xy_min_distance + config_.support_line_width, 0, 1, - config.support_line_distance / 2, - &config.simplifier); - remaining_overhang = remaining_overhang.difference(overhang_offset.unionPolygons(support_roof_drawn[layer_idx].offset(1.5 * extra_total_offset_acc))) + config_.support_line_distance / 2, + &config_.simplifier); + remaining_overhang = remaining_overhang.difference(overhang_offset.unionPolygons(support_roof_drawn_[layer_idx].offset(1.5 * extra_total_offset_acc))) .unionPolygons(); // overhang_offset is combined with roof, as all area that has a roof, is already supported by said roof. Polygons next_overhang = TreeSupportUtils::safeOffsetInc( remaining_overhang, extra_total_offset_acc, volumes_.getCollision(0, layer_idx, true), - config.xy_min_distance + config.support_line_width, + config_.xy_min_distance + config_.support_line_width, 0, 1, - config.support_line_distance / 2, - &config.simplifier); + config_.support_line_distance / 2, + &config_.simplifier); overhang_regular = overhang_regular.unionPolygons(next_overhang.difference(relevant_forbidden)); } // If the xy distance overrides the z distance, some support needs to be inserted further down. //=> Analyze which support points do not fit on this layer and check if they will fit a few layers down // (while adding them an infinite amount of layers down would technically be closer the setting description, it would not produce reasonable results. ) - if (xy_overrides) + if (xy_overrides_) { for (Polygons& remaining_overhang_part : remaining_overhang.splitIntoParts(false)) { - if (remaining_overhang_part.area() <= MM2_2INT(minimum_support_area)) + if (remaining_overhang_part.area() <= MM2_2INT(minimum_support_area_)) { continue; } std::vector overhang_lines; - Polygons polylines = ensureMaximumDistancePolyline(generateLines(remaining_overhang_part, false, layer_idx), config.min_radius, 1, false); + Polygons polylines = ensureMaximumDistancePolyline(generateLines(remaining_overhang_part, false, layer_idx), config_.min_radius, 1, false); // ^^^ Support_line_width to form a line here as otherwise most will be unsupported. // Technically this violates branch distance, but not only is this the only reasonable choice, // but it ensures consistent behavior as some infill patterns generate each line segment as its own polyline part causing a similar line forming behavior. @@ -986,7 +986,7 @@ void TreeSupportTipGenerator::generateTips( if (polylines.pointCount() <= 3) { // Add the outer wall to ensure it is correct supported instead. - polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(remaining_overhang_part), connect_length, 3, true); + polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(remaining_overhang_part), connect_length_, 3, true); } for (auto line : polylines) @@ -999,15 +999,15 @@ void TreeSupportTipGenerator::generateTips( overhang_lines.emplace_back(res_line); } - for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag && ! overhang_lines.empty() && layer_idx - coord_t(lag_ctr) >= 1; lag_ctr++) + for (size_t lag_ctr = 1; lag_ctr <= max_overhang_insert_lag_ && ! overhang_lines.empty() && layer_idx - coord_t(lag_ctr) >= 1; lag_ctr++) { // get least restricted avoidance for layer_idx-lag_ctr Polygons relevant_forbidden_below = volumes_.getAvoidance( - config.getRadius(0), + config_.getRadius(0), layer_idx - lag_ctr, - (only_gracious || ! config.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, - config.support_rests_on_model, - ! xy_overrides); + (only_gracious_ || ! config_.support_rests_on_model) ? AvoidanceType::FAST : AvoidanceType::COLLISION, + config_.support_rests_on_model, + ! xy_overrides_); // It is not required to offset the forbidden area here as the points won't change: // If points here are not inside the forbidden area neither will they be later when placing these points, as these are the same points. std::function)> evaluatePoint = [&](std::pair p) @@ -1015,12 +1015,12 @@ void TreeSupportTipGenerator::generateTips( return relevant_forbidden_below.inside(p.first, true); }; - if (support_roof_layers) + if (support_roof_layers_) { // Remove all points that are for some reason part of a roof area, as the point is already supported by roof std::function)> evaluatePartOfRoof = [&](std::pair p) { - return support_roof_drawn[layer_idx - lag_ctr].inside(p.first, true); + return support_roof_drawn_[layer_idx - lag_ctr].inside(p.first, true); }; overhang_lines = splitLines(overhang_lines, evaluatePartOfRoof).second; @@ -1034,16 +1034,16 @@ void TreeSupportTipGenerator::generateTips( addLinesAsInfluenceAreas( new_tips, fresh_valid_points, - (force_tip_to_roof && lag_ctr <= support_roof_layers) ? support_roof_layers : 0, + (force_tip_to_roof_ && lag_ctr <= support_roof_layers_) ? support_roof_layers_ : 0, layer_idx - lag_ctr, false, - support_roof_layers, + support_roof_layers_, false); } } } - overhang_regular.removeSmallAreas(minimum_support_area); + overhang_regular.removeSmallAreas(minimum_support_area_); for (Polygons support_part : overhang_regular.splitIntoParts(true)) { @@ -1054,7 +1054,7 @@ void TreeSupportTipGenerator::generateTips( { const bool roof_allowed_for_this_part = overhang_pair.second; Polygons overhang_outset = overhang_pair.first; - const size_t min_support_points = std::max(coord_t(1), std::min(coord_t(EPSILON), overhang_outset.polygonLength() / connect_length)); + const size_t min_support_points = std::max(coord_t(1), std::min(coord_t(EPSILON), overhang_outset.polygonLength() / connect_length_)); std::vector overhang_lines; bool only_lines = true; @@ -1063,9 +1063,9 @@ void TreeSupportTipGenerator::generateTips( // todo can cause inconsistent support density if a line exactly aligns with the model Polygons polylines = ensureMaximumDistancePolyline( generateLines(overhang_outset, roof_allowed_for_this_part, layer_idx + roof_allowed_for_this_part), - ! roof_allowed_for_this_part ? config.min_radius * 2 - : use_fake_roof ? support_supporting_branch_distance - : connect_length, + ! roof_allowed_for_this_part ? config_.min_radius * 2 + : use_fake_roof_ ? support_supporting_branch_distance_ + : connect_length_, 1, false); @@ -1080,33 +1080,33 @@ void TreeSupportTipGenerator::generateTips( only_lines = false; // Add the outer wall (of the overhang) to ensure it is correct supported instead. // Try placing the support points in a way that they fully support the outer wall, instead of just the with half of the support line width. - Polygons reduced_overhang_outset = overhang_outset.offset(-config.support_line_width / 2.2); + Polygons reduced_overhang_outset = overhang_outset.offset(-config_.support_line_width / 2.2); // ^^^ It's assumed that even small overhangs are over one line width wide, so lets try to place the support points in a way that the full support area // generated from them will support the overhang. // (If this is not done it may only be half). This WILL NOT be the case when supporting an angle of about < 60� so there is a fallback, as some support is // better than none.) if (! reduced_overhang_outset.empty() - && overhang_outset.difference(reduced_overhang_outset.offset(std::max(config.support_line_width, connect_length))).area() < 1) + && overhang_outset.difference(reduced_overhang_outset.offset(std::max(config_.support_line_width, connect_length_))).area() < 1) { - polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(reduced_overhang_outset), connect_length, min_support_points, true); + polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(reduced_overhang_outset), connect_length_, min_support_points, true); } else { - polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(overhang_outset), connect_length, min_support_points, true); + polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(overhang_outset), connect_length_, min_support_points, true); } } if (roof_allowed_for_this_part) // Some roof may only be supported by a part of a tip { - polylines = TreeSupportUtils::movePointsOutside(polylines, relevant_forbidden, config.getRadius(0) + FUDGE_LENGTH / 2); + polylines = TreeSupportUtils::movePointsOutside(polylines, relevant_forbidden, config_.getRadius(0) + FUDGE_LENGTH / 2); } overhang_lines = convertLinesToInternal(polylines, layer_idx); if (overhang_lines.empty()) // some error handling and logging { - Polygons enlarged_overhang_outset = overhang_outset.offset(config.getRadius(0) + FUDGE_LENGTH / 2, ClipperLib::jtRound).difference(relevant_forbidden); - polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(enlarged_overhang_outset), connect_length, min_support_points, true); + Polygons enlarged_overhang_outset = overhang_outset.offset(config_.getRadius(0) + FUDGE_LENGTH / 2, ClipperLib::jtRound).difference(relevant_forbidden); + polylines = ensureMaximumDistancePolyline(TreeSupportUtils::toPolylines(enlarged_overhang_outset), connect_length_, min_support_points, true); overhang_lines = convertLinesToInternal(polylines, layer_idx); if (! overhang_lines.empty()) @@ -1119,11 +1119,11 @@ void TreeSupportTipGenerator::generateTips( } } - size_t dont_move_for_layers = support_roof_layers ? (force_tip_to_roof ? support_roof_layers : (roof_allowed_for_this_part ? 0 : support_roof_layers)) : 0; + size_t dont_move_for_layers = support_roof_layers_ ? (force_tip_to_roof_ ? support_roof_layers_ : (roof_allowed_for_this_part ? 0 : support_roof_layers_)) : 0; addLinesAsInfluenceAreas( new_tips, overhang_lines, - force_tip_to_roof ? support_roof_layers : 0, + force_tip_to_roof_ ? support_roof_layers_ : 0, layer_idx, roof_allowed_for_this_part, dont_move_for_layers, @@ -1133,20 +1133,20 @@ void TreeSupportTipGenerator::generateTips( cura::parallel_for( 0, - support_roof_drawn.size(), + support_roof_drawn_.size(), [&](const LayerIndex layer_idx) { // Sometimes roofs could be empty as the pattern does not generate lines if the area is narrow enough. // If there is a roof could have zero lines in its area (as it has no wall), rand a support area would very likely be printed (because there are walls for the support // areas), replace non printable roofs with support - if (! use_fake_roof && config.support_wall_count > 0 && config.support_roof_wall_count == 0) + if (! use_fake_roof_ && config_.support_wall_count > 0 && config_.support_roof_wall_count == 0) { - for (auto roof_area : support_roof_drawn[layer_idx].unionPolygons(roof_tips_drawn[layer_idx]).splitIntoParts()) + for (auto roof_area : support_roof_drawn_[layer_idx].unionPolygons(roof_tips_drawn_[layer_idx]).splitIntoParts()) { // technically there is no guarantee that a drawn roof tip has lines, as it could be unioned with another roof area that has, but this has to be enough // hopefully. if (layer_idx < additional_support_areas.size() - && TreeSupportUtils::generateSupportInfillLines(roof_area, config, true, layer_idx, support_roof_line_distance, cross_fill_provider, false).empty()) + && TreeSupportUtils::generateSupportInfillLines(roof_area, config_, true, layer_idx, support_roof_line_distance_, cross_fill_provider_, false).empty()) { additional_support_areas[layer_idx].add(roof_area); } @@ -1161,31 +1161,31 @@ void TreeSupportTipGenerator::generateTips( } else { - if (use_fake_roof) + if (use_fake_roof_) { storage.support.supportLayers[layer_idx] - .fillInfillParts(layer_idx, support_roof_drawn, config.support_line_width, support_roof_line_distance, config.maximum_move_distance); + .fillInfillParts(layer_idx, support_roof_drawn_, config_.support_line_width, support_roof_line_distance_, config_.maximum_move_distance); placed_support_lines_support_areas[layer_idx].add(TreeSupportUtils::generateSupportInfillLines( - support_roof_drawn[layer_idx], - config, + support_roof_drawn_[layer_idx], + config_, false, layer_idx, - support_roof_line_distance, - cross_fill_provider, + support_roof_line_distance_, + cross_fill_provider_, false) - .offsetPolyLine(config.support_line_width / 2)); + .offsetPolyLine(config_.support_line_width / 2)); } else { - storage.support.supportLayers[layer_idx].support_roof.add(support_roof_drawn[layer_idx]); - storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.unionPolygons(roof_tips_drawn[layer_idx]); + storage.support.supportLayers[layer_idx].support_roof.add(support_roof_drawn_[layer_idx]); + storage.support.supportLayers[layer_idx].support_roof = storage.support.supportLayers[layer_idx].support_roof.unionPolygons(roof_tips_drawn_[layer_idx]); } } }); cura::parallel_for( 1, - mesh.overhang_areas.size() - z_distance_delta, + mesh.overhang_areas.size() - z_distance_delta_, [&](const LayerIndex layer_idx) { if (layer_idx > 0) diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index be204cb197..d422f18b2e 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -68,6 +68,7 @@ Comb::Comb( coord_t move_inside_distance) : storage_(storage) , layer_nr_(layer_nr) + , travel_avoid_distance_(travel_avoid_distance) , offset_from_outlines_(comb_boundary_offset) // between second wall and infill / other walls , max_moveInside_distance2_(offset_from_outlines_ * offset_from_outlines_) , offset_from_inside_to_outside_(offset_from_outlines_ + travel_avoid_distance) @@ -81,7 +82,6 @@ Comb::Comb( , inside_loc_to_line_minimum_(PolygonUtils::createLocToLineGrid(boundary_inside_minimum_, comb_boundary_offset)) , inside_loc_to_line_optimal_(PolygonUtils::createLocToLineGrid(boundary_inside_optimal_, comb_boundary_offset)) , move_inside_distance_(move_inside_distance) - , travel_avoid_distance_(travel_avoid_distance) { } From 1c37545945286b5991e7eefbe6920b2c4cfba56b Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Wed, 22 Nov 2023 09:28:01 +0000 Subject: [PATCH 092/218] Applied clang-format. --- include/SkeletalTrapezoidationGraph.h | 48 ++++++------ include/gcodeExport.h | 4 +- include/infill/LightningLayer.h | 8 +- include/infill/NoZigZagConnectorProcessor.h | 14 ++-- include/pathPlanning/CombPath.h | 10 +-- include/pathPlanning/LinePolygonsCrossings.h | 4 +- include/plugins/slots.h | 10 +-- include/plugins/types.h | 12 +-- include/sliceDataStorage.h | 2 +- include/utils/MinimumSpanningTree.h | 13 ++-- include/utils/PolygonsSegmentIndex.h | 8 +- include/utils/SVG.h | 2 +- include/utils/orderOptimizer.h | 28 +++---- src/LayerPlan.cpp | 4 +- src/infill/LightningDistanceField.cpp | 5 +- src/infill/LightningLayer.cpp | 81 ++++++-------------- src/infill/NoZigZagConnectorProcessor.cpp | 18 ++--- src/layerPart.cpp | 40 +++++----- src/plugins/converters.cpp | 8 +- src/utils/Matrix4x3D.cpp | 3 +- src/utils/MinimumSpanningTree.cpp | 76 ++++++++++-------- src/utils/PolygonsSegmentIndex.cpp | 18 +++-- src/utils/VoxelUtils.cpp | 2 +- 23 files changed, 211 insertions(+), 207 deletions(-) diff --git a/include/SkeletalTrapezoidationGraph.h b/include/SkeletalTrapezoidationGraph.h index ab6e589d16..01eb198f94 100644 --- a/include/SkeletalTrapezoidationGraph.h +++ b/include/SkeletalTrapezoidationGraph.h @@ -19,28 +19,29 @@ class STHalfEdge : public HalfEdge distToGoUp() const; STHalfEdge* getNextUnconnected(); @@ -50,6 +51,7 @@ class STHalfEdgeNode : public HalfEdgeNode +class SkeletalTrapezoidationGraph : public HalfEdgeGraph { using edge_t = STHalfEdge; using node_t = STHalfEdgeNode; -public: +public: /*! * If an edge is too small, collapse it and its twin and fix the surrounding edges to ensure a consistent graph. - * + * * Don't collapse support edges, unless we can collapse the whole quad. - * + * * o-, * | "-o * | | > Don't collapse this edge only. @@ -87,7 +89,7 @@ class SkeletalTrapezoidationGraph: public HalfEdgeGraph getSource(const edge_t& edge); }; -} -#endif +} // namespace cura +#endif diff --git a/include/gcodeExport.h b/include/gcodeExport.h index 29582eb649..b3b4ef6fe4 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -19,8 +19,8 @@ #include "sliceDataStorage.h" #include "timeEstimate.h" #include "utils/AABB3D.h" //To track the used build volume for the Griffin header. -#include "utils/Point2LL.h" #include "utils/NoCopy.h" +#include "utils/Point2LL.h" namespace cura { @@ -128,7 +128,7 @@ class GCodeExport : public NoCopy double extrusion_offset_factor_; //!< default 1 Point3LL current_position_; //!< The last build plate coordinates written to gcode (which might be different from actually written gcode coordinates when the extruder offset is - //!< encoded in the gcode) + //!< encoded in the gcode) Velocity current_speed_; //!< The current speed (F values / 60) in mm/s Acceleration current_print_acceleration_; //!< The current acceleration (in mm/s^2) used for print moves (and also for travel moves if the gcode flavor doesn't have separate //!< travel acceleration) diff --git a/include/infill/LightningLayer.h b/include/infill/LightningLayer.h index e9cd2b77c0..fe5a079e43 100644 --- a/include/infill/LightningLayer.h +++ b/include/infill/LightningLayer.h @@ -4,15 +4,15 @@ #ifndef LIGHTNING_LAYER_H #define LIGHTNING_LAYER_H -#include "../utils/SquareGrid.h" -#include "../utils/polygonUtils.h" -#include "infill/LightningTreeNode.h" - #include #include #include #include +#include "../utils/SquareGrid.h" +#include "../utils/polygonUtils.h" +#include "infill/LightningTreeNode.h" + namespace cura { using LightningTreeNodeSPtr = std::shared_ptr; diff --git a/include/infill/NoZigZagConnectorProcessor.h b/include/infill/NoZigZagConnectorProcessor.h index 82724ac95f..002fb0fb7b 100644 --- a/include/infill/NoZigZagConnectorProcessor.h +++ b/include/infill/NoZigZagConnectorProcessor.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef INFILL_NO_ZIGZAG_CONNECTOR_PROCESSOR_H #define INFILL_NO_ZIGZAG_CONNECTOR_PROCESSOR_H @@ -18,9 +18,13 @@ class NoZigZagConnectorProcessor : public ZigzagConnectorProcessor { public: NoZigZagConnectorProcessor(const PointMatrix& rotation_matrix, Polygons& result) - : ZigzagConnectorProcessor(rotation_matrix, result, - false, false, // settings for zig-zag end pieces, no use here - false, 0) // settings for skipping some zags, no use here + : ZigzagConnectorProcessor( + rotation_matrix, + result, + false, + false, // settings for zig-zag end pieces, no use here + false, + 0) // settings for skipping some zags, no use here { } diff --git a/include/pathPlanning/CombPath.h b/include/pathPlanning/CombPath.h index b1811352ea..6559e8c7ee 100644 --- a/include/pathPlanning/CombPath.h +++ b/include/pathPlanning/CombPath.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef PATH_PLANNING_COMB_PATH_H #define PATH_PLANNING_COMB_PATH_H @@ -9,12 +9,12 @@ namespace cura { -class CombPath : public std::vector //!< A single path either inside or outise the parts +class CombPath : public std::vector //!< A single path either inside or outise the parts { public: bool cross_boundary = false; //!< Whether the path crosses a boundary. }; -}//namespace cura +} // namespace cura -#endif//PATH_PLANNING_COMB_PATH_H +#endif // PATH_PLANNING_COMB_PATH_H diff --git a/include/pathPlanning/LinePolygonsCrossings.h b/include/pathPlanning/LinePolygonsCrossings.h index 551577ae2e..5fb641dd9b 100644 --- a/include/pathPlanning/LinePolygonsCrossings.h +++ b/include/pathPlanning/LinePolygonsCrossings.h @@ -57,9 +57,9 @@ class LinePolygonsCrossings PointMatrix transformation_matrix_; //!< The transformation which rotates everything such that the scanline is aligned with the x-axis. Point2LL transformed_start_point_; //!< The LinePolygonsCrossings::startPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as - //!< transformed_endPoint + //!< transformed_endPoint Point2LL transformed_end_point_; //!< The LinePolygonsCrossings::endPoint as transformed by Comb::transformation_matrix such that it has (roughly) the same Y as - //!< transformed_startPoint + //!< transformed_startPoint /*! diff --git a/include/plugins/slots.h b/include/plugins/slots.h index c519553114..296e3f649b 100644 --- a/include/plugins/slots.h +++ b/include/plugins/slots.h @@ -4,6 +4,11 @@ #ifndef PLUGINS_SLOTS_H #define PLUGINS_SLOTS_H +#include +#include +#include +#include + #include "WallToolPaths.h" #include "cura/plugins/slots/broadcast/v0/broadcast.grpc.pb.h" #include "cura/plugins/slots/gcode_paths/v0/modify.grpc.pb.h" @@ -21,11 +26,6 @@ #include "utils/polygon.h" #include "utils/types/char_range_literal.h" -#include -#include -#include -#include - namespace cura { namespace plugins diff --git a/include/plugins/types.h b/include/plugins/types.h index 1a9ab54d59..eb443d0b27 100644 --- a/include/plugins/types.h +++ b/include/plugins/types.h @@ -4,16 +4,16 @@ #ifndef PLUGINS_TYPES_H #define PLUGINS_TYPES_H -#include "cura/plugins/v0/slot_id.pb.h" -#include "utils/Point2LL.h" -#include "utils/polygon.h" - -#include - #include #include #include +#include + +#include "cura/plugins/v0/slot_id.pb.h" +#include "utils/Point2LL.h" +#include "utils/polygon.h" + namespace fmt { // Custom formatter for humanreadable slot_id's diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index 3442f0b08d..7fced685eb 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -18,8 +18,8 @@ #include "settings/types/LayerIndex.h" #include "utils/AABB.h" #include "utils/AABB3D.h" -#include "utils/Point2LL.h" #include "utils/NoCopy.h" +#include "utils/Point2LL.h" #include "utils/polygon.h" // libArachne diff --git a/include/utils/MinimumSpanningTree.h b/include/utils/MinimumSpanningTree.h index 9e0f53d4cf..599ab2273b 100644 --- a/include/utils/MinimumSpanningTree.h +++ b/include/utils/MinimumSpanningTree.h @@ -1,12 +1,12 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef MINIMUMSPANNINGTREE_H #define MINIMUMSPANNINGTREE_H -#include #include #include +#include #include "Point2LL.h" @@ -26,7 +26,8 @@ class MinimumSpanningTree * While edges are meant to be undirected, these do have a start and end * point. */ - struct Edge { + struct Edge + { /** * The point at which this edge starts. */ @@ -37,6 +38,7 @@ class MinimumSpanningTree */ const Point2LL end; }; + public: MinimumSpanningTree() = default; /*! @@ -76,7 +78,6 @@ class MinimumSpanningTree AdjacencyGraph_t prim(std::vector vertices) const; }; -} +} // namespace cura #endif /* MINIMUMSPANNINGTREE_H */ - diff --git a/include/utils/PolygonsSegmentIndex.h b/include/utils/PolygonsSegmentIndex.h index b5462a7a16..ab37fa2f06 100644 --- a/include/utils/PolygonsSegmentIndex.h +++ b/include/utils/PolygonsSegmentIndex.h @@ -1,5 +1,5 @@ -//Copyright (c) 2020 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2020 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_POLYGONS_SEGMENT_INDEX_H #define UTILS_POLYGONS_SEGMENT_INDEX_H @@ -8,7 +8,7 @@ #include "PolygonsPointIndex.h" -namespace cura +namespace cura { /*! @@ -29,4 +29,4 @@ class PolygonsSegmentIndex : public PolygonsPointIndex } // namespace cura -#endif//UTILS_POLYGONS_SEGMENT_INDEX_H +#endif // UTILS_POLYGONS_SEGMENT_INDEX_H diff --git a/include/utils/SVG.h b/include/utils/SVG.h index 82646e1df6..81c5b078af 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -8,8 +8,8 @@ #include "AABB.h" #include "ExtrusionLine.h" //To accept variable-width paths. -#include "Point2LL.h" #include "NoCopy.h" +#include "Point2LL.h" namespace cura { diff --git a/include/utils/orderOptimizer.h b/include/utils/orderOptimizer.h index e990cecbac..cf3abaa2ba 100644 --- a/include/utils/orderOptimizer.h +++ b/include/utils/orderOptimizer.h @@ -1,25 +1,27 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef UTILS_ORDER_OPTIMIZER_H #define UTILS_ORDER_OPTIMIZER_H #include -#include #include #include // pair +#include + #include "Point2LL.h" -namespace cura { - +namespace cura +{ + /*! * Order optimization class. - * + * * Utility class for optimizing the path order by minimizing the cyclic distance traveled between several items. - * + * * The path is heuristically optimized in a way such that each node is visited and the salesman which is travelling ends up where he started. */ -template +template class OrderOptimizer { public: @@ -38,13 +40,13 @@ class OrderOptimizer std::list optimize(const Point2LL& start_position); }; -template +template void OrderOptimizer::addItem(const Point2LL location, const T item) { items.emplace_back(location, item); } -template +template std::list OrderOptimizer::optimize(const Point2LL& start_position) { // Use the nearest mesh ordering @@ -62,7 +64,7 @@ std::list OrderOptimizer::optimize(const Point2LL& start_position) } const Point2LL* last_item_position = &start_position; - while (!item_idx_list.empty()) + while (! item_idx_list.empty()) { coord_t shortest_distance = POINT_MAX; size_t shortest_distance_item_idx = -1; @@ -89,6 +91,6 @@ std::list OrderOptimizer::optimize(const Point2LL& start_position) } -}//namespace cura +} // namespace cura -#endif//UTILS_ORDER_OPTIMIZER_H +#endif // UTILS_ORDER_OPTIMIZER_H diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 9ad194fb47..a9932a7116 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -662,8 +662,8 @@ void LayerPlan::addWallLine( { // if we are accelerating after a bridge line, the segment length is less than the whole line length Point2LL segment_end = (speed_factor == 1 || distance_to_line_end < acceleration_segment_len) - ? line_end - : cur_point + (line_end - cur_point) * acceleration_segment_len / distance_to_line_end; + ? line_end + : cur_point + (line_end - cur_point) * acceleration_segment_len / distance_to_line_end; // flow required for the next line segment - when accelerating after a bridge segment, the flow is increased in inverse proportion to the speed_factor // so the slower the feedrate, the greater the flow - the idea is to get the extruder back to normal pressure as quickly as possible diff --git a/src/infill/LightningDistanceField.cpp b/src/infill/LightningDistanceField.cpp index 923eb1e8b8..1afea87a24 100644 --- a/src/infill/LightningDistanceField.cpp +++ b/src/infill/LightningDistanceField.cpp @@ -28,8 +28,9 @@ LightningDistanceField::LightningDistanceField(const coord_t& radius, const Poly [&radius](const UnsupCell& a, const UnsupCell& b) { constexpr coord_t prime_for_hash = 191; - return std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius ? a.dist_to_boundary_ < b.dist_to_boundary_ - : (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); + return std::abs(b.dist_to_boundary_ - a.dist_to_boundary_) > radius + ? a.dist_to_boundary_ < b.dist_to_boundary_ + : (std::hash{}(a.loc_) % prime_for_hash) < (std::hash{}(b.loc_) % prime_for_hash); }); for (auto it = unsupported_points_.begin(); it != unsupported_points_.end(); ++it) { diff --git a/src/infill/LightningLayer.cpp b/src/infill/LightningLayer.cpp index cd689e1bfc..6cefaff8be 100644 --- a/src/infill/LightningLayer.cpp +++ b/src/infill/LightningLayer.cpp @@ -1,5 +1,5 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/LightningLayer.h" //The class we're implementing. @@ -8,9 +8,9 @@ #include "infill/LightningDistanceField.h" #include "infill/LightningTreeNode.h" #include "sliceDataStorage.h" -#include "utils/linearAlg2D.h" #include "utils/SVG.h" #include "utils/SparsePointGridInclusive.h" +#include "utils/linearAlg2D.h" using namespace cura; @@ -34,25 +34,22 @@ Point2LL GroundingLocation::p() const void LightningLayer::fillLocator(SparseLightningTreeNodeGrid& tree_node_locator) { - std::function add_node_to_locator_func = - [&tree_node_locator](LightningTreeNodeSPtr node) - { - tree_node_locator.insert(node->getLocation(), node); - }; + std::function add_node_to_locator_func = [&tree_node_locator](LightningTreeNodeSPtr node) + { + tree_node_locator.insert(node->getLocation(), node); + }; for (auto& tree : tree_roots) { tree->visitNodes(add_node_to_locator_func); } } -void LightningLayer::generateNewTrees -( +void LightningLayer::generateNewTrees( const Polygons& current_overhang, const Polygons& current_outlines, const LocToLineGrid& outlines_locator, const coord_t supporting_radius, - const coord_t wall_supporting_radius -) + const coord_t wall_supporting_radius) { LightningDistanceField distance_field(supporting_radius, current_outlines, current_overhang); @@ -64,16 +61,8 @@ void LightningLayer::generateNewTrees Point2LL unsupported_location; while (distance_field.tryGetNextPoint(&unsupported_location)) { - GroundingLocation grounding_loc = - getBestGroundingLocation - ( - unsupported_location, - current_outlines, - outlines_locator, - supporting_radius, - wall_supporting_radius, - tree_node_locator - ); + GroundingLocation grounding_loc + = getBestGroundingLocation(unsupported_location, current_outlines, outlines_locator, supporting_radius, wall_supporting_radius, tree_node_locator); LightningTreeNodeSPtr new_parent; LightningTreeNodeSPtr new_child; @@ -89,16 +78,14 @@ void LightningLayer::generateNewTrees } } -GroundingLocation LightningLayer::getBestGroundingLocation -( +GroundingLocation LightningLayer::getBestGroundingLocation( const Point2LL& unsupported_location, const Polygons& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, const coord_t wall_supporting_radius, const SparseLightningTreeNodeGrid& tree_node_locator, - const LightningTreeNodeSPtr& exclude_tree -) + const LightningTreeNodeSPtr& exclude_tree) { ClosestPolygonPoint cpp = PolygonUtils::findClosest(unsupported_location, current_outlines); Point2LL node_location = cpp.p(); @@ -114,12 +101,8 @@ GroundingLocation LightningLayer::getBestGroundingLocation for (auto& candidate_wptr : candidate_trees) { auto candidate_sub_tree = candidate_wptr.lock(); - if - ( - (candidate_sub_tree && candidate_sub_tree != exclude_tree) && - ! (exclude_tree && exclude_tree->hasOffspring(candidate_sub_tree)) && - ! PolygonUtils::polygonCollidesWithLineSegment(unsupported_location, candidate_sub_tree->getLocation(), outline_locator, &dummy) - ) + if ((candidate_sub_tree && candidate_sub_tree != exclude_tree) && ! (exclude_tree && exclude_tree->hasOffspring(candidate_sub_tree)) + && ! PolygonUtils::polygonCollidesWithLineSegment(unsupported_location, candidate_sub_tree->getLocation(), outline_locator, &dummy)) { const coord_t candidate_dist = candidate_sub_tree->getWeightedDistance(unsupported_location, supporting_radius); if (candidate_dist < current_dist) @@ -141,13 +124,7 @@ GroundingLocation LightningLayer::getBestGroundingLocation } } -bool LightningLayer::attach -( - const Point2LL& unsupported_location, - const GroundingLocation& grounding_loc, - LightningTreeNodeSPtr& new_child, - LightningTreeNodeSPtr& new_root -) +bool LightningLayer::attach(const Point2LL& unsupported_location, const GroundingLocation& grounding_loc, LightningTreeNodeSPtr& new_child, LightningTreeNodeSPtr& new_root) { // Update trees & distance fields. if (grounding_loc.boundary_location) @@ -164,14 +141,12 @@ bool LightningLayer::attach } } -void LightningLayer::reconnectRoots -( +void LightningLayer::reconnectRoots( std::vector& to_be_reconnected_tree_roots, const Polygons& current_outlines, const LocToLineGrid& outline_locator, const coord_t supporting_radius, - const coord_t wall_supporting_radius -) + const coord_t wall_supporting_radius) { constexpr coord_t tree_connecting_ignore_offset = 100; @@ -202,18 +177,10 @@ void LightningLayer::reconnectRoots } } - const coord_t tree_connecting_ignore_width = wall_supporting_radius - tree_connecting_ignore_offset; // Ideally, the boundary size in which the valence rule is ignored would be configurable. - GroundingLocation ground = - getBestGroundingLocation - ( - root_ptr->getLocation(), - current_outlines, - outline_locator, - supporting_radius, - tree_connecting_ignore_width, - tree_node_locator, - root_ptr - ); + const coord_t tree_connecting_ignore_width + = wall_supporting_radius - tree_connecting_ignore_offset; // Ideally, the boundary size in which the valence rule is ignored would be configurable. + GroundingLocation ground + = getBestGroundingLocation(root_ptr->getLocation(), current_outlines, outline_locator, supporting_radius, tree_connecting_ignore_width, tree_node_locator, root_ptr); if (ground.boundary_location) { if (ground.boundary_location.value().p() == root_ptr->getLocation()) @@ -234,8 +201,8 @@ void LightningLayer::reconnectRoots { assert(ground.tree_node); assert(ground.tree_node != root_ptr); - assert(!root_ptr->hasOffspring(ground.tree_node)); - assert(!ground.tree_node->hasOffspring(root_ptr)); + assert(! root_ptr->hasOffspring(ground.tree_node)); + assert(! ground.tree_node->hasOffspring(root_ptr)); auto attach_ptr = root_ptr->closestNode(ground.tree_node->getLocation()); attach_ptr->reroot(); diff --git a/src/infill/NoZigZagConnectorProcessor.cpp b/src/infill/NoZigZagConnectorProcessor.cpp index 5deaa551ac..1ffa6532f4 100644 --- a/src/infill/NoZigZagConnectorProcessor.cpp +++ b/src/infill/NoZigZagConnectorProcessor.cpp @@ -1,27 +1,27 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "utils/macros.h" +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "infill/NoZigZagConnectorProcessor.h" +#include "utils/macros.h" + -namespace cura +namespace cura { void NoZigZagConnectorProcessor::registerVertex(const Point2LL&) { - //No need to add anything. + // No need to add anything. } void NoZigZagConnectorProcessor::registerScanlineSegmentIntersection(const Point2LL&, int) { - //No need to add anything. + // No need to add anything. } void NoZigZagConnectorProcessor::registerPolyFinished() { - //No need to add anything. + // No need to add anything. } -} // namespace cura +} // namespace cura diff --git a/src/layerPart.cpp b/src/layerPart.cpp index 2a47dd8563..b0fb7ece93 100644 --- a/src/layerPart.cpp +++ b/src/layerPart.cpp @@ -1,16 +1,16 @@ -//Copyright (c) 2023 UltiMaker -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "layerPart.h" -#include "sliceDataStorage.h" -#include "slicer.h" + +#include "progress/Progress.h" #include "settings/EnumSettings.h" //For ESurfaceMode. #include "settings/Settings.h" -#include "progress/Progress.h" -#include "utils/ThreadPool.h" - +#include "sliceDataStorage.h" +#include "slicer.h" #include "utils/PolylineStitcher.h" #include "utils/Simplify.h" //Simplifying the layers after creating them. +#include "utils/ThreadPool.h" /* The layer-part creation step is the first step in creating actual useful data for 3D printing. @@ -24,7 +24,8 @@ And all every bit inside a single part can be printed without the nozzle leaving It's also the first step that stores the result in the "data storage" so all other steps can access it. */ -namespace cura { +namespace cura +{ void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, SlicerLayer* layer) { @@ -35,7 +36,7 @@ void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, Sl const bool union_all_remove_holes = settings.get("meshfix_union_all_remove_holes"); if (union_all_remove_holes) { - for(unsigned int i=0; ipolygons.size(); i++) + for (unsigned int i = 0; i < layer->polygons.size(); i++) { if (layer->polygons[i].orientation()) layer->polygons[i].reverse(); @@ -45,7 +46,7 @@ void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, Sl std::vector result; const bool union_layers = settings.get("meshfix_union_all"); const ESurfaceMode surface_only = settings.get("magic_mesh_surface_mode"); - if (surface_only == ESurfaceMode::SURFACE && !union_layers) + if (surface_only == ESurfaceMode::SURFACE && ! union_layers) { // Don't do anything with overlapping areas; no union nor xor result.reserve(layer->polygons.size()); for (const PolygonRef poly : layer->polygons) @@ -59,7 +60,7 @@ void createLayerWithParts(const Settings& settings, SliceLayer& storageLayer, Sl result = layer->polygons.splitIntoParts(union_layers || union_all_remove_holes); } - for(auto & part : result) + for (auto& part : result) { storageLayer.parts.emplace_back(); storageLayer.parts.back().outline = part; @@ -76,12 +77,15 @@ void createLayerParts(SliceMeshStorage& mesh, Slicer* slicer) const auto total_layers = slicer->layers.size(); assert(mesh.layers.size() == total_layers); - cura::parallel_for(0, total_layers, [slicer, &mesh](size_t layer_nr) - { - SliceLayer& layer_storage = mesh.layers[layer_nr]; - SlicerLayer& slice_layer = slicer->layers[layer_nr]; - createLayerWithParts(mesh.settings, layer_storage, &slice_layer); - }); + cura::parallel_for( + 0, + total_layers, + [slicer, &mesh](size_t layer_nr) + { + SliceLayer& layer_storage = mesh.layers[layer_nr]; + SlicerLayer& slice_layer = slicer->layers[layer_nr]; + createLayerWithParts(mesh.settings, layer_storage, &slice_layer); + }); for (LayerIndex layer_nr = total_layers - 1; layer_nr >= 0; layer_nr--) { @@ -94,4 +98,4 @@ void createLayerParts(SliceMeshStorage& mesh, Slicer* slicer) } } -}//namespace cura +} // namespace cura diff --git a/src/plugins/converters.cpp b/src/plugins/converters.cpp index c637f44c45..2f8eabd151 100644 --- a/src/plugins/converters.cpp +++ b/src/plugins/converters.cpp @@ -4,6 +4,10 @@ #include "plugins/converters.h" +#include +#include +#include + #include "GCodePathConfig.h" #include "WallToolPaths.h" #include "pathPlanning/GCodePath.h" @@ -12,10 +16,6 @@ #include "settings/types/LayerIndex.h" #include "utils/polygon.h" -#include -#include -#include - namespace cura::plugins { diff --git a/src/utils/Matrix4x3D.cpp b/src/utils/Matrix4x3D.cpp index 225be8db8a..43b255379f 100644 --- a/src/utils/Matrix4x3D.cpp +++ b/src/utils/Matrix4x3D.cpp @@ -1,9 +1,10 @@ // Copyright (c) 2022 Ultimaker B.V. // CuraEngine is released under the terms of the AGPLv3 or higher. +#include "utils/Matrix4x3D.h" //The definitions we're implementing. + #include "settings/types/Ratio.h" //Scale factor. #include "utils/Point2LL.h" //Conversion directly into integer-based coordinates. -#include "utils/Matrix4x3D.h" //The definitions we're implementing. #include "utils/Point3D.h" //This matrix gets applied to floating point coordinates. namespace cura diff --git a/src/utils/MinimumSpanningTree.cpp b/src/utils/MinimumSpanningTree.cpp index f32b104913..36e7c48e97 100644 --- a/src/utils/MinimumSpanningTree.cpp +++ b/src/utils/MinimumSpanningTree.cpp @@ -1,17 +1,18 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/MinimumSpanningTree.h" -#include #include +#include namespace cura { -MinimumSpanningTree::MinimumSpanningTree(std::vector vertices) : adjacency_graph(prim(vertices)) +MinimumSpanningTree::MinimumSpanningTree(std::vector vertices) + : adjacency_graph(prim(vertices)) { - //Just copy over the fields. + // Just copy over the fields. } auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGraph_t @@ -19,7 +20,7 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> Adjacenc AdjacencyGraph_t result; if (vertices.empty()) { - return result; //No vertices, so we can't create edges either. + return result; // No vertices, so we can't create edges either. } // If there's only one vertex, we can't go creating any edges so just add the point to the adjacency list with no // edges @@ -33,8 +34,8 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> Adjacenc result.reserve(vertices.size()); std::vector vertices_list(vertices.begin(), vertices.end()); - std::unordered_map smallest_distance; //The shortest distance to the current tree. - std::unordered_map smallest_distance_to; //Which point the shortest distance goes towards. + std::unordered_map smallest_distance; // The shortest distance to the current tree. + std::unordered_map smallest_distance_to; // Which point the shortest distance goes towards. smallest_distance.reserve(vertices_list.size()); smallest_distance_to.reserve(vertices_list.size()); for (size_t vertex_index = 1; vertex_index < vertices_list.size(); vertex_index++) @@ -44,40 +45,43 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> Adjacenc smallest_distance_to[&vert] = &vertices_list[0]; } - while (result.size() < vertices_list.size()) //All of the vertices need to be in the tree at the end. + while (result.size() < vertices_list.size()) // All of the vertices need to be in the tree at the end. { - //Choose the closest vertex to connect to that is not yet in the tree. - //This search is O(V) right now, which can be made down to O(log(V)). This reduces the overall time complexity from O(V*V) to O(V*log(E)). - //However that requires an implementation of a heap that supports the decreaseKey operation, which is not in the std library. - //TODO: Implement this? + // Choose the closest vertex to connect to that is not yet in the tree. + // This search is O(V) right now, which can be made down to O(log(V)). This reduces the overall time complexity from O(V*V) to O(V*log(E)). + // However that requires an implementation of a heap that supports the decreaseKey operation, which is not in the std library. + // TODO: Implement this? using MapValue = std::pair; - const auto closest = std::min_element(smallest_distance.begin(), smallest_distance.end(), - [](const MapValue& a, const MapValue& b) { - return a.second < b.second; - }); + const auto closest = std::min_element( + smallest_distance.begin(), + smallest_distance.end(), + [](const MapValue& a, const MapValue& b) + { + return a.second < b.second; + }); - //Add this point to the graph and remove it from the candidates. + // Add this point to the graph and remove it from the candidates. const Point2LL* closest_point = closest->first; const Point2LL other_end = *smallest_distance_to[closest_point]; if (result.find(*closest_point) == result.end()) { result[*closest_point] = std::vector(); } - result[*closest_point].push_back({*closest_point, other_end}); + result[*closest_point].push_back({ *closest_point, other_end }); if (result.find(other_end) == result.end()) { result[other_end] = std::vector(); } - result[other_end].push_back({other_end, *closest_point}); - smallest_distance.erase(closest_point); //Remove it so we don't check for these points again. + result[other_end].push_back({ other_end, *closest_point }); + smallest_distance.erase(closest_point); // Remove it so we don't check for these points again. smallest_distance_to.erase(closest_point); - //Update the distances of all points that are not in the graph. + // Update the distances of all points that are not in the graph. for (std::pair point_and_distance : smallest_distance) { const coord_t new_distance = vSize2(*closest_point - *point_and_distance.first); const coord_t old_distance = point_and_distance.second; - if (new_distance < old_distance) //New point is closer. + if (new_distance < old_distance) // New point is closer. { smallest_distance[point_and_distance.first] = new_distance; smallest_distance_to[point_and_distance.first] = closest_point; @@ -95,8 +99,14 @@ std::vector MinimumSpanningTree::adjacentNodes(Point2LL node) const if (adjacency_entry != adjacency_graph.end()) { const auto& edges = adjacency_entry->second; - std::transform(edges.begin(), edges.end(), std::back_inserter(result), - [&node](const Edge& e) { return (e.start == node) ? e.end : e.start; }); + std::transform( + edges.begin(), + edges.end(), + std::back_inserter(result), + [&node](const Edge& e) + { + return (e.start == node) ? e.end : e.start; + }); } return result; } @@ -106,7 +116,7 @@ std::vector MinimumSpanningTree::leaves() const std::vector result; for (std::pair> node : adjacency_graph) { - if (node.second.size() <= 1) //Leaves are nodes that have only one adjacent edge, or just the one node if the tree contains one node. + if (node.second.size() <= 1) // Leaves are nodes that have only one adjacent edge, or just the one node if the tree contains one node. { result.push_back(node.first); } @@ -117,10 +127,16 @@ std::vector MinimumSpanningTree::leaves() const std::vector MinimumSpanningTree::vertices() const { std::vector result; - using MapValue = std::pair>; - std::transform(adjacency_graph.begin(), adjacency_graph.end(), std::back_inserter(result), - [](const MapValue& node) { return node.first; }); + using MapValue = std::pair>; + std::transform( + adjacency_graph.begin(), + adjacency_graph.end(), + std::back_inserter(result), + [](const MapValue& node) + { + return node.first; + }); return result; } -} +} // namespace cura diff --git a/src/utils/PolygonsSegmentIndex.cpp b/src/utils/PolygonsSegmentIndex.cpp index 08b6238586..0b402a03f6 100644 --- a/src/utils/PolygonsSegmentIndex.cpp +++ b/src/utils/PolygonsSegmentIndex.cpp @@ -1,23 +1,29 @@ -//Copyright (c) 2022 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2022 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/PolygonsSegmentIndex.h" namespace cura { -PolygonsSegmentIndex::PolygonsSegmentIndex() : PolygonsPointIndex() {} +PolygonsSegmentIndex::PolygonsSegmentIndex() + : PolygonsPointIndex() +{ +} -PolygonsSegmentIndex::PolygonsSegmentIndex(const Polygons* polygons, unsigned int poly_idx, unsigned int point_idx) : PolygonsPointIndex(polygons, poly_idx, point_idx) {} +PolygonsSegmentIndex::PolygonsSegmentIndex(const Polygons* polygons, unsigned int poly_idx, unsigned int point_idx) + : PolygonsPointIndex(polygons, poly_idx, point_idx) +{ +} Point2LL PolygonsSegmentIndex::from() const { return PolygonsPointIndex::p(); } - + Point2LL PolygonsSegmentIndex::to() const { return PolygonsSegmentIndex::next().p(); } -} +} // namespace cura diff --git a/src/utils/VoxelUtils.cpp b/src/utils/VoxelUtils.cpp index b55f40c0ce..ddac6713d5 100644 --- a/src/utils/VoxelUtils.cpp +++ b/src/utils/VoxelUtils.cpp @@ -153,7 +153,7 @@ bool VoxelUtils::walkDilatedAreas(const Polygons& polys, coord_t z, const Dilati { Polygons translated = polys; const Point3LL translation = (Point3LL(1, 1, 1) - kernel.kernel_size_ % 2) * cell_size_ / 2 // offset half a cell when using a n even kernel - - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. + - cell_size_ / 2; // offset half a cell so that the dots of spreadDotsArea are centered on the middle of the cell isntead of the lower corners. if (translation.x_ && translation.y_) { translated.translate(Point2LL(translation.x_, translation.y_)); From 67eb8e03b6f6fe707b658ccd7f601343aa313231 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 22 Nov 2023 10:59:55 +0100 Subject: [PATCH 093/218] 'Fix' weird Win64 issue with ranges-library. The file 'subrange.hpp' of the ranges library wouldn't compile properly on Windows, work around this strange limitation. part of CURA-11364 --- src/main.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9f02aba974..1965a329cb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,6 @@ #include #include -#include #include "utils/format/filesystem_path.h" #endif @@ -80,14 +79,7 @@ int main(int argc, char** argv) spdlog::info("Sentry config path: {}", config_path); sentry_options_set_database_path(options, std::filesystem::absolute(config_path).generic_string().c_str()); constexpr std::string_view cura_engine_version{ CURA_ENGINE_VERSION }; - const auto version = semver::from_string( - cura_engine_version - | ranges::views::take_while( - [](const auto& c) - { - return c != '+'; - }) - | ranges::to); + const auto version = semver::from_string(cura_engine_version.substr(0, cura_engine_version.find_first_of('+'))); if (ranges::contains(cura_engine_version, '+') || version.prerelease_type == semver::prerelease::alpha) { // Not a production build From 511971f313f143c3562128a5b8b7fb4f72b0b636 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 12:07:17 +0100 Subject: [PATCH 094/218] Fixed unused variables warnings --- include/ExtruderPlan.h | 3 +-- include/FffGcodeWriter.h | 14 +++------- include/PathOrderOptimizer.h | 12 +++------ include/Preheat.h | 11 ++++---- include/SkeletalTrapezoidationGraph.h | 2 +- include/TreeSupportTipGenerator.h | 2 +- include/plugins/slots.h | 2 +- include/support.h | 13 ++++----- src/BeadingStrategy/BeadingStrategy.cpp | 2 +- src/FffGcodeWriter.cpp | 11 +++----- src/FffPolygonGenerator.cpp | 3 ++- src/InterlockingGenerator.cpp | 2 +- src/LayerPlan.cpp | 8 +++--- src/LayerPlanBuffer.cpp | 10 ++----- src/Preheat.cpp | 2 +- src/SkeletalTrapezoidation.cpp | 12 +++------ src/SkeletalTrapezoidationGraph.cpp | 2 +- src/TreeModelVolumes.cpp | 4 +-- src/TreeSupport.cpp | 2 +- src/TreeSupportTipGenerator.cpp | 2 +- src/communication/CommandLine.cpp | 2 +- src/plugins/converters.cpp | 10 ++++--- src/skin.cpp | 1 - src/support.cpp | 35 +++---------------------- src/utils/Simplify.cpp | 6 ++--- 25 files changed, 56 insertions(+), 117 deletions(-) diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index 17e45d0013..7f534d1ec8 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -93,11 +93,10 @@ class ExtruderPlan /*! * Applying fan speed changes for minimal layer times. * - * \param starting_position The position the head was before starting this extruder plan * \param minTime Maximum minimum layer time for all extruders in this layer * \param time_other_extr_plans The time spent on the other extruder plans in this layer */ - void processFanSpeedForMinimalLayerTime(Point2LL starting_position, Duration maximum_cool_min_layer_time, double time_other_extr_plans); + void processFanSpeedForMinimalLayerTime(Duration maximum_cool_min_layer_time, double time_other_extr_plans); /*! * Applying fan speed changes for the first layers. diff --git a/include/FffGcodeWriter.h b/include/FffGcodeWriter.h index 68c1cb9986..46b9657968 100644 --- a/include/FffGcodeWriter.h +++ b/include/FffGcodeWriter.h @@ -312,12 +312,11 @@ class FffGcodeWriter : public NoCopy /*! * Add a single layer from a single mesh-volume to the layer plan \p gcodeLayer in mesh surface mode. * - * \param[in] storage where the slice data is stored. * \param mesh The mesh to add to the layer plan \p gcodeLayer. * \param mesh_config the line config with which to print a print feature * \param gcodeLayer The initial planning of the gcode of the layer. */ - void addMeshLayerToGCode_meshSurfaceMode(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const MeshPathConfigs& mesh_config, LayerPlan& gcodeLayer) const; + void addMeshLayerToGCode_meshSurfaceMode(const SliceMeshStorage& mesh, const MeshPathConfigs& mesh_config, LayerPlan& gcodeLayer) const; /*! * Add the open polylines from a single layer from a single mesh-volume to the layer plan \p gcodeLayer for mesh the surface modes. @@ -398,13 +397,8 @@ class FffGcodeWriter : public NoCopy * \param part The part for which to create gcode. * \return Whether this function added anything to the layer plan. */ - bool processMultiLayerInfill( - const SliceDataStorage& storage, - LayerPlan& gcodeLayer, - const SliceMeshStorage& mesh, - const size_t extruder_nr, - const MeshPathConfigs& mesh_config, - const SliceLayerPart& part) const; + bool processMultiLayerInfill(LayerPlan& gcodeLayer, const SliceMeshStorage& mesh, const size_t extruder_nr, const MeshPathConfigs& mesh_config, const SliceLayerPart& part) + const; /*! * \brief Add normal sparse infill for a given part in a layer. @@ -549,7 +543,6 @@ class FffGcodeWriter : public NoCopy * \param[in] storage where the slice data is stored. * \param gcode_layer The initial planning of the gcode of the layer. * \param mesh The mesh for which to add to the layer plan \p gcode_layer. - * \param mesh_config The mesh-config for which to add to the layer plan \p gcode_layer. * \param extruder_nr The extruder for which to print all features of the mesh which should be printed with this extruder * \param area The area to fill * \param config the line config with which to print the print feature @@ -566,7 +559,6 @@ class FffGcodeWriter : public NoCopy const SliceDataStorage& storage, LayerPlan& gcode_layer, const SliceMeshStorage& mesh, - const MeshPathConfigs& mesh_config, const size_t extruder_nr, const Polygons& area, const GCodePathConfig& config, diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 4dd1e47332..94b4c74344 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -220,7 +220,7 @@ class PathOrderOptimizer } else { - optimized_order = getOptimizerOrderWithConstraints(line_bucket_grid, snap_radius, *order_requirements_); + optimized_order = getOptimizerOrderWithConstraints(*order_requirements_); } @@ -300,10 +300,6 @@ class PathOrderOptimizer std::unordered_map picked(paths_.size()); // Fixed size boolean flag for whether each path is already in the optimized vector. - auto isPicked = [&picked](OrderablePath* c) - { - return picked[c]; - }; auto notPicked = [&picked](OrderablePath* c) { return ! picked[c]; @@ -356,8 +352,7 @@ class PathOrderOptimizer return optimized_order; } - std::vector - getOptimizerOrderWithConstraints(SparsePointGridInclusive line_bucket_grid, size_t snap_radius, const std::unordered_multimap& order_requirements) + std::vector getOptimizerOrderWithConstraints(const std::unordered_multimap& order_requirements) { std::vector optimized_order; // To store our result in. @@ -422,7 +417,7 @@ class PathOrderOptimizer }; const std::function handle_node - = [¤t_position, &optimized_order, this](const Path current_node, const std::nullptr_t _state) + = [¤t_position, &optimized_order, this](const Path current_node, [[maybe_unused]] const std::nullptr_t state) { // We should make map from node <-> path for this stuff for (auto& path : paths_) @@ -652,7 +647,6 @@ class PathOrderOptimizer { // For most seam types, the shortest distance matters. Not for SHARPEST_CORNER though. // For SHARPEST_CORNER, use a fixed starting score of 0. - const coord_t distance = (combing_boundary_ == nullptr) ? getDirectDistance(here, target_pos) : getCombingDistance(here, target_pos); const double score_distance = (seam_config_.type_ == EZSeamType::SHARPEST_CORNER && seam_config_.corner_pref_ != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE) ? MM2INT(10) : vSize2(here - target_pos); diff --git a/include/Preheat.h b/include/Preheat.h index dba5d72c08..e9ff74ac23 100644 --- a/include/Preheat.h +++ b/include/Preheat.h @@ -4,13 +4,13 @@ #ifndef PREHEAT_H #define PREHEAT_H +#include // max +#include + #include "settings/types/Duration.h" #include "settings/types/Ratio.h" #include "settings/types/Temperature.h" -#include // max -#include - namespace cura { @@ -45,11 +45,10 @@ class Preheat * or the initial layer temperature. * * \param extruder The extruder train - * \param flow The flow for which to get the optimal temperature * \param is_initial_layer Whether the initial layer temperature should be returned instead of flow-based temperature * \return The corresponding optimal temperature */ - Temperature getTemp(const size_t extruder, const Ratio& flow, const bool is_initial_layer); + Temperature getTemp(const size_t extruder, const bool is_initial_layer); /*! * Decide when to start warming up again after starting to cool down towards \p temp_mid. @@ -112,4 +111,4 @@ class Preheat } // namespace cura -#endif // PREHEAT_H \ No newline at end of file +#endif // PREHEAT_H diff --git a/include/SkeletalTrapezoidationGraph.h b/include/SkeletalTrapezoidationGraph.h index 01eb198f94..6f6bb99ebc 100644 --- a/include/SkeletalTrapezoidationGraph.h +++ b/include/SkeletalTrapezoidationGraph.h @@ -85,7 +85,7 @@ class SkeletalTrapezoidationGraph : public HalfEdgeGraph, Polygons, Polygons> operator()(auto&&... args) + std::tuple, Polygons, Polygons> operator()([[maybe_unused]] auto&&... args) { // this code is only reachable when no slot is registered while the infill type is requested to be // generated by a plugin; this should not be possible to set up in the first place. Return an empty diff --git a/include/support.h b/include/support.h index 16819c0c90..81b1218929 100644 --- a/include/support.h +++ b/include/support.h @@ -4,12 +4,12 @@ #ifndef SUPPORT_H #define SUPPORT_H -#include "settings/types/LayerIndex.h" -#include "utils/polygon.h" - #include #include +#include "settings/types/LayerIndex.h" +#include "utils/polygon.h" + namespace cura { @@ -219,11 +219,9 @@ class AreaSupport * \param storage Where to store the resulting support. * \param supportLayer_up The support areas the layer above. * \param supportLayer_this The overhang areas of the current layer at hand. - * \param smoothing_distance Maximal distance in the X/Y directions of a - * line segment which is to be smoothed out. * \return The joined support areas for this layer. */ - static Polygons join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this, const coord_t smoothing_distance); + static Polygons join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this); /*! * Move the support up from model (cut away polygons to ensure bottom z distance) @@ -322,11 +320,10 @@ class AreaSupport * generates varying xy disallowed areas for \param layer_idx where the offset distance is dependent on the wall angle * * \param storage Data storage containing the input layer data and - * \param settings The settings to use to calculate the offsets * \param layer_idx The layer for which the disallowed areas are to be calcualted * */ - static Polygons generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const Settings& infill_settings, const LayerIndex layer_idx); + static Polygons generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx); }; diff --git a/src/BeadingStrategy/BeadingStrategy.cpp b/src/BeadingStrategy/BeadingStrategy.cpp index 88b295b7ad..9383d796f0 100644 --- a/src/BeadingStrategy/BeadingStrategy.cpp +++ b/src/BeadingStrategy/BeadingStrategy.cpp @@ -50,7 +50,7 @@ double BeadingStrategy::getTransitionAnchorPos(coord_t lower_bead_count) const return 1.0 - static_cast(transition_point - lower_optimum) / static_cast(upper_optimum - lower_optimum); } -std::vector BeadingStrategy::getNonlinearThicknesses(coord_t lower_bead_count) const +std::vector BeadingStrategy::getNonlinearThicknesses([[maybe_unused]] coord_t lower_bead_count) const { return std::vector(); } diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 8c0577e3bc..4d54b3bb23 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -1092,7 +1092,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS == mesh->settings.get("wall_0_extruder_nr").extruder_nr_ // mesh surface mode should always only be printed with the outer wall extruder! ) { - addMeshLayerToGCode_meshSurfaceMode(storage, *mesh, mesh_config, gcode_layer); + addMeshLayerToGCode_meshSurfaceMode(*mesh, mesh_config, gcode_layer); } else { @@ -1476,8 +1476,7 @@ std::vector FffGcodeWriter::calculateMeshOrder(const SliceDataStorage& s return ret; } -void FffGcodeWriter::addMeshLayerToGCode_meshSurfaceMode(const SliceDataStorage& storage, const SliceMeshStorage& mesh, const MeshPathConfigs& mesh_config, LayerPlan& gcode_layer) - const +void FffGcodeWriter::addMeshLayerToGCode_meshSurfaceMode(const SliceMeshStorage& mesh, const MeshPathConfigs& mesh_config, LayerPlan& gcode_layer) const { if (gcode_layer.getLayerNr() > mesh.layer_nr_max_filled_layer) { @@ -1630,13 +1629,12 @@ bool FffGcodeWriter::processInfill( { return false; } - bool added_something = processMultiLayerInfill(storage, gcode_layer, mesh, extruder_nr, mesh_config, part); + bool added_something = processMultiLayerInfill(gcode_layer, mesh, extruder_nr, mesh_config, part); added_something = added_something | processSingleLayerInfill(storage, gcode_layer, mesh, extruder_nr, mesh_config, part); return added_something; } bool FffGcodeWriter::processMultiLayerInfill( - const SliceDataStorage& storage, LayerPlan& gcode_layer, const SliceMeshStorage& mesh, const size_t extruder_nr, @@ -2698,7 +2696,6 @@ void FffGcodeWriter::processRoofing( storage, gcode_layer, mesh, - mesh_config, extruder_nr, skin_part.roofing_fill, mesh_config.roofing_config, @@ -2879,7 +2876,6 @@ void FffGcodeWriter::processTopBottom( storage, gcode_layer, mesh, - mesh_config, extruder_nr, skin_part.skin_fill, *skin_config, @@ -2896,7 +2892,6 @@ void FffGcodeWriter::processSkinPrintFeature( const SliceDataStorage& storage, LayerPlan& gcode_layer, const SliceMeshStorage& mesh, - const MeshPathConfigs& mesh_config, const size_t extruder_nr, const Polygons& area, const GCodePathConfig& config, diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index fa25f1e1db..0f731b9bae 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -1090,7 +1090,8 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) = (mesh.settings.get("adhesion_type") == EPlatformAdhesion::BRIM) ? 1 : 0; // don't make fuzzy skin on first layer if there's a brim auto hole_area = Polygons(); - std::function accumulate_is_in_hole = [](const bool& prev_result, const ExtrusionJunction& junction) + std::function accumulate_is_in_hole + = []([[maybe_unused]] const bool& prev_result, [[maybe_unused]] const ExtrusionJunction& junction) { return false; }; diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index ba4528eb51..6ac2efb7d1 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -78,7 +78,7 @@ std::pair InterlockingGenerator::growBorderAreasPerpendicula Polygons from_border_b = b.difference(total_shrunk); Polygons temp_a, temp_b; - for (auto _ : ranges::views::iota(0, (detect / min_line) + 2)) + for (coord_t i = 0; i < (detect / min_line) + 2; ++i) { temp_a = from_border_a.offset(min_line); temp_b = from_border_b.offset(min_line); diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index a9932a7116..6e5ce67341 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -1133,7 +1133,7 @@ void LayerPlan::addWall( void LayerPlan::addInfillWall(const ExtrusionLine& wall, const GCodePathConfig& path_config, bool force_retract) { - assert(("All empty walls should have been filtered at this stage", ! wall.empty())); + assert(! wall.empty() && "All empty walls should have been filtered at this stage"); ExtrusionJunction junction{ *wall.begin() }; addTravel(junction.p_, force_retract); @@ -1701,7 +1701,7 @@ TimeMaterialEstimates ExtruderPlan::computeNaiveTimeEstimates(Point2LL starting_ return estimates_; } -void ExtruderPlan::processFanSpeedForMinimalLayerTime(Point2LL starting_position, Duration minTime, double time_other_extr_plans) +void ExtruderPlan::processFanSpeedForMinimalLayerTime(Duration minTime, double time_other_extr_plans) { /* min layer time @@ -1778,7 +1778,6 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point2LL starting_position) return a.extruder_nr_ < b.extruder_nr_; }) ->extruder_nr_; - Point2LL starting_position_last_extruder; unsigned int last_extruder_idx; double other_extr_plan_time = 0.0; Duration maximum_cool_min_layer_time; @@ -1792,7 +1791,6 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point2LL starting_position) extruder_plan.computeNaiveTimeEstimates(starting_position); if (extruder_plan.extruder_nr_ == last_extruder_nr) { - starting_position_last_extruder = starting_position; last_extruder_idx = extr_plan_idx; } else @@ -1814,7 +1812,7 @@ void LayerPlan::processFanSpeedAndMinimalLayerTime(Point2LL starting_position) // apply minimum layer time behaviour ExtruderPlan& last_extruder_plan = extruder_plans_[last_extruder_idx]; last_extruder_plan.forceMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); - last_extruder_plan.processFanSpeedForMinimalLayerTime(starting_position_last_extruder, maximum_cool_min_layer_time, other_extr_plan_time); + last_extruder_plan.processFanSpeedForMinimalLayerTime(maximum_cool_min_layer_time, other_extr_plan_time); } diff --git a/src/LayerPlanBuffer.cpp b/src/LayerPlanBuffer.cpp index 453d55f7f4..7d430b8f01 100644 --- a/src/LayerPlanBuffer.cpp +++ b/src/LayerPlanBuffer.cpp @@ -519,18 +519,12 @@ void LayerPlanBuffer::insertTempCommands() size_t extruder = extruder_plan.extruder_nr_; const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; Duration time = extruder_plan.estimates_.getTotalUnretractedTime(); - Ratio avg_flow; - if (time > 0.0) - { - avg_flow = extruder_plan.estimates_.material / time; - } - else + if (time <= 0.0) { assert(extruder_plan.estimates_.material == 0.0 && "No extrusion time should mean no material usage!"); - avg_flow = 0.0; } - Temperature print_temp = preheat_config_.getTemp(extruder, avg_flow, extruder_plan.is_initial_layer_); + Temperature print_temp = preheat_config_.getTemp(extruder, extruder_plan.is_initial_layer_); Temperature initial_print_temp = extruder_settings.get("material_initial_print_temperature"); if (extruder_plan.temperature_factor_ > 0) // force lower printing temperatures due to minimum layer time diff --git a/src/Preheat.cpp b/src/Preheat.cpp index d2190cb9a3..d9f24b200a 100644 --- a/src/Preheat.cpp +++ b/src/Preheat.cpp @@ -39,7 +39,7 @@ Duration Preheat::getTimeToGoFromTempToTemp(const size_t extruder, const Tempera return std::max(0.0_s, time); } -Temperature Preheat::getTemp(const size_t extruder, const Ratio& flow, const bool is_initial_layer) +Temperature Preheat::getTemp(const size_t extruder, const bool is_initial_layer) { const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extruder].settings_; if (is_initial_layer && extruder_settings.get("material_print_temperature_layer_0") != 0) diff --git a/src/SkeletalTrapezoidation.cpp b/src/SkeletalTrapezoidation.cpp index 3aca0644db..887059324d 100644 --- a/src/SkeletalTrapezoidation.cpp +++ b/src/SkeletalTrapezoidation.cpp @@ -97,9 +97,7 @@ void SkeletalTrapezoidation::transferEdge( assert(twin->prev_); // Forth rib assert(twin->prev_->twin_); // Back rib assert(twin->prev_->twin_->prev_); // Prev segment along parabola - - constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph_.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point); } assert(prev_edge); } @@ -152,8 +150,7 @@ void SkeletalTrapezoidation::transferEdge( if (p1_idx < discretized.size() - 1) { // Rib for last segment gets introduced outside this function! - constexpr bool is_not_next_to_start_or_end = false; // Only ribs at the end of a cell should be skipped - graph_.makeRib(prev_edge, start_source_point, end_source_point, is_not_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point); } } assert(prev_edge); @@ -460,8 +457,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) node_t* starting_node = vd_node_to_he_node_[starting_vonoroi_edge->vertex0()]; starting_node->data_.distance_to_boundary_ = 0; - constexpr bool is_next_to_start_or_end = true; - graph_.makeRib(prev_edge, start_source_point, end_source_point, is_next_to_start_or_end); + graph_.makeRib(prev_edge, start_source_point, end_source_point); for (vd_t::edge_type* vd_edge = starting_vonoroi_edge->next(); vd_edge != ending_vonoroi_edge; vd_edge = vd_edge->next()) { assert(vd_edge->is_finite()); @@ -469,7 +465,7 @@ void SkeletalTrapezoidation::constructFromPolygons(const Polygons& polys) Point2LL v2 = VoronoiUtils::p(vd_edge->vertex1()); transferEdge(v1, v2, *vd_edge, prev_edge, start_source_point, end_source_point, points, segments); - graph_.makeRib(prev_edge, start_source_point, end_source_point, vd_edge->next() == ending_vonoroi_edge); + graph_.makeRib(prev_edge, start_source_point, end_source_point); } transferEdge(VoronoiUtils::p(ending_vonoroi_edge->vertex0()), end_source_point, *ending_vonoroi_edge, prev_edge, start_source_point, end_source_point, points, segments); diff --git a/src/SkeletalTrapezoidationGraph.cpp b/src/SkeletalTrapezoidationGraph.cpp index 514277ed36..cad3cba700 100644 --- a/src/SkeletalTrapezoidationGraph.cpp +++ b/src/SkeletalTrapezoidationGraph.cpp @@ -329,7 +329,7 @@ void SkeletalTrapezoidationGraph::collapseSmallEdges(coord_t snap_dist) } } -void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point2LL start_source_point, Point2LL end_source_point, bool is_next_to_start_or_end) +void SkeletalTrapezoidationGraph::makeRib(edge_t*& prev_edge, Point2LL start_source_point, Point2LL end_source_point) { Point2LL p = LinearAlg2D::getClosestOnLine(prev_edge->to_->p_, start_source_point, end_source_point); coord_t dist = vSize(prev_edge->to_->p_ - p); diff --git a/src/TreeModelVolumes.cpp b/src/TreeModelVolumes.cpp index 948ef86ec0..7318061091 100644 --- a/src/TreeModelVolumes.cpp +++ b/src/TreeModelVolumes.cpp @@ -905,7 +905,7 @@ Polygons TreeModelVolumes::safeOffset(const Polygons& me, coord_t distance, Clip assert(distance * max_safe_step_distance >= 0); Polygons ret = me; - for (const auto i : ranges::views::iota(0UL, steps)) + for (size_t i = 0; i < steps; ++i) { ret = ret.offset(max_safe_step_distance, jt).unionPolygons(collision); } @@ -1254,7 +1254,7 @@ coord_t TreeModelVolumes::ceilRadius(coord_t radius) const coord_t exponential_result = SUPPORT_TREE_EXPONENTIAL_THRESHOLD * SUPPORT_TREE_EXPONENTIAL_FACTOR; const coord_t stepsize = (exponential_result - radius_0_) / (SUPPORT_TREE_PRE_EXPONENTIAL_STEPS + 1); coord_t result = radius_0_; - for (const auto step : ranges::views::iota(0UL, SUPPORT_TREE_PRE_EXPONENTIAL_STEPS)) + for (size_t i = 0; i < SUPPORT_TREE_PRE_EXPONENTIAL_STEPS; ++i) { result += stepsize; if (result >= radius && ! ignorable_radii_.count(result)) diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index d12e14adbd..145fc64bf3 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -250,7 +250,7 @@ void TreeSupport::precalculate(const SliceDataStorage& storage, std::vector>& move_bounds, SliceDataStorage& storage) { - TreeSupportTipGenerator tip_gen(storage, mesh, volumes_); + TreeSupportTipGenerator tip_gen(mesh, volumes_); tip_gen.generateTips(storage, mesh, move_bounds, additional_required_support_area, placed_support_lines_support_areas); } diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index c5292dbf2b..27137585b6 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -28,7 +28,7 @@ namespace cura { -TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceDataStorage& storage, const SliceMeshStorage& mesh, TreeModelVolumes& volumes_s) +TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, TreeModelVolumes& volumes_s) : config_(mesh.settings) , use_fake_roof_(! mesh.settings.get("support_roof_enable")) , volumes_(volumes_s) diff --git a/src/communication/CommandLine.cpp b/src/communication/CommandLine.cpp index 26dcaa60c3..95359abae4 100644 --- a/src/communication/CommandLine.cpp +++ b/src/communication/CommandLine.cpp @@ -80,7 +80,7 @@ void CommandLine::sendGCodePrefix(const std::string&) const // TODO: Right now this is done directly in the g-code writer. For consistency it should be moved here? } -void CommandLine::sendSliceUUID(const std::string& slice_uuid) const +void CommandLine::sendSliceUUID([[maybe_unused]] const std::string& slice_uuid) const { // pass } diff --git a/src/plugins/converters.cpp b/src/plugins/converters.cpp index 2f8eabd151..40988a2f7b 100644 --- a/src/plugins/converters.cpp +++ b/src/plugins/converters.cpp @@ -85,9 +85,11 @@ handshake_response::native_value_type handshake_response::operator()(const hands .broadcast_subscriptions = std::set(message.broadcast_subscriptions().begin(), message.broadcast_subscriptions().end()) }; } -simplify_request::value_type - simplify_request::operator()(const simplify_request::native_value_type& polygons, const coord_t max_resolution, const coord_t max_deviation, const coord_t max_area_deviation) - const +simplify_request::value_type simplify_request::operator()( + const simplify_request::native_value_type& polygons, + const coord_t max_resolution, + [[maybe_unused]] const coord_t max_deviation, + [[maybe_unused]] const coord_t max_area_deviation) const { value_type message{}; if (polygons.empty()) @@ -478,4 +480,4 @@ gcode_paths_modify_response::native_value_type return paths; } -} // namespace cura::plugins \ No newline at end of file +} // namespace cura::plugins diff --git a/src/skin.cpp b/src/skin.cpp index 9f1d865dcd..e02ba1b2d1 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -386,7 +386,6 @@ Polygons SkinInfillAreaComputation::generateFilledAreaBelow(SliceLayerPart& part { return {}; } - constexpr size_t min_wall_line_count = 2; const int lowest_flooring_layer = layer_nr_ - flooring_layer_count; Polygons filled_area_below = getOutlineOnLayer(part, lowest_flooring_layer); diff --git a/src/support.cpp b/src/support.cpp index 05e81fbf93..6e1f398e7a 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -186,7 +186,6 @@ void AreaSupport::generateGradualSupport(SliceDataStorage& storage) const coord_t gradual_support_step_height = infill_extruder.settings_.get("gradual_support_infill_step_height"); const size_t max_density_steps = infill_extruder.settings_.get("gradual_support_infill_steps"); - const coord_t wall_count = infill_extruder.settings_.get("support_wall_count"); const coord_t wall_width = infill_extruder.settings_.get("support_line_width"); // no early-out for this function; it needs to initialize the [infill_area_per_combine_per_density] @@ -458,7 +457,7 @@ void AreaSupport::cleanup(SliceDataStorage& storage) } } -Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this, const coord_t smoothing_distance) +Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supportLayer_up, Polygons& supportLayer_this) { Polygons joined; @@ -811,7 +810,7 @@ void AreaSupport::generateOverhangAreasForMesh(SliceDataStorage& storage, SliceM }); } -Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const Settings& infill_settings, const LayerIndex layer_idx) +Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& storage, const LayerIndex layer_idx) { const auto& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; const Simplify simplify{ mesh_group_settings }; @@ -820,7 +819,6 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto support_distance_bot = static_cast(mesh_group_settings.get("support_bottom_distance")); const auto overhang_angle = mesh_group_settings.get("support_angle"); const auto xy_distance = static_cast(mesh_group_settings.get("support_xy_distance")); - const auto xy_distance_overhang = infill_settings.get("support_xy_distance_overhang"); constexpr coord_t snap_radius = 10; constexpr coord_t close_dist = snap_radius + 5; // needs to be larger than the snap radius! @@ -1065,8 +1063,6 @@ void AreaSupport::generateSupportAreasForMesh( const coord_t xy_distance_overhang = infill_settings.get("support_xy_distance_overhang"); const bool use_xy_distance_overhang = infill_settings.get("support_xy_overrides_z") == SupportDistPriority::Z_OVERRIDES_XY; // whether to use a different xy distance at overhangs - const AngleRadians angle = ((mesh.settings.get("support_roof_enable")) ? roof_settings : infill_settings).get("support_angle"); - const double tan_angle = tan(angle) - 0.01; // the XY-component of the supportAngle constexpr bool no_support = false; constexpr bool no_prime_tower = false; const coord_t support_line_width = mesh_group_settings.get("support_infill_extruder_nr").settings_.get("support_line_width"); @@ -1116,7 +1112,7 @@ void AreaSupport::generateSupportAreasForMesh( // layer below that protrudes beyond the current layer's area and combine it with the current layer's overhang disallowed area Polygons minimum_xy_disallowed_areas = xy_disallowed_per_layer[layer_idx].offset(xy_distance_overhang); - Polygons varying_xy_disallowed_areas = generateVaryingXYDisallowedArea(mesh, infill_settings, layer_idx); + Polygons varying_xy_disallowed_areas = generateVaryingXYDisallowedArea(mesh, layer_idx); xy_disallowed_per_layer[layer_idx] = minimum_xy_disallowed_areas.unionPolygons(varying_xy_disallowed_areas); scripta::log("support_xy_disallowed_areas", xy_disallowed_per_layer[layer_idx], SectionType::SUPPORT, layer_idx); } @@ -1139,26 +1135,6 @@ void AreaSupport::generateSupportAreasForMesh( const coord_t max_tower_supported_diameter = infill_settings.get("support_tower_maximum_supported_diameter"); const bool use_towers = infill_settings.get("support_use_towers") && max_tower_supported_diameter > 0; - coord_t smoothing_distance; - { // compute best smoothing_distance - const ExtruderTrain& infill_train = mesh_group_settings.get("support_infill_extruder_nr"); - const coord_t infill_line_width = infill_train.settings_.get("support_line_width"); - smoothing_distance = infill_line_width; - if (mesh.settings.get("support_roof_enable")) - { - const ExtruderTrain& roof_train = mesh_group_settings.get("support_roof_extruder_nr"); - const coord_t roof_line_width = roof_train.settings_.get("support_roof_line_width"); - smoothing_distance = std::max(smoothing_distance, roof_line_width); - } - - if (mesh.settings.get("support_bottom_enable")) - { - const ExtruderTrain& bottom_train = mesh_group_settings.get("support_bottom_extruder_nr"); - const coord_t bottom_line_width = bottom_train.settings_.get("support_bottom_line_width"); - smoothing_distance = std::max(smoothing_distance, bottom_line_width); - } - } - const coord_t z_distance_bottom = ((mesh.settings.get("support_bottom_enable")) ? bottom_settings : infill_settings).get("support_bottom_distance"); const size_t bottom_empty_layer_count = round_up_divide(z_distance_bottom, layer_thickness); // number of empty layers between support and model const coord_t bottom_stair_step_height = std::max(static_cast(0), mesh.settings.get("support_bottom_stair_step_height")); @@ -1234,7 +1210,7 @@ void AreaSupport::generateSupportAreasForMesh( layer_above = ∅ layer_this = layer_this.unionPolygons(storage.support.supportLayers[layer_idx].support_mesh); } - layer_this = AreaSupport::join(storage, *layer_above, layer_this, smoothing_distance).difference(model_mesh_on_layer); + layer_this = AreaSupport::join(storage, *layer_above, layer_this).difference(model_mesh_on_layer); } // make towers for small support @@ -1548,7 +1524,6 @@ std::pair AreaSupport::computeBasicAndFullOverhang(const Sli void AreaSupport::detectOverhangPoints(const SliceDataStorage& storage, SliceMeshStorage& mesh) { - const ExtruderTrain& infill_extruder = mesh.settings.get("support_infill_extruder_nr"); const coord_t max_tower_supported_diameter = mesh.settings.get("support_tower_maximum_supported_diameter"); const coord_t max_tower_supported_area = max_tower_supported_diameter * max_tower_supported_diameter; @@ -1652,8 +1627,6 @@ void AreaSupport::handleTowers( if (tower_roof.area() < tower_diameter * tower_diameter) { - constexpr bool no_support = false; - constexpr bool no_prime_tower = false; Polygons model_outline = xy_disallowed_area; // Rather than offsetting the tower with tower_roof_expansion_distance we do this step wise to achieve two things diff --git a/src/utils/Simplify.cpp b/src/utils/Simplify.cpp index cad210b30b..8d0795da54 100644 --- a/src/utils/Simplify.cpp +++ b/src/utils/Simplify.cpp @@ -83,7 +83,7 @@ size_t Simplify::previousNotDeleted(size_t index, const std::vector& to_de return index; } -Polygon Simplify::createEmpty(const Polygon& original) const +Polygon Simplify::createEmpty([[maybe_unused]] const Polygon& original) const { return Polygon(); } @@ -115,7 +115,7 @@ const Point2LL& Simplify::getPosition(const ExtrusionJunction& vertex) const return vertex.p_; } -Point2LL Simplify::createIntersection(const Point2LL& before, const Point2LL intersection, const Point2LL& after) const +Point2LL Simplify::createIntersection([[maybe_unused]] const Point2LL& before, const Point2LL intersection, [[maybe_unused]] const Point2LL& after) const { return intersection; } @@ -128,7 +128,7 @@ ExtrusionJunction Simplify::createIntersection(const ExtrusionJunction& before, return ExtrusionJunction(intersection, (before.w_ + after.w_) / 2, before.perimeter_index_); } -coord_t Simplify::getAreaDeviation(const Point2LL& before, const Point2LL& vertex, const Point2LL& after) const +coord_t Simplify::getAreaDeviation([[maybe_unused]] const Point2LL& before, [[maybe_unused]] const Point2LL& vertex, [[maybe_unused]] const Point2LL& after) const { return 0; // Fixed-width polygons don't have any deviation. } From 46f0f974a26a9dc0ae2450c37cf2d8b336a83b79 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 13:25:11 +0100 Subject: [PATCH 095/218] Fixed dangling reference warnings --- include/PathOrderOptimizer.h | 13 +++++++------ include/pathPlanning/Comb.h | 2 +- include/utils/polygon.h | 33 ++++++++++++++++----------------- src/pathPlanning/Comb.cpp | 27 +++++++++++++-------------- src/utils/polygon.cpp | 32 ++++++++++++++++---------------- 5 files changed, 53 insertions(+), 54 deletions(-) diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index 94b4c74344..a65d3bba87 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -633,9 +633,10 @@ class PathOrderOptimizer // Precompute segments lengths because we are going to need them multiple times std::vector segments_sizes(path.converted_->size()); coord_t total_length = 0; - for (const auto& [i, here] : **path.converted_ | ranges::views::enumerate) + for (size_t i = 0; i < path.converted_->size(); ++i) { - const Point2LL& next = (*path.converted_)[(i + 1) % path.converted_->size()]; + const Point2LL& here = path.converted_->at(i); + const Point2LL& next = path.converted_->at((i + 1) % path.converted_->size()); const coord_t segment_size = vSize(next - here); segments_sizes[i] = segment_size; total_length += segment_size; @@ -708,7 +709,7 @@ class PathOrderOptimizer // ties are broken by favouring points with lower x-coord // if x-coord for both points are equal then break ties by // favouring points with lower y-coord - const Point2LL& best_point = (*path.converted_)[best_i]; + const Point2LL& best_point = path.converted_->at(best_i); if (std::abs(here.Y - best_point.Y) <= EPSILON ? best_point.X < here.X : best_point.Y < here.Y) { best_score = std::min(best_score, score); @@ -758,13 +759,13 @@ class PathOrderOptimizer travelled_distance += segment_size; } - const Point2LL& next_pos = (*path.converted_)[(here + actual_delta + path.converted_->size()) % path.converted_->size()]; + const Point2LL& next_pos = path.converted_->at((here + actual_delta + path.converted_->size()) % path.converted_->size()); if (travelled_distance > distance) [[likely]] { // We have overtaken the required distance, go backward on the last segment int prev = (here + actual_delta - direction + path.converted_->size()) % path.converted_->size(); - const Point2LL& prev_pos = (*path.converted_)[prev]; + const Point2LL& prev_pos = path.converted_->at(prev); const Point2LL vector = next_pos - prev_pos; const Point2LL unit_vector = (vector * 1000) / segment_size; @@ -794,7 +795,7 @@ class PathOrderOptimizer static double cornerAngle(const OrderablePath& path, int i, const std::vector& segments_sizes, coord_t total_length, const coord_t angle_query_distance = 1000) { const coord_t bounded_distance = std::min(angle_query_distance, total_length / 2); - const Point2LL& here = (*path.converted_)[i]; + const Point2LL& here = path.converted_->at(i); const Point2LL next = findNeighbourPoint(path, i, bounded_distance, segments_sizes); const Point2LL previous = findNeighbourPoint(path, i, -bounded_distance, segments_sizes); diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index c766bb0820..cbdd1b539a 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -177,7 +177,7 @@ class Comb * \param start_inside_poly[out] The polygon in which the point has been moved * \return Whether we have moved the point inside */ - bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, unsigned int& start_inside_poly); + bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t &start_inside_poly); void moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output); diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 5b3eb781af..0cfc9af876 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -60,7 +60,7 @@ typedef std::list ListPolygon; //!< A polygon represented by a linked typedef std::vector ListPolygons; //!< Polygons represented by a vector of linked lists instead of a vector of vectors const static int clipper_init = (0); -#define NO_INDEX (std::numeric_limits::max()) +#define NO_INDEX (std::numeric_limits::max()) class ConstPolygonPointer; @@ -496,16 +496,15 @@ class PolygonRef : public ConstPolygonRef return *this; } - Point2LL& operator[](unsigned int index) + Point2LL& operator[](size_t index) { POLY_ASSERT(index < size()); return (*path)[index]; } - const Point2LL& operator[](unsigned int index) const + const Point2LL& operator[](size_t index) const { - POLY_ASSERT(index < size()); - return (*path)[index]; + return ConstPolygonRef::operator[](index); } ClipperLib::Path::iterator begin() @@ -549,9 +548,9 @@ class PolygonRef : public ConstPolygonRef path->emplace_back(args...); } - void remove(unsigned int index) + void remove(size_t index) { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); path->erase(path->begin() + index); } @@ -833,7 +832,7 @@ class Polygons */ bool empty() const; - unsigned int pointCount() const; //!< Return the amount of points in all polygons + size_t pointCount() const; //!< Return the amount of points in all polygons PolygonRef operator[](size_t index) { @@ -1173,7 +1172,7 @@ class Polygons * \param border_result Whether a point exactly on a polygon counts as inside * \return The index of the polygon inside which the point \p p resides */ - unsigned int findInside(Point2LL p, bool border_result = false); + size_t findInside(Point2LL p, bool border_result = false); /*! * Approximates the convex hull of the polygons. @@ -1501,9 +1500,9 @@ class Polygons void applyMatrix(const PointMatrix& matrix) { - for (unsigned int i = 0; i < paths.size(); i++) + for (size_t i = 0; i < paths.size(); i++) { - for (unsigned int j = 0; j < paths[i].size(); j++) + for (size_t j = 0; j < paths[i].size(); j++) { paths[i][j] = matrix.apply(paths[i][j]); } @@ -1512,9 +1511,9 @@ class Polygons void applyMatrix(const Point3Matrix& matrix) { - for (unsigned int i = 0; i < paths.size(); i++) + for (size_t i = 0; i < paths.size(); i++) { - for (unsigned int j = 0; j < paths[i].size(); j++) + for (size_t j = 0; j < paths[i].size(); j++) { paths[i][j] = matrix.apply(paths[i][j]); } @@ -1554,7 +1553,7 @@ class PolygonsPart : public Polygons * Extension of vector> which is similar to a vector of PolygonParts, except the base of the container is indices to polygons into the original Polygons, * instead of the polygons themselves */ -class PartsView : public std::vector> +class PartsView : public std::vector> { public: Polygons& polygons_; @@ -1569,7 +1568,7 @@ class PartsView : public std::vector> * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons * \return The PolygonsPart containing the polygon with index \p poly_idx */ - unsigned int getPartContaining(unsigned int poly_idx, unsigned int* boundary_poly_idx = nullptr) const; + size_t getPartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; /*! * Assemble the PolygonsPart of which the polygon with index \p poly_idx is part. * @@ -1577,14 +1576,14 @@ class PartsView : public std::vector> * \param boundary_poly_idx Optional output parameter: The index of the boundary polygon of the part in \p polygons * \return The PolygonsPart containing the polygon with index \p poly_idx */ - PolygonsPart assemblePartContaining(unsigned int poly_idx, unsigned int* boundary_poly_idx = nullptr) const; + PolygonsPart assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx = nullptr) const; /*! * Assemble the PolygonsPart of which the polygon with index \p poly_idx is part. * * \param part_idx The index of the part * \return The PolygonsPart with index \p poly_idx */ - PolygonsPart assemblePart(unsigned int part_idx) const; + PolygonsPart assemblePart(size_t part_idx) const; }; } // namespace cura diff --git a/src/pathPlanning/Comb.cpp b/src/pathPlanning/Comb.cpp index d422f18b2e..e8fbcb5919 100644 --- a/src/pathPlanning/Comb.cpp +++ b/src/pathPlanning/Comb.cpp @@ -103,16 +103,16 @@ bool Comb::calc( } const Point2LL travel_end_point_before_combing = end_point; // Move start and end point inside the optimal comb boundary - unsigned int start_inside_poly = NO_INDEX; + size_t start_inside_poly = NO_INDEX; const bool start_inside = moveInside(boundary_inside_optimal_, _start_inside, inside_loc_to_line_optimal_.get(), start_point, start_inside_poly); - unsigned int end_inside_poly = NO_INDEX; + size_t end_inside_poly = NO_INDEX; const bool end_inside = moveInside(boundary_inside_optimal_, _end_inside, inside_loc_to_line_optimal_.get(), end_point, end_inside_poly); - unsigned int start_part_boundary_poly_idx = NO_INDEX; // Added initial value to stop MSVC throwing an exception in debug mode - unsigned int end_part_boundary_poly_idx = NO_INDEX; - unsigned int start_part_idx = (start_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(start_inside_poly, &start_part_boundary_poly_idx); - unsigned int end_part_idx = (end_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(end_inside_poly, &end_part_boundary_poly_idx); + size_t start_part_boundary_poly_idx = NO_INDEX; // Added initial value to stop MSVC throwing an exception in debug mode + size_t end_part_boundary_poly_idx = NO_INDEX; + size_t start_part_idx = (start_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(start_inside_poly, &start_part_boundary_poly_idx); + size_t end_part_idx = (end_inside_poly == NO_INDEX) ? NO_INDEX : parts_view_inside_optimal_.getPartContaining(end_inside_poly, &end_part_boundary_poly_idx); const bool fail_on_unavoidable_obstacles = perform_z_hops && perform_z_hops_only_when_collides; @@ -137,18 +137,17 @@ bool Comb::calc( } // Move start and end point inside the minimum comb boundary - unsigned int start_inside_poly_min = NO_INDEX; + size_t start_inside_poly_min = NO_INDEX; const bool start_inside_min = moveInside(boundary_inside_minimum_, _start_inside, inside_loc_to_line_minimum_.get(), start_point, start_inside_poly_min); - unsigned int end_inside_poly_min = NO_INDEX; + size_t end_inside_poly_min = NO_INDEX; const bool end_inside_min = moveInside(boundary_inside_minimum_, _end_inside, inside_loc_to_line_minimum_.get(), end_point, end_inside_poly_min); - unsigned int start_part_boundary_poly_idx_min{}; - unsigned int end_part_boundary_poly_idx_min{}; - unsigned int start_part_idx_min + size_t start_part_boundary_poly_idx_min{}; + size_t end_part_boundary_poly_idx_min{}; + size_t start_part_idx_min = (start_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(start_inside_poly_min, &start_part_boundary_poly_idx_min); - unsigned int end_part_idx_min - = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); + size_t end_part_idx_min = (end_inside_poly_min == NO_INDEX) ? NO_INDEX : parts_view_inside_minimum_.getPartContaining(end_inside_poly_min, &end_part_boundary_poly_idx_min); CombPath result_path; bool comb_result; @@ -425,7 +424,7 @@ Comb::Crossing::Crossing( } } -bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, unsigned int& inside_poly) +bool Comb::moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& inside_poly) { if (is_inside) { diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 52708890ab..2c6b254bc7 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -137,9 +137,9 @@ void Polygons::makeConvex() } } -unsigned int Polygons::pointCount() const +size_t Polygons::pointCount() const { - unsigned int count = 0; + size_t count = 0; for (const ClipperLib::Path& path : paths) { count += path.size(); @@ -211,7 +211,7 @@ bool Polygons::insideOld(Point2LL p, bool border_result) const return (crossings % 2) == 1; } -unsigned int Polygons::findInside(Point2LL p, bool border_result) +size_t Polygons::findInside(Point2LL p, bool border_result) { Polygons& thiss = *this; if (size() < 1) @@ -223,7 +223,7 @@ unsigned int Polygons::findInside(Point2LL p, bool border_result) std::vector min_x(size(), std::numeric_limits::max()); std::vector crossings(size()); - for (unsigned int poly_idx = 0; poly_idx < size(); poly_idx++) + for (size_t poly_idx = 0; poly_idx < size(); poly_idx++) { PolygonRef poly = thiss[poly_idx]; Point2LL p0 = poly.back(); @@ -256,9 +256,9 @@ unsigned int Polygons::findInside(Point2LL p, bool border_result) } int64_t min_x_uneven = std::numeric_limits::max(); - unsigned int ret = NO_INDEX; - unsigned int n_unevens = 0; - for (unsigned int array_idx = 0; array_idx < size(); array_idx++) + size_t ret = NO_INDEX; + size_t n_unevens = 0; + for (size_t array_idx = 0; array_idx < size(); array_idx++) { if (crossings[array_idx] % 2 == 1) { @@ -1508,17 +1508,17 @@ Polygons Polygons::tubeShape(const coord_t inner_offset, const coord_t outer_off return this->offset(outer_offset).difference(this->offset(-inner_offset)); } -unsigned int PartsView::getPartContaining(unsigned int poly_idx, unsigned int* boundary_poly_idx) const +size_t PartsView::getPartContaining(size_t poly_idx, size_t* boundary_poly_idx) const { const PartsView& partsView = *this; - for (unsigned int part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) + for (size_t part_idx_now = 0; part_idx_now < partsView.size(); part_idx_now++) { - const std::vector& partView = partsView[part_idx_now]; + const std::vector& partView = partsView[part_idx_now]; if (partView.size() == 0) { continue; } - std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); + std::vector::const_iterator result = std::find(partView.begin(), partView.end(), poly_idx); if (result != partView.end()) { if (boundary_poly_idx) @@ -1531,13 +1531,13 @@ unsigned int PartsView::getPartContaining(unsigned int poly_idx, unsigned int* b return NO_INDEX; } -PolygonsPart PartsView::assemblePart(unsigned int part_idx) const +PolygonsPart PartsView::assemblePart(size_t part_idx) const { const PartsView& partsView = *this; PolygonsPart ret; if (part_idx != NO_INDEX) { - for (unsigned int poly_idx_ff : partsView[part_idx]) + for (size_t poly_idx_ff : partsView[part_idx]) { ret.add(polygons_[poly_idx_ff]); } @@ -1545,10 +1545,10 @@ PolygonsPart PartsView::assemblePart(unsigned int part_idx) const return ret; } -PolygonsPart PartsView::assemblePartContaining(unsigned int poly_idx, unsigned int* boundary_poly_idx) const +PolygonsPart PartsView::assemblePartContaining(size_t poly_idx, size_t* boundary_poly_idx) const { PolygonsPart ret; - unsigned int part_idx = getPartContaining(poly_idx, boundary_poly_idx); + size_t part_idx = getPartContaining(poly_idx, boundary_poly_idx); if (part_idx != NO_INDEX) { return assemblePart(part_idx); @@ -1580,7 +1580,7 @@ void Polygons::splitIntoPartsView_processPolyTreeNode(PartsView& partsView, Poly { ClipperLib::PolyNode* child = node->Childs[n]; partsView.emplace_back(); - unsigned int pos = partsView.size() - 1; + size_t pos = partsView.size() - 1; partsView[pos].push_back(reordered.size()); reordered.add(child->Contour); // TODO: should this steal the internal representation for speed? for (int i = 0; i < child->ChildCount(); i++) From bb3f93c665cb45b4d849c162aa43fd70039ddf09 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 22 Nov 2023 14:40:56 +0100 Subject: [PATCH 096/218] Add Basic Stress Benchmarking Reads in a number of known problematic polygons and settings and counts how many crashes occur in those shapes Contributes to CURA-11378 --- CMakeLists.txt | 3 + conanfile.py | 1 + stress_benchmark/CMakeLists.txt | 9 + stress_benchmark/stress_bm_voronoi.cpp | 173 ++++++++++++++++++ .../stress_bm_voronoi_resources/001.settings | 0 .../stress_bm_voronoi_resources/001.wkt | 0 .../stress_bm_voronoi_resources/002.settings | 0 .../stress_bm_voronoi_resources/002.wkt | 0 .../stress_bm_voronoi_resources/003.settings | 0 .../stress_bm_voronoi_resources/003.wkt | 0 .../stress_bm_voronoi_resources/004.settings | 0 .../stress_bm_voronoi_resources/004.wkt | 0 .../stress_bm_voronoi_resources/005.settings | 0 .../stress_bm_voronoi_resources/005.wkt | 0 .../stress_bm_voronoi_resources/006.settings | 0 .../stress_bm_voronoi_resources/006.wkt | 0 .../stress_bm_voronoi_resources/007.settings | 0 .../stress_bm_voronoi_resources/007.wkt | 0 .../stress_bm_voronoi_resources/008.settings | 0 .../stress_bm_voronoi_resources/008.wkt | 0 .../stress_bm_voronoi_resources/009.settings | 0 .../stress_bm_voronoi_resources/009.wkt | 0 .../stress_bm_voronoi_resources/010.settings | 0 .../stress_bm_voronoi_resources/010.wkt | 0 .../stress_bm_voronoi_resources/011.settings | 0 .../stress_bm_voronoi_resources/011.wkt | 0 tests/CMakeLists.txt | 1 - tests/VoronoiCrashTest.cpp | 137 -------------- 28 files changed, 186 insertions(+), 138 deletions(-) create mode 100644 stress_benchmark/CMakeLists.txt create mode 100644 stress_benchmark/stress_bm_voronoi.cpp rename tests/voronoi_crash_resources/settings_001.txt => stress_benchmark/stress_bm_voronoi_resources/001.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_001.wkt => stress_benchmark/stress_bm_voronoi_resources/001.wkt (100%) rename tests/voronoi_crash_resources/settings_002.txt => stress_benchmark/stress_bm_voronoi_resources/002.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_002.wkt => stress_benchmark/stress_bm_voronoi_resources/002.wkt (100%) rename tests/voronoi_crash_resources/settings_003.txt => stress_benchmark/stress_bm_voronoi_resources/003.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_003.wkt => stress_benchmark/stress_bm_voronoi_resources/003.wkt (100%) rename tests/voronoi_crash_resources/settings_004.txt => stress_benchmark/stress_bm_voronoi_resources/004.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_004.wkt => stress_benchmark/stress_bm_voronoi_resources/004.wkt (100%) rename tests/voronoi_crash_resources/settings_005.txt => stress_benchmark/stress_bm_voronoi_resources/005.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_005.wkt => stress_benchmark/stress_bm_voronoi_resources/005.wkt (100%) rename tests/voronoi_crash_resources/settings_006.txt => stress_benchmark/stress_bm_voronoi_resources/006.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_006.wkt => stress_benchmark/stress_bm_voronoi_resources/006.wkt (100%) rename tests/voronoi_crash_resources/settings_007.txt => stress_benchmark/stress_bm_voronoi_resources/007.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_007.wkt => stress_benchmark/stress_bm_voronoi_resources/007.wkt (100%) rename tests/voronoi_crash_resources/settings_008.txt => stress_benchmark/stress_bm_voronoi_resources/008.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_008.wkt => stress_benchmark/stress_bm_voronoi_resources/008.wkt (100%) rename tests/voronoi_crash_resources/settings_009.txt => stress_benchmark/stress_bm_voronoi_resources/009.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_009.wkt => stress_benchmark/stress_bm_voronoi_resources/009.wkt (100%) rename tests/voronoi_crash_resources/settings_010.txt => stress_benchmark/stress_bm_voronoi_resources/010.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_010.wkt => stress_benchmark/stress_bm_voronoi_resources/010.wkt (100%) rename tests/voronoi_crash_resources/settings_011.txt => stress_benchmark/stress_bm_voronoi_resources/011.settings (100%) rename tests/voronoi_crash_resources/slice_polygon_011.wkt => stress_benchmark/stress_bm_voronoi_resources/011.wkt (100%) delete mode 100644 tests/VoronoiCrashTest.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c2aabc528..d521b683d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ AssureOutOfSourceBuilds() option(ENABLE_ARCUS "Enable support for ARCUS" ON) option(ENABLE_TESTING "Build with unit tests" OFF) +option(ENABLE_BENCHMARKS "Build with Benchmarks" OFF) option(EXTENSIVE_WARNINGS "Build with all warnings" ON) option(ENABLE_PLUGINS "Build with plugins" ON) option(ENABLE_REMOTE_PLUGINS "Build with all warnings" OFF) @@ -271,6 +272,8 @@ if (ENABLE_TESTING OR ENABLE_BENCHMARKS) endif () endif () +add_subdirectory(stress_benchmark) + if (ENABLE_TESTING) enable_testing() add_subdirectory(tests) diff --git a/conanfile.py b/conanfile.py index b3e464843a..97fc114ef9 100644 --- a/conanfile.py +++ b/conanfile.py @@ -51,6 +51,7 @@ def export_sources(self): copy(self, "*", path.join(self.recipe_folder, "src"), path.join(self.export_sources_folder, "src")) copy(self, "*", path.join(self.recipe_folder, "include"), path.join(self.export_sources_folder, "include")) copy(self, "*", path.join(self.recipe_folder, "benchmark"), path.join(self.export_sources_folder, "benchmark")) + copy(self, "*", path.join(self.recipe_folder, "stress_benchmark"), path.join(self.export_sources_folder, "benchmark")) copy(self, "*", path.join(self.recipe_folder, "tests"), path.join(self.export_sources_folder, "tests")) def config_options(self): diff --git a/stress_benchmark/CMakeLists.txt b/stress_benchmark/CMakeLists.txt new file mode 100644 index 0000000000..c27cc81366 --- /dev/null +++ b/stress_benchmark/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright (c) 2023 Ultimaker B.V. +# CuraEngine is released under the terms of the AGPLv3 or higher. + +message(STATUS "Building stress benchmarks...") + + +add_executable(stress_bm_voronoi stress_bm_voronoi.cpp) +target_link_libraries(stress_bm_voronoi PRIVATE _CuraEngine test_helpers range-v3::range-v3 fmt::fmt spdlog::spdlog boost::boost) +target_include_directories(stress_bm_voronoi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/generated) \ No newline at end of file diff --git a/stress_benchmark/stress_bm_voronoi.cpp b/stress_benchmark/stress_bm_voronoi.cpp new file mode 100644 index 0000000000..f3066fc5e0 --- /dev/null +++ b/stress_benchmark/stress_bm_voronoi.cpp @@ -0,0 +1,173 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "WallsComputation.h" //Unit under test. +#include "settings/Settings.h" //Settings to generate walls with. +#include "sliceDataStorage.h" //Sl +#include "utils/polygon.h" //To create example polygons. + +struct Resource +{ + std::filesystem::path wkt_file; + std::filesystem::path settings_file; + + std::string stem() const + { + return wkt_file.stem().string(); + } + + std::vector polygons() const + { + using point_type = boost::geometry::model::d2::point_xy; + using polygon_type = boost::geometry::model::polygon; + using multi_polygon_type = boost::geometry::model::multi_polygon; + + multi_polygon_type boost_polygons{}; + std::ifstream file{ wkt_file }; + if (! file) + { + spdlog::error("Could not read shapes from: {}", wkt_file.string()); + } + + std::stringstream buffer; + buffer << file.rdbuf(); + + boost::geometry::read_wkt(buffer.str(), boost_polygons); + + std::vector polygons; + + for (const auto& boost_polygon : boost_polygons) + { + cura::Polygons polygon; + + cura::Polygon outer; + for (const auto& point : boost_polygon.outer()) + { + outer.add(cura::Point(point.x(), point.y())); + } + polygon.add(outer); + + for (const auto& hole : boost_polygon.inners()) + { + cura::Polygon inner; + for (const auto& point : hole) + { + inner.add(cura::Point(point.x(), point.y())); + } + polygon.add(inner); + } + + polygons.push_back(polygon); + } + return polygons; + } + + cura::Settings settings() const + { + cura::Settings settings; + std::ifstream file{ settings_file }; + if (! file) + { + spdlog::error("Could not read settings from: {}", settings_file.string()); + } + + std::string line; + while (std::getline(file, line)) + { + std::istringstream iss(line); + std::string key; + std::string value; + + if (std::getline(std::getline(iss, key, '='), value)) + { + settings.add(key, value); + } + } + return settings; + } +}; + +std::vector getResources() +{ + auto resource_path = std::filesystem::path(std::source_location::current().file_name()).parent_path().append("stress_bm_voronoi_resources"); + + std::vector resources; + for (const auto& p : std::filesystem::recursive_directory_iterator(resource_path)) + { + if (p.path().extension() == ".wkt") + { + auto settings = p.path(); + settings.replace_extension(".settings"); + spdlog::info("Adding resources for: {}", p.path().filename().stem().string()); + resources.emplace_back(Resource{ .wkt_file = p, .settings_file = settings }); + } + } + return resources; +}; + +int main() +{ + const auto resources = getResources(); + size_t crashCount = 0; + + for (const auto& resource : resources) + { + const auto& shapes = resource.polygons(); + const auto& settings = resource.settings(); + + pid_t pid = fork(); + + if (pid == -1) + { + spdlog::critical("Unable to fork"); + return 1; + } + + if (pid == 0) + { + cura::SliceLayer layer; + for (const cura::Polygons& shape : shapes) + { + layer.parts.emplace_back(); + cura::SliceLayerPart& part = layer.parts.back(); + part.outline.add(shape); + } + + cura::LayerIndex layer_idx(100); + cura::WallsComputation walls_computation(settings, layer_idx); + + walls_computation.generateWalls(&layer, cura::SectionType::WALL); + exit(EXIT_SUCCESS); + } + else + { + int status; + waitpid(pid, &status, 0); + + if (WIFSIGNALED(status)) + { + ++crashCount; + spdlog::error("Crash detected for: {}", resource.stem()); + } + } + } + spdlog::info("Total number of crashes: {}", crashCount); + return 0; +} \ No newline at end of file diff --git a/tests/voronoi_crash_resources/settings_001.txt b/stress_benchmark/stress_bm_voronoi_resources/001.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_001.txt rename to stress_benchmark/stress_bm_voronoi_resources/001.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_001.wkt b/stress_benchmark/stress_bm_voronoi_resources/001.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_001.wkt rename to stress_benchmark/stress_bm_voronoi_resources/001.wkt diff --git a/tests/voronoi_crash_resources/settings_002.txt b/stress_benchmark/stress_bm_voronoi_resources/002.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_002.txt rename to stress_benchmark/stress_bm_voronoi_resources/002.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_002.wkt b/stress_benchmark/stress_bm_voronoi_resources/002.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_002.wkt rename to stress_benchmark/stress_bm_voronoi_resources/002.wkt diff --git a/tests/voronoi_crash_resources/settings_003.txt b/stress_benchmark/stress_bm_voronoi_resources/003.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_003.txt rename to stress_benchmark/stress_bm_voronoi_resources/003.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_003.wkt b/stress_benchmark/stress_bm_voronoi_resources/003.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_003.wkt rename to stress_benchmark/stress_bm_voronoi_resources/003.wkt diff --git a/tests/voronoi_crash_resources/settings_004.txt b/stress_benchmark/stress_bm_voronoi_resources/004.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_004.txt rename to stress_benchmark/stress_bm_voronoi_resources/004.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_004.wkt b/stress_benchmark/stress_bm_voronoi_resources/004.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_004.wkt rename to stress_benchmark/stress_bm_voronoi_resources/004.wkt diff --git a/tests/voronoi_crash_resources/settings_005.txt b/stress_benchmark/stress_bm_voronoi_resources/005.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_005.txt rename to stress_benchmark/stress_bm_voronoi_resources/005.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_005.wkt b/stress_benchmark/stress_bm_voronoi_resources/005.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_005.wkt rename to stress_benchmark/stress_bm_voronoi_resources/005.wkt diff --git a/tests/voronoi_crash_resources/settings_006.txt b/stress_benchmark/stress_bm_voronoi_resources/006.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_006.txt rename to stress_benchmark/stress_bm_voronoi_resources/006.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_006.wkt b/stress_benchmark/stress_bm_voronoi_resources/006.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_006.wkt rename to stress_benchmark/stress_bm_voronoi_resources/006.wkt diff --git a/tests/voronoi_crash_resources/settings_007.txt b/stress_benchmark/stress_bm_voronoi_resources/007.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_007.txt rename to stress_benchmark/stress_bm_voronoi_resources/007.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_007.wkt b/stress_benchmark/stress_bm_voronoi_resources/007.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_007.wkt rename to stress_benchmark/stress_bm_voronoi_resources/007.wkt diff --git a/tests/voronoi_crash_resources/settings_008.txt b/stress_benchmark/stress_bm_voronoi_resources/008.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_008.txt rename to stress_benchmark/stress_bm_voronoi_resources/008.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_008.wkt b/stress_benchmark/stress_bm_voronoi_resources/008.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_008.wkt rename to stress_benchmark/stress_bm_voronoi_resources/008.wkt diff --git a/tests/voronoi_crash_resources/settings_009.txt b/stress_benchmark/stress_bm_voronoi_resources/009.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_009.txt rename to stress_benchmark/stress_bm_voronoi_resources/009.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_009.wkt b/stress_benchmark/stress_bm_voronoi_resources/009.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_009.wkt rename to stress_benchmark/stress_bm_voronoi_resources/009.wkt diff --git a/tests/voronoi_crash_resources/settings_010.txt b/stress_benchmark/stress_bm_voronoi_resources/010.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_010.txt rename to stress_benchmark/stress_bm_voronoi_resources/010.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_010.wkt b/stress_benchmark/stress_bm_voronoi_resources/010.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_010.wkt rename to stress_benchmark/stress_bm_voronoi_resources/010.wkt diff --git a/tests/voronoi_crash_resources/settings_011.txt b/stress_benchmark/stress_bm_voronoi_resources/011.settings similarity index 100% rename from tests/voronoi_crash_resources/settings_011.txt rename to stress_benchmark/stress_bm_voronoi_resources/011.settings diff --git a/tests/voronoi_crash_resources/slice_polygon_011.wkt b/stress_benchmark/stress_bm_voronoi_resources/011.wkt similarity index 100% rename from tests/voronoi_crash_resources/slice_polygon_011.wkt rename to stress_benchmark/stress_bm_voronoi_resources/011.wkt diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 92543609e6..1e36893cee 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,7 +14,6 @@ set(TESTS_SRC_BASE PathOrderMonotonicTest TimeEstimateCalculatorTest WallsComputationTest - VoronoiCrashTest ) set(TESTS_SRC_INTEGRATION diff --git a/tests/VoronoiCrashTest.cpp b/tests/VoronoiCrashTest.cpp deleted file mode 100644 index d7cb2fdff6..0000000000 --- a/tests/VoronoiCrashTest.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher - -#include -#include -#include -#include - -#include "WallsComputation.h" //Unit under test. -#include "ReadTestSettings.h" -#include "settings/Settings.h" //Settings to generate walls with. -#include "sliceDataStorage.h" //Sl -#include "utils/polygon.h" //To create example polygons. - -#include -#include -#include -#include - -#include -#include - -namespace cura -{ - -class VoronoiCrashTest : public testing::TestWithParam> -{ -public: -}; - -std::vector multiPolygonsFromWkt(const std::string& wkt) -{ - typedef boost::geometry::model::d2::point_xy point_type; - typedef boost::geometry::model::polygon polygon_type; - typedef boost::geometry::model::multi_polygon multi_polygon_type; - - multi_polygon_type boost_polygons {}; - boost::geometry::read_wkt(wkt, boost_polygons); - - std::vector polygons; - - for (const auto& boost_polygon: boost_polygons) - { - Polygons polygon; - - Polygon outer; - for (const auto& point: boost_polygon.outer()) - { - outer.add(Point(point.x(), point.y())); - } - polygon.add(outer); - - for (const auto& hole: boost_polygon.inners()) - { - Polygon inner; - for (const auto& point: hole) - { - inner.add(Point(point.x(), point.y())); - } - polygon.add(inner); - } - - polygons.push_back(polygon); - } - return polygons; -} - -/*! - * - */ -TEST_P(VoronoiCrashTest, SectionsTest) -{ - const auto params = GetParam(); - const std::string polygon_file = std::get<0>(params); - const std::string setting_file = std::get<1>(params); - - spdlog::info("Testing polygon: {}", polygon_file); - spdlog::info("Testing with settings: {}", setting_file); - - std::ifstream file(polygon_file); - std::ostringstream ss; - ss << file.rdbuf(); - const auto shapes = multiPolygonsFromWkt(ss.str()); - - Settings settings; - auto read_settings = readTestSettings(setting_file, settings); - ASSERT_TRUE(read_settings); - - size_t wall_count = settings.get("wall_line_count"); - spdlog::info("wall_count: {}", wall_count); - - SliceLayer layer; - for (const Polygons& shape : shapes) - { - layer.parts.emplace_back(); - SliceLayerPart& part = layer.parts.back(); - part.outline.add(shape); - } - - LayerIndex layer_idx(100); - WallsComputation walls_computation(settings, layer_idx); - - walls_computation.generateWalls(&layer, SectionType::WALL); -} - - -const std::vector polygon_filenames = { - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_001.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_002.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_003.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_004.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_005.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_006.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_007.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_008.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_009.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_010.wkt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/slice_polygon_011.wkt").string(), -}; - -const std::vector setting_filenames = { - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_001.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_002.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_003.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_004.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_005.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_006.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_007.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_008.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_009.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_010.txt").string(), - std::filesystem::path(__FILE__).parent_path().append("voronoi_crash_resources/settings_011.txt").string(), -}; - -INSTANTIATE_TEST_SUITE_P(TestCrashingPolygons, VoronoiCrashTest, testing::Combine(testing::ValuesIn(polygon_filenames), testing::ValuesIn(setting_filenames))); - -} // namespace cura \ No newline at end of file From 4749362831173ba2c03f251479dd44bfbf193006 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 14:56:45 +0100 Subject: [PATCH 097/218] Fixed numeric conversion warnings --- include/bridge.h | 2 +- include/pathPlanning/GCodePath.h | 2 +- include/settings/types/LayerIndex.h | 8 ++++++-- include/utils/ExtrusionLine.h | 12 +++++------- include/utils/Point2LL.h | 4 ++-- include/utils/PolygonsPointIndex.h | 6 +++--- include/utils/linearAlg2D.h | 2 +- include/utils/polygon.h | 8 ++++---- src/ConicalOverhang.cpp | 6 +++--- src/FffGcodeWriter.cpp | 2 +- src/FffPolygonGenerator.cpp | 5 +---- src/InterlockingGenerator.cpp | 22 +++++++++++----------- src/bridge.cpp | 29 +++++++++++++++-------------- src/utils/ExtrusionLine.cpp | 4 ++-- src/utils/polygon.cpp | 2 +- 15 files changed, 57 insertions(+), 57 deletions(-) diff --git a/include/bridge.h b/include/bridge.h index e7972bc17e..a4cb04233d 100644 --- a/include/bridge.h +++ b/include/bridge.h @@ -27,7 +27,7 @@ class SupportLayer; * \param supported_regions Pre-computed regions that the support layer would * support. */ -int bridgeAngle(const Settings& settings, const Polygons& skin_outline, const SliceDataStorage& storage, const unsigned layer_nr, const unsigned bridge_layer, const SupportLayer* support_layer, Polygons& supported_regions); +double bridgeAngle(const Settings& settings, const Polygons& skin_outline, const SliceDataStorage& storage, const unsigned layer_nr, const unsigned bridge_layer, const SupportLayer* support_layer, Polygons& supported_regions); }//namespace cura diff --git a/include/pathPlanning/GCodePath.h b/include/pathPlanning/GCodePath.h index e94fb8edfc..8ac4286082 100644 --- a/include/pathPlanning/GCodePath.h +++ b/include/pathPlanning/GCodePath.h @@ -45,7 +45,7 @@ struct GCodePath bool perform_z_hop{ false }; //!< Whether to perform a z_hop in this path, which is assumed to be a travel path. bool perform_prime{ false }; //!< Whether this path is preceded by a prime (blob) bool skip_agressive_merge_hint{ false }; //!< Wheter this path needs to skip merging if any travel paths are in between the extrusions. - std::vector points; //!< The points constituting this path. + std::vector points{}; //!< The points constituting this path. bool done{ false }; //!< Path is finished, no more moves should be added, and a new path should be started instead of any appending done to this one. double fan_speed{ GCodePathConfig::FAN_SPEED_DEFAULT }; //!< fan speed override for this path, value should be within range 0-100 (inclusive) and ignored otherwise TimeMaterialEstimates estimates{}; //!< Naive time and material estimates diff --git a/include/settings/types/LayerIndex.h b/include/settings/types/LayerIndex.h index 6298555dc0..9e2100da87 100644 --- a/include/settings/types/LayerIndex.h +++ b/include/settings/types/LayerIndex.h @@ -26,10 +26,14 @@ struct LayerIndex constexpr LayerIndex(LayerIndex&& other) noexcept = default; constexpr explicit LayerIndex(const utils::floating_point auto val) noexcept - : value{ static_cast(val) } {}; + : value{ static_cast(val) } + { + } constexpr LayerIndex(const utils::integral auto val) noexcept - : value{ static_cast(val) } {}; + : value{ static_cast(val) } + { + } constexpr LayerIndex& operator=(const LayerIndex& other) noexcept = default; diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index b1872da728..7c09ca4eb5 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -65,12 +65,10 @@ struct ExtrusionLine return junctions_.empty(); } - ExtrusionLine(const size_t inset_idx, const bool is_odd); - - ExtrusionLine() - : inset_idx_(-1) - , is_odd_(true) - , is_closed_(false) + ExtrusionLine(size_t inset_idx = std::numeric_limits::max(), bool is_odd = false, bool is_closed = false) + : inset_idx_(inset_idx) + , is_odd_(is_odd) + , is_closed_(is_closed) { } @@ -174,7 +172,7 @@ struct ExtrusionLine void insert(size_t index, const ExtrusionJunction& p) { - junctions_.insert(junctions_.begin() + index, p); + junctions_.insert(junctions_.begin() + static_cast(index), p); } template diff --git a/include/utils/Point2LL.h b/include/utils/Point2LL.h index 76f8df39b1..8623282fc2 100644 --- a/include/utils/Point2LL.h +++ b/include/utils/Point2LL.h @@ -183,12 +183,12 @@ INLINE coord_t cross(const Point2LL& p0, const Point2LL& p1) return p0.X * p1.Y - p0.Y * p1.X; } -INLINE int angle(const Point2LL& p) +INLINE double angle(const Point2LL& p) { double angle = std::atan2(p.X, p.Y) / std::numbers::pi * 180.0; if (angle < 0.0) angle += 360.0; - return static_cast(std::lrint(angle)); + return angle; } // Identity function, used to be able to make templated algorithms where the input is sometimes points, sometimes things that contain or can be converted to points. diff --git a/include/utils/PolygonsPointIndex.h b/include/utils/PolygonsPointIndex.h index 1b973f94da..deb722dd06 100644 --- a/include/utils/PolygonsPointIndex.h +++ b/include/utils/PolygonsPointIndex.h @@ -24,8 +24,8 @@ class PathsPointIndex * The polygons into which this index is indexing. */ const Paths* polygons_; // (pointer to const polygons) - unsigned int poly_idx_; //!< The index of the polygon in \ref PolygonsPointIndex::polygons - unsigned int point_idx_; //!< The index of the point in the polygon in \ref PolygonsPointIndex::polygons + size_t poly_idx_; //!< The index of the polygon in \ref PolygonsPointIndex::polygons + size_t point_idx_; //!< The index of the point in the polygon in \ref PolygonsPointIndex::polygons /*! * Constructs an empty point index to no polygon. @@ -157,7 +157,7 @@ struct PolygonsPointIndexSegmentLocator { ConstPolygonRef poly = (*val.polygons_)[val.poly_idx_]; Point2LL start = poly[val.point_idx_]; - unsigned int next_point_idx = (val.point_idx_ + 1) % poly.size(); + size_t next_point_idx = (val.point_idx_ + 1ul) % poly.size(); Point2LL end = poly[next_point_idx]; return std::pair(start, end); } diff --git a/include/utils/linearAlg2D.h b/include/utils/linearAlg2D.h index 42b57a16d9..5c7867e4d6 100644 --- a/include/utils/linearAlg2D.h +++ b/include/utils/linearAlg2D.h @@ -393,7 +393,7 @@ class LinearAlg2D * \param c end of second line segment * \return positive if acute, negative if obtuse, zero if 90 degree corner */ - static inline int isAcuteCorner(const Point2LL& a, const Point2LL& b, const Point2LL& c) + static inline coord_t isAcuteCorner(const Point2LL& a, const Point2LL& b, const Point2LL& c) { const Point2LL ba = a - b; const Point2LL bc = c - b; diff --git a/include/utils/polygon.h b/include/utils/polygon.h index 0cfc9af876..b1ffb4c5c1 100644 --- a/include/utils/polygon.h +++ b/include/utils/polygon.h @@ -550,13 +550,13 @@ class PolygonRef : public ConstPolygonRef void remove(size_t index) { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); - path->erase(path->begin() + index); + POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + path->erase(path->begin() + static_cast(index)); } void insert(size_t index, Point2LL p) { - POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); + POLY_ASSERT(index < size() && index <= static_cast(std::numeric_limits::max())); path->insert(path->begin() + static_cast(index), p); } @@ -1099,7 +1099,7 @@ class Polygons return ret; } - Polygons offset(int distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, double miter_limit = 1.2) const; + Polygons offset(coord_t distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, double miter_limit = 1.2) const; Polygons offsetPolyLine(int distance, ClipperLib::JoinType joinType = ClipperLib::jtMiter, bool inputPolyIsClosed = false) const { diff --git a/src/ConicalOverhang.cpp b/src/ConicalOverhang.cpp index f0afc15af9..9918d8a782 100644 --- a/src/ConicalOverhang.cpp +++ b/src/ConicalOverhang.cpp @@ -19,12 +19,12 @@ void ConicalOverhang::apply(Slicer* slicer, const Mesh& mesh) const double maxHoleArea = mesh.settings_.get("conical_overhang_hole_size"); const double tan_angle = tan(angle); // the XY-component of the angle const coord_t layer_thickness = mesh.settings_.get("layer_height"); - coord_t max_dist_from_lower_layer = tan_angle * layer_thickness; // max dist which can be bridged + coord_t max_dist_from_lower_layer = std::llround(tan_angle * static_cast(layer_thickness)); // max dist which can be bridged for (LayerIndex layer_nr = slicer->layers.size() - 2; static_cast(layer_nr) >= 0; layer_nr--) { - SlicerLayer& layer = slicer->layers[layer_nr]; - SlicerLayer& layer_above = slicer->layers[layer_nr + 1]; + SlicerLayer& layer = slicer->layers[static_cast(layer_nr)]; + SlicerLayer& layer_above = slicer->layers[static_cast(layer_nr) + 1ul]; if (std::abs(max_dist_from_lower_layer) < 5) { // magically nothing happens when max_dist_from_lower_layer == 0 // below magic code solves that diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index 4d54b3bb23..76cc79db48 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -2770,7 +2770,7 @@ void FffGcodeWriter::processTopBottom( Polygons supported_skin_part_regions; - const int angle = bridgeAngle(mesh.settings, skin_part.skin_fill, storage, layer_nr, bridge_layer, support_layer, supported_skin_part_regions); + const double angle = bridgeAngle(mesh.settings, skin_part.skin_fill, storage, layer_nr, bridge_layer, support_layer, supported_skin_part_regions); if (angle > -1 || (support_threshold > 0 && (supported_skin_part_regions.area() / (skin_part.skin_fill.area() + 1) < support_threshold))) { diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 0f731b9bae..16503d2839 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -1128,10 +1128,7 @@ void FffPolygonGenerator::processFuzzyWalls(SliceMeshStorage& mesh) continue; } - auto& result = result_lines.emplace_back(); - result.inset_idx_ = line.inset_idx_; - result.is_odd_ = line.is_odd_; - result.is_closed_ = line.is_closed_; + auto& result = result_lines.emplace_back(line.inset_idx_, line.is_odd_, line.is_closed_); // generate points in between p0 and p1 int64_t dist_left_over diff --git a/src/InterlockingGenerator.cpp b/src/InterlockingGenerator.cpp index 6ac2efb7d1..ea1849d96f 100644 --- a/src/InterlockingGenerator.cpp +++ b/src/InterlockingGenerator.cpp @@ -109,9 +109,9 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set for (const auto& cell : has_all_meshes) { const Point3LL bottom_corner = vu_.toLowerCorner(cell); - for (int layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < near_interlock_per_layer.size(); ++layer_nr) + for (coord_t layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < static_cast(near_interlock_per_layer.size()); ++layer_nr) { - near_interlock_per_layer[layer_nr].add(vu_.toPolygon(cell)); + near_interlock_per_layer[static_cast(layer_nr)].add(vu_.toPolygon(cell)); } } for (auto& near_interlock : near_interlock_per_layer) @@ -207,7 +207,7 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& layers for (size_t layer_nr = 0; layer_nr < layers.size(); layer_nr++) { - const coord_t z = layer_nr; + const coord_t z = static_cast(layer_nr); vu_.walkDilatedPolygons(layers[layer_nr], z, kernel, voxel_emplacer); Polygons skin = layers[layer_nr]; if (layer_nr > 0) @@ -226,14 +226,14 @@ std::vector InterlockingGenerator::computeUnionedVolumeRegions() const for (LayerIndex layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { - Polygons& layer_region = layer_regions[layer_nr]; + Polygons& layer_region = layer_regions[static_cast(layer_nr)]; for (Slicer* mesh : { &mesh_a_, &mesh_b_ }) { if (layer_nr >= mesh->layers.size()) { break; } - const SlicerLayer& layer = mesh->layers[layer_nr]; + const SlicerLayer& layer = mesh->layers[static_cast(layer_nr)]; layer_region.add(layer.polygons); } layer_region = layer_region.offset(ignored_gap_).offset(-ignored_gap_); // Morphological close to merge meshes into single volume @@ -250,7 +250,7 @@ std::vector> InterlockingGenerator::generateMicrostructure const coord_t beam_w_sum = beam_width_a_ + beam_width_b_; const coord_t middle = cell_size_.x_ * beam_width_a_ / beam_w_sum; const coord_t width[2] = { middle, cell_size_.x_ - middle }; - for (size_t mesh_idx : { 0, 1 }) + for (size_t mesh_idx : { 0ul, 1ul }) { Point2LL offset(mesh_idx ? middle : 0, 0); Point2LL area_size(width[mesh_idx], cell_size_.y_); @@ -287,7 +287,7 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s // Every `beam_layer_count` number of layers are combined to an interlocking beam layer // to store these we need ceil(max_layer_count / beam_layer_count) of these layers // the formula is rewritten as (max_layer_count + beam_layer_count - 1) / beam_layer_count, so it works for integer division - size_t num_interlocking_layers = (max_layer_count + beam_layer_count_ - 1) / beam_layer_count_; + size_t num_interlocking_layers = (max_layer_count + static_cast(beam_layer_count_) - 1ul) / static_cast(beam_layer_count_); structure_per_layer[0].resize(num_interlocking_layers); structure_per_layer[1].resize(num_interlocking_layers); @@ -299,9 +299,9 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s { for (LayerIndex layer_nr = bottom_corner.z_; layer_nr < bottom_corner.z_ + cell_size_.z_ && layer_nr < max_layer_count; layer_nr += beam_layer_count_) { - Polygons areas_here = cell_area_per_mesh_per_layer[(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; + Polygons areas_here = cell_area_per_mesh_per_layer[static_cast(layer_nr / beam_layer_count_) % cell_area_per_mesh_per_layer.size()][mesh_idx]; areas_here.translate(Point2LL(bottom_corner.x_, bottom_corner.y_)); - structure_per_layer[mesh_idx][layer_nr / beam_layer_count_].add(areas_here); + structure_per_layer[mesh_idx][static_cast(layer_nr / beam_layer_count_)].add(areas_here); } } } @@ -329,8 +329,8 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s Polygons layer_outlines = layer_regions[layer_nr]; layer_outlines.applyMatrix(unapply_rotation); - const Polygons areas_here = structure_per_layer[mesh_idx][layer_nr / beam_layer_count_].intersection(layer_outlines); - const Polygons& areas_other = structure_per_layer[! mesh_idx][layer_nr / beam_layer_count_]; + const Polygons areas_here = structure_per_layer[mesh_idx][layer_nr / static_cast(beam_layer_count_)].intersection(layer_outlines); + const Polygons& areas_other = structure_per_layer[! mesh_idx][layer_nr / static_cast(beam_layer_count_)]; SlicerLayer& layer = mesh->layers[layer_nr]; layer.polygons = layer.polygons diff --git a/src/bridge.cpp b/src/bridge.cpp index c5d4c25fa9..91616a1d87 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -11,7 +11,7 @@ namespace cura { -int bridgeAngle( +double bridgeAngle( const Settings& settings, const Polygons& skin_outline, const SliceDataStorage& storage, @@ -39,7 +39,8 @@ int bridgeAngle( { const coord_t infill_line_distance = mesh.settings.get("infill_line_distance"); const coord_t infill_line_width = mesh.settings.get("infill_line_width"); - const bool part_has_sparse_infill = (infill_line_distance == 0) || ((double)infill_line_width / infill_line_distance) <= sparse_infill_max_density; + double density = static_cast(infill_line_width) / static_cast(infill_line_distance); + const bool part_has_sparse_infill = (infill_line_distance == 0) || density <= sparse_infill_max_density; for (const SliceLayerPart& prev_layer_part : mesh.layers[layer_nr - bridge_layer].parts) { @@ -117,7 +118,7 @@ int bridgeAngle( // It needs to be shrunk slightly so that the vertices of the skin polygon that would otherwise fall exactly on // the air boundary do appear to be supported - const int bb_max_dim = std::max(boundary_box.max_.X - boundary_box.min_.X, boundary_box.max_.Y - boundary_box.min_.Y); + const coord_t bb_max_dim = std::max(boundary_box.max_.X - boundary_box.min_.X, boundary_box.max_.Y - boundary_box.min_.Y); const Polygons air_below(bb_poly.offset(bb_max_dim).difference(prev_layer_outline).offset(-10)); Polygons skin_perimeter_lines; @@ -134,7 +135,7 @@ int bridgeAngle( if (skin_perimeter_lines_over_air.size()) { // one or more edges of the skin region are unsupported, determine the longest - double max_dist2 = 0; + coord_t max_dist2 = 0; double line_angle = -1; for (PolygonRef air_line : skin_perimeter_lines_over_air) { @@ -142,7 +143,7 @@ int bridgeAngle( for (unsigned i = 1; i < air_line.size(); ++i) { const Point2LL& p1(air_line[i]); - double dist2 = vSize2(p0 - p1); + coord_t dist2 = vSize2(p0 - p1); if (dist2 > max_dist2) { max_dist2 = dist2; @@ -158,20 +159,20 @@ int bridgeAngle( { // as the proportion of the skin region that is supported is >= supportThreshold, it's not // considered to be a bridge and the original bridge detection code below is skipped - return -1; + return -1.0; } if (islands.size() > 5 || islands.size() < 1) { - return -1; + return -1.0; } // Next find the 2 largest islands that we rest on. double area1 = 0; double area2 = 0; - int idx1 = -1; - int idx2 = -1; - for (unsigned int n = 0; n < islands.size(); n++) + std::optional idx1; + std::optional idx2; + for (size_t n = 0; n < islands.size(); n++) { // Skip internal holes if (! islands[n].orientation()) @@ -194,11 +195,11 @@ int bridgeAngle( } } - if (idx1 < 0 || idx2 < 0) - return -1; + if (! idx1 || ! idx2) + return -1.0; - Point2LL center1 = islands[idx1].centerOfMass(); - Point2LL center2 = islands[idx2].centerOfMass(); + Point2LL center1 = islands[*idx1].centerOfMass(); + Point2LL center2 = islands[*idx2].centerOfMass(); return angle(center2 - center1); } diff --git a/src/utils/ExtrusionLine.cpp b/src/utils/ExtrusionLine.cpp index b16a247f63..7d0ef20561 100644 --- a/src/utils/ExtrusionLine.cpp +++ b/src/utils/ExtrusionLine.cpp @@ -11,12 +11,12 @@ namespace cura { -ExtrusionLine::ExtrusionLine(const size_t inset_idx, const bool is_odd) +/*ExtrusionLine::ExtrusionLine(const size_t inset_idx, const bool is_odd) : inset_idx_(inset_idx) , is_odd_(is_odd) , is_closed_(false) { -} +}*/ coord_t ExtrusionLine::getLength() const { diff --git a/src/utils/polygon.cpp b/src/utils/polygon.cpp index 2c6b254bc7..c7554f08bd 100644 --- a/src/utils/polygon.cpp +++ b/src/utils/polygon.cpp @@ -359,7 +359,7 @@ coord_t Polygons::polyLineLength() const return length; } -Polygons Polygons::offset(int distance, ClipperLib::JoinType join_type, double miter_limit) const +Polygons Polygons::offset(coord_t distance, ClipperLib::JoinType join_type, double miter_limit) const { if (distance == 0) { From fda3e1bb8e712fc83a8e2f17d96881ad6d4a42c9 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 15:39:51 +0100 Subject: [PATCH 098/218] Fixed unit tests build --- include/PathOrderOptimizer.h | 12 +- include/utils/Simplify.h | 35 ++-- tests/ExtruderPlanTest.cpp | 49 +++-- tests/GCodeExportTest.cpp | 128 ++++++------ tests/PathOrderOptimizerTest.cpp | 12 +- tests/arcus/ArcusCommunicationPrivateTest.cpp | 28 +-- tests/arcus/MockCommunication.h | 34 ++-- tests/integration/SlicePhaseTest.cpp | 4 +- tests/settings/SettingsTest.cpp | 22 ++- tests/utils/LinearAlg2DTest.cpp | 184 ++++++++++-------- tests/utils/PolygonUtilsTest.cpp | 150 ++++++++------ tests/utils/SimplifyTest.cpp | 35 ++-- tests/utils/SparseGridTest.cpp | 133 +++++++++---- 13 files changed, 479 insertions(+), 347 deletions(-) diff --git a/include/PathOrderOptimizer.h b/include/PathOrderOptimizer.h index a65d3bba87..9bd8288a95 100644 --- a/include/PathOrderOptimizer.h +++ b/include/PathOrderOptimizer.h @@ -80,12 +80,12 @@ class PathOrderOptimizer * The location where the nozzle is assumed to start from before printing * these parts. */ - const Point2LL start_point_; + Point2LL start_point_; /*! * Seam settings. */ - const ZSeamConfig seam_config_; + ZSeamConfig seam_config_; static const std::unordered_multimap no_order_requirements_; @@ -104,7 +104,7 @@ class PathOrderOptimizer * \param combing_boundary Boundary to avoid when making travel moves. */ PathOrderOptimizer( - const Point2LL start_point, + const Point2LL& start_point, const ZSeamConfig seam_config = ZSeamConfig(), const bool detect_loops = false, const Polygons* combing_boundary = nullptr, @@ -268,7 +268,7 @@ class PathOrderOptimizer * polygons. This then allows the optimizer to decide on a seam location * that is not one of the endpoints of the polyline. */ - const bool detect_loops_; + bool detect_loops_; /*! * Whether to reverse the ordering completely. @@ -276,7 +276,7 @@ class PathOrderOptimizer * This reverses the order in which parts are printed, and inverts the * direction of each path as well. */ - const bool reverse_direction_; + bool reverse_direction_; /* * Whether to print all outer walls in a group, one after another. @@ -284,7 +284,7 @@ class PathOrderOptimizer * If this is enabled outer walls will be printed first and then all other * walls will be printed. If reversed they will be printed last. */ - const bool _group_outer_walls; + bool _group_outer_walls; /*! * Order requirements on the paths. diff --git a/include/utils/Simplify.h b/include/utils/Simplify.h index 91c0eeca61..3ca5b0009d 100644 --- a/include/utils/Simplify.h +++ b/include/utils/Simplify.h @@ -40,6 +40,23 @@ namespace cura class Simplify { public: + /*! + * Line segments shorter than this size should be considered for removal. + */ + coord_t max_resolution_; + + /*! + * If removing a vertex causes a deviation further than this, it may not be + * removed. + */ + coord_t max_deviation_; + + /*! + * If removing a vertex causes the covered area of the line segments to + * change by more than this, it may not be removed. + */ + coord_t max_area_deviation_; + /*! * Construct a simplifier, storing the simplification parameters in the * instance (as a factory pattern). @@ -471,24 +488,6 @@ class Simplify * \return The area deviation that would be caused by removing the vertex. */ coord_t getAreaDeviation(const ExtrusionJunction& before, const ExtrusionJunction& vertex, const ExtrusionJunction& after) const; - -private: - /*! - * Line segments shorter than this size should be considered for removal. - */ - coord_t max_resolution_; - - /*! - * If removing a vertex causes a deviation further than this, it may not be - * removed. - */ - coord_t max_deviation_; - - /*! - * If removing a vertex causes the covered area of the line segments to - * change by more than this, it may not be removed. - */ - coord_t max_area_deviation_; }; } // namespace cura diff --git a/tests/ExtruderPlanTest.cpp b/tests/ExtruderPlanTest.cpp index 2aa6f6e59d..ed15fc4a9f 100644 --- a/tests/ExtruderPlanTest.cpp +++ b/tests/ExtruderPlanTest.cpp @@ -1,11 +1,12 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher -#include "LayerPlan.h" //Code under test. -#include "pathPlanning/SpeedDerivatives.h" +#include //For calculating averages. #include -#include //For calculating averages. + +#include "LayerPlan.h" //Code under test. +#include "pathPlanning/SpeedDerivatives.h" // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -71,8 +72,16 @@ class ExtruderPlanTestPathCollection GCodePathConfig travel_config; ExtruderPlanTestPathCollection() - : extrusion_config(GCodePathConfig{ .type = PrintFeatureType::OuterWall, .line_width = 400, .layer_thickness = 100, .flow = 1.0_r, .speed_derivatives = SpeedDerivatives { .speed = 50.0, .acceleration = 1000.0, .jerk = 10.0 } }) - , travel_config(GCodePathConfig{ .type = PrintFeatureType::MoveCombing, .line_width = 0, .layer_thickness = 100, .flow = 0.0_r, .speed_derivatives = SpeedDerivatives { .speed = 120.0, .acceleration = 5000.0, .jerk = 30.0 } }) + : extrusion_config(GCodePathConfig{ .type = PrintFeatureType::OuterWall, + .line_width = 400, + .layer_thickness = 100, + .flow = 1.0_r, + .speed_derivatives = SpeedDerivatives{ .speed = 50.0, .acceleration = 1000.0, .jerk = 10.0 } }) + , travel_config(GCodePathConfig{ .type = PrintFeatureType::MoveCombing, + .line_width = 0, + .layer_thickness = 100, + .flow = 0.0_r, + .speed_derivatives = SpeedDerivatives{ .speed = 120.0, .acceleration = 5000.0, .jerk = 30.0 } }) { std::shared_ptr mesh = nullptr; constexpr Ratio flow_1 = 1.0_r; @@ -363,10 +372,10 @@ class ExtruderPlanTest : public testing::Test */ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationZeroIsUncompensated) { - extruder_plan.paths = GetParam(); + extruder_plan.paths_ = GetParam(); std::vector original_widths; std::vector original_speeds; - for (const GCodePath& path : extruder_plan.paths) + for (const GCodePath& path : extruder_plan.paths_) { original_widths.push_back(path.width_factor); original_speeds.push_back(path.speed_factor); @@ -374,11 +383,11 @@ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationZeroIsUncompe extruder_plan.applyBackPressureCompensation(0.0_r); - ASSERT_EQ(extruder_plan.paths.size(), original_widths.size()) << "Number of paths may not have changed."; - for (size_t i = 0; i < extruder_plan.paths.size(); ++i) + ASSERT_EQ(extruder_plan.paths_.size(), original_widths.size()) << "Number of paths may not have changed."; + for (size_t i = 0; i < extruder_plan.paths_.size(); ++i) { - EXPECT_NEAR(original_widths[i], extruder_plan.paths[i].width_factor, error_margin) << "The width did not change. Back pressure compensation doesn't adjust line width."; - EXPECT_NEAR(original_speeds[i], extruder_plan.paths[i].speed_factor, error_margin) << "The speed factor did not change, since the compensation factor was 0."; + EXPECT_NEAR(original_widths[i], extruder_plan.paths_[i].width_factor, error_margin) << "The width did not change. Back pressure compensation doesn't adjust line width."; + EXPECT_NEAR(original_speeds[i], extruder_plan.paths_[i].speed_factor, error_margin) << "The speed factor did not change, since the compensation factor was 0."; } } @@ -388,24 +397,24 @@ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationZeroIsUncompe */ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationFull) { - extruder_plan.paths = GetParam(); + extruder_plan.paths_ = GetParam(); extruder_plan.applyBackPressureCompensation(1.0_r); auto first_extrusion = std::find_if( - extruder_plan.paths.begin(), - extruder_plan.paths.end(), + extruder_plan.paths_.begin(), + extruder_plan.paths_.end(), [&](GCodePath& path) { return shouldCountPath(path); }); - if (first_extrusion == extruder_plan.paths.end()) // Only travel moves in this plan. + if (first_extrusion == extruder_plan.paths_.end()) // Only travel moves in this plan. { return; } // All flow rates must be equal to this one. const double first_flow_mm3_per_sec = calculatePathWidth(*first_extrusion); - for (GCodePath& path : extruder_plan.paths) + for (GCodePath& path : extruder_plan.paths_) { if (! shouldCountPath(path)) { @@ -422,11 +431,11 @@ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationFull) */ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationHalf) { - extruder_plan.paths = GetParam(); + extruder_plan.paths_ = GetParam(); // Calculate what the flow rates were originally. std::vector original_flows; - for (GCodePath& path : extruder_plan.paths) + for (GCodePath& path : extruder_plan.paths_) { if (! shouldCountPath(path)) { @@ -441,7 +450,7 @@ TEST_P(ExtruderPlanPathsParameterizedTest, BackPressureCompensationHalf) // Calculate the new flow rates. std::vector new_flows; - for (GCodePath& path : extruder_plan.paths) + for (GCodePath& path : extruder_plan.paths_) { if (! shouldCountPath(path)) { @@ -471,7 +480,7 @@ TEST_F(ExtruderPlanTest, BackPressureCompensationEmptyPlan) // The extruder plan starts off empty. So immediately try applying back-pressure compensation. extruder_plan.applyBackPressureCompensation(0.5_r); - EXPECT_TRUE(extruder_plan.paths.empty()) << "The paths in the extruder plan should remain empty. Also it shouldn't crash."; + EXPECT_TRUE(extruder_plan.paths_.empty()) << "The paths in the extruder plan should remain empty. Also it shouldn't crash."; } } // namespace cura // NOLINTEND(*-magic-numbers) diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index e43ba1fee9..b8ae6bb7ca 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -241,7 +241,7 @@ class GriffinHeaderTest : public testing::TestWithParam TEST_P(GriffinHeaderTest, HeaderGriffinFormat) { const size_t num_extruders = GetParam(); - gcode.flavor = EGCodeFlavor::GRIFFIN; + gcode.flavor_ = EGCodeFlavor::GRIFFIN; for (size_t extruder_index = 0; extruder_index < num_extruders; extruder_index++) { Application::getInstance().current_slice_->scene.extruders.emplace_back(extruder_index, nullptr); @@ -270,7 +270,7 @@ TEST_P(GriffinHeaderTest, HeaderGriffinFormat) EXPECT_EQ(Date::getDate().toStringDashed(), token.substr(22)); std::getline(result, token, '\n'); EXPECT_EQ(std::string(";TARGET_MACHINE.NAME:"), token.substr(0, 21)); - EXPECT_EQ(gcode.machine_name, token.substr(21)); + EXPECT_EQ(gcode.machine_name_, token.substr(21)); for (size_t extruder_nr = 0; extruder_nr < num_extruders; extruder_nr++) { @@ -317,7 +317,7 @@ INSTANTIATE_TEST_SUITE_P(GriffinHeaderTestInstantiation, GriffinHeaderTest, test */ TEST_F(GCodeExportTest, HeaderUltiGCode) { - gcode.flavor = EGCodeFlavor::ULTIGCODE; + gcode.flavor_ = EGCodeFlavor::ULTIGCODE; constexpr size_t num_extruders = 2; const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; @@ -328,7 +328,7 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) ExtruderTrain& train = Application::getInstance().current_slice_->scene.extruders.back(); train.settings_.add("machine_nozzle_size", "0.4"); } - gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); + gcode.total_bounding_box_ = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -341,14 +341,14 @@ TEST_F(GCodeExportTest, HeaderUltiGCode) TEST_F(GCodeExportTest, HeaderRepRap) { Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); - gcode.flavor = EGCodeFlavor::REPRAP; - gcode.extruder_attr[0].filament_area = 5.0; - gcode.extruder_attr[1].filament_area = 4.0; + gcode.flavor_ = EGCodeFlavor::REPRAP; + gcode.extruder_attr_[0].filament_area_ = 5.0; + gcode.extruder_attr_[1].filament_area_ = 4.0; constexpr size_t num_extruders = 2; const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); + gcode.total_bounding_box_ = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -361,14 +361,14 @@ TEST_F(GCodeExportTest, HeaderRepRap) TEST_F(GCodeExportTest, HeaderMarlin) { Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); - gcode.flavor = EGCodeFlavor::MARLIN; - gcode.extruder_attr[0].filament_area = 5.0; - gcode.extruder_attr[1].filament_area = 4.0; + gcode.flavor_ = EGCodeFlavor::MARLIN; + gcode.extruder_attr_[0].filament_area_ = 5.0; + gcode.extruder_attr_[1].filament_area_ = 4.0; constexpr size_t num_extruders = 2; const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); + gcode.total_bounding_box_ = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -381,12 +381,12 @@ TEST_F(GCodeExportTest, HeaderMarlin) TEST_F(GCodeExportTest, HeaderMarlinVolumetric) { Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.123"); - gcode.flavor = EGCodeFlavor::MARLIN_VOLUMATRIC; + gcode.flavor_ = EGCodeFlavor::MARLIN_VOLUMATRIC; constexpr size_t num_extruders = 2; const std::vector extruder_is_used(num_extruders, true); constexpr Duration print_time = 1337; const std::vector filament_used = { 100, 200 }; - gcode.total_bounding_box = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); + gcode.total_bounding_box_ = AABB3D(Point3LL(0, 0, 0), Point3LL(1000, 1000, 1000)); std::string result = gcode.getFileHeader(extruder_is_used, &print_time, filament_used); @@ -403,8 +403,8 @@ TEST_F(GCodeExportTest, HeaderMarlinVolumetric) TEST_F(GCodeExportTest, EVsMmVolumetric) { constexpr double filament_area = 10.0; - gcode.extruder_attr[0].filament_area = filament_area; - gcode.is_volumetric = true; + gcode.extruder_attr_[0].filament_area_ = filament_area; + gcode.is_volumetric_ = true; constexpr double mm3_input = 15.0; EXPECT_EQ(gcode.mm3ToE(mm3_input), mm3_input) << "Since the E is volumetric and the input mm3 is also volumetric, the output needs to be the same."; @@ -428,8 +428,8 @@ TEST_F(GCodeExportTest, EVsMmVolumetric) TEST_F(GCodeExportTest, EVsMmLinear) { constexpr double filament_area = 10.0; - gcode.extruder_attr[0].filament_area = filament_area; - gcode.is_volumetric = false; + gcode.extruder_attr_[0].filament_area_ = filament_area; + gcode.is_volumetric_ = false; EXPECT_EQ(gcode.mmToE(15.0), 15.0) << "Since the E is linear and the input mm is also linear, the output needs to be the same."; EXPECT_EQ(gcode.eToMm(15.0), 15.0) << "Since the E is linear and the output mm is also linear, the output needs to be the same."; @@ -460,22 +460,22 @@ TEST_F(GCodeExportTest, SwitchExtruderSimple) scene.extruders.emplace_back(0, nullptr); ExtruderTrain& train1 = scene.extruders.back(); - train1.settings.add("machine_extruder_start_code", ";FIRST EXTRUDER START G-CODE!"); - train1.settings.add("machine_extruder_end_code", ";FIRST EXTRUDER END G-CODE!"); - train1.settings.add("machine_extruder_start_code_duration", "0.0"); - train1.settings.add("machine_extruder_end_code_duration", "0.0"); - train1.settings.add("machine_firmware_retract", "True"); - train1.settings.add("retraction_enable", "True"); + train1.settings_.add("machine_extruder_start_code", ";FIRST EXTRUDER START G-CODE!"); + train1.settings_.add("machine_extruder_end_code", ";FIRST EXTRUDER END G-CODE!"); + train1.settings_.add("machine_extruder_start_code_duration", "0.0"); + train1.settings_.add("machine_extruder_end_code_duration", "0.0"); + train1.settings_.add("machine_firmware_retract", "True"); + train1.settings_.add("retraction_enable", "True"); scene.extruders.emplace_back(1, nullptr); ExtruderTrain& train2 = scene.extruders.back(); - train2.settings.add("machine_extruder_start_code", ";SECOND EXTRUDER START G-CODE!"); - train2.settings.add("machine_extruder_end_code", ";SECOND EXTRUDER END G-CODE!"); - train2.settings.add("machine_extruder_start_code_duration", "0.0"); - train2.settings.add("machine_extruder_end_code_duration", "0.0"); - train2.settings.add("machine_firmware_retract", "True"); - train2.settings.add("retraction_enable", "True"); + train2.settings_.add("machine_extruder_start_code", ";SECOND EXTRUDER START G-CODE!"); + train2.settings_.add("machine_extruder_end_code", ";SECOND EXTRUDER END G-CODE!"); + train2.settings_.add("machine_extruder_start_code_duration", "0.0"); + train2.settings_.add("machine_extruder_end_code_duration", "0.0"); + train2.settings_.add("machine_firmware_retract", "True"); + train2.settings_.add("retraction_enable", "True"); RetractionConfig no_retraction; no_retraction.distance = 0; @@ -496,8 +496,8 @@ TEST_F(GCodeExportTest, WriteZHopStartZero) TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) { Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. - gcode.current_layer_z = 2000; + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder_].settings_.add("speed_z_hop", "1"); // 60mm/min. + gcode.current_layer_z_ = 2000; constexpr coord_t hop_height = 3000; gcode.writeZhopStart(hop_height); EXPECT_EQ(std::string("G1 F60 Z5\n"), output.str()); @@ -506,8 +506,8 @@ TEST_F(GCodeExportTest, WriteZHopStartDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopStartCustomSpeed) { Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. - gcode.current_layer_z = 2000; + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder_].settings_.add("speed_z_hop", "1"); // 60mm/min. + gcode.current_layer_z_ = 2000; constexpr coord_t hop_height = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. gcode.writeZhopStart(hop_height, speed); @@ -516,7 +516,7 @@ TEST_F(GCodeExportTest, WriteZHopStartCustomSpeed) TEST_F(GCodeExportTest, WriteZHopEndZero) { - gcode.is_z_hopped = 0; + gcode.is_z_hopped_ = 0; gcode.writeZhopEnd(); EXPECT_EQ(std::string(""), output.str()) << "Zero length z hop shouldn't affect gcode output."; } @@ -524,9 +524,9 @@ TEST_F(GCodeExportTest, WriteZHopEndZero) TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) { Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); // 60mm/min. - gcode.current_layer_z = 2000; - gcode.is_z_hopped = 3000; + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder_].settings_.add("speed_z_hop", "1"); // 60mm/min. + gcode.current_layer_z_ = 2000; + gcode.is_z_hopped_ = 3000; gcode.writeZhopEnd(); EXPECT_EQ(std::string("G1 F60 Z2\n"), output.str()); } @@ -534,9 +534,9 @@ TEST_F(GCodeExportTest, WriteZHopEndDefaultSpeed) TEST_F(GCodeExportTest, WriteZHopEndCustomSpeed) { Application::getInstance().current_slice_->scene.extruders.emplace_back(0, nullptr); - Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder].settings_.add("speed_z_hop", "1"); - gcode.current_layer_z = 2000; - gcode.is_z_hopped = 3000; + Application::getInstance().current_slice_->scene.extruders[gcode.current_extruder_].settings_.add("speed_z_hop", "1"); + gcode.current_layer_z_ = 2000; + gcode.is_z_hopped_ = 3000; constexpr Velocity speed{ 4.0 }; // 240 mm/min. gcode.writeZhopEnd(speed); EXPECT_EQ(std::string("G1 F240 Z2\n"), output.str()) << "Custom provided speed should be used."; @@ -544,9 +544,9 @@ TEST_F(GCodeExportTest, WriteZHopEndCustomSpeed) TEST_F(GCodeExportTest, insertWipeScriptSingleMove) { - gcode.currentPosition = Point3LL(1000, 1000, 1000); - gcode.current_layer_z = 1000; - gcode.use_extruder_offset_to_offset_coords = false; + gcode.current_position_ = Point3LL(1000, 1000, 1000); + gcode.current_layer_z_ = 1000; + gcode.use_extruder_offset_to_offset_coords_ = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; @@ -576,9 +576,9 @@ TEST_F(GCodeExportTest, insertWipeScriptSingleMove) TEST_F(GCodeExportTest, insertWipeScriptMultipleMoves) { - gcode.currentPosition = Point3LL(1000, 1000, 1000); - gcode.current_layer_z = 1000; - gcode.use_extruder_offset_to_offset_coords = false; + gcode.current_position_ = Point3LL(1000, 1000, 1000); + gcode.current_layer_z_ = 1000; + gcode.use_extruder_offset_to_offset_coords_ = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; @@ -614,9 +614,9 @@ TEST_F(GCodeExportTest, insertWipeScriptMultipleMoves) TEST_F(GCodeExportTest, insertWipeScriptOptionalDelay) { - gcode.currentPosition = Point3LL(1000, 1000, 1000); - gcode.current_layer_z = 1000; - gcode.use_extruder_offset_to_offset_coords = false; + gcode.current_position_ = Point3LL(1000, 1000, 1000); + gcode.current_layer_z_ = 1000; + gcode.use_extruder_offset_to_offset_coords_ = false; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; @@ -645,15 +645,15 @@ TEST_F(GCodeExportTest, insertWipeScriptOptionalDelay) TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) { - gcode.currentPosition = Point3LL(1000, 1000, 1000); - gcode.current_layer_z = 1000; - gcode.current_e_value = 100; - gcode.use_extruder_offset_to_offset_coords = false; - gcode.is_volumetric = false; - gcode.current_extruder = 0; - gcode.extruder_attr[0].filament_area = 10.0; - gcode.relative_extrusion = false; - gcode.currentSpeed = 1.0; + gcode.current_position_ = Point3LL(1000, 1000, 1000); + gcode.current_layer_z_ = 1000; + gcode.current_e_value_ = 100; + gcode.use_extruder_offset_to_offset_coords_ = false; + gcode.is_volumetric_ = false; + gcode.current_extruder_ = 0; + gcode.extruder_attr_[0].filament_area_ = 10.0; + gcode.relative_extrusion_ = false; + gcode.current_speed_ = 1.0; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); Application::getInstance().current_slice_->scene.extruders.emplace_back(0, &Application::getInstance().current_slice_->scene.current_mesh_group->settings); Application::getInstance().current_slice_->scene.extruders.back().settings_.add("machine_firmware_retract", "false"); @@ -663,7 +663,7 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) config.retraction_config.distance = 1; config.retraction_config.speed = 2.0; // 120 mm/min. config.retraction_config.primeSpeed = 3.0; // 180 mm/min. - config.retraction_config.prime_volume = gcode.extruder_attr[0].filament_area * 4; // 4mm in linear dimensions + config.retraction_config.prime_volume = gcode.extruder_attr_[0].filament_area_ * 4; // 4mm in linear dimensions config.retraction_config.retraction_count_max = 100; // Practically no limit. config.retraction_config.retraction_extrusion_window = 1; config.retraction_config.retraction_min_travel_distance = 0; // Don't limit retractions for being too short. @@ -693,10 +693,10 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) TEST_F(GCodeExportTest, insertWipeScriptHopEnable) { - gcode.currentPosition = Point3LL(1000, 1000, 1000); - gcode.current_layer_z = 1000; - gcode.use_extruder_offset_to_offset_coords = false; - gcode.currentSpeed = 1.0; + gcode.current_position_ = Point3LL(1000, 1000, 1000); + gcode.current_layer_z_ = 1000; + gcode.use_extruder_offset_to_offset_coords_ = false; + gcode.current_speed_ = 1.0; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); WipeScriptConfig config; diff --git a/tests/PathOrderOptimizerTest.cpp b/tests/PathOrderOptimizerTest.cpp index 3b895e1360..b4d4a32ee1 100644 --- a/tests/PathOrderOptimizerTest.cpp +++ b/tests/PathOrderOptimizerTest.cpp @@ -2,6 +2,7 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "PathOrderOptimizer.h" //The code under test. + #include //To run the tests. // NOLINTBEGIN(*-magic-numbers) @@ -21,7 +22,8 @@ class PathOrderOptimizerTest : public testing::Test */ Polygon triangle; - PathOrderOptimizerTest() : optimizer(Point2LL(0, 0)) + PathOrderOptimizerTest() + : optimizer(Point2LL(0, 0)) { } @@ -43,7 +45,7 @@ class PathOrderOptimizerTest : public testing::Test TEST_F(PathOrderOptimizerTest, OptimizeWhileEmpty) { optimizer.optimize(); // Don't crash. - EXPECT_EQ(optimizer.paths.size(), 0) << "Still empty!"; + EXPECT_EQ(optimizer.paths_.size(), 0) << "Still empty!"; } /*! @@ -66,9 +68,9 @@ TEST_F(PathOrderOptimizerTest, ThreeTrianglesShortestOrder) optimizer.optimize(); - EXPECT_EQ(optimizer.paths[0].vertices->front(), Point2LL(100, 100)) << "Nearest triangle first."; - EXPECT_EQ(optimizer.paths[1].vertices->front(), Point2LL(500, 500)) << "Middle triangle second."; - EXPECT_EQ(optimizer.paths[2].vertices->front(), Point2LL(1000, 1000)) << "Far triangle last."; + EXPECT_EQ(optimizer.paths_[0].vertices_->front(), Point2LL(100, 100)) << "Nearest triangle first."; + EXPECT_EQ(optimizer.paths_[1].vertices_->front(), Point2LL(500, 500)) << "Middle triangle second."; + EXPECT_EQ(optimizer.paths_[2].vertices_->front(), Point2LL(1000, 1000)) << "Far triangle last."; } } // namespace cura diff --git a/tests/arcus/ArcusCommunicationPrivateTest.cpp b/tests/arcus/ArcusCommunicationPrivateTest.cpp index 29d33d94c0..12652958ca 100644 --- a/tests/arcus/ArcusCommunicationPrivateTest.cpp +++ b/tests/arcus/ArcusCommunicationPrivateTest.cpp @@ -2,17 +2,20 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "communication/ArcusCommunicationPrivate.h" //The class we're testing. -#include "Application.h" -#include "ExtruderTrain.h" -#include "MockSocket.h" -#include "Slice.h" -#include "utils/Coord_t.h" + #include #include #include #include + #include +#include "Application.h" +#include "ExtruderTrain.h" +#include "MockSocket.h" +#include "Slice.h" +#include "utils/Coord_t.h" + // NOLINTBEGIN(*-magic-numbers) namespace cura { @@ -193,7 +196,8 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) // - - Add settings to the mesh: std::map mesh_settings = { - { "extruder_nr", "0" }, { "center_object", "1" }, { "mesh_position_x", "0" }, { "mesh_position_y", "0" }, { "mesh_position_z", "0" }, { "infill_mesh", "0" }, { "cutting_mesh", "0" }, { "anti_overhang_mesh", "0" }, + { "extruder_nr", "0" }, { "center_object", "1" }, { "mesh_position_x", "0" }, { "mesh_position_y", "0" }, + { "mesh_position_z", "0" }, { "infill_mesh", "0" }, { "cutting_mesh", "0" }, { "anti_overhang_mesh", "0" }, }; for (std::pair key_value : mesh_settings) { @@ -234,12 +238,12 @@ TEST_F(ArcusCommunicationPrivateTest, ReadMeshGroupMessage) std::array max_coords = { std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min() }; for (const auto& vertex : vertices) { - min_coords[0] = std::min(vertex.p_.x, min_coords[0]); - min_coords[1] = std::min(vertex.p_.y, min_coords[1]); - min_coords[2] = std::min(vertex.p_.z, min_coords[2]); - max_coords[0] = std::max(vertex.p_.x, max_coords[0]); - max_coords[1] = std::max(vertex.p_.y, max_coords[1]); - max_coords[2] = std::max(vertex.p_.z, max_coords[2]); + min_coords[0] = std::min(vertex.p_.x_, min_coords[0]); + min_coords[1] = std::min(vertex.p_.y_, min_coords[1]); + min_coords[2] = std::min(vertex.p_.z_, min_coords[2]); + max_coords[0] = std::max(vertex.p_.x_, max_coords[0]); + max_coords[1] = std::max(vertex.p_.y_, max_coords[1]); + max_coords[2] = std::max(vertex.p_.z_, max_coords[2]); } // - Then, just compare: diff --git a/tests/arcus/MockCommunication.h b/tests/arcus/MockCommunication.h index 1db835ffb7..f2401025fd 100644 --- a/tests/arcus/MockCommunication.h +++ b/tests/arcus/MockCommunication.h @@ -4,11 +4,12 @@ #ifndef MOCKCOMMUNICATION_H #define MOCKCOMMUNICATION_H +#include + #include "communication/Communication.h" //The interface we're implementing. +#include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" #include "utils/polygon.h" //In the signature of Communication. -#include -#include "settings/types/LayerIndex.h" namespace cura { @@ -21,27 +22,14 @@ class MockCommunication : public Communication public: MOCK_CONST_METHOD0(hasSlice, bool()); MOCK_CONST_METHOD0(isSequential, bool()); - MOCK_CONST_METHOD1(sendProgress, void(const float& progress)); + MOCK_CONST_METHOD1(sendProgress, void(double progress)); MOCK_METHOD3(sendLayerComplete, void(const LayerIndex::value_type& layer_nr, const coord_t& z, const coord_t& thickness)); - MOCK_METHOD5(sendPolygons, - void(const PrintFeatureType& type, - const Polygons& polygons, - const coord_t& line_width, - const coord_t& line_thickness, - const Velocity& velocity)); - MOCK_METHOD5(sendPolygon, - void(const PrintFeatureType& type, - const ConstPolygonRef& polygon, - const coord_t& line_width, - const coord_t& line_thickness, - const Velocity& velocity)); - MOCK_METHOD5(sendLineTo, - void(const PrintFeatureType& type, - const Point& to, - const coord_t& line_width, - const coord_t& line_thickness, - const Velocity& velocity)); - MOCK_METHOD1(sendCurrentPosition, void(const Point& position)); + MOCK_METHOD5(sendPolygons, void(const PrintFeatureType& type, const Polygons& polygons, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); + MOCK_METHOD5( + sendPolygon, + void(const PrintFeatureType& type, const ConstPolygonRef& polygon, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); + MOCK_METHOD5(sendLineTo, void(const PrintFeatureType& type, const Point2LL& to, const coord_t& line_width, const coord_t& line_thickness, const Velocity& velocity)); + MOCK_METHOD1(sendCurrentPosition, void(const Point2LL& position)); MOCK_METHOD1(setExtruderForSend, void(const ExtruderTrain& extruder)); MOCK_METHOD1(setLayerForSend, void(const LayerIndex::value_type& layer_nr)); MOCK_METHOD0(sendOptimizedLayerData, void()); @@ -56,4 +44,4 @@ class MockCommunication : public Communication } // namespace cura -#endif // MOCKCOMMUNICATION_H \ No newline at end of file +#endif // MOCKCOMMUNICATION_H diff --git a/tests/integration/SlicePhaseTest.cpp b/tests/integration/SlicePhaseTest.cpp index 291c2acd15..95fd638fa1 100644 --- a/tests/integration/SlicePhaseTest.cpp +++ b/tests/integration/SlicePhaseTest.cpp @@ -79,7 +79,7 @@ TEST_F(SlicePhaseTest, Cube) const auto initial_layer_thickness = scene.settings.get("layer_height_0"); constexpr bool variable_layer_height = false; constexpr std::vector* variable_layer_height_values = nullptr; - const size_t num_layers = (cube_mesh.getAABB().max_.z - initial_layer_thickness) / layer_thickness + 1; + const size_t num_layers = (cube_mesh.getAABB().max_.z_ - initial_layer_thickness) / layer_thickness + 1; Slicer slicer(&cube_mesh, layer_thickness, num_layers, variable_layer_height, variable_layer_height_values); ASSERT_EQ(slicer.layers.size(), num_layers) << "The number of layers in the output must equal the requested number of layers."; @@ -140,7 +140,7 @@ TEST_F(SlicePhaseTest, Cylinder1000) const auto initial_layer_thickness = scene.settings.get("layer_height_0"); constexpr bool variable_layer_height = false; constexpr std::vector* variable_layer_height_values = nullptr; - const size_t num_layers = (cylinder_mesh.getAABB().max_.z - initial_layer_thickness) / layer_thickness + 1; + const size_t num_layers = (cylinder_mesh.getAABB().max_.z_ - initial_layer_thickness) / layer_thickness + 1; Slicer slicer(&cylinder_mesh, layer_thickness, num_layers, variable_layer_height, variable_layer_height_values); ASSERT_EQ(slicer.layers.size(), num_layers) << "The number of layers in the output must equal the requested number of layers."; diff --git a/tests/settings/SettingsTest.cpp b/tests/settings/SettingsTest.cpp index 8486ce2292..c8f7814db8 100644 --- a/tests/settings/SettingsTest.cpp +++ b/tests/settings/SettingsTest.cpp @@ -3,6 +3,11 @@ #include "settings/Settings.h" //The class under test. +#include //For std::numbers::pi. +#include //For shared_ptr. + +#include + #include "Application.h" //To test extruder train settings. #include "ExtruderTrain.h" #include "Slice.h" @@ -17,10 +22,6 @@ #include "utils/Coord_t.h" #include "utils/Matrix4x3D.h" //Testing matrix transformation settings. -#include //For std::numbers::pi. -#include -#include //For shared_ptr. - // NOLINTBEGIN(*-magic-numbers) namespace cura { @@ -124,7 +125,8 @@ TEST_F(SettingsTest, AddSettingAngleRadians) EXPECT_DOUBLE_EQ(AngleRadians(std::numbers::pi), settings.get("test_setting")) << "180 degrees is 1 pi radians."; settings.add("test_setting", "810"); - EXPECT_NEAR(AngleRadians(std::numbers::pi / 2.0), settings.get("test_setting"), 0.00000001) << "810 degrees in clock arithmetic is 90 degrees, which is 0.5 pi radians."; + EXPECT_NEAR(AngleRadians(std::numbers::pi / 2.0), settings.get("test_setting"), 0.00000001) + << "810 degrees in clock arithmetic is 90 degrees, which is 0.5 pi radians."; } TEST_F(SettingsTest, AddSettingAngleDegrees) @@ -142,7 +144,7 @@ TEST_F(SettingsTest, AddSettingTemperature) TEST_F(SettingsTest, AddSettingVelocity) { settings.add("test_setting", "12.345"); - EXPECT_DOUBLE_EQ(Velocity { 12.345 }, settings.get("test_setting")); + EXPECT_DOUBLE_EQ(Velocity{ 12.345 }, settings.get("test_setting")); settings.add("test_setting", "-78"); EXPECT_DOUBLE_EQ(Velocity{ -78.0 }, settings.get("test_setting")); @@ -151,16 +153,16 @@ TEST_F(SettingsTest, AddSettingVelocity) TEST_F(SettingsTest, AddSettingRatio) { settings.add("test_setting", "1.618"); - EXPECT_DOUBLE_EQ(Ratio { 0.01618 }, settings.get("test_setting")) << "With ratios, the input is interpreted in percentages."; + EXPECT_DOUBLE_EQ(Ratio{ 0.01618 }, settings.get("test_setting")) << "With ratios, the input is interpreted in percentages."; } TEST_F(SettingsTest, AddSettingDuration) { settings.add("test_setting", "1234.5678"); - EXPECT_DOUBLE_EQ(Duration { 1234.5678 }, settings.get("test_setting")); + EXPECT_DOUBLE_EQ(Duration{ 1234.5678 }, settings.get("test_setting")); settings.add("test_setting", "-1234.5678"); - EXPECT_DOUBLE_EQ(Duration { 0 }, settings.get("test_setting")) << "Negative duration doesn't exist, so it gets rounded to 0."; + EXPECT_DOUBLE_EQ(Duration{ 0 }, settings.get("test_setting")) << "Negative duration doesn't exist, so it gets rounded to 0."; } TEST_F(SettingsTest, AddSettingFlowTempGraph) @@ -244,7 +246,7 @@ TEST_F(SettingsTest, LimitToExtruder) // Add a setting to the extruder this is limiting to. const std::string limit_extruder_value = "I was gonna tell a time travelling joke but you didn't like it."; - current_slice->scene.extruders[2].settings.add("test_setting", limit_extruder_value); + current_slice->scene.extruders[2].settings_.add("test_setting", limit_extruder_value); current_slice->scene.limit_to_extruder.emplace("test_setting", ¤t_slice->scene.extruders[2]); // Add a decoy setting to the main scene to make sure that we aren't getting the global setting instead. diff --git a/tests/utils/LinearAlg2DTest.cpp b/tests/utils/LinearAlg2DTest.cpp index 4593c4c57c..b9e4f41bb0 100644 --- a/tests/utils/LinearAlg2DTest.cpp +++ b/tests/utils/LinearAlg2DTest.cpp @@ -2,7 +2,9 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/linearAlg2D.h" + #include + #include // NOLINTBEGIN(*-magic-numbers) @@ -61,43 +63,47 @@ TEST_P(GetDist2FromLineSegmentTest, GetDist2FromLineSegment) const coord_t supposed_distance = LinearAlg2D::getDist2FromLineSegment(line_start, point, line_end, &supposed_is_beyond); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 - ASSERT_LE(std::fabs(sqrt(double(supposed_distance)) - sqrt(double(actual_distance2))), maximum_error) << "Line [" << line_start.X << ", " << line_start.Y << "] -- [" << line_end.X << ", " << line_end.Y << "], point [" << point.X << ", " - << point.Y << "], squared distance was " << supposed_distance << " rather than " << actual_distance2 << "."; - ASSERT_EQ(supposed_is_beyond, actual_is_beyond) << "Line [" << line_start.X << ", " << line_start.Y << "] -- [" << line_end.X << ", " << line_end.Y << "], point [" << point.X << ", " << point.Y << "], check whether it is beyond was " - << static_cast(supposed_is_beyond) << " rather than " << static_cast(actual_is_beyond) << "."; + ASSERT_LE(std::fabs(sqrt(double(supposed_distance)) - sqrt(double(actual_distance2))), maximum_error) + << "Line [" << line_start.X << ", " << line_start.Y << "] -- [" << line_end.X << ", " << line_end.Y << "], point [" << point.X << ", " << point.Y + << "], squared distance was " << supposed_distance << " rather than " << actual_distance2 << "."; + ASSERT_EQ(supposed_is_beyond, actual_is_beyond) << "Line [" << line_start.X << ", " << line_start.Y << "] -- [" << line_end.X << ", " << line_end.Y << "], point [" << point.X + << ", " << point.Y << "], check whether it is beyond was " << static_cast(supposed_is_beyond) << " rather than " + << static_cast(actual_is_beyond) << "."; } -INSTANTIATE_TEST_CASE_P(GetDist2FromLineSegmentInstantiation, - GetDist2FromLineSegmentTest, - testing::Values(GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(25, 3), 9, 0), // Nearby a horizontal line. - GetDist2FromLineSegmentParametersPoint2LLt(0, 0)Point2LLnt(100, 0)Point2LLnt(25, 0), 0, 0), // On a horizontal line. - Point2LLst2FromLineSegmentParameters(Point(0, 0Point2LLint(100, 0Point2LLint(200, 0), 10000, 1), // Beyond a horizontal line. - GetDist2FromLineSegmentParametersPoint2LLt(0, PointPoint2LLnt(100, PointPoint2LLnt(-100, 0), 10000, -1)Point2LLBefore a horizontal line. - GetDist2FromLineSegmentParametersPoint2LLt(0Point2LPoint2LLnt(100Point2LPoint2LLnt(-1, -1), 2, -1Point2LL In a corner near a horizontal line. - GetDist2FromLineSegmentParameters(Point(Point2LL, Point(Point2LL0), Point(0, 3), 9, Point2LL/ Perpendicular to a horizontal line. - GetDist2FromLineSegmentParameters(PointPoint2LL), PointPoint2LL00), Point(5, 25), 25Point2LL // Nearby a vertical line. - GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point(0, 25), Point2LL, // On a vertical line. - GetDist2FromLineSegmentParametersPoint2LLt(0, 0)Point2LLnt(0, 100), Point(0, 200)Point2LL00Point2LL // Beyond a vertical line. - Point2LLst2FromLineSegmentParameters(Point2LL(0, 0Point2Point2LL(0, 100), Point(0, -100)Point2LL00, Point2LL// Before a vertical line. - GetDist2FromLineSegmentParameters(Point2LL(0, Point2LPoint2LL(0, 100), Point(-1, -1Point2LL -1)Point2LLIn a corner near a vertical line. - GetDist2FromLineSegmentParameters(Point(0Point2LL Point(0, 100), Point(3Point2LL 9, 0Point2LL Perpendicular to a vertical line. - GetDist2FromLineSegmentParameters(Point(Point2LL, Point(100, 100), Point(Point2LL0), 50, Point2LL/ Nearby a diagonal line. - GetDist2FromLineSegmentParameters(PointPoint2LL), Point(100, 100), PointPoint2LL25), 0Point2LL // On a diagonal line. - GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point(100, 100), Point2LL(200Point2LL), Point2LL, 1Point2LL Beyond a diagonal line. - GetDist2FromLineSegmentParametersPoint2LLt(Point2LL, Point(100, 100), Point(Point2LPoint2LL0), Point2LL, Point2LL// Before a diagonal line. - Point2LLst2FromLineSegmentParameters(Point2LL(0, 0), Point(100, 100), Point2LLPoint2LL0)PointPoint2LL), // In a corner near a diagonal line. - Point2LLst2FromLineSegmentParameters(Point(0, 0), Point(100, 100Point2LLint(3, -Point2LL, 0)Point2LLPerpendicular to a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), Point(100Point2LL, Point(20Point2LL, 320, 0Point2LL Nearby a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), Point(Point2LL50), Point(Point2LL0), 0, Point2LL/ On a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), PointPoint2LL 50), PointPoint2LL), 0Point2LL // On one of the vertices of the diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), Point2LL(100Point2LL, Point2LL(200Point2LL), Point2LL, 1Point2LL Beyond a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), Point(Point2LLPoint2LLPoint(Point2LPoint2LL), Point2LL, Point2LL// Before a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0), Point2LLPoint2LL 50), Point2LLPoint2LL0)PointPoint2LL), // In a corner near a diagonal line. - GetDist2FromLineSegmentParameters(Point(0, 0Point2LLint(100, 50Point2LLint(-2, Point2LL0, 0), // Perpendicular to a diagonal line. - GetDist2FromLineSegmentParameters(Point(0Point2LL Point(10000Point2LL0), Point(2000Point2LL0), 3200000, 0), // Longer distances. - GetDist2FromLineSegmentParameters(Point(Point2LL, Point(Point2LL, Point(Point2LL), 400, 0), // Near a line of length 0. - GetDist2FromLineSegmentParameters(Point(0, 0), Point(0, 0), Point(0, 0), 0, 0) // On a line of length 0. - )); +INSTANTIATE_TEST_CASE_P( + GetDist2FromLineSegmentInstantiation, + GetDist2FromLineSegmentTest, + testing::Values( + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(25, 3), 9, 0), // Nearby a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(25, 0), 0, 0), // On a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(200, 0), 10000, 1), // Beyond a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(-100, 0), 10000, -1), // Before a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(-1, -1), 2, -1), // In a corner near a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 0), Point2LL(0, 3), 9, 0), // Perpendicular to a horizontal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(5, 25), 25, 0), // Nearby a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(0, 25), 0, 0), // On a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(0, 200), 10000, 1), // Beyond a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(0, -100), 10000, -1), // Before a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(-1, -1), 2, -1), // In a corner near a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 100), Point2LL(3, 0), 9, 0), // Perpendicular to a vertical line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(30, 20), 50, 0), // Nearby a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(25, 25), 0, 0), // On a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(200, 200), 20000, 1), // Beyond a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(-100, -100), 20000, -1), // Before a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(-3, 0), 9, -1), // In a corner near a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 100), Point2LL(3, -3), 9, 0), // Perpendicular to a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(20, 30), 320, 0), // Nearby a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(40, 20), 0, 0), // On a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(0, 0), 0, 0), // On one of the vertices of the diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(200, 100), 12500, 1), // Beyond a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(-100, -50), 12500, -1), // Before a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(-3, 0), 9, -1), // In a corner near a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(100, 50), Point2LL(-2, 4), 20, 0), // Perpendicular to a diagonal line. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(10000, 5000), Point2LL(2000, 3000), 3200000, 0), // Longer distances. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 0), Point2LL(20, 0), 400, 0), // Near a line of length 0. + GetDist2FromLineSegmentParameters(Point2LL(0, 0), Point2LL(0, 0), Point2LL(0, 0), 0, 0) // On a line of length 0. + )); // NOLINTBEGIN(misc-non-private-member-variables-in-classes) struct GetAngleParameters @@ -107,7 +113,11 @@ struct GetAngleParameters Point2LL c; double angle; // In degrees. - GetAngleParameters(Point2LL a, Point2LL b, Point2LL c, double angle) : a(a), b(b), c(c), angle(angle) + GetAngleParameters(Point2LL a, Point2LL b, Point2LL c, double angle) + : a(a) + , b(b) + , c(c) + , angle(angle) { } }; @@ -135,20 +145,23 @@ TEST_P(GetAngleTest, GetAngle) const double angle = angle_degrees * std::numbers::pi / 180.0; const double supposed_angle = LinearAlg2D::getAngleLeft(a, b, c); - ASSERT_LE(std::fabs(angle - supposed_angle), maximum_error) << "Corner in " << a << " - " << b << " - " << c << " was computed to have an angle of " << supposed_angle << " instead of " << angle << "."; + ASSERT_LE(std::fabs(angle - supposed_angle), maximum_error) + << "Corner in " << a << " - " << b << " - " << c << " was computed to have an angle of " << supposed_angle << " instead of " << angle << "."; } -INSTANTIATE_TEST_CASE_P(GetAngleInstantiation, - GetAngleTest, - testing::Values(GetAngleParameters(Point2LL(-100, 0)Point2LLnt2LL(0, 0), Point2LL(100, Point2LL80), // Almost straight line. - GetAngleParametersPoint2LLt(-100, 0Point2LLt2LLnt(0, 0)Point2LLnt(100Point2LL 180), // Completely straight line. - Point2LLgleParameters(Point(-100, Point2LLt2LLint(0, 0Point2LLint(-100Point2LL0), 315), //-45 degrees. - GetAngleParameters(Point(-100Point2LLnt2LLoint(0, Point2LLoint(Point2LL00), 270)Point2LL90 degrees. - GetAngleParameters(Point(-Point2LLint2LL Point(0Point2LL Point2LL(0, 100), 90Point2LL Straight angle. - GetAngleParameters(Point(Point2LLt2LL0), Point(Point2LL, Point2LL(-100, 1), Point2LL/ Almost straight back. - GetAngleParameters(PointPoint2LLt2LL 0), PointPoint2LL), Point2LL(-100, -1)Point2LL), // Almost straight back but the other way around. - GetAngleParameters(Point2LLPoint2LL, 0), Point2LL(0, 0), Point(-100, 0), 0) // Completely straight back. - )); +INSTANTIATE_TEST_CASE_P( + GetAngleInstantiation, + GetAngleTest, + testing::Values( + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(100, 1), 180), // Almost straight line. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(100, 0), 180), // Completely straight line. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(-100, -100), 315), //-45 degrees. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(0, -100), 270), //-90 degrees. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(0, 100), 90), // Straight angle. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(-100, 1), 0), // Almost straight back. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(-100, -1), 360), // Almost straight back but the other way around. + GetAngleParameters(Point2LL(-100, 0), Point2LL(0, 0), Point2LL(-100, 0), 0) // Completely straight back. + )); TEST(GetAngleTest, GetAngleLeftAABTest) { @@ -175,8 +188,9 @@ TEST(PointIsLeftOfLineTest, LeftOfLine) const coord_t supposed = LinearAlg2D::pointIsLeftOfLine(p, a, b); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 - ASSERT_TRUE(actual * supposed > 0 || (actual == 0 && supposed == 0)) << "Point " << p << " was computed as lying " << ((supposed == 0) ? "on" : ((supposed < 0) ? "left" : "right")) << " the line from " << a << " to " << b - << ", instead of " << ((actual == 0) ? "on" : ((actual < 0) ? "left" : "right")); + ASSERT_TRUE(actual * supposed > 0 || (actual == 0 && supposed == 0)) + << "Point " << p << " was computed as lying " << ((supposed == 0) ? "on" : ((supposed < 0) ? "left" : "right")) << " the line from " << a << " to " << b << ", instead of " + << ((actual == 0) ? "on" : ((actual < 0) ? "left" : "right")); } TEST(PointIsLeftOfLineTest, Sharp) @@ -188,8 +202,9 @@ TEST(PointIsLeftOfLineTest, Sharp) const coord_t supposed = LinearAlg2D::pointIsLeftOfLine(p, a, b); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 - ASSERT_TRUE(actual * supposed > 0 || (actual == 0 && supposed == 0)) << "Point " << p << " was computed as lying " << ((supposed == 0) ? "on" : ((supposed < 0) ? "left" : "right")) << " the line from " << a << " to " << b - << ", instead of " << ((actual == 0) ? "on" : ((actual < 0) ? "left" : "right")); + ASSERT_TRUE(actual * supposed > 0 || (actual == 0 && supposed == 0)) + << "Point " << p << " was computed as lying " << ((supposed == 0) ? "on" : ((supposed < 0) ? "left" : "right")) << " the line from " << a << " to " << b << ", instead of " + << ((actual == 0) ? "on" : ((actual < 0) ? "left" : "right")); } // NOLINTBEGIN(misc-non-private-member-variables-in-classes) @@ -202,7 +217,13 @@ struct GetPointOnLineWithDistParameters Point2LL actual_result; bool actual_returned; - GetPointOnLineWithDistParameters(Point2LL p, Point2LL a, Point2LL b, coord_t dist, Point2LL actual_result, bool actual_returned) : p(p), a(a), b(b), dist(dist), actual_result(actual_result), actual_returned(actual_returned) + GetPointOnLineWithDistParameters(Point2LL p, Point2LL a, Point2LL b, coord_t dist, Point2LL actual_result, bool actual_returned) + : p(p) + , a(a) + , b(b) + , dist(dist) + , actual_result(actual_result) + , actual_returned(actual_returned) { } }; @@ -233,7 +254,8 @@ TEST_P(GetPointOnLineWithDistTest, GetPointOnLineWithDist) if (actual_returned) { EXPECT_TRUE(supposed_returned) << "Point " << p << " wasn't projected on (" << a << " - " << b << ") instead of projecting to " << actual_result << "."; - EXPECT_LT(vSize2(actual_result - supposed_result), 10 * 10) << "Point " << p << " was projected on (" << a << " - " << b << ") to " << supposed_result << " instead of " << actual_result << "."; + EXPECT_LT(vSize2(actual_result - supposed_result), 10 * 10) + << "Point " << p << " was projected on (" << a << " - " << b << ") to " << supposed_result << " instead of " << actual_result << "."; EXPECT_LT(std::abs(supposed_dist - dist), 10) << "Projection distance of " << p << " onto (" << a << " - " << b << ") was " << supposed_dist << " instead of " << dist << "."; // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 } @@ -243,15 +265,17 @@ TEST_P(GetPointOnLineWithDistTest, GetPointOnLineWithDist) } } -INSTANTIATE_TEST_CASE_P(GetPointOnLineWithDistInstantiation, - GetPointOnLineWithDistTest, - testing::Values(GetPointOnLineWithDistParameters(Point2LL(110, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), true), - GetPointOnLineWithDistParameters(Point2LL(90, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(50, 0), true), - GetPointOnLineWithDistParameters(Point2LL(10, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(50, 0), true), - GetPointOnLineWithDistParameters(Point2LL(-10, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(30, 0), true), - GetPointOnLineWithDistParameters(Point2LL(50, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(10, 0), true), - GetPointOnLineWithDistParameters(Point2LL(210, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), false), - GetPointOnLineWithDistParameters(Point2LL(110, 130), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), false))); +INSTANTIATE_TEST_CASE_P( + GetPointOnLineWithDistInstantiation, + GetPointOnLineWithDistTest, + testing::Values( + GetPointOnLineWithDistParameters(Point2LL(110, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), true), + GetPointOnLineWithDistParameters(Point2LL(90, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(50, 0), true), + GetPointOnLineWithDistParameters(Point2LL(10, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(50, 0), true), + GetPointOnLineWithDistParameters(Point2LL(-10, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(30, 0), true), + GetPointOnLineWithDistParameters(Point2LL(50, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(10, 0), true), + GetPointOnLineWithDistParameters(Point2LL(210, 30), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), false), + GetPointOnLineWithDistParameters(Point2LL(110, 130), Point2LL(0, 0), Point2LL(100, 0), 50, Point2LL(70, 0), false))); // NOLINTBEGIN(misc-non-private-member-variables-in-classes) struct RotateAroundParameters @@ -261,7 +285,11 @@ struct RotateAroundParameters double angle; Point2LL actual_result; - RotateAroundParameters(Point2LL point, Point2LL origin, double angle, Point2LL actual_result) : point(point), origin(origin), angle(angle), actual_result(actual_result) + RotateAroundParameters(Point2LL point, Point2LL origin, double angle, Point2LL actual_result) + : point(point) + , origin(origin) + , angle(angle) + , actual_result(actual_result) { } }; @@ -285,19 +313,23 @@ TEST_P(RotateAroundTest, RotateAround) const Point3Matrix mat = LinearAlg2D::rotateAround(origin, angle); const Point2LL supposed_result = mat.apply(point); - ASSERT_LT(vSize(supposed_result - actual_result), 2) << "LinearAlg2D::rotateAround failed: Rotating " << point << " around " << origin << " for " << angle << " degrees resulted in " << supposed_result << " instead of expected " - << actual_result << "."; + ASSERT_LT(vSize(supposed_result - actual_result), 2) << "LinearAlg2D::rotateAround failed: Rotating " << point << " around " << origin << " for " << angle + << " degrees resulted in " << supposed_result << " instead of expected " << actual_result << "."; } -INSTANTIATE_TEST_SUITE_P(RotateAroundInstantiation, - RotateAroundTest, - testing::Values(RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), 90, Point2LL(-3, 32)), // 90 degrees rotation. - RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), -90, Point2LL(23, 2)), //-90 degrees rotation. - RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 0, Point2LL(-67, 14)), // No rotation at all. - RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 12, Point2LL(-57, -9)) // 12 degrees rotation. Actually ends up at [-57, -9.5]! - )); - -class Temp {}; +INSTANTIATE_TEST_SUITE_P( + RotateAroundInstantiation, + RotateAroundTest, + testing::Values( + RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), 90, Point2LL(-3, 32)), // 90 degrees rotation. + RotateAroundParameters(Point2LL(25, 30), Point2LL(10, 17), -90, Point2LL(23, 2)), //-90 degrees rotation. + RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 0, Point2LL(-67, 14)), // No rotation at all. + RotateAroundParameters(Point2LL(-67, 14), Point2LL(50, 50), 12, Point2LL(-57, -9)) // 12 degrees rotation. Actually ends up at [-57, -9.5]! + )); + +class Temp +{ +}; TEST(Temp, LineDistTests) { @@ -306,7 +338,7 @@ TEST(Temp, LineDistTests) { const Point2LL p{ 500000 + (std::rand() % 4000) - 2000, 500000 + (std::rand() % 4000) - 2000 }; - const coord_t d = (std::rand() % 2000) - 1000 /2; + const coord_t d = (std::rand() % 2000) - 1000 / 2; const double rang = std::rand() / (static_cast(RAND_MAX) / 6.29); const Point2LL x{ p.X + static_cast(d * std::cos(rang)), p.Y - static_cast(d * std::sin(rang)) }; diff --git a/tests/utils/PolygonUtilsTest.cpp b/tests/utils/PolygonUtilsTest.cpp index 04f668cab2..f859a48c08 100644 --- a/tests/utils/PolygonUtilsTest.cpp +++ b/tests/utils/PolygonUtilsTest.cpp @@ -2,10 +2,12 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/polygonUtils.h" // The class under test. + +#include + #include "utils/Coord_t.h" #include "utils/Point2LL.h" // Creating and testing with points. #include "utils/polygon.h" // Creating polygons to test with. -#include // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -17,7 +19,10 @@ struct MoveInsideParameters coord_t distance; Point2LL supposed; - MoveInsideParameters(Point2LL close_to, const coord_t distance, Point2LL supposed) : close_to(close_to), distance(distance), supposed(supposed) + MoveInsideParameters(Point2LL close_to, const coord_t distance, Point2LL supposed) + : close_to(close_to) + , distance(distance) + , supposed(supposed) { } }; @@ -55,9 +60,11 @@ TEST_P(MoveInsideTest, MoveInside) Point2LL result = PolygonUtils::moveInside(cpp, parameters.distance); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 - ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << " rather than " << parameters.supposed << ".\n" - << "\tPS: dist to boundary computed = " << vSize(cpp.location - result) << "; vs supposed = " << vSize(cpp.location - parameters.supposed) << ".\n" - << "\tclosest_point = " << cpp.location << " at index " << cpp.point_idx << "."; + ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << " rather than " + << parameters.supposed << ".\n" + << "\tPS: dist to boundary computed = " << vSize(cpp.location_ - result) + << "; vs supposed = " << vSize(cpp.location_ - parameters.supposed) << ".\n" + << "\tclosest_point = " << cpp.location_ << " at index " << cpp.point_idx_ << "."; } TEST_P(MoveInsideTest, MoveInside2) @@ -67,21 +74,24 @@ TEST_P(MoveInsideTest, MoveInside2) polys.add(test_square); Point2LL result = parameters.close_to; PolygonUtils::moveInside2(polys, result, parameters.distance); - ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << "rather than " << parameters.supposed << "."; + ASSERT_LE(vSize(result - parameters.supposed), 10) << parameters.close_to << " moved with " << parameters.distance << " micron inside to " << result << "rather than " + << parameters.supposed << "."; } -INSTANTIATE_TEST_SUITE_P(MoveInsideInstantiation, - MoveInsideTest, - testing::Values(MoveInsideParameters(Point2LL(110, 110), 28, Point2LL(80, 80)), // Near a corner, moving inside. - MoveInsideParameters(Point2LL(50, 110), 20, Point2LL(50, 80)), // Near an edge, moving inside. - MoveInsideParameters(Point2LL(110, 110), -28, Point2LL(120, 120)), // Near a corner, moving outside. - MoveInsideParameters(Point2LL(50, 110), -20, Point2LL(50, 120)), // Near an edge, moving outside. - MoveInsideParameters(Point2LL(110, 105), 28, Point2LL(80, 80)), // Near a corner but not exactly diagonal. - MoveInsideParameters(Point2LL(100, 50), 20, Point2LL(80, 50)), // Starting on the border. - MoveInsideParameters(Point2LL(80, 50), 20, Point2LL(80, 50)), // Already inside. - MoveInsideParameters(Point2LL(110, 50), 0, Point2LL(100, 50)), // Not keeping any distance from the border. - MoveInsideParameters(Point2LL(110, 50), 100000, Point2LL(-99900, 50)) // A very far move. - )); +INSTANTIATE_TEST_SUITE_P( + MoveInsideInstantiation, + MoveInsideTest, + testing::Values( + MoveInsideParameters(Point2LL(110, 110), 28, Point2LL(80, 80)), // Near a corner, moving inside. + MoveInsideParameters(Point2LL(50, 110), 20, Point2LL(50, 80)), // Near an edge, moving inside. + MoveInsideParameters(Point2LL(110, 110), -28, Point2LL(120, 120)), // Near a corner, moving outside. + MoveInsideParameters(Point2LL(50, 110), -20, Point2LL(50, 120)), // Near an edge, moving outside. + MoveInsideParameters(Point2LL(110, 105), 28, Point2LL(80, 80)), // Near a corner but not exactly diagonal. + MoveInsideParameters(Point2LL(100, 50), 20, Point2LL(80, 50)), // Starting on the border. + MoveInsideParameters(Point2LL(80, 50), 20, Point2LL(80, 50)), // Already inside. + MoveInsideParameters(Point2LL(110, 50), 0, Point2LL(100, 50)), // Not keeping any distance from the border. + MoveInsideParameters(Point2LL(110, 50), 100000, Point2LL(-99900, 50)) // A very far move. + )); TEST_F(MoveInsideTest, cornerEdgeTest) { @@ -97,8 +107,9 @@ TEST_F(MoveInsideTest, cornerEdgeTest) // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 ASSERT_TRUE(vSize(result - supposed1) <= maximum_error || vSize(result - supposed2) <= maximum_error) << close_to << " moved with " << distance << " micron inside to " << result << " rather than " << supposed1 << " or " << supposed2 << ".\n" - << "\tPS: dist to boundary computed = " << vSize(cpp.location - result) << "; vs supposed = " << vSize(cpp.location - supposed1) << " or " << vSize(cpp.location - supposed2) << ".\n" - << "\tclosest point = " << cpp.location << " at index " << cpp.point_idx << "."; + << "\tPS: dist to boundary computed = " << vSize(cpp.location_ - result) << "; vs supposed = " << vSize(cpp.location_ - supposed1) << " or " + << vSize(cpp.location_ - supposed2) << ".\n" + << "\tclosest point = " << cpp.location_ << " at index " << cpp.point_idx_ << "."; } TEST_F(MoveInsideTest, middleTest) @@ -115,11 +126,14 @@ TEST_F(MoveInsideTest, middleTest) constexpr coord_t maximum_error = 10; // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 - ASSERT_TRUE(vSize(result - supposed1) <= maximum_error || vSize(result - supposed2) <= maximum_error || vSize(result - supposed3) <= maximum_error || vSize(result - supposed4) <= maximum_error) - << close_to << " moved with " << distance << " micron inside to " << result << " rather than " << supposed1 << ", " << supposed2 << ", " << supposed3 << " or " << supposed4 << ".\n" - << "\tPS: dist to boundary computed = " << vSize(cpp.location - result) << "; vs supposed = " << vSize(cpp.location - supposed1) << ", " << vSize(cpp.location - supposed2) << ", " << vSize(cpp.location - supposed3) << " or " - << vSize(cpp.location - supposed4) << ".\n" - << "\tclosest point = " << cpp.location << " at index " << cpp.point_idx << "."; + ASSERT_TRUE( + vSize(result - supposed1) <= maximum_error || vSize(result - supposed2) <= maximum_error || vSize(result - supposed3) <= maximum_error + || vSize(result - supposed4) <= maximum_error) + << close_to << " moved with " << distance << " micron inside to " << result << " rather than " << supposed1 << ", " << supposed2 << ", " << supposed3 << " or " << supposed4 + << ".\n" + << "\tPS: dist to boundary computed = " << vSize(cpp.location_ - result) << "; vs supposed = " << vSize(cpp.location_ - supposed1) << ", " + << vSize(cpp.location_ - supposed2) << ", " << vSize(cpp.location_ - supposed3) << " or " << vSize(cpp.location_ - supposed4) << ".\n" + << "\tclosest point = " << cpp.location_ << " at index " << cpp.point_idx_ << "."; } TEST_F(MoveInsideTest, middleTestPenalty) @@ -128,13 +142,20 @@ TEST_F(MoveInsideTest, middleTestPenalty) const Point2LL supposed(80, 50); const Point2LL preferred_dir(120, 60); constexpr coord_t distance = 20; - const ClosestPolygonPoint cpp = PolygonUtils::findClosest(close_to, test_square, [preferred_dir](Point2LL candidate) { return vSize2(candidate - preferred_dir); }); + const ClosestPolygonPoint cpp = PolygonUtils::findClosest( + close_to, + test_square, + [preferred_dir](Point2LL candidate) + { + return vSize2(candidate - preferred_dir); + }); const Point2LL result = PolygonUtils::moveInside(cpp, distance); // FIXME: Clean-up message with ftm when CURA-8258 is implemented or when we use C++20 ASSERT_LE(vSize(result - supposed), 10) << close_to << " moved with " << distance << " micron inside to " << result << " rather than " << supposed << ".\n" - << "\tPS: dist to boundary computed = " << vSize(cpp.location - result) << "; vs supposed = " << vSize(cpp.location - supposed) << ".\n" - << "\tclosest point = " << cpp.location << " at index " << cpp.point_idx << "."; + << "\tPS: dist to boundary computed = " << vSize(cpp.location_ - result) << "; vs supposed = " << vSize(cpp.location_ - supposed) + << ".\n" + << "\tclosest point = " << cpp.location_ << " at index " << cpp.point_idx_ << "."; } TEST_F(MoveInsideTest, cornerEdgeTest2) @@ -161,8 +182,8 @@ TEST_F(MoveInsideTest, pointyCorner) inside.add(pointy_square); ClosestPolygonPoint cpp = PolygonUtils::ensureInsideOrOutside(inside, result, 10); - ASSERT_NE(cpp.point_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; - ASSERT_NE(cpp.poly_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_TRUE(inside.inside(result)) << from << " couldn't be moved inside."; } @@ -175,8 +196,8 @@ TEST_F(MoveInsideTest, pointyCornerFail) inside.add(pointy_square); ClosestPolygonPoint cpp = PolygonUtils::moveInside2(inside, result, 10); - ASSERT_NE(cpp.point_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; - ASSERT_NE(cpp.poly_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_FALSE(inside.inside(result)) << from << " could be moved inside, while it was designed to fail."; } @@ -189,8 +210,8 @@ TEST_F(MoveInsideTest, outsidePointyCorner) inside.add(pointy_square); const ClosestPolygonPoint cpp = PolygonUtils::ensureInsideOrOutside(inside, result, -10); - ASSERT_NE(cpp.point_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; - ASSERT_NE(cpp.poly_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_TRUE(! inside.inside(result)) << from << " couldn't be moved outside."; } @@ -204,8 +225,8 @@ TEST_F(MoveInsideTest, outsidePointyCornerFail) inside.add(pointy_square); const ClosestPolygonPoint cpp = PolygonUtils::moveInside2(inside, result, -10); - ASSERT_NE(cpp.point_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; - ASSERT_NE(cpp.poly_idx, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.point_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; + ASSERT_NE(cpp.poly_idx_, NO_INDEX) << "Couldn't ensure point inside close to " << from << "."; ASSERT_FALSE(! inside.inside(result)) << from << " could be moved outside to " << result << ", while it was designed to fail."; } @@ -214,9 +235,9 @@ struct FindCloseParameters Point2LL close_to; Point2LL supposed; coord_t cell_size; - std::function* penalty_function; + std::function* penalty_function; - FindCloseParameters(const Point2LL close_to, const Point2LL supposed, const coord_t cell_size, std::function* penalty_function = nullptr) + FindCloseParameters(const Point2LL close_to, const Point2LL supposed, const coord_t cell_size, std::function* penalty_function = nullptr) : close_to(close_to) , supposed(supposed) , cell_size(cell_size) @@ -260,7 +281,7 @@ TEST_P(FindCloseTest, FindClose) if (cpp) { - const Point2LL result = cpp->location; + const Point2LL result = cpp->location_; ASSERT_LE(vSize(result - parameters.supposed), 10) << "Close to " << parameters.close_to << " we found " << result << " rather than " << parameters.supposed << ".\n"; } else @@ -272,18 +293,20 @@ TEST_P(FindCloseTest, FindClose) /* * Test penalty function to use with findClose. */ -std::function testPenalty( +std::function testPenalty( [](Point2LL candidate) { return -vSize2(candidate - Point2LL(50, 100)); // The further from 50, 100, the lower the penalty. }); -INSTANTIATE_TEST_SUITE_P(FindCloseInstantiation, - FindCloseTest, - testing::Values(FindCloseParameters(Point2LL(110, 110), Point2LL(100, 100), 15), // Near a corner. - FindCloseParameters(Point2LL(50, 110), Point2LL(50, 100), 15), // Near a side. - FindCloseParameters(Point2LL(50, 50), Point2LL(50, 0), 60, &testPenalty) // Using a penalty function. - )); +INSTANTIATE_TEST_SUITE_P( + FindCloseInstantiation, + FindCloseTest, + testing::Values( + FindCloseParameters(Point2LL(110, 110), Point2LL(100, 100), 15), // Near a corner. + FindCloseParameters(Point2LL(50, 110), Point2LL(50, 100), 15), // Near a side. + FindCloseParameters(Point2LL(50, 50), Point2LL(50, 0), 60, &testPenalty) // Using a penalty function. + )); // NOLINTBEGIN(misc-non-private-member-variables-in-classes) class PolygonUtilsTest : public testing::Test @@ -403,18 +426,20 @@ TEST_P(GetNextParallelIntersectionTest, GetNextParallelIntersection) } } -INSTANTIATE_TEST_SUITE_P(GetNextParallelIntersectionInstantiation, - GetNextParallelIntersectionTest, - testing::Values(GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(20, 100), Point2LL(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point2LL(37, 100), Point2LL(80, 100), Point2LL(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point2LL(70, 100), Point2LL(20, 100), Point2LL(120, 200), false, 35), - GetNextParallelIntersectionParameters(Point2LL(0, 0), Point2LL(50, 100), Point2LL(150, 200), true, 35), - GetNextParallelIntersectionParameters(Point2LL(60, 0), Point2LL(10, 0), Point2LL(-90, -100), true, 35), - GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(10, 0), Point2LL(-90, -100), false, 35), - GetNextParallelIntersectionParameters(Point2LL(0, 75), Point2LL(50, 100), Point2LL(150, 100), true, 25), - GetNextParallelIntersectionParameters(Point2LL(25, 100), Point2LL(50, 100), Point2LL(50, 200), true, 25), - GetNextParallelIntersectionParameters(std::optional(), Point2LL(100, 100), Point2LL(200, 200), true, 80), - GetNextParallelIntersectionParameters(Point2LL(0, 45), Point2LL(5, 100), Point2LL(105, 200), true, 35))); +INSTANTIATE_TEST_SUITE_P( + GetNextParallelIntersectionInstantiation, + GetNextParallelIntersectionTest, + testing::Values( + GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(20, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(37, 100), Point2LL(80, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(70, 100), Point2LL(20, 100), Point2LL(120, 200), false, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 0), Point2LL(50, 100), Point2LL(150, 200), true, 35), + GetNextParallelIntersectionParameters(Point2LL(60, 0), Point2LL(10, 0), Point2LL(-90, -100), true, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 40), Point2LL(10, 0), Point2LL(-90, -100), false, 35), + GetNextParallelIntersectionParameters(Point2LL(0, 75), Point2LL(50, 100), Point2LL(150, 100), true, 25), + GetNextParallelIntersectionParameters(Point2LL(25, 100), Point2LL(50, 100), Point2LL(50, 200), true, 25), + GetNextParallelIntersectionParameters(std::optional(), Point2LL(100, 100), Point2LL(200, 200), true, 80), + GetNextParallelIntersectionParameters(Point2LL(0, 45), Point2LL(5, 100), Point2LL(105, 200), true, 35))); TEST_F(PolygonUtilsTest, RelativeHammingSquaresOverlap) { @@ -456,9 +481,10 @@ TEST_F(PolygonUtilsTest, RelativeHammingQuarterOverlap) */ TEST_F(PolygonUtilsTest, RelativeHammingLineSquare) { - ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, test_line), 1.0) << "The difference between the polygons is 100% because the area of the difference encompasses the area of the one polygon that " - "has " - "area."; + ASSERT_EQ(PolygonUtils::relativeHammingDistance(test_squares, test_line), 1.0) + << "The difference between the polygons is 100% because the area of the difference encompasses the area of the one polygon that " + "has " + "area."; } /* @@ -493,4 +519,4 @@ TEST_F(PolygonUtilsTest, DISABLED_RelativeHammingLineLineDifferentVerts) // Disa } } // namespace cura -// NOLINTEND(*-magic-numbers) \ No newline at end of file +// NOLINTEND(*-magic-numbers) diff --git a/tests/utils/SimplifyTest.cpp b/tests/utils/SimplifyTest.cpp index 1e45d8e9fb..3b80885267 100644 --- a/tests/utils/SimplifyTest.cpp +++ b/tests/utils/SimplifyTest.cpp @@ -2,9 +2,11 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/Simplify.h" // The unit under test. + +#include + #include "utils/Coord_t.h" #include "utils/polygonUtils.h" // Helper functions for testing deviation. -#include // NOLINTBEGIN(*-magic-numbers) namespace cura @@ -32,7 +34,8 @@ class SimplifyTest : public testing::Test Polygon spiral; // A spiral with gradually increasing segment length. Polygon zigzag; // Sawtooth zig-zag pattern. - SimplifyTest() : simplifier(MAX_RESOLUTION, MAX_DEVIATION, MAX_AREA_DEVIATION) + SimplifyTest() + : simplifier(MAX_RESOLUTION, MAX_DEVIATION, MAX_AREA_DEVIATION) { } @@ -119,7 +122,7 @@ class SimplifyTest : public testing::Test */ TEST_F(SimplifyTest, CircleMaxResolution) { - simplifier.max_deviation = 999999; // For this test, the maximum deviation should not be an issue. + simplifier.max_deviation_ = 999999; // For this test, the maximum deviation should not be an issue. circle = simplifier.polygon(circle); for (size_t point_index = 1; point_index + 1 < circle.size(); point_index++) // Don't check the last vertex. Due to odd-numbered vertices it has to be shorter than the minimum. @@ -138,7 +141,7 @@ TEST_F(SimplifyTest, CircleMaxResolution) */ TEST_F(SimplifyTest, CircleMaxDeviation) { - simplifier.max_resolution = 999999; // For this test, the maximum resolution should not be an issue. + simplifier.max_resolution_ = 999999; // For this test, the maximum resolution should not be an issue. Polygon simplified = simplifier.polygon(circle); // Check on each vertex if it didn't deviate too much. @@ -147,7 +150,7 @@ TEST_F(SimplifyTest, CircleMaxDeviation) Point2LL moved_point = v; PolygonUtils::moveInside(simplified, moved_point); const coord_t deviation = vSize(moved_point - v); - EXPECT_LE(deviation, simplifier.max_deviation); + EXPECT_LE(deviation, simplifier.max_deviation_); } // Also check the other way around, since the longest distance may also be on a vertex of the new polygon. for (Point2LL v : simplified) @@ -155,7 +158,7 @@ TEST_F(SimplifyTest, CircleMaxDeviation) Point2LL moved_point = v; PolygonUtils::moveInside(circle, moved_point); const coord_t deviation = vSize(moved_point - v); - EXPECT_LE(deviation, simplifier.max_deviation); + EXPECT_LE(deviation, simplifier.max_deviation_); } } @@ -168,7 +171,7 @@ TEST_F(SimplifyTest, CircleMaxDeviation) */ TEST_F(SimplifyTest, Zigzag) { - simplifier.max_resolution = 9999999; + simplifier.max_resolution_ = 9999999; Polygon simplified = simplifier.polyline(zigzag); EXPECT_EQ(simplified.size(), 2) << "All zigzagged lines can be erased because they deviate less than the maximum deviation, leaving only the endpoints."; } @@ -182,12 +185,12 @@ TEST_F(SimplifyTest, Zigzag) */ TEST_F(SimplifyTest, LimitedLength) { - simplifier.max_deviation = 999999; // Maximum deviation should have no effect. + simplifier.max_deviation_ = 999999; // Maximum deviation should have no effect. // Find from where on the segments become longer than the maximum resolution. size_t limit_vertex; for (limit_vertex = 1; limit_vertex < spiral.size(); ++limit_vertex) { - if (vSize2(spiral[limit_vertex] - spiral[limit_vertex - 1]) > simplifier.max_resolution * simplifier.max_resolution) + if (vSize2(spiral[limit_vertex] - spiral[limit_vertex - 1]) > simplifier.max_resolution_ * simplifier.max_resolution_) { limit_vertex--; break; @@ -217,21 +220,21 @@ TEST_F(SimplifyTest, LimitedLength) */ TEST_F(SimplifyTest, LimitedError) { - simplifier.max_resolution = 9999999; + simplifier.max_resolution_ = 9999999; // Generate a zig-zag with gradually increasing deviation. Polygon increasing_zigzag; increasing_zigzag.add(Point2LL(0, 0)); constexpr coord_t amplitude_step = 1; // Every 2 vertices, the amplitude increases by this much. constexpr coord_t y_step = 100; - const coord_t amplitude_limit = simplifier.max_deviation * 2; // Increase amplitude up to this point. About half of the vertices should get removed. + const coord_t amplitude_limit = simplifier.max_deviation_ * 2; // Increase amplitude up to this point. About half of the vertices should get removed. for (coord_t amplitude = 0; amplitude < amplitude_limit; amplitude += amplitude_step) { increasing_zigzag.add(Point2LL(amplitude, increasing_zigzag.size() * y_step)); increasing_zigzag.add(Point2LL(0, increasing_zigzag.size() * y_step)); } - size_t limit_vertex = 2 * simplifier.max_deviation / amplitude_step + 3; // 2 vertices per zag. Deviation/step zags. Add 3 since deviation equal to max +- epsilon is allowed. + size_t limit_vertex = 2 * simplifier.max_deviation_ / amplitude_step + 3; // 2 vertices per zag. Deviation/step zags. Add 3 since deviation equal to max +- epsilon is allowed. Polygon simplified = simplifier.polyline(increasing_zigzag); @@ -267,13 +270,13 @@ TEST_F(SimplifyTest, LongEdgesNotMoved) // Verify that all small segments are removed. for (size_t i = 1; i < simplified.size(); ++i) { - EXPECT_GE(vSize(simplified[i] - simplified[i - 1]), simplifier.max_resolution) << "There may not be any segment smaller than max resolution."; + EXPECT_GE(vSize(simplified[i] - simplified[i - 1]), simplifier.max_resolution_) << "There may not be any segment smaller than max resolution."; } // Verify that all long segments are still present. for (size_t i = 0; i < polyline.size() - 1; ++i) { - if (vSize(polyline[i] - polyline[i + 1]) > simplifier.max_resolution) + if (vSize(polyline[i] - polyline[i + 1]) > simplifier.max_resolution_) { // Both endpoints of this line segment must have a distance to the simplified polygon of 0, theoretically. // Due to rounding errors we'll allow up to 1 unit. @@ -331,7 +334,7 @@ TEST_F(SimplifyTest, LongEdgesButTooMuchDeviation) */ TEST_F(SimplifyTest, Sine) { - simplifier.max_resolution = 9999999; + simplifier.max_resolution_ = 9999999; Polygon simplified = simplifier.polyline(sine); EXPECT_EQ(simplified.size(), 2) << "All zigzagged lines can be erased because they deviate less than the maximum deviation, leaving only the endpoints."; @@ -401,4 +404,4 @@ TEST_F(SimplifyTest, ToDegenerate) } } // namespace cura -// NOLINTEND(*-magic-numbers) \ No newline at end of file +// NOLINTEND(*-magic-numbers) diff --git a/tests/utils/SparseGridTest.cpp b/tests/utils/SparseGridTest.cpp index 5f60ec5491..00f013ed61 100644 --- a/tests/utils/SparseGridTest.cpp +++ b/tests/utils/SparseGridTest.cpp @@ -2,13 +2,16 @@ // CuraEngine is released under the terms of the AGPLv3 or higher. #include "utils/SparseGrid.h" -#include "utils/Coord_t.h" -#include "utils/SparsePointGridInclusive.h" + #include -#include #include #include +#include + +#include "utils/Coord_t.h" +#include "utils/SparsePointGridInclusive.h" + namespace cura { @@ -46,25 +49,47 @@ TEST_P(GetNearbyTest, GetNearby) // Are all near points reported as near? for (const Point2LL point : parameters.expected_near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? for (const Point2LL point : parameters.expected_far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } -INSTANTIATE_TEST_CASE_P(GetNearbyInstantiation, - GetNearbyTest, - testing::Values(Point2LLarbyParameters({ Point2LL(0, 100) }, stdPoint2LLrdered_set(), stdPoint2LLrdered_set(Point2LLnt(95, 100) }), - Point2LLunordered_setPoint2LLt>())Point2LLA near point. - GetNearbyParametersPoint2LLint(100, 100) }Point2LL std::Point2LLered_setPoint2LLt>Point2LLint(100, 100) })Point2LL std::Point2LLered_set()) // On top of the target. - )); +INSTANTIATE_TEST_CASE_P( + GetNearbyInstantiation, + GetNearbyTest, + testing::Values( + GetNearbyParameters({ Point2LL(0, 100) }, std::unordered_set(), std::unordered_set({ Point2LL(0, 100) })), // A far point. + GetNearbyParameters( + { Point2LL(95, 100) }, + std::unordered_set({ Point2LL(95, 100) }), + std::unordered_set()), // A near point. + GetNearbyParameters( + { Point2LL(100, 100) }, + std::unordered_set({ Point2LL(100, 100) }), + std::unordered_set()) // On top of the target. + )); TEST_F(GetNearbyTest, getNearbyLine2) { @@ -100,13 +125,29 @@ TEST_F(GetNearbyTest, getNearbyLine2) // Are all near points reported as near? for (const Point2LL point : near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? for (const Point2LL point : far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } @@ -145,13 +186,29 @@ TEST_F(GetNearbyTest, getNearbyLine) // Are all near points reported as near? for (const Point2LL point : near) { - EXPECT_NE(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_NE( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is near " << target << " (distance " << vSize(point - target) << "), but getNearby didn't find it. Grid size: " << grid_size; } // Are all far points NOT reported as near? for (const Point2LL point : far) { - EXPECT_EQ(result.end(), std::find_if(result.begin(), result.end(), [&point](const typename SparsePointGridInclusive::Elem& elem) { return elem.val == point; })) + EXPECT_EQ( + result.end(), + std::find_if( + result.begin(), + result.end(), + [&point](const typename SparsePointGridInclusive::Elem& elem) + { + return elem.val == point; + })) << "Point " << point << " is far from " << target << " (distance " << vSize(point - target) << "), but getNearby thought it was near. Grid size: " << grid_size; } } @@ -160,9 +217,12 @@ struct GetNearestParameters { std::vector registered_points; Point2LL* result; - std::function::Elem&)> filter; + std::function::Elem&)> filter; - GetNearestParameters(const std::vector registered_points, Point2LL* result, const std::function::Elem&)>& filter = SparsePointGridInclusive::no_precondition) + GetNearestParameters( + const std::vector registered_points, + Point2LL* result, + const std::function::Elem&)>& filter = SparsePointGridInclusive::no_precondition) : registered_points(registered_points) , result(result) , filter(filter) @@ -192,20 +252,26 @@ TEST_P(GetNearestTest, GetNearest) ASSERT_EQ(success, parameters.result != nullptr) << "getNearest returned " << success << " but should've returned " << (parameters.result != nullptr) << "."; if (parameters.result) { - ASSERT_EQ(result.val, *parameters.result) << "getNearest reported the nearest point to be " << result.val << " (distance " << vSize(target - result.val) << "), but it was " << *parameters.result << " (distance " - << vSize(target - *parameters.result) << ")."; + ASSERT_EQ(result.val, *parameters.result) << "getNearest reported the nearest point to be " << result.val << " (distance " << vSize(target - result.val) << "), but it was " + << *parameters.result << " (distance " << vSize(target - *parameters.result) << ")."; } } -INSTANTIATE_TEST_SUITE_P(GetNearestInstantiation, - GetNearestTest, - testing::Values(GetNearestParameters(std::vector({ Point2LL(95, 100), Point2LL(103, 100), Point2LL(200, 100) }), new Point2LL(103, 100)), // Choose the nearest out of 3 points. - GetNearestParameters(std::vector({ Point2LL(95, 100), Point2LL(98, 100), Point2LL(106, 100) }), - new Point2LL(106, 100), - [](const typename SparsePointGridInclusive::Elem& elem) -> bool { return elem.point.X > 100; }), // With a filter. - GetNearestParameters(std::vector(), nullptr), // No points, no answer. - GetNearestParameters(std::vector({ Point2LL(100, 100) }), new Point2LL(100, 100)) // Same point as target. - )); +INSTANTIATE_TEST_SUITE_P( + GetNearestInstantiation, + GetNearestTest, + testing::Values( + GetNearestParameters(std::vector({ Point2LL(95, 100), Point2LL(103, 100), Point2LL(200, 100) }), new Point2LL(103, 100)), // Choose the nearest out of 3 points. + GetNearestParameters( + std::vector({ Point2LL(95, 100), Point2LL(98, 100), Point2LL(106, 100) }), + new Point2LL(106, 100), + [](const typename SparsePointGridInclusive::Elem& elem) -> bool + { + return elem.point.X > 100; + }), // With a filter. + GetNearestParameters(std::vector(), nullptr), // No points, no answer. + GetNearestParameters(std::vector({ Point2LL(100, 100) }), new Point2LL(100, 100)) // Same point as target. + )); TEST_F(GetNearestTest, Equal) { @@ -228,9 +294,10 @@ TEST_F(GetNearestTest, Equal) const bool success = grid.getNearest(target, grid_size, result, SparsePointGridInclusive::no_precondition); ASSERT_TRUE(success); - ASSERT_TRUE(result.val == expected1 || result.val == expected2) << "getNearest reported the nearest point to be " << result.val << " (distance " << vSize(target - result.val) << "), but it should've been " << expected1 << "(distance " - << vSize(expected1 - target) << ") or " << expected2 << " (distance " << vSize(expected2 - target) - << ")."; // FIXME: simplify once fmt or we use C++20 is added as a dependency + ASSERT_TRUE(result.val == expected1 || result.val == expected2) + << "getNearest reported the nearest point to be " << result.val << " (distance " << vSize(target - result.val) << "), but it should've been " << expected1 << "(distance " + << vSize(expected1 - target) << ") or " << expected2 << " (distance " << vSize(expected2 - target) + << ")."; // FIXME: simplify once fmt or we use C++20 is added as a dependency } } // namespace cura From fd3b4dcfd366d8cfdb0bd4b05eb000442b6afb89 Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Wed, 22 Nov 2023 14:40:37 +0000 Subject: [PATCH 099/218] Applied clang-format. --- include/bridge.h | 17 ++++++++++++----- include/pathPlanning/Comb.h | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/bridge.h b/include/bridge.h index a4cb04233d..a95e3a0fe7 100644 --- a/include/bridge.h +++ b/include/bridge.h @@ -1,5 +1,5 @@ -//Copyright (c) 2019 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2019 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef BRIDGE_H #define BRIDGE_H @@ -27,8 +27,15 @@ class SupportLayer; * \param supported_regions Pre-computed regions that the support layer would * support. */ -double bridgeAngle(const Settings& settings, const Polygons& skin_outline, const SliceDataStorage& storage, const unsigned layer_nr, const unsigned bridge_layer, const SupportLayer* support_layer, Polygons& supported_regions); +double bridgeAngle( + const Settings& settings, + const Polygons& skin_outline, + const SliceDataStorage& storage, + const unsigned layer_nr, + const unsigned bridge_layer, + const SupportLayer* support_layer, + Polygons& supported_regions); -}//namespace cura +} // namespace cura -#endif//BRIDGE_H +#endif // BRIDGE_H diff --git a/include/pathPlanning/Comb.h b/include/pathPlanning/Comb.h index cbdd1b539a..289a5a1f5d 100644 --- a/include/pathPlanning/Comb.h +++ b/include/pathPlanning/Comb.h @@ -177,7 +177,7 @@ class Comb * \param start_inside_poly[out] The polygon in which the point has been moved * \return Whether we have moved the point inside */ - bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t &start_inside_poly); + bool moveInside(Polygons& boundary_inside, bool is_inside, LocToLineGrid* inside_loc_to_line, Point2LL& dest_point, size_t& start_inside_poly); void moveCombPathInside(Polygons& boundary_inside, Polygons& boundary_inside_optimal, CombPath& comb_path_input, CombPath& comb_path_output); From f08aadfa6bb62bdae753d86d56542af74d2f6c66 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 15:46:13 +0100 Subject: [PATCH 100/218] Fixed conversion warning, with potential side-effects on combing --- src/LayerPlan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 6e5ce67341..441e0faebd 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -175,7 +175,7 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) switch (boundary_type) { case CombBoundary::MINIMUM: - offset = -mesh.settings.get("machine_nozzle_size") / 2 - 0.1 - mesh.settings.get("wall_line_width_0") / 2; + offset = -mesh.settings.get("machine_nozzle_size") / 2 - mesh.settings.get("wall_line_width_0") / 2; break; case CombBoundary::PREFERRED: offset = -mesh.settings.get("machine_nozzle_size") * 3 / 2 - mesh.settings.get("wall_line_width_0") / 2; From cdca811ffc8652eea2b2df13ba7ec8d2040c34ae Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 15:54:24 +0100 Subject: [PATCH 101/218] Fixed crash --- include/utils/PolygonsPointIndex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/utils/PolygonsPointIndex.h b/include/utils/PolygonsPointIndex.h index deb722dd06..c4ce020105 100644 --- a/include/utils/PolygonsPointIndex.h +++ b/include/utils/PolygonsPointIndex.h @@ -47,7 +47,7 @@ class PathsPointIndex * \param poly_idx The index of the sub-polygon to point to. * \param point_idx The index of the vertex in the sub-polygon. */ - PathsPointIndex(const Paths* polygons, unsigned int poly_idx, unsigned int point_idx) + PathsPointIndex(const Paths* polygons, size_t poly_idx, size_t point_idx) : polygons_(polygons) , poly_idx_(poly_idx) , point_idx_(point_idx) From b7776f4272fff230a161f31e27cb1a5813f75afe Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 16:36:00 +0100 Subject: [PATCH 102/218] Upload unit-test report for Github action --- .github/workflows/unit-test.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 04e325df79..ff529730fc 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -141,5 +141,13 @@ jobs: files: | **/*.xml + - name: Upload the detailed tests report + uses: actions/upload-artifact@v3 + with: + name: LastTest.log + path: | + /home/runner/work/CuraEngine/CuraEngine/build/Release/Testing/Temporary/LastTest.log + retention-days: 5 + - name: Conclusion run: echo "Conclusion is ${{ fromJSON( steps.test-results.outputs.json ).conclusion }}" From 7625e4fd8b542ce71efb8cd516db520e2a74c2f9 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 16:52:18 +0100 Subject: [PATCH 103/218] Upload detailed test report only on Linux --- .github/workflows/unit-test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index ff529730fc..59c3e7320b 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -143,10 +143,11 @@ jobs: - name: Upload the detailed tests report uses: actions/upload-artifact@v3 + if: ${{ runner.os == 'Linux' }} with: name: LastTest.log path: | - /home/runner/work/CuraEngine/CuraEngine/build/Release/Testing/Temporary/LastTest.log + build/Release/Testing/Temporary/LastTest.log retention-days: 5 - name: Conclusion From 50366ad0c5e2070eee6a553c03dde2fa775cc5e1 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 17:14:36 +0100 Subject: [PATCH 104/218] Force unit test report publishing --- .github/workflows/unit-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 59c3e7320b..94f0ed77cb 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -143,7 +143,7 @@ jobs: - name: Upload the detailed tests report uses: actions/upload-artifact@v3 - if: ${{ runner.os == 'Linux' }} + if: ${{ always() }} with: name: LastTest.log path: | From 332b2f36023b3a63a3d3b43cbbc8f450da917fb6 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 17:41:40 +0100 Subject: [PATCH 105/218] Fixed GCodeExport unit test --- tests/GCodeExportTest.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/GCodeExportTest.cpp b/tests/GCodeExportTest.cpp index b8ae6bb7ca..4435285791 100644 --- a/tests/GCodeExportTest.cpp +++ b/tests/GCodeExportTest.cpp @@ -652,11 +652,10 @@ TEST_F(GCodeExportTest, insertWipeScriptRetractionEnable) gcode.is_volumetric_ = false; gcode.current_extruder_ = 0; gcode.extruder_attr_[0].filament_area_ = 10.0; + gcode.extruder_attr_[0].machine_firmware_retract_ = false; gcode.relative_extrusion_ = false; gcode.current_speed_ = 1.0; Application::getInstance().current_slice_->scene.current_mesh_group->settings.add("layer_height", "0.2"); - Application::getInstance().current_slice_->scene.extruders.emplace_back(0, &Application::getInstance().current_slice_->scene.current_mesh_group->settings); - Application::getInstance().current_slice_->scene.extruders.back().settings_.add("machine_firmware_retract", "false"); WipeScriptConfig config; config.retraction_enable = true; From a336b225b92367cc4f6a608db71e17659205bb34 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 22 Nov 2023 17:42:02 +0100 Subject: [PATCH 106/218] Fixed some numeric conversion warnings --- include/TreeSupportSettings.h | 6 +++--- include/timeEstimate.h | 20 ++++++++++---------- include/utils/ExtrusionLine.h | 4 ++-- include/utils/string.h | 6 +++--- src/FffPolygonGenerator.cpp | 2 +- src/MeshGroup.cpp | 2 +- src/gcodeExport.cpp | 4 ++-- src/skin.cpp | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index a550bb530b..78be092694 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -32,8 +32,8 @@ struct TreeSupportSettings , min_radius(mesh_group_settings.get("support_tree_tip_diameter") / 2) , // The actual radius is 50 microns larger as the resulting branches will be increased by 50 microns to avoid rounding errors effectively increasing the xydistance max_radius(mesh_group_settings.get("support_tree_max_diameter") / 2) - , maximum_move_distance((angle < TAU / 4) ? (coord_t)(tan(angle) * layer_height) : std::numeric_limits::max()) - , maximum_move_distance_slow((angle_slow < TAU / 4) ? (coord_t)(tan(angle_slow) * layer_height) : std::numeric_limits::max()) + , maximum_move_distance((angle < TAU / 4) ? std::llround(tan(angle) * layer_height) : std::numeric_limits::max()) + , maximum_move_distance_slow((angle_slow < TAU / 4) ? std::llround(tan(angle_slow) * layer_height) : std::numeric_limits::max()) , support_bottom_layers(mesh_group_settings.get("support_bottom_enable") ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) , tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)) , // Ensure lines always stack nicely even if layer height is large @@ -50,7 +50,7 @@ struct TreeSupportSettings : RestPreference::BUILDPLATE) , xy_distance(mesh_group_settings.get("support_xy_distance")) , bp_radius(mesh_group_settings.get("support_tree_bp_diameter") / 2) - , diameter_scale_bp_radius(std::min(sin(0.7) * layer_height / branch_radius, 1.0 / (branch_radius / (support_line_width / 2.0)))) + , diameter_scale_bp_radius(std::min(sin(0.7) * static_cast(layer_height / branch_radius), 1.0 / (branch_radius / (support_line_width / 2.0)))) , // Either 40° or as much as possible so that 2 lines will overlap by at least 50%, whichever is smaller. support_overrides(mesh_group_settings.get("support_xy_overrides_z")) , xy_min_distance(support_overrides == SupportDistPriority::Z_OVERRIDES_XY ? mesh_group_settings.get("support_xy_distance_overhang") : xy_distance) diff --git a/include/timeEstimate.h b/include/timeEstimate.h index 4ce741a6ba..b78b136aea 100644 --- a/include/timeEstimate.h +++ b/include/timeEstimate.h @@ -4,15 +4,15 @@ #ifndef TIME_ESTIMATE_H #define TIME_ESTIMATE_H +#include +#include +#include + #include "PrintFeature.h" #include "settings/types/Duration.h" //Print time estimates. #include "settings/types/Ratio.h" #include "settings/types/Velocity.h" //Speeds and accelerations at which we print. -#include -#include -#include - namespace cura { @@ -26,11 +26,11 @@ class Settings; class TimeEstimateCalculator { public: - constexpr static unsigned int NUM_AXIS = 4; - constexpr static unsigned int X_AXIS = 0; - constexpr static unsigned int Y_AXIS = 1; - constexpr static unsigned int Z_AXIS = 2; - constexpr static unsigned int E_AXIS = 3; + constexpr static size_t NUM_AXIS = 4; + constexpr static size_t X_AXIS = 0; + constexpr static size_t Y_AXIS = 1; + constexpr static size_t Z_AXIS = 2; + constexpr static size_t E_AXIS = 3; class Position @@ -50,7 +50,7 @@ class TimeEstimateCalculator } double axis[NUM_AXIS]; - double& operator[](const int n) + double& operator[](const size_t n) { return axis[n]; } diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 7c09ca4eb5..e1f2437666 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -129,12 +129,12 @@ struct ExtrusionLine return junctions_.back(); } - const ExtrusionJunction& operator[](unsigned int index) const + const ExtrusionJunction& operator[](size_t index) const { return junctions_[index]; } - ExtrusionJunction& operator[](unsigned int index) + ExtrusionJunction& operator[](size_t index) { return junctions_[index]; } diff --git a/include/utils/string.h b/include/utils/string.h index 7ca857c191..90ddc318fd 100644 --- a/include/utils/string.h +++ b/include/utils/string.h @@ -121,10 +121,10 @@ struct MMtoStream * \param coord double to output * \param ss The output stream to write the string to */ -static inline void writeDoubleToStream(const unsigned int precision, const double coord, std::ostream& ss) +static inline void writeDoubleToStream(const uint8_t precision, const double coord, std::ostream& ss) { char format[5] = "%.xF"; // write a float with [x] digits after the dot - format[2] = '0' + precision; // set [x] + format[2] = '0' + static_cast(precision); // set [x] constexpr size_t buffer_size = 400; char buffer[buffer_size]; int char_count = sprintf(buffer, format, coord); @@ -166,7 +166,7 @@ static inline void writeDoubleToStream(const unsigned int precision, const doubl */ struct PrecisionedDouble { - unsigned int precision; //!< Number of digits after the decimal mark with which to convert to string + uint8_t precision; //!< Number of digits after the decimal mark with which to convert to string double value; //!< The double value friend inline std::ostream& operator<<(std::ostream& out, const PrecisionedDouble precision_and_input) diff --git a/src/FffPolygonGenerator.cpp b/src/FffPolygonGenerator.cpp index 16503d2839..384093794c 100644 --- a/src/FffPolygonGenerator.cpp +++ b/src/FffPolygonGenerator.cpp @@ -827,7 +827,7 @@ void FffPolygonGenerator::processSkinsAndInfill(SliceMeshStorage& mesh, const La SkinInfillAreaComputation skin_infill_area_computation(layer_nr, mesh, process_infill); skin_infill_area_computation.generateSkinsAndInfill(); - if (mesh.settings.get("ironing_enabled") && (! mesh.settings.get("ironing_only_highest_layer") || mesh.layer_nr_max_filled_layer == layer_nr) + if (((mesh.settings.get("ironing_enabled") && (! mesh.settings.get("ironing_only_highest_layer"))) || mesh.layer_nr_max_filled_layer == layer_nr) || ! mesh.settings.get("small_skin_on_surface")) { // Generate the top surface to iron over. diff --git a/src/MeshGroup.cpp b/src/MeshGroup.cpp index c31623cee6..f71b2f7bd5 100644 --- a/src/MeshGroup.cpp +++ b/src/MeshGroup.cpp @@ -210,7 +210,7 @@ bool loadMeshSTL_binary(Mesh* mesh, const char* filename, const Matrix4x3D& matr fclose(f); return false; } - float* v = ((float*)buffer) + 3; + float* v = reinterpret_cast(buffer) + 3; Point3LL v0 = matrix.apply(Point3F(v[0], v[1], v[2]).toPoint3d()); Point3LL v1 = matrix.apply(Point3F(v[3], v[4], v[5]).toPoint3d()); diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 9726c9b39c..8372ba1656 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -31,7 +31,7 @@ std::string transliterate(const std::string& text) std::ostringstream stream; for (const char& c : text) { - stream << static_cast((c >= 0) ? c : '?'); + stream << ((c >= 0) ? c : '?'); } return stream.str(); } @@ -1165,7 +1165,7 @@ void GCodeExport::writeRetraction(const RetractionConfig& config, bool force, bo } } - if (extruder_attr_[current_extruder_].machine_firmware_retract_) + if (extr_attr.machine_firmware_retract_) { if (extruder_switch && extr_attr.retraction_e_amount_current_) { diff --git a/src/skin.cpp b/src/skin.cpp index e02ba1b2d1..1f36864698 100644 --- a/src/skin.cpp +++ b/src/skin.cpp @@ -535,7 +535,7 @@ void SkinInfillAreaComputation::generateGradualInfill(SliceMeshStorage& mesh) void SkinInfillAreaComputation::combineInfillLayers(SliceMeshStorage& mesh) { - if (mesh.layers.empty() || mesh.layers.size() - 1 < static_cast(mesh.settings.get("top_layers")) + if (mesh.layers.empty() || mesh.layers.size() - 1 < mesh.settings.get("top_layers") || mesh.settings.get("infill_line_distance") == 0) // No infill is even generated. { return; From ce2564977dfa17fb4774df395226ee7c2451ca41 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 09:29:13 +0100 Subject: [PATCH 107/218] Store results as json Contributes to CURA-11378 --- conanfile.py | 1 + stress_benchmark/CMakeLists.txt | 7 +- .../001.settings | 0 .../001.wkt | 0 .../002.settings | 0 .../002.wkt | 0 .../003.settings | 0 .../003.wkt | 0 .../004.settings | 0 .../004.wkt | 0 .../005.settings | 0 .../005.wkt | 0 .../006.settings | 0 .../006.wkt | 0 .../007.settings | 0 .../007.wkt | 0 .../008.settings | 0 .../008.wkt | 0 .../009.settings | 0 .../009.wkt | 0 .../010.settings | 0 .../010.wkt | 0 .../011.settings | 0 .../011.wkt | 0 ...ss_bm_voronoi.cpp => stress_benchmark.cpp} | 125 +++++++++++++----- 25 files changed, 96 insertions(+), 37 deletions(-) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/001.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/001.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/002.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/002.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/003.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/003.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/004.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/004.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/005.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/005.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/006.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/006.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/007.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/007.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/008.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/008.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/009.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/009.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/010.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/010.wkt (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/011.settings (100%) rename stress_benchmark/{stress_bm_voronoi_resources => resources}/011.wkt (100%) rename stress_benchmark/{stress_bm_voronoi.cpp => stress_benchmark.cpp} (55%) diff --git a/conanfile.py b/conanfile.py index 97fc114ef9..c9d7b50c95 100644 --- a/conanfile.py +++ b/conanfile.py @@ -80,6 +80,7 @@ def build_requirements(self): self.test_requires("gtest/1.12.1") if self.options.enable_benchmarks: self.test_requires("benchmark/1.7.0") + self.test_requires("docopt.cpp/0.6.3") def requirements(self): if self.options.enable_arcus: diff --git a/stress_benchmark/CMakeLists.txt b/stress_benchmark/CMakeLists.txt index c27cc81366..0807007234 100644 --- a/stress_benchmark/CMakeLists.txt +++ b/stress_benchmark/CMakeLists.txt @@ -3,7 +3,8 @@ message(STATUS "Building stress benchmarks...") +find_package(docopt REQUIRED) -add_executable(stress_bm_voronoi stress_bm_voronoi.cpp) -target_link_libraries(stress_bm_voronoi PRIVATE _CuraEngine test_helpers range-v3::range-v3 fmt::fmt spdlog::spdlog boost::boost) -target_include_directories(stress_bm_voronoi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/generated) \ No newline at end of file +add_executable(stress_benchmark stress_benchmark.cpp) +target_link_libraries(stress_benchmark PRIVATE _CuraEngine test_helpers spdlog::spdlog boost::boost rapidjson docopt_s) +target_include_directories(stress_benchmark PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/generated) \ No newline at end of file diff --git a/stress_benchmark/stress_bm_voronoi_resources/001.settings b/stress_benchmark/resources/001.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/001.settings rename to stress_benchmark/resources/001.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/001.wkt b/stress_benchmark/resources/001.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/001.wkt rename to stress_benchmark/resources/001.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/002.settings b/stress_benchmark/resources/002.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/002.settings rename to stress_benchmark/resources/002.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/002.wkt b/stress_benchmark/resources/002.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/002.wkt rename to stress_benchmark/resources/002.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/003.settings b/stress_benchmark/resources/003.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/003.settings rename to stress_benchmark/resources/003.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/003.wkt b/stress_benchmark/resources/003.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/003.wkt rename to stress_benchmark/resources/003.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/004.settings b/stress_benchmark/resources/004.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/004.settings rename to stress_benchmark/resources/004.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/004.wkt b/stress_benchmark/resources/004.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/004.wkt rename to stress_benchmark/resources/004.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/005.settings b/stress_benchmark/resources/005.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/005.settings rename to stress_benchmark/resources/005.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/005.wkt b/stress_benchmark/resources/005.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/005.wkt rename to stress_benchmark/resources/005.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/006.settings b/stress_benchmark/resources/006.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/006.settings rename to stress_benchmark/resources/006.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/006.wkt b/stress_benchmark/resources/006.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/006.wkt rename to stress_benchmark/resources/006.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/007.settings b/stress_benchmark/resources/007.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/007.settings rename to stress_benchmark/resources/007.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/007.wkt b/stress_benchmark/resources/007.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/007.wkt rename to stress_benchmark/resources/007.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/008.settings b/stress_benchmark/resources/008.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/008.settings rename to stress_benchmark/resources/008.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/008.wkt b/stress_benchmark/resources/008.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/008.wkt rename to stress_benchmark/resources/008.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/009.settings b/stress_benchmark/resources/009.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/009.settings rename to stress_benchmark/resources/009.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/009.wkt b/stress_benchmark/resources/009.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/009.wkt rename to stress_benchmark/resources/009.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/010.settings b/stress_benchmark/resources/010.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/010.settings rename to stress_benchmark/resources/010.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/010.wkt b/stress_benchmark/resources/010.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/010.wkt rename to stress_benchmark/resources/010.wkt diff --git a/stress_benchmark/stress_bm_voronoi_resources/011.settings b/stress_benchmark/resources/011.settings similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/011.settings rename to stress_benchmark/resources/011.settings diff --git a/stress_benchmark/stress_bm_voronoi_resources/011.wkt b/stress_benchmark/resources/011.wkt similarity index 100% rename from stress_benchmark/stress_bm_voronoi_resources/011.wkt rename to stress_benchmark/resources/011.wkt diff --git a/stress_benchmark/stress_bm_voronoi.cpp b/stress_benchmark/stress_benchmark.cpp similarity index 55% rename from stress_benchmark/stress_bm_voronoi.cpp rename to stress_benchmark/stress_benchmark.cpp index f3066fc5e0..55e164fc93 100644 --- a/stress_benchmark/stress_bm_voronoi.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -1,11 +1,12 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include #include #include #include -#include -#include +#include +#include #include #include #include @@ -15,13 +16,31 @@ #include #include #include -#include #include -#include "WallsComputation.h" //Unit under test. -#include "settings/Settings.h" //Settings to generate walls with. -#include "sliceDataStorage.h" //Sl -#include "utils/polygon.h" //To create example polygons. +#include "WallsComputation.h" +#include "rapidjson/document.h" +#include "rapidjson/stringbuffer.h" +#include "rapidjson/writer.h" +#include "settings/Settings.h" +#include "sliceDataStorage.h" +#include "utils/polygon.h" + + +constexpr std::string_view USAGE = R"(Stress Benchmark. + +Executes a Stress Benchmark on CuraEngine. + +Usage: + stress_benchmark -o FILE + stress_benchmark (-h | --help) + stress_benchmark --version + +Options: + -h --help Show this screen. + --version Show version. + -o FILE Specify the output Json file. +)"; struct Resource { @@ -106,7 +125,7 @@ struct Resource std::vector getResources() { - auto resource_path = std::filesystem::path(std::source_location::current().file_name()).parent_path().append("stress_bm_voronoi_resources"); + auto resource_path = std::filesystem::path(std::source_location::current().file_name()).parent_path().append("resources"); std::vector resources; for (const auto& p : std::filesystem::recursive_directory_iterator(resource_path)) @@ -122,8 +141,62 @@ std::vector getResources() return resources; }; -int main() +void handleChildProcess(const auto& shapes, const auto& settings) +{ + cura::SliceLayer layer; + for (const cura::Polygons& shape : shapes) + { + layer.parts.emplace_back(); + cura::SliceLayerPart& part = layer.parts.back(); + part.outline.add(shape); + } + cura::LayerIndex layer_idx(100); + cura::WallsComputation walls_computation(settings, layer_idx); + walls_computation.generateWalls(&layer, cura::SectionType::WALL); + exit(EXIT_SUCCESS); +} + +size_t checkCrashCount(size_t crashCount, int status, const auto& resource) +{ + if (WIFSIGNALED(status)) + { + ++crashCount; + spdlog::error("Crash detected for: {}", resource.stem()); + } + return crashCount; +} + +void createAndWriteJson(const std::filesystem::path& out_file, double stress_level) +{ + rapidjson::Document doc; + doc.SetArray(); + rapidjson::Document::AllocatorType& allocator = doc.GetAllocator(); + rapidjson::Value obj(rapidjson::kObjectType); + obj.AddMember("name", "General Stress Level", allocator); + obj.AddMember("unit", "%", allocator); + obj.AddMember("value", stress_level, allocator); + doc.PushBack(obj, allocator); + rapidjson::StringBuffer buffer; + rapidjson::Writer writer(buffer); + doc.Accept(writer); + + spdlog::info("Writing Json results: {}", std::filesystem::absolute(out_file).string()); + std::ofstream file{ out_file }; + if (! file) + { + spdlog::critical("Failed to open the file: {}", out_file.string()); + exit(EXIT_FAILURE); + } + file.write(buffer.GetString(), buffer.GetSize()); + file.close(); +} + +int main(int argc, const char** argv) { + constexpr bool show_help = true; + constexpr std::string_view version = "0.1.0"; + const std::map args = docopt::docopt(fmt::format("{}", USAGE), { argv + 1, argv + argc }, show_help, fmt::format("{}", version)); + const auto resources = getResources(); size_t crashCount = 0; @@ -133,41 +206,25 @@ int main() const auto& settings = resource.settings(); pid_t pid = fork(); - if (pid == -1) { spdlog::critical("Unable to fork"); - return 1; + return EXIT_FAILURE; } - if (pid == 0) { - cura::SliceLayer layer; - for (const cura::Polygons& shape : shapes) - { - layer.parts.emplace_back(); - cura::SliceLayerPart& part = layer.parts.back(); - part.outline.add(shape); - } - - cura::LayerIndex layer_idx(100); - cura::WallsComputation walls_computation(settings, layer_idx); - - walls_computation.generateWalls(&layer, cura::SectionType::WALL); - exit(EXIT_SUCCESS); + handleChildProcess(shapes, settings); } else { int status; waitpid(pid, &status, 0); - - if (WIFSIGNALED(status)) - { - ++crashCount; - spdlog::error("Crash detected for: {}", resource.stem()); - } + crashCount = checkCrashCount(crashCount, status, resource); } } - spdlog::info("Total number of crashes: {}", crashCount); - return 0; -} \ No newline at end of file + double stress_level = static_cast(crashCount) / static_cast(resources.size()) * 100.0; + spdlog::info("Stress level: {:.2f} [%]", stress_level); + + createAndWriteJson(std::filesystem::path{ args.at("-o").asString() }, stress_level); + return EXIT_SUCCESS; +} From 65f0d9b9661c3d0f45ca8b0fb8e467485273637f Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 23 Nov 2023 09:51:19 +0100 Subject: [PATCH 108/218] Fixed minimum layer time application regression --- include/ExtruderPlan.h | 2 +- src/LayerPlan.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/ExtruderPlan.h b/include/ExtruderPlan.h index 7f534d1ec8..e5fc1dd11d 100644 --- a/include/ExtruderPlan.h +++ b/include/ExtruderPlan.h @@ -44,7 +44,7 @@ class ExtruderPlan FRIEND_TEST(ExtruderPlanTest, BackPressureCompensationEmptyPlan); #endif public: - size_t extruder_nr_; //!< The extruder used for this paths in the current plan. + size_t extruder_nr_{ 0 }; //!< The extruder used for this paths in the current plan. ExtruderPlan() noexcept = default; diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 441e0faebd..6077daa44d 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -1592,7 +1592,7 @@ void ExtruderPlan::forceMinimalLayerTime(double minTime, double time_other_extr_ // Slowing down to the slowest_speed is sufficient to respect the minimum layer time. // Linear interpolate between extrudeTime and total_extrude_time_at_slowest_speed const double factor = (1 / total_extrude_time_at_slowest_speed - 1 / minExtrudeTime) / (1 / total_extrude_time_at_slowest_speed - 1 / extrudeTime); - slow_down_func = [&slowest_path_speed = slowest_path_speed_, &factor](const GCodePath& path) + slow_down_func = [&slowest_path_speed = slowest_path_speed_, factor](const GCodePath& path) { const double actual_target_speed = slowest_path_speed * (1.0 - factor) + (path.config.getSpeed() * path.speed_factor) * factor; return std::min(actual_target_speed / (path.config.getSpeed() * path.speed_factor), 1.0); From ef93523b4e8ecb990ae85c4f3ca25d483f334893 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 10:07:06 +0100 Subject: [PATCH 109/218] Add extra info Showing the failed test cases in the tooltip Contributes to CURA-11378 --- stress_benchmark/stress_benchmark.cpp | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index 55e164fc93..6b1e03a01b 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -166,15 +166,27 @@ size_t checkCrashCount(size_t crashCount, int status, const auto& resource) return crashCount; } -void createAndWriteJson(const std::filesystem::path& out_file, double stress_level) +void createAndWriteJson(const std::filesystem::path& out_file, double stress_level, const std::string& extra_info) { rapidjson::Document doc; doc.SetArray(); rapidjson::Document::AllocatorType& allocator = doc.GetAllocator(); rapidjson::Value obj(rapidjson::kObjectType); - obj.AddMember("name", "General Stress Level", allocator); - obj.AddMember("unit", "%", allocator); - obj.AddMember("value", stress_level, allocator); + rapidjson::Value key("name", allocator); + rapidjson::Value val1("General Stress Level", allocator); + obj.AddMember(key, val1, allocator); + + key.SetString("unit", allocator); + rapidjson::Value val2("%", allocator); + obj.AddMember(key, val2, allocator); + + key.SetString("value", allocator); + rapidjson::Value val3(stress_level); + obj.AddMember(key, val3, allocator); + + key.SetString("extra", allocator); + rapidjson::Value val4(extra_info.c_str(), extra_info.length(), allocator); + obj.AddMember(key, val4, allocator); doc.PushBack(obj, allocator); rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); @@ -198,7 +210,8 @@ int main(int argc, const char** argv) const std::map args = docopt::docopt(fmt::format("{}", USAGE), { argv + 1, argv + argc }, show_help, fmt::format("{}", version)); const auto resources = getResources(); - size_t crashCount = 0; + size_t crash_count = 0; + std::vector extra_infos; for (const auto& resource : resources) { @@ -219,12 +232,17 @@ int main(int argc, const char** argv) { int status; waitpid(pid, &status, 0); - crashCount = checkCrashCount(crashCount, status, resource); + const auto old_crash_count = crash_count; + crash_count = checkCrashCount(crash_count, status, resource); + if (old_crash_count != crash_count) + { + extra_infos.emplace_back(resource.stem()); + } } } - double stress_level = static_cast(crashCount) / static_cast(resources.size()) * 100.0; + const double stress_level = static_cast(crash_count) / static_cast(resources.size()) * 100.0; spdlog::info("Stress level: {:.2f} [%]", stress_level); - createAndWriteJson(std::filesystem::path{ args.at("-o").asString() }, stress_level); + createAndWriteJson(std::filesystem::path{ args.at("-o").asString() }, stress_level, fmt::format("Crashes in: {}", fmt::join(extra_infos, ", "))); return EXIT_SUCCESS; } From 99cab75ac064d911aca00a22c401568ece0df1fe Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 10:07:57 +0100 Subject: [PATCH 110/218] Add Workflow for automatic Stress Testing Contributes to CURA-11378 --- .github/workflows/stress_benchmark.yml | 170 +++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 .github/workflows/stress_benchmark.yml diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml new file mode 100644 index 0000000000..696e0253d5 --- /dev/null +++ b/.github/workflows/stress_benchmark.yml @@ -0,0 +1,170 @@ +name: Stress Benchmark +on: + push: + paths: + - 'include/**' + - 'src/**' + - 'stress_benchmark/**' + - '.github/workflows/stress_benchmark.yml' + - '.github/workflows/requirements-conan-package.txt' + branches: + - main + tags: + - '[0-9].[0-9].[0-9]*' + pull_request: + types: [ opened, reopened, synchronize ] + paths: + - 'include/**' + - 'src/**' + - 'stress_benchmark/**' + - '.github/workflows/stress_benchmark.yml' + - '.github/workflows/requirements-conan-package.txt' + branches: + - main + - 'CURA-*' + - '[0-9]+.[0-9]+' + tags: + - '[0-9]+.[0-9]+.[0-9]+' + +permissions: + contents: write + deployments: write + +env: + CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }} + CONAN_LOGIN_USERNAME_CURA_CE: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD_CURA_CE: ${{ secrets.CONAN_PASS }} + CONAN_LOG_RUN_TO_OUTPUT: 1 + CONAN_LOGGING_LEVEL: info + CONAN_NON_INTERACTIVE: 1 + +jobs: + check_actor: + runs-on: ubuntu-latest + outputs: + proceed: ${{ steps.skip_check.outputs.proceed }} + steps: + - id: skip_check + run: | + if [[ "${{ github.actor }}" == *"[bot]"* ]]; then + echo "proceed=true" >> $GITHUB_OUTPUT + elif [[ "${{ github.event.pull_request }}" == "" ]]; then + echo "proceed=true" >> $GITHUB_OUTPUT + elif [[ "${{ github.event.pull_request.head.repo.fork }}" == "false" ]]; then + echo "proceed=true" >> $GITHUB_OUTPUT + else + echo "proceed=false" >> $GITHUB_OUTPUT + fi + shell: bash + + conan-recipe-version: + needs: [ check_actor ] + if: ${{ needs.check_actor.outputs.proceed == 'true' }} + uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + with: + project_name: curaengine + + benchmark: + needs: [ conan-recipe-version ] + name: Run C++ benchmark + runs-on: ubuntu-22.04 + steps: + - name: Checkout CuraEngine + uses: actions/checkout@v3 + + - name: Setup Python and pip + uses: actions/setup-python@v4 + with: + python-version: '3.11.x' + architecture: 'x64' + cache: 'pip' + cache-dependency-path: .github/workflows/requirements-conan-package.txt + + - name: Cache Benchmark library + uses: actions/cache@v1 + with: + path: ./cache + key: ${{ runner.os }}-stressbenchmark + + - name: Install Python requirements and Create default Conan profile + run: | + pip install -r .github/workflows/requirements-conan-package.txt + + # NOTE: Due to what are probably github issues, we have to remove the cache and reconfigure before the rest. + # This is maybe because grub caches the disk it uses last time, which is recreated each time. + - name: Install Linux system requirements + if: ${{ runner.os == 'Linux' }} + run: | + sudo rm /var/cache/debconf/config.dat + sudo dpkg --configure -a + sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + sudo apt update + sudo apt upgrade + sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y + + - name: Install GCC-132 on ubuntu + run: | + sudo apt install g++-13 gcc-13 -y + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13 + + - name: Create the default Conan profile + run: conan profile new default --detect + + - name: Get Conan configuration + run: | + conan config install https://github.com/Ultimaker/conan-config.git + conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" + + - name: Use Conan download cache (Bash) + if: ${{ runner.os != 'Windows' }} + run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" + + - name: Cache Conan local repository packages (Bash) + uses: actions/cache@v3 + if: ${{ runner.os != 'Windows' }} + with: + path: | + $HOME/.conan/data + $HOME/.conan/conan_download_cache + key: conan-${{ runner.os }}-${{ runner.arch }} + + - name: Install dependencies + run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -o enable_benchmarks=True -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv + + - name: Upload the Dependency package(s) + run: conan upload "*" -r cura --all -c + + - name: Set Environment variables from Conan install (bash) + if: ${{ runner.os != 'Windows' }} + run: | + . ./activate_github_actions_runenv.sh + . ./activate_github_actions_buildenv.sh + working-directory: build/Release/generators + + - name: Build CuraEngine and tests + run: | + cmake --preset release + cmake --build --preset release + + - name: Run Stress Benchmark CuraEngine + id: run-test + run: ./stress_benchmarks -o benchmark_result.json + working-directory: build/Release/stress_benchmark + + - name: Store benchmark result + uses: benchmark-action/github-action-benchmark@v1 + with: + name: Stress Benchmark + output-file-path: build/Release/benchmark/benchmark_result.json + gh-repository: github.com/Ultimaker/CuraEngineBenchmarks + gh-pages-branch: main + benchmark-data-dir-path: dev/stress_bench + tool: customSmallerIsBetter + github-token: ${{ secrets.CURA_BENCHMARK_PAT }} + auto-push: true + # alert-threshold: '175%' + # summary-always: true + # comment-on-alert: true + max-items-in-chart: 250 From 11b7404e3bdc7c18a0edcd8103df5b30739fce7a Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 10:34:22 +0100 Subject: [PATCH 111/218] Fix failing workflows Contributes to CURA-11378 --- .github/workflows/stress_benchmark.yml | 2 +- CMakeLists.txt | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml index 696e0253d5..39a8087d0a 100644 --- a/.github/workflows/stress_benchmark.yml +++ b/.github/workflows/stress_benchmark.yml @@ -150,7 +150,7 @@ jobs: - name: Run Stress Benchmark CuraEngine id: run-test - run: ./stress_benchmarks -o benchmark_result.json + run: ./stress_benchmark -o benchmark_result.json working-directory: build/Release/stress_benchmark - name: Store benchmark result diff --git a/CMakeLists.txt b/CMakeLists.txt index d521b683d9..c5109f8ce6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -272,13 +272,12 @@ if (ENABLE_TESTING OR ENABLE_BENCHMARKS) endif () endif () -add_subdirectory(stress_benchmark) +if (ENABLE_BENCHMARKS) + add_subdirectory(benchmark) + add_subdirectory(stress_benchmark) +endif () if (ENABLE_TESTING) enable_testing() add_subdirectory(tests) -endif () - -if (ENABLE_BENCHMARKS) - add_subdirectory(benchmark) endif () \ No newline at end of file From 93e75df16d9a7960a3a0efe19fdd708ef439330f Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 11:02:24 +0100 Subject: [PATCH 112/218] Add total number of test cases Contributes to CURA-11378 --- stress_benchmark/stress_benchmark.cpp | 33 +++++++++++++++++---------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index 6b1e03a01b..62502c1c5f 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -1,6 +1,7 @@ // Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher +#include #include #include #include @@ -166,28 +167,36 @@ size_t checkCrashCount(size_t crashCount, int status, const auto& resource) return crashCount; } -void createAndWriteJson(const std::filesystem::path& out_file, double stress_level, const std::string& extra_info) +rapidjson::Value + createRapidJSONObject(rapidjson::Document::AllocatorType& allocator, const std::string& test_name, const auto value, const std::string& unit, const std::string& extra_info) { - rapidjson::Document doc; - doc.SetArray(); - rapidjson::Document::AllocatorType& allocator = doc.GetAllocator(); rapidjson::Value obj(rapidjson::kObjectType); rapidjson::Value key("name", allocator); - rapidjson::Value val1("General Stress Level", allocator); + rapidjson::Value val1(test_name.c_str(), test_name.length(), allocator); obj.AddMember(key, val1, allocator); - key.SetString("unit", allocator); - rapidjson::Value val2("%", allocator); + rapidjson::Value val2(unit.c_str(), unit.length(), allocator); obj.AddMember(key, val2, allocator); - key.SetString("value", allocator); - rapidjson::Value val3(stress_level); + rapidjson::Value val3(value); obj.AddMember(key, val3, allocator); - key.SetString("extra", allocator); rapidjson::Value val4(extra_info.c_str(), extra_info.length(), allocator); obj.AddMember(key, val4, allocator); - doc.PushBack(obj, allocator); + return obj; +} + +void createAndWriteJson(const std::filesystem::path& out_file, double stress_level, const std::string& extra_info, const size_t no_test_cases) +{ + rapidjson::Document doc; + doc.SetArray(); + rapidjson::Document::AllocatorType& allocator = doc.GetAllocator(); + auto no_test_cases_obj = createRapidJSONObject(allocator, "Number of test cases", no_test_cases, "-", ""); + doc.PushBack(no_test_cases_obj, allocator); + + auto stress_obj = createRapidJSONObject(allocator, "General Stress Level", stress_level, "%", extra_info); + doc.PushBack(stress_obj, allocator); + rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); doc.Accept(writer); @@ -243,6 +252,6 @@ int main(int argc, const char** argv) const double stress_level = static_cast(crash_count) / static_cast(resources.size()) * 100.0; spdlog::info("Stress level: {:.2f} [%]", stress_level); - createAndWriteJson(std::filesystem::path{ args.at("-o").asString() }, stress_level, fmt::format("Crashes in: {}", fmt::join(extra_infos, ", "))); + createAndWriteJson(std::filesystem::path{ args.at("-o").asString() }, stress_level, fmt::format("Crashes in: {}", fmt::join(extra_infos, ", ")), resources.size()); return EXIT_SUCCESS; } From dd56f46c41cc581a11c10f017b13a3b3a4aad7a5 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Thu, 23 Nov 2023 11:18:03 +0100 Subject: [PATCH 113/218] Update stress_benchmark.yml --- .github/workflows/stress_benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml index 39a8087d0a..01d98e8db5 100644 --- a/.github/workflows/stress_benchmark.yml +++ b/.github/workflows/stress_benchmark.yml @@ -157,7 +157,7 @@ jobs: uses: benchmark-action/github-action-benchmark@v1 with: name: Stress Benchmark - output-file-path: build/Release/benchmark/benchmark_result.json + output-file-path: build/Release/stress_benchmark/benchmark_result.json gh-repository: github.com/Ultimaker/CuraEngineBenchmarks gh-pages-branch: main benchmark-data-dir-path: dev/stress_bench From b931a9c67fab2b464a33cf1b1fa59e56b2aa8553 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Thu, 23 Nov 2023 12:46:59 +0100 Subject: [PATCH 114/218] Add test cases CURA-11378 --- stress_benchmark/resources/012.settings | 632 ++++++++++++++++++++++++ stress_benchmark/resources/012.wkt | 1 + stress_benchmark/resources/013.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/013.wkt | 1 + stress_benchmark/resources/014.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/014.wkt | 1 + stress_benchmark/resources/015.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/015.wkt | 1 + stress_benchmark/resources/016.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/016.wkt | 1 + stress_benchmark/resources/017.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/017.wkt | 1 + stress_benchmark/resources/018.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/018.wkt | 1 + stress_benchmark/resources/019.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/019.wkt | 1 + stress_benchmark/resources/020.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/020.wkt | 1 + stress_benchmark/resources/021.settings | 632 ++++++++++++++++++++++++ stress_benchmark/resources/021.wkt | 1 + stress_benchmark/resources/022.settings | 631 +++++++++++++++++++++++ stress_benchmark/resources/022.wkt | 1 + stress_benchmark/resources/023.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/023.wkt | 1 + stress_benchmark/resources/024.settings | 632 ++++++++++++++++++++++++ stress_benchmark/resources/024.wkt | 1 + stress_benchmark/resources/025.settings | 631 +++++++++++++++++++++++ stress_benchmark/resources/025.wkt | 1 + stress_benchmark/resources/026.settings | 631 +++++++++++++++++++++++ stress_benchmark/resources/026.wkt | 1 + stress_benchmark/resources/027.settings | 632 ++++++++++++++++++++++++ stress_benchmark/resources/027.wkt | 1 + stress_benchmark/resources/028.settings | 631 +++++++++++++++++++++++ stress_benchmark/resources/028.wkt | 1 + stress_benchmark/resources/029.settings | 631 +++++++++++++++++++++++ stress_benchmark/resources/029.wkt | 1 + stress_benchmark/resources/030.settings | 632 ++++++++++++++++++++++++ stress_benchmark/resources/030.wkt | 1 + stress_benchmark/resources/031.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/031.wkt | 1 + 40 files changed, 12621 insertions(+) create mode 100644 stress_benchmark/resources/012.settings create mode 100644 stress_benchmark/resources/012.wkt create mode 100644 stress_benchmark/resources/013.settings create mode 100644 stress_benchmark/resources/013.wkt create mode 100644 stress_benchmark/resources/014.settings create mode 100644 stress_benchmark/resources/014.wkt create mode 100644 stress_benchmark/resources/015.settings create mode 100644 stress_benchmark/resources/015.wkt create mode 100644 stress_benchmark/resources/016.settings create mode 100644 stress_benchmark/resources/016.wkt create mode 100644 stress_benchmark/resources/017.settings create mode 100644 stress_benchmark/resources/017.wkt create mode 100644 stress_benchmark/resources/018.settings create mode 100644 stress_benchmark/resources/018.wkt create mode 100644 stress_benchmark/resources/019.settings create mode 100644 stress_benchmark/resources/019.wkt create mode 100644 stress_benchmark/resources/020.settings create mode 100644 stress_benchmark/resources/020.wkt create mode 100644 stress_benchmark/resources/021.settings create mode 100644 stress_benchmark/resources/021.wkt create mode 100644 stress_benchmark/resources/022.settings create mode 100644 stress_benchmark/resources/022.wkt create mode 100644 stress_benchmark/resources/023.settings create mode 100644 stress_benchmark/resources/023.wkt create mode 100644 stress_benchmark/resources/024.settings create mode 100644 stress_benchmark/resources/024.wkt create mode 100644 stress_benchmark/resources/025.settings create mode 100644 stress_benchmark/resources/025.wkt create mode 100644 stress_benchmark/resources/026.settings create mode 100644 stress_benchmark/resources/026.wkt create mode 100644 stress_benchmark/resources/027.settings create mode 100644 stress_benchmark/resources/027.wkt create mode 100644 stress_benchmark/resources/028.settings create mode 100644 stress_benchmark/resources/028.wkt create mode 100644 stress_benchmark/resources/029.settings create mode 100644 stress_benchmark/resources/029.wkt create mode 100644 stress_benchmark/resources/030.settings create mode 100644 stress_benchmark/resources/030.wkt create mode 100644 stress_benchmark/resources/031.settings create mode 100644 stress_benchmark/resources/031.wkt diff --git a/stress_benchmark/resources/012.settings b/stress_benchmark/resources/012.settings new file mode 100644 index 0000000000..99daccc636 --- /dev/null +++ b/stress_benchmark/resources/012.settings @@ -0,0 +1,632 @@ +retraction_extra_prime_amount=0 +interlocking_beam_width=0.8 +support_tree_branch_diameter_angle=7 +min_feature_size=0.1 +minimum_polygon_circumference=1.0 +machine_scale_fan_speed_zero_to_one=False +retraction_amount=0.75 +wipe_retraction_speed=5 +material_end_of_filament_purge_speed=0.5 +wall_0_extruder_nr=-1 +acceleration_wall_x_roofing=300 +raft_interface_thickness=0.3 +support_infill_rate=12.0 +magic_fuzzy_skin_point_density=1.25 +wall_line_count=2 +support_bottom_wall_count=2 +support_bottom_density=24 +skin_material_flow=92.14999999999999 +xy_offset=0 +jerk_support_bottom=12.5 +minimum_roof_area=1.0 +support_roof_density=97 +machine_max_feedrate_z=299792458000 +switch_extruder_extra_prime_amount=0 +slicing_tolerance=middle +material_break_retracted_position=-50 +material_initial_print_temperature=250 +jerk_skirt_brim=12.5 +roofing_monotonic=True +machine_max_jerk_e=5.0 +raft_margin=3 +bottom_thickness=1.0 +skirt_height=3 +speed_travel_layer_0=250.0 +z_seam_corner=z_seam_corner_none +machine_head_with_fans_polygon=[[-20, 10], [10, 10], [10, -10], [-20, -10]] +material_bed_temp_wait=True +top_bottom_pattern=lines +cool_fan_full_layer=1 +skirt_brim_line_width=0.4 +support_interface_wall_count=2 +raft_interface_jerk=12.5 +material_shrinkage_percentage=100.0 +support_bottom_line_distance=2.5 +z_seam_y=160.0 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +z_seam_position=backright +skirt_brim_minimal_length=500 +raft_surface_layers=2 +bridge_fan_speed_3=0 +ironing_inset=0.38 +gantry_height=320 +material_surface_energy=70 +inset_direction=inside_out +prime_tower_size=20 +jerk_wall_0=12.5 +retraction_hop=0.4 +acceleration_enabled=True +support_roof_extruder_nr=0 +skin_material_flow_layer_0=95 +support_material_flow=97 +bridge_fan_speed=100 +support_tree_max_diameter=25 +small_feature_speed_factor_0=50 +machine_acceleration=3000 +bottom_skin_preshrink=0 +sub_div_rad_add=0.4 +raft_surface_jerk=12.5 +adaptive_layer_height_variation_step=0.01 +bridge_sparse_infill_max_density=50 +nozzle_disallowed_areas=[] +support_interface_extruder_nr=0 +support_tower_maximum_supported_diameter=3.0 +support_brim_enable=False +cool_fan_full_at_height=0 +material_crystallinity=False +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +support_bottom_distance=0.125 +wall_material_flow=97 +material_flow_layer_0=100 +retraction_combing=off +gradual_support_infill_steps=0 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +xy_offset_layer_0=0 +support_initial_layer_line_distance=2.5 +smooth_spiralized_contours=True +infill_multiplier=1 +top_thickness=1.0 +gradual_infill_step_height=1.5 +cool_min_speed=9 +cool_fan_enabled=False +wall_overhang_angle=90 +cool_fan_speed_max=100 +support_skip_some_zags=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=85 +support_xy_distance_overhang=0.15 +support_fan_enable=False +retraction_extrusion_window=0 +max_skin_angle_for_expansion=90 +wipe_retraction_enable=True +day=Mon +cool_fan_speed=0 +coasting_min_volume=0.8 +raft_surface_thickness=0.2 +switch_extruder_retraction_speeds=5 +machine_firmware_retract=False +acceleration_prime_tower=300 +skirt_gap=3 +retraction_hop_after_extruder_switch_height=0.4 +support_bottom_pattern=lines +acceleration_print=300 +acceleration_support_roof=300 +retraction_retract_speed=5 +zig_zaggify_infill=True +machine_min_cool_heat_time_window=15 +layer_start_x=0.0 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +infill_wipe_dist=0 +speed_wall_x_roofing=65 +brim_line_count=13 +support_roof_line_distance=0.25773195876288657 +material_guid=88c8919c-6a09-471a-b7b6-e801263d862d +material_shrinkage_percentage_z=100.0 +infill_offset_y=0 +bottom_layers=5 +machine_max_feedrate_e=45 +interlocking_beam_layer_count=2 +raft_airgap=0.3 +wall_distribution_count=1 +raft_base_fan_speed=0 +material_print_temperature_layer_0=260 +raft_base_line_width=1.4 +support_tower_diameter=3.0 +bridge_skin_density_2=100 +wall_0_material_flow_layer_0=110.00000000000001 +quality_name=Fast +wipe_pause=0 +wipe_retraction_prime_speed=5 +lightning_infill_support_angle=40 +print_bed_temperature=95 +support_xy_distance=0.2 +speed_wall=96.0 +meshfix_fluid_motion_shift_distance=0.1 +support_join_distance=2.0 +wipe_hop_amount=0.4 +prime_tower_raft_base_line_spacing=1.4 +support_bottom_stair_step_width=5.0 +wall_line_width_x=0.4 +jerk_support=12.5 +roofing_extruder_nr=-1 +machine_show_variants=False +skin_line_width=0.4 +lightning_infill_prune_angle=40 +speed_support_roof=55 +support_tree_angle_slow=33.333333333333336 +support_skip_zag_per_mm=20 +support_interface_line_width=0.4 +machine_name=UltiMaker Method XL +acceleration_skirt_brim=300 +meshfix=0 +nozzle_offsetting_for_disallowed_areas=False +support_tree_min_height_to_model=3 +machine_max_acceleration_y=9000 +layer_0_z_overlap=0.15 +speed_travel=250.0 +ironing_pattern=zigzag +bridge_skin_speed=55 +skirt_brim_material_flow=97 +machine_nozzle_cool_down_speed=0.8 +alternate_extra_perimeter=False +support_roof_enable=True +support_bottom_offset=0 +bridge_wall_speed=96.0 +magic_spiralize=False +initial_layer_line_width_factor=100.0 +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=260 +machine_nozzle_heat_up_speed=3.5 +raft_interface_line_spacing=1.4 +material_flush_purge_length=60 +draft_shield_dist=10 +ironing_only_highest_layer=False +machine_settings=0 +acceleration_topbottom=300 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=300 +carve_multiple_volumes=True +speed_slowdown_layers=1 +default_material_print_temperature=260 +machine_center_is_zero=True +ironing_monotonic=False +infill_material_flow=97 +support_tree_tip_diameter=0.6 +meshfix_keep_open_polygons=False +skin_monotonic=True +minimum_interface_area=1.0 +draft_shield_enabled=False +infill_overlap_mm=0.0 +conical_overhang_angle=50 +mesh_position_z=0 +adhesion_type=raft +machine_endstop_positive_direction_y=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +infill_mesh=False +jerk_support_roof=12.5 +machine_extruder_count=2 +wall_0_material_flow_roofing=97 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +machine_gcode_flavor=Griffin +support_meshes_present=False +raft_interface_speed=30.0 +travel_avoid_distance=3 +jerk_prime_tower=12.5 +skin_outline_count=0 +support_infill_extruder_nr=0 +coasting_speed=90 +speed_prime_tower=30.0 +support_bottom_stair_step_min_slope=10.0 +infill_sparse_thickness=0.2 +wipe_retraction_extra_prime_amount=0 +skin_preshrink=0 +clean_between_layers=False +roofing_layer_count=2 +bridge_skin_speed_3=55 +magic_fuzzy_skin_point_dist=0.8 +hole_xy_offset_max_diameter=0 +brim_width=5 +acceleration_travel_enabled=True +coasting_enable=False +support_interface_density=100 +machine_buildplate_type=glass +time=21:10:13 +speed_wall_x=65 +material_final_print_temperature=250 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +machine_max_jerk_xy=20.0 +cutting_mesh=False +magic_fuzzy_skin_enabled=False +jerk_enabled=True +support_line_distance=2.5 +retraction_enable=True +expand_skins_expand_distance=0.8 +prime_tower_position_y=118.80000000000001 +mesh_position_x=0 +mold_width=5 +adhesion_extruder_nr=0 +support_interface_skip_height=0.2 +jerk_support_infill=12.5 +wall_overhang_speed_factor=100 +material_bed_temp_prepend=True +infill_before_walls=False +material=0 +small_hole_max_size=0 +support_z_distance=0.25 +meshfix_union_all=True +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.4 +minimum_support_area=0.1 +skin_no_small_gaps_heuristic=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0.8 +mesh_rotation_matrix=[[1,0,0], [0,1,0], [0,0,1]] +support_interface_priority=interface_area_overwrite_support_area +skin_overlap=0 +print_sequence=all_at_once +acceleration_support_infill=300 +brim_gap=0 +speed_layer_0=30 +infill_enable_travel_optimization=True +raft_surface_speed=55 +machine_height=320 +travel_retract_before_outer_wall=False +prime_tower_base_size=10 +adaptive_layer_height_variation=0.1 +raft_interface_layers=2 +support_type=everywhere +skin_edge_support_layers=4 +mold_enabled=False +jerk_travel_layer_0=12.5 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +small_skin_width=0.8 +shell=0 +support_zag_skip_count=8 +material_type=empty +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +support_roof_line_width=0.25 +speed_topbottom=55 +lightning_infill_straightening_angle=40 +raft_smoothing=5 +bridge_enable_more_layers=True +speed_infill=120.0 +connect_infill_polygons=False +min_bead_width=0.4 +wall_x_extruder_nr=-1 +switch_extruder_prime_speed=5 +support=0 +infill_mesh_order=0 +support_angle=50 +raft_base_speed=5 +machine_nozzle_temp_enabled=True +material_maximum_park_duration=300 +skirt_brim_speed=30 +switch_extruder_retraction_amount=0.5 +infill_pattern=lines +meshfix_fluid_motion_enabled=True +connect_skin_polygons=False +material_break_temperature=50 +wipe_retraction_amount=0.75 +jerk_layer_0=12.5 +cool_min_temperature=250 +acceleration_support=300 +switch_extruder_retraction_speed=5 +retraction_hop_enabled=True +raft_surface_extruder_nr=0 +acceleration_roofing=300 +material_print_temp_wait=True +prime_tower_base_height=6 +fill_outline_gaps=True +mold_roof_height=0.5 +support_bottom_line_width=0.6 +support_extruder_nr=0 +wall_0_inset=0 +relative_extrusion=False +support_conical_min_width=10 +support_structure=normal +support_interface_height=0.4 +cool_fan_speed_0=0 +blackmagic=0 +infill_support_enabled=False +support_brim_line_count=3 +material_adhesion_tendency=0 +prime_tower_base_curve_magnitude=2 +extruder_prime_pos_abs=True +machine_extruders_shared_nozzle_initial_retraction=0 +conical_overhang_hole_size=0 +jerk_travel_enabled=True +bridge_skin_support_threshold=50 +support_roof_wall_count=2 +infill_sparse_density=20 +infill_extruder_nr=-1 +support_interface_enable=True +bridge_skin_density_3=100 +bridge_fan_speed_2=50.0 +support_interface_pattern=lines +bridge_skin_material_flow_3=97 +initial_bottom_layers=5 +wall_line_width_0=0.4 +interlocking_enable=False +support_tree_top_rate=30 +cross_infill_pocket_size=2.0 +meshfix_maximum_deviation=0.04 +meshfix_maximum_resolution=0.6 +wipe_repeat_count=5 +brim_inside_margin=2.5 +material_end_of_filament_purge_length=20 +acceleration_support_bottom=300 +material_break_preparation_speed=2 +material_alternate_walls=False +machine_shape=rectangular +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +bridge_wall_min_length=1.6 +experimental=0 +prime_tower_position_x=138.8 +bridge_skin_speed_2=55 +top_bottom_extruder_nr=-1 +resolution=0 +raft_surface_fan_speed=0 +speed_wall_0=45 +cool_lift_head=False +machine_extruders_share_heater=False +raft_interface_acceleration=300 +ironing_flow=10.0 +jerk_topbottom=12.5 +remove_empty_first_layers=True +support_mesh=False +support_roof_pattern=lines +travel_speed=500 +speed=0 +material_print_temperature=260 +min_even_wall_line_width=0.4 +interlocking_boundary_avoidance=2 +support_tower_roof_angle=0 +extruder_prime_pos_z=0 +acceleration_infill=300 +travel_avoid_supports=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +raft_interface_line_width=1.2 +small_skin_on_surface=False +support_use_towers=False +support_extruder_nr_layer_0=0 +meshfix_maximum_travel_resolution=0.8 +machine_nozzle_id=1XA +speed_equalize_flow_width_factor=0 +acceleration_travel_layer_0=5000 +wipe_brush_pos_x=100 +speed_z_hop=10 +command_line_settings=0 +z_seam_relative=False +retraction_combing_max_distance=25.0 +machine_always_write_active_tool=False +z_seam_x=205.0 +draft_shield_height=10 +infill_line_distance=2.0 +minimum_bottom_area=1.0 +raft_speed=15 +mold_angle=40 +raft_surface_line_width=0.4 +support_bottom_material_flow=97 +raft_base_extruder_nr=0 +acceleration_wall=300 +acceleration_travel=5000 +ironing_enabled=False +meshfix_fluid_motion_small_distance=0.01 +speed_support_bottom=55 +acceleration_wall_0_roofing=300 +material_extrusion_cool_down_speed=0.7 +raft_base_line_spacing=2.8 +speed_support_infill=96.0 +max_extrusion_before_wipe=10 +cool_min_layer_time_fan_speed_max=11 +ooze_shield_dist=2 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +support_tree_bp_diameter=7.5 +support_roof_height=1.015 +material_bed_temperature_layer_0=95 +support_infill_sparse_thickness=0.2 +support_line_width=0.3 +ooze_shield_enabled=False +retraction_min_travel=1.6 +acceleration_layer_0=300 +wipe_move_distance=20 +cool_fan_speed_min=0 +wall_0_wipe_dist=0 +wall_0_material_flow=97 +meshfix_maximum_extrusion_area_deviation=50000 +speed_roofing=55 +support_bottom_stair_step_height=0 +brim_outside_only=True +material_standby_temperature=180 +brim_replaces_support=True +bridge_skin_density=100 +lightning_infill_overhang_angle=40 +platform_adhesion=0 +machine_disallowed_areas=[[[-204, -160], [204, -160], [204, -154.5], [-204, -154.5]], [[-204, 160], [204, 160], [204, 154.5], [-204, 154.5]], [[-205, -160], [-154.5, -160], [-154.5, 160], [-205, 160]], [[154.5, -160], [205, -160], [205, 160], [154.5, 160]]] +jerk_support_interface=12.5 +wall_transition_angle=10 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +jerk_wall_x_roofing=12.5 +prime_tower_line_width=1 +group_outer_walls=True +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +brim_smart_ordering=True +zig_zaggify_support=True +wipe_hop_enable=True +line_width=0.4 +optimize_wall_printing_order=True +machine_minimum_feedrate=0.0 +speed_support=96.0 +material_anti_ooze_retracted_position=-4 +hole_xy_offset=0 +jerk_print_layer_0=12.5 +skin_overlap_mm=0.0 +small_feature_max_length=0.0 +roofing_pattern=lines +center_object=False +machine_max_acceleration_e=10000 +speed_ironing=36.666666666666664 +raft_interface_extruder_nr=0 +small_feature_speed_factor=50 +material_no_load_move_factor=0.940860215 +raft_surface_line_spacing=0.4 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=97 +bridge_wall_material_flow=97 +bottom_skin_expand_distance=0.8 +acceleration_support_interface=300 +extruders_enabled_count=2 +jerk_travel=12.5 +support_top_distance=0.25 +retraction_hop_after_extruder_switch=True +raft_base_thickness=0.8 +jerk_wall=12.5 +dual=0 +support_bottom_enable=False +support_tree_rest_preference=graceful +material_bed_temperature=95 +prime_tower_min_volume=6 +prime_tower_flow=97 +acceleration_ironing=300 +roofing_material_flow=97 +material_flow=97 +support_offset=0.7 +material_is_support_material=False +raft_acceleration=300 +machine_extruders_share_nozzle=False +support_bottom_height=0.4 +cooling=0 +wall_x_material_flow_roofing=97 +interlocking_depth=2 +machine_nozzle_size=0.4 +quality_changes_name=empty +support_conical_angle=30 +machine_heated_build_volume=True +gradual_support_infill_step_height=0.8 +interlocking_orientation=22.5 +speed_print_layer_0=30 +wall_x_material_flow_layer_0=95.0 +top_skin_expand_distance=0.8 +top_bottom=0 +prime_tower_enable=False +travel=0 +jerk_roofing=12.5 +anti_overhang_mesh=False +cool_min_layer_time=6 +machine_width=410 +machine_max_feedrate_x=299792458000 +support_tree_angle=50 +machine_max_jerk_z=0.4 +roofing_line_width=0.4 +machine_depth=320 +bridge_settings_enabled=True +wall_transition_filter_distance=100 +raft_interface_fan_speed=0.0 +bridge_wall_coast=0 +infill=0 +jerk_wall_x=12.5 +min_wall_line_width=0.4 +retraction_prime_speed=5 +z_seam_type=sharpest_corner +wall_line_width=0.4 +ironing_line_spacing=0.1 +speed_wall_0_roofing=45 +roofing_angles=[] +jerk_ironing=12.5 +support_roof_offset=0 +material_print_temp_prepend=True +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_max_feedrate_y=299792458000 +support_roof_material_flow=97 +alternate_carve_order=True +adaptive_layer_height_threshold=0.2 +default_material_bed_temperature=95 +raft_jerk=12.5 +support_tree_branch_reach_limit=30 +wipe_retraction_retract_speed=5 +multiple_mesh_overlap=0 +support_tree_limit_branch_reach=True +skin_angles=[] +machine_steps_per_mm_z=50 +top_layers=5 +infill_overlap=0 +support_interface_material_flow=97 +retract_at_layer_change=False +wall_transition_length=0.4 +material_flow_temp_graph=[[3.5, 200],[7.0, 240]] +conical_overhang_enabled=False +raft_surface_acceleration=300 +skirt_line_count=1 +material_id=empty_material +retraction_count_max=100 +extruder_prime_pos_y=0 +raft_base_jerk=12.5 +infill_randomize_start_location=False +mesh_position_y=0 +bridge_skin_material_flow_2=97 +machine_max_acceleration_x=9000 +speed_support_interface=55 +prime_tower_wipe_enabled=True +top_bottom_thickness=1.0 +jerk_infill=12.5 +draft_shield_height_limitation=full +layer_height_0=0.2 +jerk_print=12.5 +raft_remove_inside_corners=False +support_pattern=lines +infill_support_angle=40 +raft_base_acceleration=300 +wall_extruder_nr=-1 +raft_base_wall_count=1 +material_flush_purge_speed=0.5 +gradual_infill_steps=0 +speed_print=120.0 +top_bottom_pattern_0=lines +flow_rate_max_extrusion_offset=0 +material_diameter=1.75 +initial_extruder_nr=0 +meshfix_union_all_remove_holes=False +jerk_wall_0_roofing=12.5 +material_break_speed=25 +support_brim_width=1.2000000000000002 +machine_nozzle_head_distance=3 +infill_offset_x=0 +acceleration_print_layer_0=300 +travel_avoid_other_parts=False +support_enable=True +prime_tower_brim_enable=True +meshfix_fluid_motion_angle=15 +top_skin_preshrink=0 +wipe_hop_speed=10 +date=20-11-2023 +material_brand=empty_brand +prime_blob_enable=False +skirt_brim_extruder_nr=0 +acceleration_wall_0=300 +support_mesh_drop_down=True +machine_steps_per_mm_x=50 +retraction_speed=5 +wall_x_material_flow=97 +min_skin_width_for_expansion=6.123233995736766e-17 +print_temperature=210 +support_interface_offset=0 +material_name=empty +support_bottom_extruder_nr=0 +machine_heat_zone_length=16 \ No newline at end of file diff --git a/stress_benchmark/resources/012.wkt b/stress_benchmark/resources/012.wkt new file mode 100644 index 0000000000..bb3157ce63 --- /dev/null +++ b/stress_benchmark/resources/012.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((1571 -49975, 2466 -52292, 3140 -49901, 4107 -52189, 4705 -49778, 5745 -52034, 6267 -49606, 7376 -51828, 7822 -49384, 9001 -51570, 9369 -49114, 10616 -51262, 10907 -48796, 12221 -50904, 12434 -48429, 13814 -50495, 13950 -48015, 15393 -50036, 15451 -47553, 16957 -49528, 16937 -47044, 18504 -48971, 18406 -46489, 20034 -48365, 19858 -45888, 21543 -47712, 21289 -45241, 23031 -47012, 22700 -44550, 24496 -46265, 24088 -43815, 25937 -45473, 25452 -43037, 27353 -44636, 26791 -42216, 28741 -43755, 28104 -41354, 30102 -42830, 29389 -40451, 31432 -41863, 30645 -39508, 32731 -40855, 31871 -38526, 33999 -39807, 33066 -37506, 35232 -38720, 34227 -36449, 36431 -37594, 35355 -35355, 37594 -36431, 36449 -34227, 38720 -35232, 37506 -33066, 39807 -33999, 38526 -31871, 40856 -32731, 39508 -30645, 41863 -31432, 40451 -29389, 42830 -30101, 41354 -28104, 43755 -28741, 42216 -26791, 44636 -27353, 43037 -25452, 45473 -25937, 43815 -24088, 46265 -24496, 44550 -22699, 47012 -23031, 45242 -21289, 47712 -21543, 45888 -19857, 48365 -20034, 46489 -18406, 48971 -18504, 47044 -16937, 49528 -16957, 47553 -15451, 50036 -15393, 48015 -13950, 50495 -13814, 48429 -12434, 50904 -12221, 48796 -10907, 51262 -10616, 49114 -9369, 51570 -9000, 49384 -7822, 51828 -7376, 49606 -6267, 52034 -5745, 49778 -4705, 52189 -4107, 49901 -3139, 52292 -2466, 49975 -1571, 52344 -822, 50000 0, 52344 822, 49975 1571, 52292 2466, 49901 3140, 52189 4107, 49778 4705, 52034 5745, 49606 6267, 51828 7376, 49384 7822, 51570 9001, 49114 9369, 51262 10616, 48796 10907, 50904 12221, 48429 12434, 50495 13814, 48015 13950, 50036 15393, 47553 15451, 49528 16957, 47044 16937, 48971 18504, 46489 18406, 48365 20034, 45888 19858, 47712 21543, 45241 21289, 47012 23031, 44550 22700, 46265 24496, 43815 24088, 45473 25937, 43037 25452, 44636 27353, 42216 26791, 43755 28741, 41354 28104, 42830 30102, 40451 29389, 41863 31432, 39508 30645, 40855 32731, 38526 31871, 39807 33999, 37506 33066, 38720 35232, 36449 34227, 37594 36431, 35355 35355, 36431 37594, 34227 36449, 35232 38720, 33066 37506, 33999 39807, 31871 38526, 32731 40856, 30645 39508, 31432 41863, 29389 40451, 30101 42830, 28104 41354, 28741 43755, 26791 42216, 27353 44636, 25452 43037, 25937 45473, 24088 43815, 24496 46265, 22699 44550, 23031 47012, 21289 45242, 21543 47712, 19857 45888, 20034 48365, 18406 46489, 18504 48971, 16937 47044, 16957 49528, 15451 47553, 15393 50036, 13950 48015, 13814 50495, 12434 48429, 12221 50904, 10907 48796, 10616 51262, 9369 49114, 9000 51570, 7822 49384, 7376 51828, 6267 49606, 5745 52034, 4705 49778, 4107 52189, 3139 49901, 2466 52292, 1571 49975, 822 52344, 0 50000, -822 52344, -1571 49975, -2466 52292, -3140 49901, -4107 52189, -4705 49778, -5745 52034, -6267 49606, -7376 51828, -7822 49384, -9001 51570, -9369 49114, -10616 51262, -10907 48796, -12221 50904, -12434 48429, -13814 50495, -13950 48015, -15393 50036, -15451 47553, -16957 49528, -16937 47044, -18504 48971, -18406 46489, -20034 48365, -19858 45888, -21543 47712, -21289 45241, -23031 47012, -22700 44550, -24496 46265, -24088 43815, -25937 45473, -25452 43037, -27353 44636, -26791 42216, -28741 43755, -28104 41354, -30102 42830, -29389 40451, -31432 41863, -30645 39508, -32731 40855, -31871 38526, -33999 39807, -33066 37506, -35232 38720, -34227 36449, -36431 37594, -35355 35355, -37594 36431, -36449 34227, -38720 35232, -37506 33066, -39807 33999, -38526 31871, -40856 32731, -39508 30645, -41863 31432, -40451 29389, -42830 30101, -41354 28104, -43755 28741, -42216 26791, -44636 27353, -43037 25452, -45473 25937, -43815 24088, -46265 24496, -44550 22699, -47012 23031, -45242 21289, -47712 21543, -45888 19857, -48365 20034, -46489 18406, -48971 18504, -47044 16937, -49528 16957, -47553 15451, -50036 15393, -48015 13950, -50495 13814, -48429 12434, -50904 12221, -48796 10907, -51262 10616, -49114 9369, -51570 9000, -49384 7822, -51828 7376, -49606 6267, -52034 5745, -49778 4705, -52189 4107, -49901 3139, -52292 2466, -49975 1571, -52344 822, -50000 0, -52344 -822, -49975 -1571, -52292 -2466, -49901 -3140, -52189 -4107, -49778 -4705, -52034 -5745, -49606 -6267, -51828 -7376, -49384 -7822, -51570 -9001, -49114 -9369, -51262 -10616, -48796 -10907, -50904 -12221, -48429 -12434, -50495 -13814, -48015 -13950, -50036 -15393, -47553 -15451, -49528 -16957, -47044 -16937, -48971 -18504, -46489 -18406, -48365 -20034, -45888 -19858, -47712 -21543, -45241 -21289, -47012 -23031, -44550 -22700, -46265 -24496, -43815 -24088, -45473 -25937, -43037 -25452, -44636 -27353, -42216 -26791, -43755 -28741, -41354 -28104, -42830 -30102, -40451 -29389, -41863 -31432, -39508 -30645, -40855 -32731, -38526 -31871, -39807 -33999, -37506 -33066, -38720 -35232, -36449 -34227, -37594 -36431, -35355 -35355, -36431 -37594, -34227 -36449, -35232 -38720, -33066 -37506, -33999 -39807, -31871 -38526, -32731 -40856, -30645 -39508, -31432 -41863, -29389 -40451, -30101 -42830, -28104 -41354, -28741 -43755, -26791 -42216, -27353 -44636, -25452 -43037, -25937 -45473, -24088 -43815, -24496 -46265, -22699 -44550, -23031 -47012, -21289 -45242, -21543 -47712, -19857 -45888, -20034 -48365, -18406 -46489, -18504 -48971, -16937 -47044, -16957 -49528, -15451 -47553, -15393 -50036, -13950 -48015, -13814 -50495, -12434 -48429, -12221 -50904, -10907 -48796, -10616 -51262, -9369 -49114, -9000 -51570, -7822 -49384, -7376 -51828, -6267 -49606, -5745 -52034, -4705 -49778, -4107 -52189, -3139 -49901, -2466 -52292, -1571 -49975, -822 -52344, 0 -50000, 822 -52344) (-449 -28579, -942 -29985, -1346 -28551, -1884 -29941, -2243 -28494, -2823 -29867, -3136 -28410, -3760 -29763, -4027 -28297, -4693 -29631, -4914 -28157, -5621 -29469, -5796 -27989, -6544 -29277, -6672 -27793, -7461 -29057, -7542 -27569, -8370 -28809, -8404 -27319, -9270 -28532, -9258 -27042, -10162 -28226, -10103 -26737, -11044 -27893, -10938 -26407, -11914 -27533, -11762 -26050, -12773 -27145, -12575 -25668, -13620 -26730, -13375 -25260, -14453 -26289, -14161 -24828, -15271 -25822, -14934 -24371, -16075 -25330, -15693 -23889, -16862 -24812, -16435 -23385, -17633 -24271, -17162 -22857, -18387 -23705, -17871 -22307, -19123 -23115, -18563 -21734, -19839 -22503, -19236 -21141, -20536 -21869, -19891 -20526, -21213 -21213, -20526 -19891, -21869 -20536, -21141 -19236, -22503 -19839, -21734 -18563, -23115 -19123, -22307 -17871, -23705 -18387, -22857 -17162, -24270 -17633, -23385 -16435, -24812 -16862, -23889 -15693, -25330 -16075, -24371 -14934, -25822 -15271, -24828 -14161, -26289 -14453, -25260 -13375, -26730 -13620, -25668 -12575, -27145 -12773, -26050 -11762, -27533 -11914, -26407 -10938, -27893 -11044, -26737 -10103, -28226 -10162, -27042 -9258, -28532 -9271, -27319 -8404, -28809 -8370, -27569 -7542, -29057 -7461, -27793 -6672, -29277 -6544, -27989 -5796, -29469 -5621, -28157 -4914, -29631 -4693, -28297 -4027, -29763 -3760, -28410 -3137, -29867 -2823, -28494 -2243, -29941 -1884, -28551 -1346, -29985 -942, -28579 -449, -30000 0, -28579 449, -29985 942, -28551 1346, -29941 1884, -28494 2243, -29867 2823, -28410 3136, -29763 3760, -28297 4027, -29631 4693, -28157 4914, -29469 5621, -27989 5796, -29277 6544, -27793 6672, -29057 7461, -27569 7542, -28809 8370, -27319 8404, -28532 9270, -27042 9258, -28226 10162, -26737 10103, -27893 11044, -26407 10938, -27533 11914, -26050 11762, -27145 12773, -25668 12575, -26730 13620, -25260 13375, -26289 14453, -24828 14161, -25822 15271, -24371 14934, -25330 16075, -23889 15693, -24812 16862, -23385 16435, -24271 17633, -22857 17162, -23705 18387, -22307 17871, -23115 19123, -21734 18563, -22503 19839, -21141 19236, -21869 20536, -20526 19891, -21213 21213, -19891 20526, -20536 21869, -19236 21141, -19839 22503, -18563 21734, -19123 23115, -17871 22307, -18387 23705, -17162 22857, -17633 24270, -16435 23385, -16862 24812, -15693 23889, -16075 25330, -14934 24371, -15271 25822, -14161 24828, -14453 26289, -13375 25260, -13620 26730, -12575 25668, -12773 27145, -11762 26050, -11914 27533, -10938 26407, -11044 27893, -10103 26737, -10162 28226, -9258 27042, -9271 28532, -8404 27319, -8370 28809, -7542 27569, -7461 29057, -6672 27793, -6544 29277, -5796 27989, -5621 29469, -4914 28157, -4693 29631, -4027 28297, -3760 29763, -3137 28410, -2823 29867, -2243 28494, -1884 29941, -1346 28551, -942 29985, -449 28579, 0 30000, 449 28579, 942 29985, 1346 28551, 1884 29941, 2243 28494, 2823 29867, 3136 28410, 3760 29763, 4027 28297, 4693 29631, 4914 28157, 5621 29469, 5796 27989, 6544 29277, 6672 27793, 7461 29057, 7542 27569, 8370 28809, 8404 27319, 9270 28532, 9258 27042, 10162 28226, 10103 26737, 11044 27893, 10938 26407, 11914 27533, 11762 26050, 12773 27145, 12575 25668, 13620 26730, 13375 25260, 14453 26289, 14161 24828, 15271 25822, 14934 24371, 16075 25330, 15693 23889, 16862 24812, 16435 23385, 17633 24271, 17162 22857, 18387 23705, 17871 22307, 19123 23115, 18563 21734, 19839 22503, 19236 21141, 20536 21869, 19891 20526, 21213 21213, 20526 19891, 21869 20536, 21141 19236, 22503 19839, 21734 18563, 23115 19123, 22307 17871, 23705 18387, 22857 17162, 24270 17633, 23385 16435, 24812 16862, 23889 15693, 25330 16075, 24371 14934, 25822 15271, 24828 14161, 26289 14453, 25260 13375, 26730 13620, 25668 12575, 27145 12773, 26050 11762, 27533 11914, 26407 10938, 27893 11044, 26737 10103, 28226 10162, 27042 9258, 28532 9271, 27319 8404, 28809 8370, 27569 7542, 29057 7461, 27793 6672, 29277 6544, 27989 5796, 29469 5621, 28157 4914, 29631 4693, 28297 4027, 29763 3760, 28410 3137, 29867 2823, 28494 2243, 29941 1884, 28551 1346, 29985 942, 28579 449, 30000 0, 28579 -449, 29985 -942, 28551 -1346, 29941 -1884, 28494 -2243, 29867 -2823, 28410 -3136, 29763 -3760, 28297 -4027, 29631 -4693, 28157 -4914, 29469 -5621, 27989 -5796, 29277 -6544, 27793 -6672, 29057 -7461, 27569 -7542, 28809 -8370, 27319 -8404, 28532 -9270, 27042 -9258, 28226 -10162, 26737 -10103, 27893 -11044, 26407 -10938, 27533 -11914, 26050 -11762, 27145 -12773, 25668 -12575, 26730 -13620, 25260 -13375, 26289 -14453, 24828 -14161, 25822 -15271, 24371 -14934, 25330 -16075, 23889 -15693, 24812 -16862, 23385 -16435, 24271 -17633, 22857 -17162, 23705 -18387, 22307 -17871, 23115 -19123, 21734 -18563, 22503 -19839, 21141 -19236, 21869 -20536, 20526 -19891, 21213 -21213, 19891 -20526, 20536 -21869, 19236 -21141, 19839 -22503, 18563 -21734, 19123 -23115, 17871 -22307, 18387 -23705, 17162 -22857, 17633 -24270, 16435 -23385, 16862 -24812, 15693 -23889, 16075 -25330, 14934 -24371, 15271 -25822, 14161 -24828, 14453 -26289, 13375 -25260, 13620 -26730, 12575 -25668, 12773 -27145, 11762 -26050, 11914 -27533, 10938 -26407, 11044 -27893, 10103 -26737, 10162 -28226, 9258 -27042, 9271 -28532, 8404 -27319, 8370 -28809, 7542 -27569, 7461 -29057, 6672 -27793, 6544 -29277, 5796 -27989, 5621 -29469, 4914 -28157, 4693 -29631, 4027 -28297, 3760 -29763, 3137 -28410, 2823 -29867, 2243 -28494, 1884 -29941, 1346 -28551, 942 -29985, 449 -28579, 0 -30000))) \ No newline at end of file diff --git a/stress_benchmark/resources/013.settings b/stress_benchmark/resources/013.settings new file mode 100644 index 0000000000..a78ed7616e --- /dev/null +++ b/stress_benchmark/resources/013.settings @@ -0,0 +1,628 @@ +material_bed_temperature=55 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=2.4 +clean_between_layers=False +support_interface_skip_height=0.1 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=10 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=3 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=120 +support_bottom_height=0.8 +raft_acceleration=350 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +cool_min_speed=12 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=190 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=350 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.1 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.4000240002400024 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=350 +speed_travel=100 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.1 +material_bed_temperature_layer_0=70 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=30 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=13.333333333333334 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=350 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.4 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=350 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=22.5 +bottom_thickness=1.2 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=6 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=190 +brim_gap=0 +acceleration_support_infill=350 +support_meshes_present=False +travel_avoid_distance=0.638 +raft_interface_speed=16.875 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=10 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150.0 +acceleration_topbottom=350 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=40 +skin_overlap=10.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=100 +skin_material_flow_layer_0=101 +bridge_skin_material_flow_2=100 +speed_support_interface=20 +machine_max_acceleration_x=500 +support_interface_height=0.8 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=8 +blackmagic=0 +speed_wall_x_roofing=35 +material_print_temperature_layer_0=200 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=2.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=350 +interlocking_orientation=22.5 +speed_wall_0_roofing=30 +sub_div_rad_add=0.4 +bottom_skin_preshrink=2.4 +minimum_bottom_area=10 +infill_line_distance=0.40404040404040403 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=36.666666666666664 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=55 +raft_base_speed=16.875 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=12 +skirt_brim_material_flow=100 +acceleration_support_roof=350 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=250 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=30 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=8 +mold_angle=40 +raft_speed=22.5 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=350 +cool_min_temperature=190 +jerk_layer_0=8 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.1 +fill_outline_gaps=False +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=8 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=225 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=101 +material_final_print_temperature=190 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=350 +meshfix=0 +material_flow_layer_0=101 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=12 +roofing_layer_count=0 +speed_slowdown_layers=1 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=12 +lightning_infill_straightening_angle=40 +speed_topbottom=20 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=55 +expand_skins_expand_distance=2.4 +prime_tower_position_y=195.562 +mesh_position_x=0 +cross_infill_pocket_size=0.40404040404040403 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=1.2000000000000002 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=350 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=350 +minimum_support_area=2 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=60 +z_seam_x=112.5 +acceleration_travel=500 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=350 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=8 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=350 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=215.562 +bridge_wall_min_length=2.2 +experimental=0 +bottom_layers=8 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=lines +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=350 +material_end_of_filament_purge_length=20 +speed_print=45 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=350 +carve_multiple_volumes=False +raft_surface_thickness=0.1 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=99 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=101 +speed_print_layer_0=20 +raft_jerk=8 +speed_support=30 +jerk_support_interface=8 +machine_disallowed_areas=[] +minimum_roof_area=10 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=55 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=2.4 +acceleration_ironing=350 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=20 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=grid +support_roof_height=0.8 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1.2 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=350 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.4000240002400024 +brim_line_count=15 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=350 +wall_transition_angle=10 +top_thickness=1.2 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=15.0 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.1 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=90 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.4 +machine_extruders_share_nozzle=False +acceleration_prime_tower=350 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=100 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=190 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=350 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=35 +time=09:20:33 +machine_buildplate_type=glass +top_layers=8 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=2.4 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.15000000000000002 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=20 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=20 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=20 +material_bed_temp_wait=True +machine_depth=225 +bridge_wall_material_flow=50 +jerk_travel=10 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=225 +bottom_skin_expand_distance=2.4 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=22.5 +material_name=empty +acceleration_wall_0=350 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/013.wkt b/stress_benchmark/resources/013.wkt new file mode 100644 index 0000000000..262d510e32 --- /dev/null +++ b/stress_benchmark/resources/013.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61237 123699, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60720 108165, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394) (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009) (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119) (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016) (97747 161636, 98038 161957, 98138 161655, 97891 161358) (137167 158299, 137516 158370, 137528 158041, 137367 157993) (164383 121157, 164460 121458, 164643 121522, 164651 121052) (165315 113634, 165369 114218, 165799 114380, 165940 113417) (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362) (164371 103476, 164497 103574, 164952 103288, 164357 103226) (164030 102190, 164349 102398, 164361 101710) (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934) (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309) (161996 97262, 161982 97442, 162590 97623, 162361 97115) (62940 96740, 63290 97296, 63423 96919, 63229 96594) (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965) (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208) (67036 87741, 67287 87743, 67496 87568, 67116 87236) (157512 86791, 157894 87140, 157806 86746, 157543 86569) (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984) (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507) (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079) (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586) (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654) (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025) (87096 68038, 87328 67948, 87495 67797, 87062 67638) (88318 67155, 89083 66978, 88634 66696) (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269) (110797 62370, 110959 62617, 111135 62607, 111268 62228)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696))) \ No newline at end of file diff --git a/stress_benchmark/resources/014.settings b/stress_benchmark/resources/014.settings new file mode 100644 index 0000000000..cfc003e2af --- /dev/null +++ b/stress_benchmark/resources/014.settings @@ -0,0 +1,628 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=1.2000000000000002 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=8 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=140 +support_bottom_height=1 +raft_acceleration=1000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.1 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.6666666666666665 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=195 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6 +material_break_temperature=50 +acceleration_support_interface=1000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=1000 +speed_travel=100 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.6800000000000002 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=40 +retraction_amount=6 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=45 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=30.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=1000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=1000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=80 +bottom_thickness=1.6 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.02 +small_feature_max_length=0.0 +wall_line_count=3 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=195 +brim_gap=0 +acceleration_support_infill=1000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=30.0 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=10.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=100 +acceleration_topbottom=1000 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=80 +skin_overlap=5 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=95 +skin_material_flow_layer_0=120 +bridge_skin_material_flow_2=100 +speed_support_interface=53.333333333333336 +machine_max_acceleration_x=9000 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=concentric +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=95 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=80 +material_print_temperature_layer_0=0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=2.6666666666666665 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=1000 +interlocking_orientation=22.5 +speed_wall_0_roofing=45 +sub_div_rad_add=0.4 +bottom_skin_preshrink=1.2000000000000002 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=50 +raft_base_speed=30.0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=22.5 +skirt_brim_material_flow=95 +acceleration_support_roof=1000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=452 +prime_tower_base_size=7 +infill_enable_travel_optimization=False +speed_support_infill=80 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=40 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=0.075 +jerk_wall_0=8 +mold_angle=40 +raft_speed=40.0 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=1000 +cool_min_temperature=195 +jerk_layer_0=8 +support_offset=0.8 +material_flow=95 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.2 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=0.075 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=402 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=40 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=120 +material_final_print_temperature=195 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=1000 +meshfix=0 +material_flow_layer_0=120 +retraction_combing=all +wall_material_flow=95 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=20 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=22.5 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=195 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.625 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=22.5 +lightning_infill_straightening_angle=40 +speed_topbottom=45 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=40 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=1.2000000000000002 +prime_tower_position_y=380.575 +mesh_position_x=0 +cross_infill_pocket_size=6.0 +interlocking_enable=False +support_tree_top_rate=10 +wall_line_width_0=0.4 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.1 +wall_thickness=1.2 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=1000 +minimum_support_area=0.0 +brim_width=7 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=none +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=0 +z_seam_x=110 +acceleration_travel=3000 +ironing_enabled=False +support_bottom_material_flow=95 +acceleration_wall=1000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=concentric +initial_bottom_layers=8 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +retraction_hop_enabled=True +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=40 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=400.575 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=8 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=trihexagon +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +speed_print=80 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=1000 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=3000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=95 +support_bottom_density=100 +bridge_skin_density_3=80 +support_interface_enable=False +support_roof_wall_count=0 +infill_sparse_density=20 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=120 +speed_print_layer_0=45 +raft_jerk=8 +speed_support=80 +jerk_support_interface=8 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=1.2000000000000002 +acceleration_ironing=1000 +prime_tower_flow=95 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=95 +speed_prime_tower=80 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=95 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=40 +support_bottom_pattern=concentric +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1.2 +min_skin_width_for_expansion=9.797174393178826e-17 +wall_x_material_flow=95 +infill_material_flow=95 +ironing_monotonic=False +retraction_extrusion_window=6 +support_fan_enable=False +infill_wipe_dist=0.1 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=1000 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=0.4 +brim_line_count=13 +interlocking_depth=2 +wall_x_material_flow_roofing=95 +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=1000 +wall_transition_angle=10 +top_thickness=1.6 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=22.5 +support_roof_enable=False +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=1 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=100 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=95 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +acceleration_prime_tower=1000 +retraction_hop_after_extruder_switch_height=0.075 +skirt_gap=3 +wall_0_material_flow_roofing=95 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=195 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=1000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=80 +time=09:27:03 +machine_buildplate_type=glass +top_layers=8 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=20 +top_skin_preshrink=1.2000000000000002 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=452 +support_bottom_extruder_nr=0 +speed_support_roof=53.333333333333336 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=45 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=53.333333333333336 +material_bed_temp_wait=True +machine_depth=402 +bridge_wall_material_flow=50 +jerk_travel=10 +retraction_speed=40 +xy_offset=0 +print_temperature=195 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=220 +bottom_skin_expand_distance=1.2000000000000002 +infill_support_angle=40 +speed_layer_0=45 +raft_surface_speed=40.0 +material_name=empty +acceleration_wall_0=1000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/014.wkt b/stress_benchmark/resources/014.wkt new file mode 100644 index 0000000000..8ed5068c15 --- /dev/null +++ b/stress_benchmark/resources/014.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178330 266478, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063) (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100) (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461) (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311) (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451) (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285) (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145110 233058, 145145 232963, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135) (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289) (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984) (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412) (191635 271452, 191672 270912, 191644 270827) (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584) (195319 268434, 195359 268389, 195292 267737) (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436) (194064 265183, 194092 265294, 194114 265233, 194083 264660) (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436) (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312) (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402) (200531 261940, 200542 262429, 200605 262236, 200586 261856) (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163) (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763) (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189) (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706) (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628) (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387) (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208) (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818) (152779 254035, 152788 253354, 152762 253164) (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270) (147828 252238, 148142 252248, 148898 252226) (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785) (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303) (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325) (177741 247708, 177788 248016, 177871 247793, 177806 246927) (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295) (161394 246276, 161461 246563, 161459 246072, 161414 246053) (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920) (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214) (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095) (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959) (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162) (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022) (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662) (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120) (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493) (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155) (174626 236039, 174665 236339, 174709 235883, 174670 235705) (195122 236194, 195104 235803, 195020 235516) (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799) (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980) (200547 234235, 200588 234521, 200566 233909) (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298) (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225) (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017) (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573) (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673) (200033 223536, 200048 224065, 200116 223701, 200099 223374) (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620) (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454) (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267) (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267) (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358) (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948) (201078 216815, 201097 217629, 201189 216818, 201215 215795) (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367) (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443) (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278) (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892) (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039) (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139) (177959 211937, 178042 212199, 178052 212024, 177984 211672) (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236) (175123 211263, 175213 211653, 175328 211270, 175250 210420) (191878 211554, 191958 211491, 191994 211024, 191880 210838) (230714 210796, 230767 211008, 230781 210505) (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066) (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109) (230550 209397, 230559 210069, 230622 209388, 230587 209221) (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237) (174980 208087, 175013 208695, 175121 208086, 175097 207710) (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080) (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180) (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952) (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498) (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590) (177624 200894, 177540 201156, 177746 201129, 177770 200710) (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767) (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191) (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522) (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934) (246067 195478, 246190 196451, 246274 196027, 246253 195475) (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470) (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699) (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595) (227777 193488, 227762 193676, 227823 193903, 227873 193403) (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556) (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399) (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336) (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896) (168227 191871, 168307 192046, 168332 191877, 168278 191366) (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735) (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894) (152945 188667, 153137 188664, 153138 188236, 152929 188115) (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155) (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503) (166399 187422, 166368 188107, 166676 187490, 166678 186793) (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481) (238998 187574, 239100 187565, 239199 187404, 239068 186936) (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231) (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369) (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919) (237962 185970, 237970 185728, 237942 185445) (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946) (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806) (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130) (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292) (203055 183103, 203137 183828, 203247 182992, 203191 182226) (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768) (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659) (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006) (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073) (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840) (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103) (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074) (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294) (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104) (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007) (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268) (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939) (235715 175711, 235729 175444, 235683 175206) (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481) (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976) (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756) (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628) (237360 173322, 237505 173849, 237453 173155, 237302 172512) (227078 173082, 227107 173181, 227176 172962, 227160 172650) (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375) (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958) (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206) (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351) (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263) (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110) (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736) (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388) (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484) (232541 165988, 232596 166130, 232622 166057, 232564 165363) (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566) (226865 164644, 226900 164841, 226953 164611, 226930 163888) (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776) (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761) (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435) (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483) (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400) (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926) (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655) (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687) (193677 158129, 193789 158467, 193915 158060, 193705 157826) (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105) (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465) (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836) (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868) (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277) (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323) (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465) (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433) (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044) (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600) (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689) (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921) (228154 154701, 228263 154148, 228431 153416, 228296 153280) (218220 153687, 218304 154615, 218424 154134, 218369 153474) (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702) (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352) (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236) (191697 151159, 191764 151476, 191807 151160, 191734 150929) (197142 150685, 197357 151127, 197295 150551) (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224) (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488) (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922) (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832) (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259) (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736) (205188 146384, 205271 146845, 205310 146191, 205229 145880) (196238 146293, 196287 146689, 196369 146225) (192471 134099, 192609 134100, 192605 133602, 192463 133570)), ((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170877 212105, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005) (170585 260507, 170848 260843, 170764 260512, 170687 260390) (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967) (170904 254217, 171173 254656, 171452 254235, 171185 254048) (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862) (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656) (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686) (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145) (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414) (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812) (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184) (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992) (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365) (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732) (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679) (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628) (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272) (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047) (230576 263565, 230632 263844, 230699 263777, 230583 263204) (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247) (227542 260216, 227714 260569, 227770 260149, 227523 259902) (227034 259737, 227239 259578, 226970 259439, 226737 259018) (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493) (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410) (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220) (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912) (228722 245362, 228718 245885, 228825 245370, 228806 244950) (230646 245563, 230741 245734, 230764 245708, 230839 245159) (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821) (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064) (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598) (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590) (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440) (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543) (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841) (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232) (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944) (229352 227481, 229362 227548, 229375 227441, 229336 226899) (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444) (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313) (186061 268122, 186061 268817, 186106 268234, 186111 267884) (183755 267542, 183878 268023, 183819 267456, 183773 267390) (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173) (185923 262511, 185925 263176, 186029 262699, 185978 262343)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135) (239951 274986, 240034 274958, 240041 274731, 239984 274504) (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832) (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195) (240112 272144, 240194 272351, 240183 271984, 240137 271853)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213603 236905, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213366 243532, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499) (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443) (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031) (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055) (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876) (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899) (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216) (212215 246286, 212251 246632, 212309 246242, 212276 245297) (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466) (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294) (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221574 200236, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886) (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763) (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661) (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309) (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760) (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490) (223354 258416, 223427 259152, 223375 258378) (220045 253121, 220169 253585, 220165 253125, 220020 252587) (218447 244665, 218498 244992, 218554 244391, 218442 244221) (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983) (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053) (218647 241972, 218647 242211, 218709 242491, 218759 241863) (218661 241275, 218784 241414, 218797 240995, 218702 240782) (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832) (222535 230596, 222651 231465, 222673 230706, 222568 230176) (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566) (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828) (220148 212201, 220146 212837, 220208 212441, 220234 211647) (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167) (223382 206906, 223445 207583, 223418 206839, 223380 206415) (217876 206674, 217887 206958, 217906 206790, 217899 206047) (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195) (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889) (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112) (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908) (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235084 219654, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238134 188573) (240900 240252, 240969 240744, 240992 240253, 240950 239972) (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982) (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022) (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271) (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927) (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038) (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130) (240959 220227, 241188 220935, 241072 220064, 241032 220035) (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446) (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702) (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609) (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467) (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077) (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289) (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773) (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235609 254968, 235488 255769, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211593 235869, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382) (212912 233140, 213125 233207, 213039 232607, 212925 232540) (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030) (212747 225751, 212825 226366, 212765 225625, 212652 224658) (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328) (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624) (212142 211547, 212145 211643, 212214 211075, 212195 210932) (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159) (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930) (209374 193203, 209357 193802, 209467 193918, 209510 193142) (213678 169320, 213752 169432, 213706 168918) (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021) (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062) (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808) (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251) (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301) (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663) (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748) (187888 211959, 187918 212466, 187950 211958, 187923 211687) (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194) (187824 206319, 187819 206833, 187922 206254, 187903 205990) (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580) (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655) (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713) (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515) (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292) (184359 187722, 184404 188292, 184387 187689, 184349 187311) (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491) (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935) (187495 180554, 187553 181290, 187625 180551, 187535 179884) (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648) (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626) (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883) (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047) (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274) (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583))) \ No newline at end of file diff --git a/stress_benchmark/resources/015.settings b/stress_benchmark/resources/015.settings new file mode 100644 index 0000000000..a56803e6fe --- /dev/null +++ b/stress_benchmark/resources/015.settings @@ -0,0 +1,630 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=8 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=1 +raft_acceleration=3000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.1 +meshfix_union_all=True +layer_height_0=0.3 +support_initial_layer_line_distance=2.6666666666666665 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=3000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=3000 +speed_travel=120 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=50.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=33.333333333333336 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=50.0 +bottom_thickness=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.02 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +brim_gap=0 +acceleration_support_infill=3000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=37.5 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=120 +acceleration_topbottom=3000 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=100.0 +skin_overlap=5 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=66.66666666666667 +machine_max_acceleration_x=9000 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=concentric +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=100.0 +material_print_temperature_layer_0=200 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=2.6666666666666665 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3000 +interlocking_orientation=22.5 +speed_wall_0_roofing=50.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=4.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=13.333333333333334 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=0 +raft_base_speed=37.5 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=25.0 +skirt_brim_material_flow=100 +acceleration_support_roof=3000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=265 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=100.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=1 +jerk_wall_0=20 +mold_angle=40 +raft_speed=50.0 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=3000 +cool_min_temperature=200 +jerk_layer_0=20 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=1 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=250 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +quality_name=Draft +material_final_print_temperature=185 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=all +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=25.0 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.6 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=25.0 +lightning_infill_straightening_angle=40 +speed_topbottom=50.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=50.0 +machine_max_jerk_z=0.4 +support_tree_angle=20 +expand_skins_expand_distance=0.8 +prime_tower_position_y=233.575 +mesh_position_x=0 +cross_infill_pocket_size=4.0 +interlocking_enable=False +support_tree_top_rate=10 +wall_line_width_0=0.4 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.1 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=3000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=3000 +minimum_support_area=0.0 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=none +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=0 +z_seam_x=125.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=3000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=concentric +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=3000 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=248.575 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.36 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=zigzag +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=3000 +material_end_of_filament_purge_length=20 +speed_print=100.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=5000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=20 +skin_material_flow=100 +support_bottom_density=100 +bridge_skin_density_3=80 +support_interface_enable=False +support_roof_wall_count=0 +infill_sparse_density=10.0 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=50.0 +raft_jerk=20 +speed_support=100.0 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=3000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=100.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=concentric +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=6.5 +support_fan_enable=False +infill_wipe_dist=0.1 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=3000 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=0.4 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=3000 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=25.0 +support_roof_enable=False +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=1 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=60.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.3 +machine_extruders_share_nozzle=False +acceleration_prime_tower=3000 +retraction_hop_after_extruder_switch_height=1 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=190 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=3000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=20 +speed_wall_x=100.0 +time=09:28:31 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=0 +support_bottom_extruder_nr=0 +speed_support_roof=66.66666666666667 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=50.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=66.66666666666667 +material_bed_temp_wait=True +machine_depth=255 +bridge_wall_material_flow=50 +jerk_travel=30 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=255 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=50.0 +raft_surface_speed=50.0 +material_name=empty +acceleration_wall_0=3000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/015.wkt b/stress_benchmark/resources/015.wkt new file mode 100644 index 0000000000..65775d9826 --- /dev/null +++ b/stress_benchmark/resources/015.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106055 142939, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 117993 180894, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168038, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182729, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185087, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188392, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179725 202985, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163565, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88587 75805, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74490 86790, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56162 103519, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65564 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81135 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628) (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805) (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075) (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384) (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131) (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287) (155600 209489, 155731 209728, 155803 209579, 155857 209278) (155588 208940, 155851 209008, 155784 208741, 155703 208627) (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017) (155679 204372, 155689 204701, 155825 204500, 155860 204252) (155601 201072, 155748 201322, 155870 200999, 155646 200780) (155572 200305, 155641 200567, 155853 200228, 155699 199919) (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340) (155529 199377, 155697 199845, 155833 199458, 155866 199216) (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810) (155517 198935, 155860 198910, 155805 198653, 155699 198472) (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087) (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596) (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067) (155499 197838, 155693 198192, 155789 197957, 155825 197697) (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139) (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263) (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912) (130113 195267, 130122 195398, 130394 195651, 130395 195189) (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211) (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998) (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124) (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934) (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170682 194614, 170729 194628, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849) (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228) (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868) (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575) (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604) (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262) (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055) (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836) (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720) (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659) (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757) (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089) (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881) (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428) (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444) (62442 194433, 62734 194353, 62667 194173, 62344 194085) (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047) (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365) (175714 194126, 175722 194394, 176015 194394, 175964 194107) (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722) (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469) (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345) (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516) (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643) (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138) (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518) (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185) (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402) (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238) (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245) (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118) (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459) (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992) (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007) (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004) (37262 192419, 37268 192670, 37351 192428, 37316 192090) (42281 192071, 42458 192623, 42447 191718) (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070) (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795) (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712) (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520) (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653) (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434) (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364) (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296) (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673) (57410 190727, 57778 190678, 57745 190293, 57421 190132) (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190) (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085) (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790) (31985 189581, 32045 190194, 32004 189439) (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469) (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026) (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747) (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756) (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725) (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231) (170841 188301, 171059 188117, 171000 187936, 170864 187788) (44701 187254, 44704 187604, 44799 187315, 44794 186900) (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383) (57537 186474, 57428 187289, 57676 186550, 57495 186090) (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140) (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432) (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202) (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558) (170825 186705, 170949 186486, 170819 186173) (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923) (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497) (35720 183697, 35761 183560, 35763 183112) (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165499 182809, 165419 182487, 165551 181684, 165408 180939, 165535 180053) (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912) (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416) (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954) (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265) (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871) (44645 180626, 44710 180854, 44769 180714, 44678 180351) (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764) (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572) (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932) (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245) (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119) (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275) (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489) (39530 176961, 39587 176664, 39471 176107) (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278) (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022) (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577) (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137) (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616) (152083 171801, 152018 172261, 152160 171813, 152171 171648) (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488) (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334) (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218) (148457 170801, 148364 171277, 148515 170778) (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086) (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353) (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280) (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670) (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037) (158069 170132, 158053 170419, 158163 170200, 158202 169766) (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438) (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630) (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401) (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802) (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623) (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898) (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164) (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339) (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658) (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520) (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077) (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478) (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238) (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237) (150453 167595, 150416 168031, 150465 168061, 150562 167498) (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038) (44641 167525, 44666 167766, 44751 167554, 44809 166797) (28173 167388, 28287 167762, 28321 167400, 28282 167017) (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505) (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207) (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827) (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927) (136333 166426, 136208 166864, 136338 166428, 136316 166375) (159548 166669, 159763 166369, 159765 166032, 159568 165981) (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826) (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498) (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301) (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208) (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277) (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722) (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680) (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544) (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841) (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398) (42363 164969, 42468 165261, 42485 164622) (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309) (159605 164663, 159603 164750, 160160 163772, 160159 163756) (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198) (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848) (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433) (177401 163625, 177538 164063, 177557 163655, 177477 163564) (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291) (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283) (163316 163542, 163302 163913, 163474 163639, 163504 163416) (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348) (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248) (134976 163447, 135128 163749, 135237 163626, 135248 163274) (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537) (46189 156962, 46282 156684, 46058 156363) (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054) (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180) (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616) (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326) (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501) (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690) (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211) (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690) (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219) (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423) (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982) (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536) (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108) (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550) (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796) (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432) (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303) (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082) (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189) (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177) (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023) (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866) (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766) (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700) (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378) (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093) (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596) (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511) (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581) (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746) (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187) (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181) (74569 149249, 74581 149258, 74769 148808) (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142) (46124 149076, 46217 148908, 46230 148472) (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451) (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483) (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009) (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325) (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838) (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594) (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724) (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870) (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774) (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954) (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712) (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798) (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321) (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911) (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379) (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416) (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726) (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910) (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766) (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077) (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408) (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873) (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548) (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685) (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092) (182863 143594, 183201 143612, 183286 143478, 182775 143100) (200234 143484, 200516 143602, 200647 143370, 200257 143328) (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716) (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630) (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632) (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007) (69390 142136, 69233 142635, 69412 142115, 69226 141773) (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960) (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161) (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881) (202921 141605, 202964 141185, 202941 141081) (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062) (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371) (182757 140117, 182978 139890, 182970 139688, 182756 139415) (46050 139560, 46244 139854, 46241 139565, 46121 139382) (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538) (182758 138438, 182931 138316, 182897 138157, 182758 137977) (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158) (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964) (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870) (72906 134969, 72736 135436, 72941 134937, 72764 134691) (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115) (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195) (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835) (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490) (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454) (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244) (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893) (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024) (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686) (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992) (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420) (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980) (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733) (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039) (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434) (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256) (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841) (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582) (208804 128730, 208921 129178, 208937 128306, 208923 127968) (63990 128884, 63952 129150, 64113 128851, 63954 128684) (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105) (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528) (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582) (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725) (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456) (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885) (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541) (69195 127624, 69365 127599, 69335 127262, 69160 127259) (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201) (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594) (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507) (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355) (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486) (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308) (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472) (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586) (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584) (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661) (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534) (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518) (57307 125677, 57331 125713, 57818 125704, 57827 125535) (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923) (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176) (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370) (95409 74279, 95803 74309, 96000 74157, 95493 73769) (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292) (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130) (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057) (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654) (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368) (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867) (93951 73986, 94226 74112, 94284 73920, 94076 73750) (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123) (98110 71878, 98302 72616, 98266 71965, 98116 71143) (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636) (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554) (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661) (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615) (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436) (98163 65632, 98248 66055, 98212 65657, 98113 64989) (98218 59856, 98262 60034, 98199 59533) (97930 57562, 97989 57883, 98264 57538, 98224 57226) (98274 57069, 98352 56767, 98340 56650, 98212 56572)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210930, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193974 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193366, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92388, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496) (27459 128386, 27528 128768, 27898 128695, 27847 128326)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536)), ((54828 117709, 54891 117423, 55016 117220)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581))) \ No newline at end of file diff --git a/stress_benchmark/resources/016.settings b/stress_benchmark/resources/016.settings new file mode 100644 index 0000000000..63a8d5a7f4 --- /dev/null +++ b/stress_benchmark/resources/016.settings @@ -0,0 +1,627 @@ +material_bed_temperature=50 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=10 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.8 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=5 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=0 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.4000240002400024 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=500 +speed_travel=150.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=50 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=45 +retraction_amount=5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=25.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=50 +speed_ironing=16.666666666666668 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.4 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=25.0 +bottom_thickness=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=5 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=18.75 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=8 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150.0 +acceleration_topbottom=500 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=50.0 +skin_overlap=10.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +support_interface_height=0.8 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=25.0 +material_print_temperature_layer_0=200 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=2.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=25.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=10 +infill_line_distance=12.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=30.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=18.75 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=12.5 +skirt_brim_material_flow=100 +acceleration_support_roof=500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=250 +prime_tower_base_size=5 +infill_enable_travel_optimization=False +speed_support_infill=25.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.5 +jerk_wall_0=8 +mold_angle=40 +raft_speed=25.0 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=200 +jerk_layer_0=8 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=10 +support_join_distance=2.0 +wipe_hop_amount=0.5 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=235 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=180 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=200 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=off +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=12.5 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=12.5 +lightning_infill_straightening_angle=40 +speed_topbottom=25.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=45 +expand_skins_expand_distance=0.8 +prime_tower_position_y=208.575 +mesh_position_x=0 +cross_infill_pocket_size=12.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=2 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=raft +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=117.5 +acceleration_travel=500 +ironing_enabled=True +support_bottom_material_flow=100 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=500 +retraction_hop_enabled=True +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=228.575 +bridge_wall_min_length=1 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=cubic +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=50.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=10 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +raft_jerk=8 +speed_support=25.0 +jerk_support_interface=8 +minimum_roof_area=10 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=50 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=500 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=25.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +support_bottom_pattern=grid +support_roof_height=0.8 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=True +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.4000240002400024 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=12.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=100.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.6000000000000001 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.5 +skirt_gap=10.0 +wall_0_material_flow_roofing=100 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=0 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=200 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=25.0 +time=09:29:32 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=25.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=25.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.1 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=25.0 +material_bed_temp_wait=True +machine_depth=235 +bridge_wall_material_flow=50 +jerk_travel=8 +retraction_speed=45 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=235 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=25.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/016.wkt b/stress_benchmark/resources/016.wkt new file mode 100644 index 0000000000..65562fdd98 --- /dev/null +++ b/stress_benchmark/resources/016.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57046 102692, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114480 102269, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128647 103712, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134311 102779, 134788 103006, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389) (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807) (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519) (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312) (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441) (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451) (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003) (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038) (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333) (189640 132105, 190033 132258, 190139 132148, 189973 132090) (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023) (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912) (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909) (188652 105805, 188679 106125, 189087 106087, 188973 105793) (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606) (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442) (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780) (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425) (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173) (120287 104169, 120666 104304, 120664 104164, 120395 103967) (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644) (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412) (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347) (90511 103764, 90906 103803, 90904 103660, 90610 103549) (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429) (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448) (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310) (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088) (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148) (59468 102800, 59496 102829, 59618 102772) (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file diff --git a/stress_benchmark/resources/017.settings b/stress_benchmark/resources/017.settings new file mode 100644 index 0000000000..dee1eba618 --- /dev/null +++ b/stress_benchmark/resources/017.settings @@ -0,0 +1,628 @@ +material_bed_temperature=60 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.84 +clean_between_layers=False +support_interface_skip_height=0.12 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=3 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=0 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.42 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.96 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.24 +meshfix_union_all=True +layer_height_0=0.12 +support_initial_layer_line_distance=0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=12.0 +wall_overhang_speed_factor=100 +support_roof_line_width=0.42 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=205.0 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=5 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.12 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=12.0 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.5200252002520025 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=500 +speed_travel=150.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.12 +material_bed_temperature_layer_0=65 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=45 +retraction_amount=5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=12.0 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.42 +meshfix_union_all_remove_holes=False +support_wall_count=1 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=25.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=50 +speed_ironing=16.666666666666668 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=tree +support_xy_distance_overhang=0.42 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.42 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.38 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.84 +speed_wall=25.0 +bottom_thickness=0.84 +raft_interface_jerk=12.0 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.12 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=205.0 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=18.75 +jerk_prime_tower=12.0 +skin_outline_count=0 +mold_enabled=False +jerk_travel_layer_0=12.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150.0 +acceleration_topbottom=500 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=60 +skin_overlap=30.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=95.0 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +support_interface_height=0.96 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=outside_in +wall_0_material_flow=95.0 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=30 +material_print_temperature_layer_0=205.0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.42 +jerk_wall_x_roofing=12.0 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=25.0 +sub_div_rad_add=0.42 +bottom_skin_preshrink=0.84 +minimum_bottom_area=10 +infill_line_distance=5.04 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.42 +support_skip_zag_per_mm=20 +support_angle=40 +raft_base_speed=18.75 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.38 +hole_xy_offset=0 +jerk_print_layer_0=12.0 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=12.5 +skirt_brim_material_flow=95.0 +acceleration_support_roof=500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=250 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=25.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=12.0 +mold_angle=40 +raft_speed=25.0 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=205.0 +jerk_layer_0=12.0 +support_offset=0.0 +material_flow=95.0 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.12 +fill_outline_gaps=True +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.04 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=10 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=235 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=180 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.42 +retract_at_layer_change=False +wall_transition_length=0.42 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.84 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=205.0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.42 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=95.0 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.381 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=12.5 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.126 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.24 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=12.5 +lightning_infill_straightening_angle=40 +speed_topbottom=25.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=30 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=0.84 +prime_tower_position_y=203.535 +mesh_position_x=0 +cross_infill_pocket_size=5.04 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.42 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.84 +support_bottom_distance=0 +wall_thickness=1.26 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=0 +brim_width=8.0 +small_skin_width=0.76 +shell=0 +jerk_print=12.0 +adhesion_type=skirt +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=0.0 +acceleration_travel=500 +ironing_enabled=False +support_bottom_material_flow=95.0 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.42 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=7 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=500 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=223.535 +bridge_wall_min_length=2.24 +experimental=0 +bottom_layers=7 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.42 +ooze_shield_enabled=False +raft_base_thickness=0.144 +roofing_extruder_nr=-1 +jerk_support=12.0 +wall_line_width_x=0.42 +support_bottom_wall_count=0 +connect_skin_polygons=True +meshfix_fluid_motion_enabled=True +infill_pattern=cubic +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=50.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.12 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=12.0 +skin_material_flow=95.0 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=25.0 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +raft_jerk=12.0 +speed_support=25.0 +jerk_support_interface=12.0 +minimum_roof_area=10 +raft_surface_jerk=12.0 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=12.0 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.84 +acceleration_ironing=500 +prime_tower_flow=95.0 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=95.0 +speed_prime_tower=25.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=95.0 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +support_bottom_pattern=grid +support_roof_height=0.96 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.84 +min_skin_width_for_expansion=5.143516556418883e-17 +wall_x_material_flow=95.0 +infill_material_flow=95.0 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=concentric +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.5200252002520025 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=95.0 +quality_changes_name=GG_Best_Dragon_1 +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=0.84 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=12.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=12.0 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=2 +infill_mesh=False +layer_height=0.12 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=35 +support_tree_branch_reach_limit=30 +min_feature_size=0.105 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.42 +support_roof_material_flow=95.0 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=12.0 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.36 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=95.0 +jerk_support_roof=12.0 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=True +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=215.0 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=12.0 +speed_wall_x=30 +time=09:31:42 +machine_buildplate_type=glass +top_layers=7 +jerk_ironing=12.0 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.84 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.18 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=25.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=25.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=25.0 +material_bed_temp_wait=True +machine_depth=235 +bridge_wall_material_flow=50 +jerk_travel=12.0 +retraction_speed=45 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.84 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=12.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=0 +bottom_skin_expand_distance=0.84 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=25.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=12.0 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/017.wkt b/stress_benchmark/resources/017.wkt new file mode 100644 index 0000000000..b4544fd166 --- /dev/null +++ b/stress_benchmark/resources/017.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((122284 113666, 123049 114043, 123644 114573, 123807 114741, 124013 114851, 124694 115297, 125303 115758, 125477 115916, 126470 116593, 126877 117068, 127118 117496, 127198 117898, 127150 118483, 126911 119186, 126592 119585, 126417 119840, 126185 120009, 125875 120468, 125791 120830, 125570 121185, 125128 121546, 124505 121795, 123592 122108, 122792 122222, 122110 122359, 121721 122424, 120491 122690, 119083 122846, 117862 122758, 117763 122775, 117366 122773, 116401 122835, 115909 122763, 115524 122727, 114931 122571, 114688 122469, 114006 122066, 113525 121558, 113382 121190, 113331 120902, 113336 120423, 113435 120180, 113374 120162, 113261 119886, 113154 119124, 113056 119101, 112971 119049, 112951 119060, 112876 119015, 112876 117562, 112971 117561, 112971 117581, 113031 117580, 113199 117645, 113050 118095, 113047 118359, 113154 119124, 113313 119161, 113541 119143, 113730 118986, 113813 118820, 113829 118625, 113794 118331, 113720 118108, 113577 117902, 113387 117718, 113199 117645, 113418 116985, 113977 116351, 114630 115714, 115362 115246, 115786 115120, 116516 114855, 116827 114768, 117946 114378, 118613 114172, 118991 114040, 119480 113927, 119738 113857, 120380 113725, 120965 113662, 121646 113640) (121614 114261, 121064 114303, 120370 114429, 119460 114711, 118653 115046, 118123 115255, 117656 115587, 117471 115816, 117219 116158, 117211 116172, 117318 116184, 117780 116466, 118028 116856, 118121 117139, 118359 117797, 118565 118631, 118396 119434, 118187 119501, 117265 119777, 116604 119962, 116111 120021, 115697 120189, 115503 120202, 115046 120688, 114756 120572, 114589 120522, 114404 120312, 113986 119566, 114172 119488, 114407 119307, 114880 119168, 115414 118856, 115515 118521, 115805 118174, 115983 117895, 116510 117229, 116889 116730, 117211 116172, 116544 116099, 114823 116276, 114301 116789, 114029 117705, 113932 118116, 113853 118575, 113966 119530, 113986 119566, 113882 119610, 113707 119727, 113444 120158, 113435 120180, 114589 120522, 114708 120658, 115015 120868, 115439 121034, 115919 121203, 116646 121197, 117222 120978, 117287 120917, 117671 120679, 117893 120404, 118315 119816, 118396 119434, 119119 119201, 120958 118521, 121156 118424, 121146 118347, 121156 118119, 121735 116490, 122179 116091, 122487 115947, 123304 115941, 123897 116077, 123827 116268, 123534 116772, 123219 117125, 122819 117483, 122461 117739, 122053 117985, 121156 118424, 121271 119318, 121374 119471, 121819 120261, 122060 120458, 122199 120633, 122737 120931, 123273 121039, 123624 120983, 124108 120884, 124503 120664, 124823 120383, 125303 119692, 125384 119374, 125532 118648, 125478 117748, 125332 116868, 124898 116307, 123897 116077, 123943 115953, 124020 115582, 124018 115263, 123972 115012, 123840 114774, 123807 114741, 123458 114553, 122968 114387, 122292 114251))) \ No newline at end of file diff --git a/stress_benchmark/resources/018.settings b/stress_benchmark/resources/018.settings new file mode 100644 index 0000000000..e92d385fed --- /dev/null +++ b/stress_benchmark/resources/018.settings @@ -0,0 +1,629 @@ +material_bed_temperature=55 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=10 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.8 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=203.0 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=0 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.4000240002400024 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=500 +speed_travel=150.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=55 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=25.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=16.666666666666668 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.4 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=25.0 +bottom_thickness=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=5.0 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=False +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=203.0 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=18.75 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=8 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150.0 +acceleration_topbottom=500 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=50.0 +skin_overlap=10.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +support_interface_height=0.8 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=25.0 +material_print_temperature_layer_0=203.0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=2.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=25.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=10 +infill_line_distance=17.142857142857142 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=43.333333333333336 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=65.0 +raft_base_speed=18.75 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=12.5 +skirt_brim_material_flow=100 +acceleration_support_roof=500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=340 +prime_tower_base_size=5.0 +infill_enable_travel_optimization=False +speed_support_infill=25.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=8 +mold_angle=40 +raft_speed=25.0 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=203.0 +jerk_layer_0=8 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=10 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=300 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=203.0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=12.5 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=12.5 +lightning_infill_straightening_angle=40 +speed_topbottom=25.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=65.0 +expand_skins_expand_distance=0.8 +prime_tower_position_y=273.575 +mesh_position_x=0 +cross_infill_pocket_size=17.142857142857142 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=2 +brim_width=3 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=raft +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=150.0 +acceleration_travel=500 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=500 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=293.575 +bridge_wall_min_length=2.2 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=cubic +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=50.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=7 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +raft_jerk=8 +speed_support=25.0 +jerk_support_interface=8 +machine_disallowed_areas=[] +minimum_roof_area=10 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=55 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=500 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=25.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=grid +support_roof_height=0.8 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.4000240002400024 +brim_line_count=8 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=12.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=100.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.6000000000000001 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=100 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=0 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=203.0 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=25.0 +time=09:32:51 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=25.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=25.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=25.0 +material_bed_temp_wait=True +machine_depth=300 +bridge_wall_material_flow=50 +jerk_travel=8 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=300 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=25.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/018.wkt b/stress_benchmark/resources/018.wkt new file mode 100644 index 0000000000..6bf799f16d --- /dev/null +++ b/stress_benchmark/resources/018.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((141081 74767, 139636 77164, 138734 78622, 138930 78626, 138596 78845, 138357 79231, 138300 79321, 138304 79324, 138764 79424, 139451 79535, 142110 79915, 141982 79855, 141655 79585, 141469 79233, 141469 78896, 139809 78693, 139071 78628, 138930 78626, 138958 78607, 140775 77476, 141587 77005, 141880 76912, 142155 76872, 142553 76905, 142876 76950, 143745 77097, 145375 77400, 146659 77660, 147211 77782, 147673 77899, 148001 78086, 148047 78174, 148028 78473, 147871 78965, 147712 79401, 147609 79651, 147583 79655, 147254 79658, 146851 79625, 145886 79499, 143608 79182, 143633 79124, 143635 78737, 143448 78377, 143123 78109, 142720 77959, 142300 77965, 141925 78144, 141634 78455, 141469 78838, 141469 78896, 142087 78971, 143608 79182, 143469 79508, 143180 79819, 142805 79999, 142748 80006, 143423 80102, 144866 80295, 146043 80434, 146451 80468, 146906 80478, 147144 80409, 147318 80291, 147493 79930, 147609 79651, 147926 79601, 148244 79455, 148516 79287, 150182 78096, 151043 77527, 151666 77151, 152317 76797, 152649 76634, 152984 76483, 153321 76346, 153659 76225, 153995 76120, 154330 76028, 154987 75884, 155622 75783, 156508 75692, 157046 75662, 157532 75648, 158286 75648, 158571 75663, 158889 75706, 159172 75789, 159439 75895, 159981 76160, 161249 76845, 165147 78983, 165747 79291, 166054 79432, 166371 79550, 166735 79613, 167182 79559, 167799 79441, 169169 79158, 170165 78975, 170407 78965, 170605 79024, 170797 79187, 171003 79486, 171244 79956, 171384 80266, 171714 81056, 172128 82101, 174013 86953, 175420 90540, 176953 94371, 178546 98254, 179748 101101, 181309 104695, 182056 106367, 182770 107934, 183753 110043, 184603 111809, 185282 113164, 185644 113848, 185919 114332, 186170 114709, 186357 114919, 186517 115023, 186672 115055, 186938 115029, 188500 114761, 188797 114726, 188973 114750, 189167 114885, 189337 115073, 189575 115434, 189761 115743, 190236 116597, 194244 124274, 196451 128433, 199325 133767, 204481 143245, 205724 145561, 206981 147940, 208247 150381, 209512 152882, 210769 155438, 212015 158046, 213248 160700, 214463 163393, 215659 166120, 216828 168870, 217971 171636, 219085 174408, 220165 177173, 221210 179922, 222219 182647, 223187 185334, 224113 187971, 224997 190549, 225851 193099, 226633 195490, 227386 197847, 228095 200129, 228764 202337, 229395 204476, 229989 206549, 230550 208561, 231077 210516, 231597 212501, 232048 214272, 232493 216082, 233059 218470, 233703 221298, 234428 224638, 234772 226283, 235426 229526, 235864 231800, 231779 231800, 231243 229069, 230917 227461, 230220 224149, 229491 220854, 229096 219140, 228242 215603, 227779 213772, 227289 211892, 226768 209959, 226216 207968, 225629 205914, 225006 203794, 224344 201604, 223642 199342, 222897 197002, 222108 194583, 221275 192086, 220397 189518, 219477 186889, 218450 184032, 217515 181496, 216482 178756, 215414 176000, 214317 173241, 213193 170492, 211988 167626, 210879 165059, 209651 162292, 208502 159774, 207299 157208, 206093 154701, 204889 152258, 203689 149883, 202504 147576, 201331 145321, 197505 138025, 195071 133318, 193856 130934, 192051 127327, 190830 124845, 189099 121277, 188517 120105, 188107 119325, 187939 119035, 187726 118703, 187553 118511, 187316 118352, 186950 118356, 186289 118419, 185066 118554, 184775 118565, 184510 118473, 184308 118292, 184057 117975, 183906 117754, 183535 117162, 182767 115832, 182052 114550, 180876 112386, 179999 110731, 178606 108022, 177655 106110, 176706 104150, 175780 102171, 175332 101184, 174473 99228, 173675 97321, 172941 95478, 172594 94579, 171947 92834, 171356 91176, 170823 89624, 170346 88184, 169228 84692, 168851 83574, 168661 83081, 168503 82757, 168300 82521, 168114 82478, 167535 82727, 166455 83227, 166001 83414, 165762 83463, 165508 83454, 165144 83324, 164567 83059, 163379 82445, 159201 80220, 158265 79754, 157900 79607, 157531 79511, 157003 79493, 156740 79496, 156274 79529, 155916 79577, 155412 79676, 154860 79846, 154372 80038, 154114 80157, 153571 80440, 153006 80773, 152432 81138, 151594 81706, 149808 82983, 149526 83172, 149192 83352, 148867 83433, 148562 83455, 148195 83439, 147033 83296, 143540 82813, 141898 82605, 140916 82493, 140360 82441, 139962 82417, 139500 82423, 139227 82529, 139075 82640, 138818 82948, 137896 84307, 137446 84946, 137043 85489, 136758 85722, 136513 85729, 136300 85632, 135896 85372, 135526 85116, 134981 84716, 134876 84634, 134786 84771, 133406 86820, 131393 85694, 132948 83442, 134101 81726, 135307 79891, 136390 78210, 137522 76415, 139013 73988))) \ No newline at end of file diff --git a/stress_benchmark/resources/019.settings b/stress_benchmark/resources/019.settings new file mode 100644 index 0000000000..42fd9c7708 --- /dev/null +++ b/stress_benchmark/resources/019.settings @@ -0,0 +1,629 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=10 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.8 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=225.0 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=5 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.4000240002400024 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=500 +speed_travel=200.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=45 +retraction_amount=5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=40.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=26.666666666666668 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.4 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=40.0 +bottom_thickness=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=225.0 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=30.0 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=8 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=200.0 +acceleration_topbottom=500 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=80.0 +skin_overlap=10.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=40.0 +machine_max_acceleration_x=500 +support_interface_height=0.8 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=40.0 +material_print_temperature_layer_0=225.0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=2.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=40.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=10 +infill_line_distance=6.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=30.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=30.0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=20.0 +skirt_brim_material_flow=100 +acceleration_support_roof=500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=305.0 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=40.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=8 +mold_angle=40 +raft_speed=40.0 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=225.0 +jerk_layer_0=8 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=10 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=220 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=180.0 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=225.0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=20.0 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=225.0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=20.0 +lightning_infill_straightening_angle=40 +speed_topbottom=40.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=45 +expand_skins_expand_distance=0.8 +prime_tower_position_y=187.375 +mesh_position_x=0 +cross_infill_pocket_size=6.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=2 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=skirt +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=110.0 +acceleration_travel=500 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=500 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=207.375 +bridge_wall_min_length=2.2 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=cubic +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=80.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=20 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +raft_jerk=8 +speed_support=40.0 +jerk_support_interface=8 +machine_disallowed_areas=[] +minimum_roof_area=10 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=500 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=40.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +support_bottom_pattern=grid +support_roof_height=0.8 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=a55a7c05-b00d-42fc-953e-95b01860e05c +support_roof_line_distance=2.4000240002400024 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=20.0 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=100.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.6000000000000001 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=100 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=225.0 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=40.0 +time=09:34:51 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=40.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=40.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=40.0 +material_bed_temp_wait=True +machine_depth=220 +bridge_wall_material_flow=50 +jerk_travel=8 +retraction_speed=45 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=220 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=40.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/019.wkt b/stress_benchmark/resources/019.wkt new file mode 100644 index 0000000000..df74539f00 --- /dev/null +++ b/stress_benchmark/resources/019.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345) (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378))) \ No newline at end of file diff --git a/stress_benchmark/resources/020.settings b/stress_benchmark/resources/020.settings new file mode 100644 index 0000000000..aa4cb141d8 --- /dev/null +++ b/stress_benchmark/resources/020.settings @@ -0,0 +1,629 @@ +material_bed_temperature=60 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.25 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=4 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.8 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.75 +raft_acceleration=3000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.52 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.25 +meshfix_union_all=True +layer_height_0=0.3 +support_initial_layer_line_distance=4.444444444444445 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.8 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=265 +min_even_wall_line_width=0.68 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=2.0 +material_break_temperature=50 +acceleration_support_interface=3000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.3 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=0.8421052631578947 +support_bottom_stair_step_height=0.25 +acceleration_wall_x_roofing=3000 +speed_travel=500 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.3 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=2.4000000000000004 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=35 +retraction_amount=2.0 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.8 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=60 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=40.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.35 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.8 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.8 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.4 +speed_wall=60 +bottom_thickness=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=1 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.2 +material_break_preparation_temperature=265 +brim_gap=0 +acceleration_support_infill=3000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=30.0 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=120 +acceleration_topbottom=3000 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=80 +skin_overlap=5 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=53.333333333333336 +machine_max_acceleration_x=9000 +support_interface_height=0.75 +skirt_height=3 +support_roof_pattern=concentric +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=70 +material_print_temperature_layer_0=265 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.8 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=4.444444444444445 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=False +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3000 +interlocking_orientation=22.5 +speed_wall_0_roofing=60 +sub_div_rad_add=0.8 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=36.666666666666664 +support_interface_line_width=0.8 +support_skip_zag_per_mm=20 +support_angle=55 +raft_base_speed=30.0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.8 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=30.0 +skirt_brim_material_flow=100 +acceleration_support_roof=3000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=900.0 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=80 +raft_base_line_spacing=3.2 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=35 +wipe_pause=0 +prime_tower_raft_base_line_spacing=3.2 +support_bottom_stair_step_width=5.0 +support_interface_density=95 +retraction_hop=1 +jerk_wall_0=20 +mold_angle=40 +raft_speed=40.0 +prime_tower_wipe_enabled=True +support_roof_density=95 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=3000 +cool_min_temperature=265 +jerk_layer_0=20 +support_offset=1.2000000000000002 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.3 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.8 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=1 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=800.0 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=35 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.8 +retract_at_layer_change=False +wall_transition_length=0.8 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=1.6 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=265 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.8 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.76 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=30.0 +roofing_layer_count=1 +speed_slowdown_layers=1 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.08 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=1.6 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.25 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=30.0 +lightning_infill_straightening_angle=40 +speed_topbottom=60 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=40.0 +machine_max_jerk_z=0.4 +support_tree_angle=55 +expand_skins_expand_distance=0.8 +prime_tower_position_y=770.175 +mesh_position_x=0 +cross_infill_pocket_size=0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.8 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=1.6 +support_bottom_distance=0 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=3000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.68 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=3000 +minimum_support_area=0.0 +brim_width=8.0 +small_skin_width=1.6 +shell=0 +jerk_print=20 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=0 +z_seam_x=-2000 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=3000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.8 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=concentric +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=3000 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=35 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=790.175 +bridge_wall_min_length=1.8 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.4 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.8 +ooze_shield_enabled=False +raft_base_thickness=0.36 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.8 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=grid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=3000 +material_end_of_filament_purge_length=20 +speed_print=80 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +raft_surface_thickness=0.3 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=5000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=20 +skin_material_flow=100 +support_bottom_density=95 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=0 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=40.0 +raft_jerk=20 +speed_support=80 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=3000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=80 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=35 +support_bottom_pattern=concentric +support_roof_height=0.75 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=7.347880794884119e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=2.0 +support_fan_enable=False +infill_wipe_dist=0.2 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.68 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.6 +acceleration_layer_0=3000 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=0.8421052631578947 +brim_line_count=10 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +machine_nozzle_size=0.8 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=3000 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=30.0 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=1 +infill_mesh=False +layer_height=0.3 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=250.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.45 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.8 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=1.6 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.3 +machine_extruders_share_nozzle=False +machine_name=Unknown +acceleration_prime_tower=3000 +retraction_hop_after_extruder_switch_height=1 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=265 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=3000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=18 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=20 +speed_wall_x=70 +time=09:35:50 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.44999999999999996 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=900.0 +support_bottom_extruder_nr=0 +speed_support_roof=53.333333333333336 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=60 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=53.333333333333336 +material_bed_temp_wait=True +machine_depth=800.0 +bridge_wall_material_flow=50 +jerk_travel=30 +retraction_speed=35 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=1.6 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=-2000 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=40.0 +raft_surface_speed=40.0 +material_name=empty +acceleration_wall_0=3000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/020.wkt b/stress_benchmark/resources/020.wkt new file mode 100644 index 0000000000..f60f1015df --- /dev/null +++ b/stress_benchmark/resources/020.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638306 218697, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667462 265342, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144637 556381, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110497 476567, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328987 109107, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357066 103645, 357533 103618, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522) (400683 674518, 401566 674424, 400639 674448, 399705 674415) (411964 674186, 412596 674222, 412700 674223, 413216 674142) (385923 674150, 386021 674161, 386546 674132, 385306 674053) (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119) (426913 673119, 425968 673179, 426948 673183, 427848 673003) (438602 671730, 439015 671711, 439143 671700, 439816 671528) (359520 671499, 359615 671519, 360134 671544, 358926 671349) (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268) (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036) (464477 666755, 465078 666666, 465200 666643, 465668 666477) (333467 666306, 333590 666344, 334294 666450, 333088 666173) (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898) (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553) (489947 659275, 490539 659128, 490654 659094, 491118 658879) (308037 658625, 308165 658678, 308854 658851, 307678 658459) (297180 654514, 297294 654553, 297847 654720, 296527 654178) (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616) (514755 649310, 515163 649167, 515251 649132, 515873 648766) (283468 648526, 283592 648593, 284259 648827, 283128 648326) (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866) (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304) (538301 637063, 538714 636876, 538775 636845, 539366 636409) (259984 636105, 260087 636174, 260737 636470, 259649 635858) (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397) (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725) (560206 622832, 560811 622488, 561205 622128) (238150 621724, 238732 622056, 237724 621354) (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714) (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944) (580945 606363, 581282 606123, 581379 606047, 581861 605520) (217583 605123, 217634 605174, 218227 605599, 217280 604792) (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086) (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236) (600050 587894, 600353 587626, 600455 587528, 600883 586968) (198615 586523, 198674 586594, 199216 587074, 198355 586182) (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618) (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689) (617282 567669, 617549 567381, 617637 567279, 618016 566674) (181533 566183, 181600 566282, 182082 566800, 181317 565838) (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498) (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491) (632472 545884, 632713 545569, 632784 545468, 633104 544827) (166496 544297, 166556 544407, 166983 544964, 166315 543933) (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927) (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842) (645477 522753, 645702 522397, 645750 522312, 646008 521632) (153643 521069, 153692 521183, 154065 521774, 153493 520673) (148515 510047, 148964 510848, 148564 509994, 148216 509114) (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948) (656188 498486, 656382 498104, 656423 498012, 656610 497309) (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107) (139124 485467, 139491 486291, 139182 485417, 138924 484519) (661213 484201, 660894 485080, 661288 484192, 661477 483312) (664534 473170, 664693 472759, 664724 472667, 664840 471952) (134919 471329, 134941 471432, 135202 472107, 134851 470903) (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122) (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878) (670361 447255, 670469 446858, 670498 446735, 670543 446041) (129280 445399, 129291 445497, 129483 446197, 129253 444973) (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929) (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695) (673657 420911, 673724 420512, 673740 420388, 673724 419686) (126168 419016, 126170 419142, 126289 419847, 126178 418610) (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442) (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217) (674394 394384, 674424 393966, 674427 393848, 674342 393146) (125615 392458, 125604 392594, 125653 393304, 125662 392065) (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902) (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684) (672569 367909, 672559 367471, 672552 367368, 672397 366671) (127627 365971, 127602 366106, 127590 366611, 127755 365390) (129291 354503, 129281 354595, 129239 355196, 129484 353786) (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350) (668218 341916, 668141 341217, 667973 340715) (132184 339798, 132150 339917, 132069 340626, 132314 339409) (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653) (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455) (661394 316309, 661265 315754, 660989 315144) (139126 314527, 139018 315049, 139413 313891) (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329) (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168) (652176 291675, 652054 291286, 652012 291170, 651659 290549) (148501 290001, 148293 290657, 148768 289506) (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022) (645713 277747, 646101 278604, 645742 277666, 645274 276921) (640593 267978, 640356 267432, 640296 267307, 640012 266897) (160375 266110, 160323 266191, 160036 266852, 160620 265755) (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841) (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800) (626607 245167, 626415 244822, 626343 244705, 625886 244160) (174441 243579, 174366 243675, 174023 244291, 174700 243270) (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019) (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040) (610693 224149, 610357 223661, 610280 223559, 609919 223204) (190610 222514, 190521 222608, 190124 223184, 190900 222229) (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762) (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846) (592602 204472, 592332 204146, 592264 204071, 591698 203618) (208728 203113, 208635 203194, 208313 203581, 209207 202729) (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257) (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406) (572841 186793, 572529 186482, 572455 186414, 571843 186019) (228626 185554, 228540 185615, 228174 185980, 229158 185210) (238097 178306, 237431 178906, 238166 178343, 238941 177819) (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066) (551335 171024, 550992 170745, 550910 170684, 550270 170357) (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614) (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421) (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767) (528657 157585, 528144 157248, 528041 157186, 527577 157000) (273166 156559, 273079 156598, 272469 156998, 273554 156405) (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084) (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553) (504456 146200, 504094 146012, 503977 145956, 503307 145757) (297296 145446, 297179 145486, 296542 145818, 297691 145329) (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084) (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670) (479437 137295, 479063 137144, 478949 137103, 478258 136966) (322384 136713, 322247 136746, 321590 137012, 322781 136635) (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510) (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211) (453692 130850, 453288 130729, 453197 130706, 452478 130635) (348195 130442, 348057 130461, 347574 130606, 348788 130386) (359597 128481, 358740 128697, 359659 128536, 360595 128430) (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246) (426210 126823, 427460 126921, 426899 126819) (374370 126692, 373874 126795, 375106 126694, 374495 126688) (385118 125975, 386056 125902, 387007 125890, 386010 125837) (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777) (400160 125539, 401369 125559, 400672 125482)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918)), ((699112 404728, 699268 404918, 699360 405248, 699390 405717, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106))) \ No newline at end of file diff --git a/stress_benchmark/resources/021.settings b/stress_benchmark/resources/021.settings new file mode 100644 index 0000000000..bec147df9c --- /dev/null +++ b/stress_benchmark/resources/021.settings @@ -0,0 +1,632 @@ +material_bed_temperature=85 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=0.5 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.15 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=0 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=11 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.3 +raft_acceleration=2500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=True +zig_zaggify_support=True +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.3 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=0 +cool_min_speed=4 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=30 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=1.0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=3 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=2500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=0.6 +infill_sparse_thickness=0.15 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_none +jerk_wall_x=30 +infill=0 +coasting_speed=90 +bridge_skin_density=80 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=2500 +speed_travel=150 +layer_0_z_overlap=0.125 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.15 +material_bed_temperature_layer_0=85 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.04 +wipe_retraction_speed=45 +retraction_amount=6.5 +bridge_skin_density_2=100 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=1 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0.6 +material_diameter=2.85 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=20 +raft_surface_fan_speed=100 +default_material_bed_temperature=85 +speed_ironing=20 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=2500 +wall_extruder_nr=-1 +support_structure=tree +support_xy_distance_overhang=0.2 +skin_angles=[] +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=2500 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=True +support_xy_distance=0.7 +speed_wall=50 +bottom_thickness=1.2 +raft_interface_jerk=30 +material_shrinkage_percentage=100.1 +support_interface_wall_count=1 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.08 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +brim_gap=0.14500000000000002 +acceleration_support_infill=1429 +support_meshes_present=False +travel_avoid_distance=3 +raft_interface_speed=32.5 +jerk_prime_tower=30 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=20.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150 +acceleration_topbottom=2500 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=50 +skin_overlap=20 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=95.0 +skin_material_flow_layer_0=95 +bridge_skin_material_flow_2=95.0 +speed_support_interface=20 +machine_max_acceleration_x=9000 +support_interface_height=0.3 +skirt_height=3 +support_roof_pattern=zigzag +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=100 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=35 +material_print_temperature_layer_0=200 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=30 +machine_max_feedrate_e=45 +retraction_enable=True +support_line_distance=0 +extruder_prime_pos_abs=True +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=2500 +interlocking_orientation=22.5 +speed_wall_0_roofing=20 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.4 +minimum_bottom_area=1.0 +infill_line_distance=5.333333333333333 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=40.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=60 +raft_base_speed=15 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=1.3 +bridge_skin_speed=30 +skirt_brim_material_flow=100 +acceleration_support_roof=2500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=300 +prime_tower_base_size=3 +infill_enable_travel_optimization=False +speed_support_infill=20 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=2 +jerk_wall_0=20 +mold_angle=40 +raft_speed=15 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=True +top_bottom=0 +machine_max_feedrate_z=40 +acceleration_support=1429 +cool_min_temperature=190 +jerk_layer_0=20 +support_offset=0.0 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.15 +fill_outline_gaps=True +meshfix_maximum_resolution=0.7 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=1.9 +raft_interface_line_spacing=0.8 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=6 +support_join_distance=2.0 +wipe_hop_amount=2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=300 +machine_width=330 +extruder_prime_pos_y=6 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=100 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=True +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.6000000000000001 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=110.00000000000001 +quality_name=Normal +material_final_print_temperature=185 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.91 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=False +acceleration_skirt_brim=1000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=infill +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=100 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=50 +roofing_layer_count=1 +speed_slowdown_layers=1 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.25 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.3 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=50 +lightning_infill_straightening_angle=40 +speed_topbottom=50 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=7200 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=35 +machine_max_jerk_z=0.4 +support_tree_angle=60 +expand_skins_expand_distance=0.8 +prime_tower_position_y=214.0 +mesh_position_x=0 +cross_infill_pocket_size=5.333333333333333 +interlocking_enable=True +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=25 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.3 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=0.5 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +raft_surface_acceleration=2500 +minimum_support_area=0.0 +brim_width=7 +small_skin_width=4 +shell=0 +jerk_print=30 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=15 +z_seam_x=80 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=95.0 +acceleration_wall=2500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=95.0 +support_interface_pattern=zigzag +initial_bottom_layers=8 +bridge_fan_speed_2=100 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +retraction_hop_enabled=True +layer_start_y=228.0 +extruder_prime_pos_x=-3 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=False +extruder_prime_pos_z=2 +support_tower_roof_angle=0 +prime_tower_position_x=305 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=8 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.8 +skin_edge_support_layers=4 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.3 +roofing_extruder_nr=-1 +jerk_support=30 +wall_line_width_x=0.4 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=grid +material_alternate_walls=False +material_break_preparation_speed=50 +acceleration_support_bottom=2500 +material_end_of_filament_purge_length=20 +speed_print=50 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=2500 +carve_multiple_volumes=True +raft_surface_thickness=0.15 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=2000.0 +speed_equalize_flow_width_factor=110.0 +wipe_brush_pos_x=100 +jerk_wall_0_roofing=20 +skin_material_flow=95.0 +support_bottom_density=100 +bridge_skin_density_3=100 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=15 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=50 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=95.0 +speed_print_layer_0=35 +raft_jerk=30 +speed_support=20 +jerk_support_interface=30 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=30 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=False +jerk_support_bottom=30 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=85 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=1000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1.0 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=20 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +support_bottom_pattern=zigzag +support_roof_height=0.3 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1.2 +min_skin_width_for_expansion=1.2 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=1 +support_fan_enable=False +infill_wipe_dist=0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=1000 +material_shrinkage_percentage_z=100.1 +material_guid=2433b8fb-dcd6-4e36-9cd5-9f4ee551c04c +support_roof_line_distance=0.4 +brim_line_count=18 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=1000 +wall_transition_angle=10 +top_thickness=1.2 +machine_center_is_zero=False +extruders_enabled_count=2 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=30 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=30 +wall_transition_filter_distance=100 +raft_interface_fan_speed=50.0 +bridge_wall_coast=0 +skirt_line_count=1 +infill_mesh=False +layer_height=0.15 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=150 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=95.0 +machine_max_feedrate_y=300 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +acceleration_prime_tower=1429 +retraction_hop_after_extruder_switch_height=2 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=30 +machine_extruder_count=2 +xy_offset_layer_0=-0.095 +skirt_brim_extruder_nr=-1 +z_seam_relative=True +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=190 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=True +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=2500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=0 +material_shrinkage_percentage_xy=100.1 +bridge_skin_material_flow=95.0 +raft_base_jerk=30 +speed_wall_x=35 +time=09:44:20 +machine_buildplate_type=glass +top_layers=8 +machine_gcode_flavor=Griffin +roofing_angles=[] +jerk_ironing=30 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.4 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.22499999999999998 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=55 +support_bottom_extruder_nr=0 +speed_support_roof=20 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=3000 +speed_roofing=35 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=20 +material_bed_temp_wait=True +machine_depth=240 +bridge_wall_material_flow=100 +jerk_travel=30 +retraction_speed=45 +xy_offset=-0.015 +print_temperature=200 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=30 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=120 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=35 +raft_surface_speed=50 +material_name=empty +acceleration_wall_0=1000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=30 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/021.wkt b/stress_benchmark/resources/021.wkt new file mode 100644 index 0000000000..b50ff734a9 --- /dev/null +++ b/stress_benchmark/resources/021.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((177889 97484, 178963 98582, 180026 99763, 180835 100714, 181606 101663, 182372 102644, 183111 103632, 184234 105213, 185288 106773, 186272 108309, 187170 109769, 187982 111152, 188762 112509, 189519 113859, 190270 115255, 191531 117669, 192150 118889, 193358 121356, 194528 123828, 195895 126814, 197454 130332, 198899 133686, 200251 136869, 205262 148813, 205263 148813, 206731 152368, 207615 154523, 207611 154523, 208479 156683, 209333 158837, 210354 161475, 211358 164120, 211354 164120, 212161 166302, 212968 168534, 212969 168534, 213765 170805, 214523 173044, 215185 175067, 215833 177127, 215832 177127, 216457 179201, 216758 180244, 217210 181869, 217645 183572, 217732 183641, 216888 183642, 216039 180958, 216037 180958, 215295 178759, 214559 176689, 213973 175123, 213976 175123, 212957 172524, 212152 170566, 211007 167889, 210055 165766, 209043 163584, 209043 163583, 208353 162136, 207638 160682, 206851 159120, 206096 157649, 205317 156171, 204522 154697, 203658 153135, 202830 151673, 201988 150218, 201170 148839, 201171 148835, 200224 147282, 199355 145876, 198480 144500, 197601 143142, 197601 143137, 196662 141720, 195778 140404, 194894 139113, 193951 137760, 192173 135264, 190405 132851, 188670 130540, 186962 128316, 185285 126175, 184437 125114, 182004 122112, 180485 120275, 178163 117529, 176687 115821, 174583 113427, 174575 113418, 173219 111904, 171262 109756, 176562 96208)), ((165739 91654, 166407 91847, 167042 92164, 167767 92713, 168311 93433, 168630 94069, 168819 94740, 168884 95485, 168820 96215, 168627 96882, 168311 97517, 167760 98243, 167042 98786, 166404 99107, 165729 99295, 164988 99360, 164257 99296, 163595 99107, 162957 98786, 162232 98237, 161688 97517, 161368 96878, 161179 96203, 161115 95476, 161181 94728, 161372 94068, 161688 93433, 162239 92707, 162957 92164, 163595 91843, 164269 91655, 165012 91590)), ((152763 77567, 153342 77793, 153935 78164, 154617 78773, 155288 79483, 156009 80374, 156587 81138, 157597 82505, 157599 82503, 158151 83231, 158857 84102, 159658 85013, 154573 90610, 153522 88778, 152886 87503, 152885 87503, 152401 86408, 151993 85342, 151662 84348, 151392 83334, 151182 82322, 151036 81240, 151016 80221, 151077 79444, 151231 78706, 151548 78004, 151815 77707, 152185 77540))) \ No newline at end of file diff --git a/stress_benchmark/resources/022.settings b/stress_benchmark/resources/022.settings new file mode 100644 index 0000000000..f9d345efde --- /dev/null +++ b/stress_benchmark/resources/022.settings @@ -0,0 +1,631 @@ +material_bed_temperature=65 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8400000000000001 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=2 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.42000000000000004 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=1 +raft_acceleration=1000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=8.400000000000002 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.42000000000000004 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=215.0 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=1 +material_break_temperature=50 +acceleration_support_interface=1000 +adhesion_extruder_nr=0 +mold_width=5 +gradual_support_infill_step_height=5 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=1.2600126001260015 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=2000 +speed_travel=150 +layer_0_z_overlap=0.125 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=65 +support_tree_limit_branch_reach=True +support_brim_width=0.8400000000000002 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=1 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.42000000000000004 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=44 +raft_surface_fan_speed=100 +default_material_bed_temperature=60 +speed_ironing=23.333333333333332 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=1000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.32000000000000006 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.42000000000000004 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.42000000000000004 +support_interface_offset=0.0 +machine_max_acceleration_y=700 +support_tree_min_height_to_model=3 +acceleration_infill=1000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.68 +speed_wall=48 +bottom_thickness=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15.0 +roofing_monotonic=True +skin_overlap_mm=0.084 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=215.0 +brim_gap=0.1 +acceleration_support_infill=1000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=18.0 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150 +acceleration_topbottom=1000 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=83 +skin_overlap=20 +print_sequence=all_at_once +infill_overlap=0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=58.666666666666664 +machine_max_acceleration_x=700 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=100 +infill_support_enabled=False +support_brim_line_count=2 +blackmagic=0 +speed_wall_x_roofing=63 +material_print_temperature_layer_0=215.0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.42000000000000004 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=8.400000000000002 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=1 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=1000 +interlocking_orientation=22.5 +speed_wall_0_roofing=44 +sub_div_rad_add=0.42000000000000004 +bottom_skin_preshrink=0.8400000000000001 +minimum_bottom_area=10 +infill_line_distance=4.200000000000001 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.42000000000000004 +support_skip_zag_per_mm=20 +support_angle=50 +raft_base_speed=12.0 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.42000000000000004 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=0.75 +bridge_skin_speed=17.5 +skirt_brim_material_flow=100 +acceleration_support_roof=1000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=410 +prime_tower_base_size=15.0 +infill_enable_travel_optimization=False +speed_support_infill=88 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=20 +mold_angle=40 +raft_speed=30 +prime_tower_wipe_enabled=False +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=1000 +cool_min_temperature=215.0 +jerk_layer_0=20 +support_offset=0.8200000000000001 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=1.6 +raft_interface_line_spacing=1.04 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=330 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.42000000000000004 +retract_at_layer_change=False +wall_transition_length=0.42000000000000004 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8400000000000001 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +quality_name=Fast +material_final_print_temperature=215.0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.5 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.399 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=17.5 +roofing_layer_count=0 +speed_slowdown_layers=0 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.0 +mesh_position_z=0 +machine_max_jerk_xy=8.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8400000000000001 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.25 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=17.5 +lightning_infill_straightening_angle=40 +speed_topbottom=35 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=30.0 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=0.8400000000000001 +prime_tower_position_y=283.555 +mesh_position_x=0 +cross_infill_pocket_size=4.200000000000001 +interlocking_enable=False +support_tree_top_rate=10 +wall_line_width_0=0.42000000000000004 +retraction_count_max=80 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8400000000000001 +support_bottom_distance=0 +wall_thickness=0.84 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=left +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=1000 +minimum_support_area=3 +brim_width=5 +small_skin_width=0.8400000000000001 +support_infill_angles=[65] +shell=0 +jerk_print=20 +adhesion_type=raft +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=11.3 +z_seam_x=0 +acceleration_travel=1000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=2000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.5 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=lines +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +retraction_hop_enabled=True +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=True +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=313.555 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.42000000000000004 +ooze_shield_enabled=False +raft_base_thickness=0.30000000000000004 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.42000000000000004 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=gyroid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +speed_print=60.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=2000 +carve_multiple_volumes=False +raft_surface_thickness=0.15000000000000002 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=20 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=False +support_roof_wall_count=0 +infill_sparse_density=10.0 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=30.0 +raft_jerk=20 +speed_support=88 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=10 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=65 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8400000000000001 +acceleration_ironing=1000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=5 +roofing_material_flow=100 +speed_prime_tower=60.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=95.0 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=lines +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=1 +support_fan_enable=False +infill_wipe_dist=0.10500000000000001 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8400000000000001 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.520025200252003 +brim_line_count=12 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=2000 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=-0.4 +bridge_wall_speed=22.0 +support_roof_enable=False +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=1 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=100 +support_tree_branch_reach_limit=30 +min_feature_size=0.10500000000000001 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.42000000000000004 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +acceleration_prime_tower=1000 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=0 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=215.0 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=1000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=5 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=20 +speed_wall_x=63 +time=09:45:42 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8400000000000001 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=30 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=390 +support_bottom_extruder_nr=0 +speed_support_roof=58.666666666666664 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=700 +speed_roofing=35 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=58.666666666666664 +material_bed_temp_wait=True +machine_depth=330 +bridge_wall_material_flow=50 +jerk_travel=30 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8400000000000001 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=67.5 +z_seam_y=165.0 +bottom_skin_expand_distance=0.8400000000000001 +infill_support_angle=40 +speed_layer_0=30.0 +raft_surface_speed=30 +material_name=empty +acceleration_wall_0=2000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/022.wkt b/stress_benchmark/resources/022.wkt new file mode 100644 index 0000000000..4cd6217887 --- /dev/null +++ b/stress_benchmark/resources/022.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((223054 229087, 222524 229740, 222407 229171, 221701 230007, 222284 230030, 221604 230859, 221479 230257, 220871 230953, 221511 230974, 220696 231938, 220665 231937, 220549 231313, 220010 231923, 220665 231937, 220671 231965, 219762 232944, 219645 232324, 219081 232926, 219757 232921, 219762 232943, 218884 233837, 218764 233256, 218097 233945, 218779 233946, 217999 234714, 217877 234167, 217102 234947, 217745 234969, 217087 235610, 216973 235081, 216113 235953, 216704 235970, 216175 236502, 216068 235979, 215147 236835, 215170 236969, 215001 236966, 214228 237691, 214286 237986, 214625 237995, 214343 238260, 214286 237988, 213895 237977, 213303 238510, 213404 239018, 212759 238999, 212382 239327, 212496 239895, 212327 240041, 211563 240015, 211458 240102, 211570 240664, 211068 241065, 210570 241045, 210531 240856, 210300 241041, 210570 241045, 210642 241387, 209716 242123, 209603 241587, 208998 242065, 209707 242099, 209712 242123, 208782 242827, 208677 242319, 207749 243014, 207768 243101, 208373 243125, 207845 243523, 207768 243107, 207633 243100, 206816 243716, 206895 244161, 206180 244134, 205865 244356, 205968 244904, 205544 245209, 204959 245188, 204926 245001, 204663 245174, 204958 245190, 205025 245571, 204076 246194, 203978 245615, 203051 246216, 203968 246263, 203127 246781, 203035 246248, 202084 246818, 202166 247296, 201358 247259, 201133 247388, 201227 247949, 200514 248359, 200244 248346, 200178 247931, 199502 248303, 200243 248346, 200268 248498, 199308 249000, 199224 248454, 198267 248976, 198333 249394, 197501 249348, 197305 249445, 197392 249981, 196426 250458, 195461 250894, 195391 250393, 195390 250393, 195388 250372, 195391 250393, 196426 250458, 196349 249930, 195388 250371, 195388 250372, 194426 250815, 194483 251284, 193977 251504, 193494 251475, 193459 251234, 192971 251446, 193494 251475, 193526 251716, 192555 252162, 192488 251639, 191526 252039, 191583 252560, 190560 252508, 190603 252908, 189625 253230, 189578 252736, 188601 253058, 188658 253609, 187643 253558, 187683 253951, 186704 254247, 186652 253670, 185679 253957, 185720 254508, 185174 254652, 184733 254630, 184700 254233, 183717 254483, 183724 254590, 184733 254630, 184744 254758, 183768 255048, 183724 254588, 183347 254574, 182744 254725, 182780 255300, 181798 255516, 181760 254942, 180782 255158, 180812 255687, 179820 255638, 179800 255361, 178818 255532, 178821 255599, 179820 255638, 179834 255873, 178847 256085, 178818 255601, 178507 255587, 177839 255711, 177863 256267, 176874 256416, 176853 255859, 175876 256000, 175890 256532, 174902 256643, 174887 256133, 173905 256245, 173918 256654, 174624 256681, 173923 256786, 173917 256655, 172921 256623, 172913 256366, 171936 256441, 171935 256592, 170952 256564, 170954 257045, 169967 257083, 169963 256589, 168973 256639, 168983 257161, 167995 257215, 167988 256685, 167004 256710, 167003 257250, 166015 257255, 166021 256730, 165030 256748, 165031 257230, 164046 257257, 164050 256732, 163062 256716, 163049 257250, 162062 257218, 162077 256685, 161093 256641, 161072 257166, 160083 257084, 160107 256603, 159119 256519, 159100 257049, 158115 256993, 158132 256444, 157154 256373, 157128 256910, 156141 256793, 156171 256313, 156741 256315, 156175 256255, 156171 256313, 155181 256301, 155189 256156, 154207 256014, 154190 256301, 153199 256303, 153192 256425, 152389 256308, 153200 256301, 153221 255871, 152244 255725, 152203 256280, 151218 256100, 151265 255548, 150282 255375, 150237 255890, 149261 255709, 149302 255176, 148854 255079, 148319 255082, 148329 254964, 147351 254748, 147319 255085, 146319 255089, 146381 254502, 145404 254261, 145346 254785, 144372 254529, 144431 253987, 144104 253893, 143439 253897, 143459 253701, 142490 253425, 142428 253903, 142177 253905, 141446 253652, 141522 253099, 140556 252780, 140492 253277, 139521 252949, 139548 252735, 140366 252719, 139588 252430, 139548 252735, 138923 252742, 138553 252610, 138622 252073, 137659 251723, 137587 252222, 136628 251789, 136662 251580, 137346 251574, 136708 251307, 136661 251583, 136207 251588, 135667 251339, 135751 250897, 134796 250454, 134711 250966, 133757 250544, 133772 250455, 134742 250429, 133849 250021, 133769 250455, 133579 250460, 132806 250085, 132904 249550, 132420 249310, 131918 249315, 131956 249103, 131011 248582, 130912 249110, 129964 248621, 130049 248195, 130297 248191, 130073 248069, 130047 248198, 129239 248217, 129026 248096, 129132 247540, 128359 247084, 128180 247084, 128199 246987, 127262 246420, 127158 246952, 126220 246376, 126295 245995, 125633 246000, 125292 245778, 125401 245215, 124917 244893, 124417 244896, 124479 244588, 123552 243952, 123443 244456, 122575 243816, 123328 243804, 122632 243299, 122527 243781, 121606 243126, 121693 242725, 121861 242722, 121719 242617, 121693 242725, 121089 242729, 120692 242431, 120816 241921, 120478 241652, 119803 241661, 119910 241209, 119120 240578, 118984 240576, 119005 240483, 118106 239735, 117977 240294, 117087 239537, 117852 239526, 117202 238976, 117073 239525, 116178 238741, 116242 238471, 115878 238468, 115283 237905, 115402 237415, 114771 237411, 114398 237046, 114516 236523, 114350 236370, 113685 236367, 113504 236199, 113628 235684, 113266 235322, 112623 235330, 112755 234804, 112245 234292, 111789 234296, 111878 233930, 111238 233262, 110947 233260, 111005 233015, 110265 232239, 110094 232233, 110132 232075, 109369 231225, 109235 231219, 109262 231105, 108487 230223, 108360 230220, 108387 230107, 108010 229671, 107625 229205, 107493 229201, 107394 229629, 107042 229185, 107492 229200, 107523 229077, 106810 228194, 106648 228190, 106685 228039, 106030 227210, 105773 227205, 105834 226959, 105277 226243, 104869 226246, 104972 225812, 104593 225282, 103968 225270, 104121 224617, 103918 224323, 103308 224296, 103135 224012, 103287 223413, 103246 223349, 102729 223331, 102322 222752, 102418 222366, 102623 222371, 102474 222142, 102418 222366, 102038 222357, 101487 221541, 101520 221400, 102022 221413, 101657 220821, 101514 221395, 101396 221392, 100855 220441, 101449 220461, 100933 219522, 100805 219513, 100842 219355, 100428 218579, 99884 218550, 100055 217857, 99961 217638, 99485 217627, 99135 216892, 99180 216704, 99541 216711, 99301 216165, 99194 216701, 99016 216693, 98780 216266, 98465 215845, 98484 215759, 98562 215761, 98152 215744, 98026 216129, 97882 216080, 97779 216640, 97413 216181, 97106 215714, 97257 215720, 97428 215258, 97221 214806, 97003 215512, 96793 214777, 97201 214798, 97170 214670, 96706 214533, 96668 214436, 96932 213969, 96910 213873, 96562 213850, 96441 213269, 96492 213083, 96437 212819, 96410 212836, 96423 212032, 96485 212035, 96525 211651, 96619 211116, 96467 211100, 96472 211037, 96645 210965, 96657 210893, 96745 210904, 96843 210466, 96690 210254, 96813 209864, 96580 209668, 96820 209378, 96632 209321, 96398 209095, 96226 208654, 95893 208938, 95791 207737, 96049 207594, 96036 207436, 95772 207246, 95733 206477, 95985 206370, 95972 205677, 95743 205520, 95738 205195, 95975 205118, 95991 204517, 96025 203943, 95934 203882, 96030 203856, 96091 202980, 96142 202598, 95962 202516, 96026 202250, 96198 202169, 96339 201341, 96196 201250, 96377 200577, 96580 200461, 96677 200173, 96496 200033, 96836 198854, 97300 197735, 97536 197982, 98005 196883, 97930 196800, 98075 196704, 98455 195785, 98209 195520, 98374 195102, 98872 194765, 98906 194684, 98646 194410, 99082 193297, 99340 193571, 99625 192824, 99130 193175, 99503 192179, 99766 192453, 100172 191313, 99990 191127, 99832 191241, 99902 191034, 99990 191127, 100321 190890, 100564 190170, 100289 189885, 100468 189335, 100927 188992, 100663 188729, 101013 187546, 101297 187823, 101510 187092, 101042 187442, 101352 186360, 101641 186637, 101963 185422, 101871 185333, 102025 185227, 102265 184195, 101963 183928, 102012 183713, 102468 183334, 102542 182974, 102240 182701, 102418 181876, 102706 181629, 102504 181456, 102725 180189, 103035 180448, 103164 179695, 102747 180061, 102931 178905, 103242 179161, 103423 177904, 103015 178283, 103101 177600, 103429 177863, 103582 176556, 103358 176384, 103225 176509, 103247 176298, 103361 176385, 103621 176147, 103706 175262, 103371 174977, 103384 174794, 103762 174464, 103800 173960, 103459 173672, 103491 173055, 103870 172679, 103877 172511, 103534 172282, 103557 171368, 103823 171088, 103573 170929, 103584 169697, 103672 169601, 103944 169765, 103943 169301, 103672 169601, 103587 169550, 103581 168146, 103942 168351, 103899 167663, 103854 167441, 103518 168066, 102769 166870, 102889 166617, 102695 166732, 101602 166004, 101665 165781, 101422 165595, 101257 165652, 100730 164879, 100916 164745, 100897 164342, 100674 164389, 100777 163345, 100998 163448, 101096 162937, 100856 162975, 101090 162020, 101299 162167, 101528 161494, 101288 161503, 101564 160911, 101754 161096, 102043 160825, 102232 160763, 102543 160753, 102580 160506, 103580 160723, 103546 160936, 104558 161186, 104604 160955, 105140 161101, 105944 159777, 106711 158555, 107439 158811, 108193 159015, 108943 159149, 109194 159155, 112364 154071, 112148 153690, 111575 152949, 111029 152386, 111343 151976, 111640 151737, 111753 151738, 112013 151903, 112460 152402, 113296 153503, 113732 153885, 114041 153972, 114219 153971, 114645 153869, 115159 153658, 115306 153676, 115143 154043, 114655 154720, 113399 156330, 112861 157042, 112221 157914, 111250 159273, 110586 160225, 109249 162203, 108216 163806, 108024 164017, 107822 164139, 107476 164102, 107391 164155, 107849 164509, 108244 164858, 108537 165180, 108781 165650, 108901 166135, 108935 166915, 108927 167587, 108884 168419, 108799 169436, 108681 170622, 108525 171953, 108337 173408, 108119 174968, 107869 176614, 107594 178327, 107292 180084, 106965 181875, 106609 183692, 106227 185538, 105807 187414, 105356 189314, 104858 191250, 104272 193412, 103748 195205, 103119 197228, 102439 199286, 101696 201386, 100866 203583, 100668 204073, 100858 204735, 101200 205736, 101508 206461, 102274 208182, 103431 210510, 104730 212895, 105372 213988, 106197 215362, 107334 217117, 107876 217935, 108847 219293, 109814 220620, 111426 222673, 112045 223439, 113363 224969, 114634 226408, 115969 227818, 117661 229565, 119608 231404, 121289 232928, 123421 234696, 125563 236376, 127341 237634, 129325 238955, 131318 240198, 133328 241328, 135361 242380, 137420 243364, 139417 244235, 141651 245089, 143828 245832, 146050 246500, 148319 247088, 150633 247598, 152978 248027, 155347 248379, 157760 248659, 160219 248852, 160317 249127, 160452 249136, 160524 248915, 160788 249035, 160528 248901, 160837 249012, 160875 248979, 160667 248874, 160913 248884, 161040 248953, 161210 249172, 161325 249177, 161342 248907, 162572 248968, 163432 248982, 163466 249029, 163467 249255, 163642 249188, 163757 248986, 164114 248992, 164213 249267, 164348 249266, 164381 249169, 164755 248999, 164743 249066, 164886 249005, 165076 249192, 165111 249278, 165234 249275, 165246 249004, 166942 248978, 167929 248948, 167925 248942, 169845 248848, 170773 248774, 170872 249038, 171007 249032, 171072 248921, 171469 248945, 171554 248986, 171742 248972, 171430 248725, 172262 248658, 174652 248380, 177021 248028, 179366 247599, 181680 247089, 183950 246500, 186171 245831, 188348 245088, 190582 244236, 192580 243364, 194638 242379, 196672 241328, 198682 240198, 200674 238954, 202659 237634, 204435 236378, 206578 234695, 208710 232929, 210392 231404, 212338 229566, 214032 227819, 215365 226409, 216636 224968, 217954 223440, 218574 222673, 220185 220621, 221152 219292, 222123 217936, 222666 217117, 223802 215363, 225269 212896, 226568 210511, 227725 208183, 228492 206461, 228805 205724, 229141 204734, 229325 204062, 229112 203531, 228305 201387, 227562 199287, 226882 197229, 226252 195205, 225672 193213, 225142 191250, 224645 189313, 224194 187413, 223769 185517, 223391 183692, 223035 181875, 222708 180084, 222406 178327, 222132 176613, 221882 174967, 221663 173408, 221475 171953, 221320 170621, 221201 169436, 221116 168419, 221073 167587, 221064 166916, 221099 166115, 221325 165395, 221515 165098, 221995 164633, 222607 164154, 222524 164101, 222347 164146, 222102 164109, 221832 163877, 220736 162180, 219721 160669, 218773 159306, 217469 157488, 216568 156286, 215243 154586, 214837 154010, 214695 153677, 214841 153658, 215354 153870, 215780 153972, 215958 153973, 216267 153886, 216702 153505, 217541 152403, 217905 151981, 218125 151791, 218298 151729, 218550 151834, 218972 152394, 218427 152956, 217861 153689, 217664 154002, 217656 154087, 220824 159170, 221605 159073, 222568 158812, 223281 158561, 224092 159835, 224860 161102, 225397 160956, 225441 161185, 226452 160937, 226419 160720, 227421 160507, 227463 160753, 227770 160765, 227956 160827, 228234 161085, 228436 160911, 228711 161502, 228474 161481, 228698 162163, 228910 162020, 229143 162974, 228901 162931, 228998 163446, 229223 163345, 229325 164388, 229101 164338, 229097 164676, 229270 164879, 228744 165651, 228601 165572, 228334 165781, 228399 166003, 227315 166725, 227113 166616, 227231 166867, 226778 167614, 226482 168066, 226164 167394, 226100 167663, 226057 168350, 226419 168146, 226416 169550, 226330 169601, 226054 169296, 226052 169769, 226330 169601, 226419 169697, 226428 170928, 226177 171087, 226071 170975, 226071 171159, 226176 171087, 226444 171366, 226470 172277, 226119 172513, 226129 172683, 226506 173057, 226540 173676, 226201 173961, 226236 174462, 226616 174793, 226630 174976, 226297 175263, 226377 176148, 226640 176385, 226419 176557, 226573 177861, 226898 177600, 226983 178278, 226577 177903, 226760 179162, 227068 178904, 227260 180067, 226836 179695, 226964 180448, 227280 180181, 227503 181450, 227295 181632, 227591 181881, 227763 182701, 227459 182976, 227538 183339, 227987 183712, 228037 183929, 227737 184195, 227977 185230, 228130 185335, 228039 185423, 228361 186636, 228648 186360, 228957 187441, 228487 187088, 228703 187823, 228987 187546, 229337 188729, 229068 188992, 229531 189334, 229712 189885, 229434 190171, 229681 190892, 230006 191130, 229830 191315, 230235 192450, 230498 192178, 230869 193174, 230384 192831, 230658 193570, 230918 193297, 231354 194412, 231094 194685, 231127 194764, 231628 195101, 231795 195520, 231544 195786, 231919 196698, 232072 196800, 231997 196882, 232457 197959, 232701 197735, 233159 198843, 232720 198599, 232919 199071, 233158 198844, 233505 200032, 233336 200201, 233429 200509, 233622 200576, 233805 201249, 233658 201390, 233817 202225, 233973 202249, 234039 202515, 233885 202645, 233972 203850, 234066 203882, 233976 203931, 234025 205091, 234263 205192, 234258 205519, 234026 205646, 234014 206342, 234267 206477, 234228 207246, 233962 207409, 233954 207575, 234210 207738, 234106 208934, 233764 208696, 233601 209095, 233367 209320, 233186 209385, 233420 209668, 233184 209864, 233309 210253, 233156 210479, 233250 210887, 233344 210893, 233443 211476, 233536 211477, 233521 212357, 233370 212368, 233594 212669, 233472 213261, 233489 213261, 233457 213861, 233202 213413, 233068 213961, 233184 214172, 233380 214171, 233397 214261, 233120 215082, 232654 215100, 232582 215242, 232797 215861, 232544 215942, 232547 216009, 232331 216007, 231974 216129, 231935 216004, 231738 216000, 231714 215653, 231375 215189, 231129 215247, 231095 215174, 231079 215205, 231243 215816, 231194 215953, 230783 215959, 230390 216860, 230849 216861, 230456 217747, 230312 217046, 229981 217772, 230446 217765, 230029 218676, 229520 218685, 229467 218785, 229612 219546, 229589 219597, 229022 219602, 228598 220374, 228624 220521, 228530 220522, 227959 221449, 228567 221452, 227952 222388, 227844 222386, 227731 221810, 227374 222377, 227844 222386, 227869 222507, 227293 223320, 226887 223317, 226969 223853, 226731 224240, 226136 224253, 225934 224540, 226038 225190, 225468 225201, 225024 225818, 225085 226166, 224779 226163, 224155 226979, 224184 227129, 224682 227128, 224295 227618, 224184 227131, 224035 227130, 223267 228100, 223281 228083, 223285 228100, 223897 228114, 223417 228675, 223285 228100, 223267 228100, 222503 229061) (187115 253536, 187643 253558, 187624 253377) (161972 249118, 161921 249199, 162466 249235, 162387 249108, 162180 249037) (172363 248922, 172895 248862, 172761 248753, 172277 248689) (126296 245995, 126596 245989, 126332 245817) (116241 238469, 116647 238468, 116312 238162) (98873 215243, 98631 215190, 98585 215254, 98616 215762, 99138 215774, 98905 215174) (96838 198852, 97073 199095, 97269 198626) (103825 171087, 103929 171159, 103932 170973)), ((172922 256624, 172930 256904, 171945 256988, 171936 256589)), ((155156 256647, 154175 256540, 154189 256305, 155181 256301)), ((148279 255530, 147296 255319, 147318 255087, 148319 255080)), ((143397 254273, 142421 253987, 142430 253907, 143438 253898)), ((131862 249594, 131341 249333, 131918 249315)), ((128084 247533, 127388 247098, 128178 247086)), ((124361 245142, 124027 244899, 124415 244898)), ((118881 241017, 118341 240593, 118983 240577)), ((215675 236979, 215255 237377, 215171 236970)), ((110947 233260, 110867 233587, 110540 233256)), ((110093 232234, 109990 232676, 109574 232230)), ((109233 231221, 109118 231716, 108687 231215)), ((108359 230221, 108255 230683, 107853 230200)), ((106534 228615, 106170 228194, 106647 228191)), ((105676 227579, 105383 227208, 105772 227206)), ((225153 226495, 225085 226166, 225417 226154)), ((228756 221149, 228624 220521, 229108 220519)), ((100804 219516, 100665 220081, 100355 219495)), ((231722 216010, 231711 216197, 231935 216136, 231937 216518, 231711 216201, 231702 216430, 231465 216331, 231103 215960)), ((96506 209586, 96540 209659, 96317 209881, 95952 209042)), ((233683 209881, 233460 209659, 234048 209042)), ((97929 196799, 97607 196997, 97759 196622)), ((232390 196993, 232073 196799, 232241 196629)), ((230171 191246, 230008 191130, 230099 191035)), ((230008 191130, 230007 191131, 230006 191130, 230007 191129)), ((228434 185571, 228131 185334, 228326 185153)), ((101871 185333, 101566 185571, 101677 185155)), ((226775 176510, 226643 176385, 226753 176298)), ((226643 176385, 226641 176386, 226640 176385, 226642 176384)), ((164425 108417, 165337 108395, 165343 108049, 166264 108063, 166247 108437, 167158 108489, 167174 108142, 168097 108205, 168078 108521, 167444 108514, 168072 108573, 168077 108522, 168992 108522, 168980 108674, 169894 108789, 169919 108519, 168993 108522, 169009 108316, 169924 108459, 169919 108519, 170309 108516, 170838 108595, 170808 108954, 171715 109123, 171745 108798, 172664 108968, 172629 109303, 173537 109525, 173583 109190, 174494 109424, 174450 109737, 175407 109714, 175359 110000, 176263 110266, 176316 109945, 177228 110217, 177173 110546, 178076 110842, 178132 110521, 179042 110832, 179036 110862, 178240 110891, 178982 111153, 179036 110862, 179111 110858, 179938 111162, 179879 111465, 180777 111823, 180845 111514, 181706 111876, 181687 111963, 181214 112001, 181642 112185, 181687 111963, 181845 111945, 182557 112296, 182497 112575, 183273 112975, 183208 112907, 183118 112629, 183453 112122, 183622 112487, 183800 112271, 183852 111787, 183927 111742, 184126 111775, 184227 111735, 184228 111812, 184380 111881, 184975 111910, 185135 111952, 185128 111996, 185791 112231, 185661 112512, 185952 112631, 186021 112312, 186872 112726, 186864 112754, 187339 113036, 187458 113184, 187648 113309, 187556 113575, 187852 113958, 188118 114117, 187980 114231, 188223 114216, 188051 114479, 188252 115275, 188435 115247, 188662 116296, 188456 116325, 188675 117376, 188875 117347, 188974 117840, 188830 118122, 188893 118428, 189093 118397, 189319 119450, 189116 119479, 189301 120316, 189480 120515, 189546 120504, 189567 120610, 192261 123543, 191840 124136, 191249 125100, 191019 125664, 195094 130107, 195685 129913, 196315 129619, 196828 129348, 197398 129006, 198710 130389, 198824 130669, 198820 130801, 198694 131107, 198170 131754, 197418 132641, 196751 133481, 196589 133527, 196461 133490, 196120 133252, 194783 131890, 192877 129919, 190774 127716, 189133 125973, 186962 123606, 186504 123028, 186338 122683, 186298 122125, 185578 121644, 184998 121166, 184471 120601, 184020 119945, 183649 119231, 183374 118538, 182810 118420, 181931 118200, 181018 117935, 180070 117631, 177061 116582, 175907 116189, 174948 115874, 173870 115556, 172785 115275, 171685 115023, 170583 114810, 169473 114631, 168360 114490, 167241 114390, 166121 114328, 165002 114306, 163880 114327, 162760 114389, 161641 114489, 160528 114630, 159418 114809, 158316 115022, 157216 115274, 156131 115555, 155046 115876, 153989 116223, 152940 116581, 151711 117017, 149931 117630, 148983 117934, 148033 118209, 147191 118419, 146626 118538, 146351 119230, 145981 119944, 145530 120600, 145003 121165, 144423 121643, 143700 122123, 143686 122585, 143528 123008, 143038 123606, 140874 125967, 139227 127715, 135935 131149, 133880 133254, 133538 133491, 133397 133528, 133246 133481, 132583 132642, 131542 131401, 131199 130870, 131175 130668, 131262 130459, 131518 130139, 132607 129006, 133184 129349, 134172 129859, 134848 130099, 134925 130094, 138981 125674, 138812 125237, 138307 124330, 137747 123535, 140432 120607, 140453 120505, 140516 120515, 140701 120308, 140882 119480, 140682 119449, 140907 118397, 141103 118427, 141168 118121, 141025 117841, 141124 117348, 141327 117374, 141543 116327, 141339 116295, 141441 115793, 141565 115247, 141756 115277, 142006 114246, 141882 114117, 141951 114074, 141902 113961, 142120 113747, 142257 113430, 142501 113445, 142412 113208, 142630 113039, 143275 112655, 143459 112906, 144104 112607, 144050 112290, 144898 111986, 144889 111949, 145152 111860, 145722 111738, 145734 111827, 146072 111742, 146148 111787, 146237 112243, 146488 112245, 146401 112528, 146429 112595, 146636 112583, 146660 113002, 146732 112973, 146687 112641, 147239 112369, 147413 112412, 147452 112598, 147742 112461, 147413 112412, 147384 112303, 148212 111910, 148280 112216, 149127 111862, 149061 111547, 149431 111405, 149995 111462, 149949 111207, 150824 110878, 150877 111199, 151769 110890, 151720 110575, 152270 110387, 152626 110414, 152655 110599, 153136 110451, 152626 110414, 152604 110272, 153508 109999, 153553 110318, 154445 110057, 154404 109725, 155310 109472, 155348 109809, 156248 109576, 156224 109378, 155800 109349, 156211 109247, 156225 109376, 156911 109420, 157149 109362, 157122 109017, 158030 108841, 158059 109157, 158964 108994, 158938 108638, 159851 108481, 159873 108841, 160781 108689, 160763 108343, 161685 108377, 161692 108594, 162604 108508, 162601 108413, 163512 108446, 163500 108074, 164425 108045) (142508 113446, 142514 113446, 142551 113479, 142596 113441)), ((162601 108413, 161685 108377, 161680 108225, 162591 108162))) \ No newline at end of file diff --git a/stress_benchmark/resources/023.settings b/stress_benchmark/resources/023.settings new file mode 100644 index 0000000000..8ef7f56f7e --- /dev/null +++ b/stress_benchmark/resources/023.settings @@ -0,0 +1,630 @@ +material_bed_temperature=60 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=1 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=5 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=3 +top_bottom_pattern=lines +skirt_brim_line_width=0.44 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.6 +raft_acceleration=8000.0 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.3 +support_initial_layer_line_distance=4.4 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=35.0 +jerk_support_infill=10.0 +wall_overhang_speed_factor=60.0 +support_roof_line_width=0.44 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=210 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=0.6 +material_break_temperature=50 +acceleration_support_interface=8000.0 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=10.0 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=3.6666666666666665 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=5000.0 +speed_travel=400.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=8.8 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=40 +retraction_amount=0.6 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=10.0 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.44 +meshfix_union_all_remove_holes=False +support_wall_count=1 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=120.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=80.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=8000.0 +wall_extruder_nr=-1 +support_structure=tree +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.44 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.44 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=8000.0 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=2.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.5 +speed_wall=120.0 +bottom_thickness=0.6 +raft_interface_jerk=10.0 +material_shrinkage_percentage=100.0 +support_interface_wall_count=1 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.044000000000000004 +small_feature_max_length=15.707963267948966 +wall_line_count=2 +material_print_temp_prepend=False +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +brim_gap=0 +acceleration_support_infill=8000.0 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=56.25 +jerk_prime_tower=10.0 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=100.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=400.0 +acceleration_topbottom=6000.0 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=350.0 +skin_overlap=10 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=100 +machine_max_acceleration_x=9000 +support_interface_height=0.6 +skirt_height=3 +support_roof_pattern=zigzag +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=280.0 +material_print_temperature_layer_0=210 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.44 +jerk_wall_x_roofing=10.0 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=4.4 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=8000.0 +interlocking_orientation=22.5 +speed_wall_0_roofing=120.0 +sub_div_rad_add=0.44 +bottom_skin_preshrink=0.8 +minimum_bottom_area=2.0 +infill_line_distance=8.8 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=5.0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.44 +support_skip_zag_per_mm=20 +support_angle=50 +raft_base_speed=56.25 +raft_remove_inside_corners=False +ironing_only_highest_layer=True +roofing_line_width=0.44 +hole_xy_offset=0 +jerk_print_layer_0=10.0 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=60 +skirt_brim_material_flow=100 +acceleration_support_roof=8000.0 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=410 +prime_tower_base_size=6.6 +infill_enable_travel_optimization=False +speed_support_infill=350 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=40 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=12 +retraction_hop=0.3 +jerk_wall_0=5.0 +mold_angle=40 +raft_speed=75.0 +prime_tower_wipe_enabled=True +support_roof_density=50 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=8000.0 +cool_min_temperature=210 +jerk_layer_0=10.0 +support_offset=0.0 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.08 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=0.3 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=300 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=40 +roofing_pattern=lines +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.44 +retract_at_layer_change=False +wall_transition_length=0.44 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.88 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +quality_name=Normal +material_final_print_temperature=210 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.44 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=8000.0 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=True +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.41800000000000004 +speed_z_hop=50.0 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=60 +roofing_layer_count=1 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.044000000000000004 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.5 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=60 +lightning_infill_straightening_angle=40 +speed_topbottom=120.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=25 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=0.8 +prime_tower_position_y=124.61500000000001 +mesh_position_x=0 +cross_infill_pocket_size=8.8 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.44 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.88 +support_bottom_distance=0 +wall_thickness=0.88 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=8000.0 +z_seam_position=backright +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=8000.0 +minimum_support_area=2.0 +brim_width=6.6 +small_skin_width=0.88 +shell=0 +jerk_print=10.0 +adhesion_type=skirt +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=10 +z_seam_x=150.0 +acceleration_travel=8000.0 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=5000.0 +raft_base_extruder_nr=0 +raft_surface_line_width=0.44 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=zigzag +initial_bottom_layers=3 +bridge_fan_speed_2=0 +support_use_towers=False +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=6000.0 +retraction_hop_enabled=True +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=40 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=160.0 +bridge_wall_min_length=1.94 +experimental=0 +bottom_layers=3 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.44 +ooze_shield_enabled=False +raft_base_thickness=0.36 +roofing_extruder_nr=-1 +jerk_support=10.0 +wall_line_width_x=0.44 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=grid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=8000.0 +material_end_of_filament_purge_length=20 +speed_print=400.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=5000.0 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=8000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=5.0 +skin_material_flow=100 +support_bottom_density=12 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=10 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=25 +raft_jerk=10.0 +speed_support=350 +jerk_support_interface=10.0 +machine_disallowed_areas=[] +minimum_roof_area=2.0 +raft_surface_jerk=10.0 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=10.0 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=6000.0 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=400.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=12 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=40 +support_bottom_pattern=zigzag +support_roof_height=0.6 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.6 +min_skin_width_for_expansion=6.123233995736766e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=0.6 +support_fan_enable=False +infill_wipe_dist=0.11 +machine_shape=elliptic +support_pattern=lines +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.88 +acceleration_layer_0=8000.0 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=0.88 +brim_line_count=15 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=5000.0 +wall_transition_angle=10 +top_thickness=1 +machine_center_is_zero=True +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=60 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=10.0 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=4 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=50.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.11 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.44 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=10.0 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.6 +machine_extruders_share_nozzle=False +machine_name=Unknown +acceleration_prime_tower=8000.0 +retraction_hop_after_extruder_switch_height=0.3 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=10.0 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=60.0 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=210 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=8000.0 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=10 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=10.0 +speed_wall_x=280.0 +time=09:47:39 +machine_buildplate_type=glass +top_layers=5 +jerk_ironing=10.0 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=50.0 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=60.0 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=0 +support_bottom_extruder_nr=0 +speed_support_roof=100 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=120.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=100 +material_bed_temp_wait=True +machine_depth=300 +bridge_wall_material_flow=100.0 +jerk_travel=100.0 +retraction_speed=40 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.88 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=10.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=150.0 +bottom_skin_expand_distance=0.8 +infill_support_angle=50 +speed_layer_0=25 +raft_surface_speed=75.0 +material_name=empty +acceleration_wall_0=5000.0 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=100.0 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/023.wkt b/stress_benchmark/resources/023.wkt new file mode 100644 index 0000000000..9d4f96a13a --- /dev/null +++ b/stress_benchmark/resources/023.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((-30982 -26911, -30986 -25821, -30913 -25649, -39879 -25649, -40000 -25817, -40000 -26973, -31031 -26973)), ((39999 -25822, 39884 -25651, 31226 -25649, 31272 -25829, 31272 -26970, 39999 -26973))) \ No newline at end of file diff --git a/stress_benchmark/resources/024.settings b/stress_benchmark/resources/024.settings new file mode 100644 index 0000000000..ca30eecf44 --- /dev/null +++ b/stress_benchmark/resources/024.settings @@ -0,0 +1,632 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.1 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=3.0 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=2 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=110.0 +support_bottom_height=1 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=True +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=False +layer_height_0=0.2 +support_initial_layer_line_distance=8.0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=10.0 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.02 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=220.0 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=0.3 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=3 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=4.0 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=500 +speed_travel=175.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=0.3 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=25.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=23.333333333333332 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=tree +support_xy_distance_overhang=0.4 +skin_angles=[] +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=35.0 +bottom_thickness=1.2 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=1 +machine_max_jerk_e=5 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.08 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=False +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=220.0 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=26.25 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=8 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=200.0 +acceleration_topbottom=250 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=70 +skin_overlap=20.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=60 +skin_material_flow_layer_0=110.0 +bridge_skin_material_flow_2=100 +speed_support_interface=35.0 +machine_max_acceleration_x=500 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=triangles +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=95 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=True +support_brim_line_count=9 +blackmagic=0 +speed_wall_x_roofing=35.0 +material_print_temperature_layer_0=220.0 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=8.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=25.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1 +infill_line_distance=4.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=40.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=26.25 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=17.5 +skirt_brim_material_flow=100 +acceleration_support_roof=500 +support_roof_offset=0 +travel_retract_before_outer_wall=False +machine_height=300 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=True +speed_support_infill=100 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=30 +retraction_hop=0.2 +jerk_wall_0=8 +mold_angle=40 +raft_speed=35.0 +prime_tower_wipe_enabled=True +support_roof_density=30 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=220.0 +jerk_layer_0=8 +support_offset=0 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.2 +fill_outline_gaps=True +meshfix_maximum_resolution=0.1 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=False +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=220 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +material_standby_temperature=180.0 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=450 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=110.0 +material_final_print_temperature=220.0 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=25 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=110.0 +retraction_combing=all +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=10.0 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=17.5 +roofing_layer_count=1 +speed_slowdown_layers=2 +default_material_print_temperature=225.0 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.1 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=17.5 +lightning_infill_straightening_angle=40 +speed_topbottom=35.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=60.0 +expand_skins_expand_distance=0.8 +prime_tower_position_y=191.0 +mesh_position_x=0 +cross_infill_pocket_size=4.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=5.0 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=0 +brim_width=8 +small_skin_width=0.8 +support_infill_angles=[] +shell=0 +jerk_print=8 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=110.0 +acceleration_travel=1000 +ironing_enabled=False +support_bottom_material_flow=60 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.08 +bridge_skin_material_flow_3=110 +support_interface_pattern=triangles +initial_bottom_layers=6 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=250 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=True +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=211.0 +bridge_wall_min_length=2.2 +experimental=0 +bottom_layers=6 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=True +wall_0_wipe_dist=0.4 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=gyroid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=70 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=10.0 +acceleration_travel_layer_0=1000 +speed_equalize_flow_width_factor=100 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=30 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=10 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=110.0 +speed_print_layer_0=20.0 +raft_jerk=8 +speed_support=100 +jerk_support_interface=8 +machine_disallowed_areas=[] +minimum_roof_area=1 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=250 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=35.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=100 +support_material_flow=90 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=triangles +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1.2 +min_skin_width_for_expansion=7.34788079488412e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=0.5 +support_fan_enable=True +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=gyroid +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=d2af194b-ecf5-4d5e-873a-b57dea74bfa2 +support_roof_line_distance=4.0 +brim_line_count=19 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=Test_Me +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=1.2 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0 +bridge_wall_speed=12.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=4 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=100.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=60 +machine_max_feedrate_y=500 +alternate_carve_order=False +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=False +cool_fan_full_at_height=0.6000000000000001 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=95 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=220.0 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=5 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=35.0 +time=09:49:12 +machine_buildplate_type=glass +top_layers=6 +roofing_angles=[] +jerk_ironing=4 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=35.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=35.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=1.474 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=35.0 +material_bed_temp_wait=True +machine_depth=220 +bridge_wall_material_flow=50 +jerk_travel=8 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=110 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=35.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=True +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/024.wkt b/stress_benchmark/resources/024.wkt new file mode 100644 index 0000000000..cf3db88cb2 --- /dev/null +++ b/stress_benchmark/resources/024.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((81072 131116, 81371 131193, 81650 131326, 81892 131510, 82374 131672, 82673 132840, 82303 133216, 82168 133495, 81980 133742, 81748 133949, 81480 134107, 81187 134210, 80887 134255, 80578 134239, 80271 134162, 79999 134032, 79751 133848, 79544 133619, 79384 133346, 79283 133054, 79242 132755, 79260 132439, 79336 132145, 79475 131859, 79663 131612, 79894 131405, 80162 131247, 80455 131144, 80763 131100)), ((114096 96925, 115636 97380, 115724 97450, 115177 97683, 114710 97750, 114173 97922, 115582 98296, 116444 98935, 116859 99261, 117571 99945, 118181 100504, 117864 100649, 117412 101033, 116916 101175, 115788 100975, 115288 101139, 115098 101140, 115857 101688, 116282 102379, 117040 104395, 117568 105419, 117973 106366, 117516 107162, 117544 107536, 117542 107937, 117826 108213, 118473 108780, 118808 108320, 117973 106366, 118626 105229, 119073 105472, 119319 105583, 119665 105889, 120358 106447, 121161 107499, 121706 108172, 122315 109016, 122908 111170, 122988 111292, 123107 111573, 123029 112085, 122790 113917, 122148 115021, 121816 115724, 121086 116503, 120942 116566, 120762 116665, 120456 116809, 120295 116930, 119655 117265, 119567 117365, 119420 117495, 118714 117832, 118180 118174, 117997 118389, 117898 118638, 117706 119034, 117548 119543, 117416 119602, 117235 119658, 117062 119782, 116899 119914, 116744 120441, 116340 121947, 115976 122682, 115875 122860, 115729 122982, 115053 123737, 113886 124588, 113714 124812, 112624 125195, 111829 125398, 111291 125195, 110535 124944, 109260 124294, 109859 121944, 109925 121722, 109938 121713, 111631 121691, 111827 121675, 111959 121392, 112189 120592, 111678 121223, 110799 121123, 110344 121427, 109938 121713, 109187 121723, 107625 121041, 106237 120641, 105005 119678, 104013 119061, 103406 117922, 102988 116903, 103118 116284, 103257 115865, 103345 115807, 103787 114730, 103723 114869, 103430 115342, 103257 115865, 103045 116005, 102597 116416, 102035 116674, 101807 116751, 100364 117430, 100226 116912, 100198 116770, 100229 113454, 101105 110156, 101252 109826, 101648 108756, 101982 108304, 102039 108244, 102404 107745, 102511 107616, 102489 107614, 102372 107385, 102412 107178, 103254 106261, 103533 105985, 103664 105839, 103843 105718, 104139 105490, 104484 105255, 104656 105159, 105418 104577, 105795 104619, 105904 104699, 105861 104722, 105653 104897, 105468 105114, 105184 105372, 104235 105979, 103797 106357, 103599 106609, 103580 106614, 102832 107273, 102786 107283, 102511 107616, 102785 107644, 102900 107586, 103134 107494, 103393 107340, 103966 107035, 104485 106726, 104928 106363, 105172 106124, 105562 105708, 106032 105170, 106013 104780, 105904 104699, 106156 104564, 106602 104404, 107068 104202, 107116 104196, 107629 103936, 108655 103789, 108994 103698, 111077 103478, 111601 103444, 111658 103426, 111656 102799, 112191 101516, 111919 101604, 111607 101636, 110793 101941, 110080 102408, 109739 102452, 109363 102303, 108821 102267, 109314 101119, 109544 100506, 109717 100145, 110141 99431, 111529 98330, 111066 98316, 110455 98420, 109835 98348, 111017 97388, 112392 96455) (111923 103342, 111658 103426, 111661 104229, 111821 105261, 111828 105448, 111915 105845, 112306 107480, 112688 107839, 112765 107948, 112843 107958, 112962 107661, 113364 107285, 113525 106684, 113599 106318, 113571 105967, 113570 105125, 113540 104713, 113537 104324, 113515 103988, 113512 103609, 113500 103435, 113037 103275)), ((118804 73402, 118999 73472, 119176 73557, 119359 73671, 119506 73784, 119992 74208, 120133 74297, 120255 74330, 120352 74295, 120453 74340, 120501 74337, 120881 74715, 121119 74923, 121333 75092, 121681 75329, 121866 75430, 122127 75536, 122268 75564, 122270 75586, 122447 75609, 122596 75582, 122825 75557, 123100 75625, 123321 75696, 123694 75891, 124499 76492, 124831 76695, 125146 76841, 125392 76752, 125668 76824, 126243 77185, 128189 78464, 128363 78608, 128768 78978, 129389 79590, 129887 80050, 130477 80571, 131237 81451, 131791 82055, 132055 82313, 132357 82578, 133034 83135, 133732 83923, 134290 84590, 134563 84954, 134602 85048, 134864 85300, 135017 85485, 135235 85726, 135518 86075, 135918 86605, 136327 87209, 136521 87541, 136623 87750, 136692 87946, 136726 88140, 136723 88312, 136691 88489, 136602 88756, 136405 89173, 136276 89407, 136076 89736, 135872 90034, 135634 90323, 135501 90440, 135365 90492, 135228 90487, 135031 90366, 134821 90180, 134553 89917, 134195 89539, 133586 88857, 131971 86961, 131157 86039, 130622 85450, 129603 84357, 127436 82072, 127399 82019, 127217 81846, 126954 81621, 126577 81349, 126521 81325, 126127 81087, 124165 79840, 123045 79163, 122576 78894, 121819 78441, 120299 77488, 120003 77316, 119657 77130, 119358 76990, 118699 76622, 117990 76207, 117380 75821, 116891 75470, 116716 75311, 116625 75176, 116608 75033, 116667 74875, 116730 74770, 116861 74603, 117011 74438, 117384 74082, 117583 73912, 117952 73632, 118239 73461, 118416 73392, 118600 73372))) \ No newline at end of file diff --git a/stress_benchmark/resources/025.settings b/stress_benchmark/resources/025.settings new file mode 100644 index 0000000000..3239862a7f --- /dev/null +++ b/stress_benchmark/resources/025.settings @@ -0,0 +1,631 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.1 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=8 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=1 +raft_acceleration=3000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.1 +meshfix_union_all=True +layer_height_0=0.3 +support_initial_layer_line_distance=2.6666666666666665 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=3000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.1 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=3000 +speed_travel=120 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.1 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=30.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=20.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=30.0 +bottom_thickness=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.02 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +brim_gap=0 +acceleration_support_infill=3000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=22.5 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=120 +acceleration_topbottom=3000 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=60 +skin_overlap=5 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=40.0 +machine_max_acceleration_x=9000 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=concentric +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=60.0 +material_print_temperature_layer_0=200 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=2.6666666666666665 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3000 +interlocking_orientation=22.5 +speed_wall_0_roofing=30.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=4.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=50 +raft_base_speed=22.5 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=15.0 +skirt_brim_material_flow=100 +acceleration_support_roof=3000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=250 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=60 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=1 +jerk_wall_0=20 +mold_angle=40 +raft_speed=30.0 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=3000 +cool_min_temperature=200 +jerk_layer_0=20 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.1 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=1 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=220 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=25 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +quality_name=Fine +material_final_print_temperature=185 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=all +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=15.0 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=15.0 +lightning_infill_straightening_angle=40 +speed_topbottom=30.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=30.0 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=0.8 +prime_tower_position_y=190.575 +mesh_position_x=0 +cross_infill_pocket_size=4.0 +interlocking_enable=False +support_tree_top_rate=10 +wall_line_width_0=0.4 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.1 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=3000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=3000 +minimum_support_area=0.0 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=0 +z_seam_x=110.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=3000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=concentric +initial_bottom_layers=8 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=3000 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=210.575 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=8 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.36 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=grid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=3000 +material_end_of_filament_purge_length=20 +speed_print=60 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +raft_surface_thickness=0.1 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=5000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=20 +skin_material_flow=100 +support_bottom_density=100 +bridge_skin_density_3=80 +support_interface_enable=False +support_roof_wall_count=0 +infill_sparse_density=20 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=30.0 +raft_jerk=20 +speed_support=60 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=3000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=60 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=concentric +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=6.5 +support_fan_enable=False +infill_wipe_dist=0.1 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=3000 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=0.4 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=3000 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=15.0 +support_roof_enable=False +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=1 +infill_mesh=False +layer_height=0.1 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=60.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.3 +machine_extruders_share_nozzle=False +machine_name=Unknown +acceleration_prime_tower=3000 +retraction_hop_after_extruder_switch_height=1 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=190 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=3000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=20 +speed_wall_x=60.0 +time=09:53:09 +machine_buildplate_type=glass +top_layers=8 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.15000000000000002 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=30 +support_bottom_extruder_nr=0 +speed_support_roof=40.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=30.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=40.0 +material_bed_temp_wait=True +machine_depth=220 +bridge_wall_material_flow=50 +jerk_travel=30 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=220 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=30.0 +raft_surface_speed=30.0 +material_name=empty +acceleration_wall_0=3000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/025.wkt b/stress_benchmark/resources/025.wkt new file mode 100644 index 0000000000..949fde4520 --- /dev/null +++ b/stress_benchmark/resources/025.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((124092 135655, 124492 136222, 124546 136262, 125073 136985, 124357 137909, 123408 138621, 123181 138712, 122002 137845, 121894 137430, 121972 136898, 122185 136404, 122519 135979, 122950 135655, 123448 135450, 123698 135416)), ((124564 133406, 125497 133789, 126295 134396, 126902 135185, 127277 136104, 127396 137089, 127323 137572, 127621 137508, 128032 137495, 128382 137591, 128813 137487, 128878 137816, 129899 137925, 130378 138079, 130701 138296, 130940 138624, 131011 138881, 130947 139183, 130848 139392, 130343 139824, 129955 140017, 129458 140145, 128922 140297, 128768 140902, 128725 141158, 128494 141702, 128005 142404, 128045 142475, 128189 142448, 128504 142587, 128916 143032, 129285 143743, 129478 144286, 129665 144954, 129763 145484, 129831 146314, 129779 147332, 130514 147949, 131024 148350, 131272 148872, 131540 149349, 131341 149533, 130400 149904, 130438 150184, 130360 150557, 130097 150943, 129783 151157, 129171 151361, 128566 151392, 127989 151346, 127866 151309, 127799 151746, 127641 151943, 127185 152252, 126777 152415, 126312 152476, 126119 152392, 125505 151741, 124290 152430, 123664 152699, 123508 152798, 122773 153031, 122196 153235, 121692 153396, 121243 153672, 120675 154042, 120581 154090, 119907 154824, 119190 155503, 119077 155589, 118498 156123, 117512 156812, 117066 157032, 116729 157001, 116545 157040, 116274 156893, 113796 158483, 113015 158949, 112220 159375, 111061 159829, 110854 159879, 110383 160065, 109956 159900, 110025 159481, 110016 159217, 110662 158009, 110743 157931, 111602 156811, 111774 156569, 113070 154955, 111571 154623, 109718 154190, 107970 153742, 106926 153330, 106160 152862, 105696 152528, 105503 152015, 105679 151730, 105821 151368, 106599 150806, 107532 150374, 113086 148825, 111078 146659, 110355 145658, 110285 145314, 110316 144686, 110891 144378, 111670 144405, 112356 144519, 113428 144815, 115324 145372, 116325 145708, 119873 147094, 121314 147561, 121096 147878, 121766 147097, 122184 146707, 121869 146091, 121542 145321, 121391 144790, 121300 144508, 121156 143853, 121008 142837, 121009 142398, 120582 142023, 119924 142226, 119389 142290, 118939 142303, 118226 142120, 117924 141932, 117750 141703, 117709 141418, 117798 141017, 118034 140619, 118345 140298, 118808 139964, 118889 139787, 119133 139565, 119500 139378, 119979 139231, 120252 139184, 120095 138977, 119719 138058, 119601 137073, 119750 136088, 120153 135170, 120784 134383, 121601 133779, 122546 133401, 123557 133275) (122999 135152, 122504 135351, 122076 135667, 121745 136080, 121534 136561, 121456 137077, 121517 137593, 121713 138075, 122031 138490, 122449 138808, 122939 139008, 123467 139077, 123997 139010, 124484 138822, 124921 138495, 125252 138082, 125463 137601, 125541 137085, 125480 136569, 125284 136086, 124966 135672, 124547 135355, 124057 135154, 123530 135085)), ((87162 126364, 87660 126696, 88549 126437, 89223 126315, 89779 126352, 90296 126505, 90411 126652, 90440 126900, 90393 127180, 90306 127371, 90040 127518, 88788 127730, 87987 127942, 87394 128076, 86515 128432, 87127 128584, 87334 128684, 87284 128777, 86925 128942, 87540 128835, 88650 128521, 89816 128941, 90109 129103, 90062 129223, 90024 130246, 90328 131224, 90947 132060, 91817 132673, 92860 133007, 93966 133024, 94076 132992, 94607 132992, 94674 133085, 95198 134787, 95136 136562, 94952 137074, 93559 137465, 93568 137488, 92549 138115, 91860 138938, 91481 139906, 91443 140928, 91674 141670, 91528 141811, 90092 142802, 89254 142774, 88904 142800, 88324 143101, 88807 143193, 89503 143248, 90396 143250, 91958 143147, 92269 143236, 92481 143610, 92532 143848, 92453 144065, 92006 144328, 91355 144516, 90909 144559, 89849 144515, 89448 144960, 88679 145309, 88427 145362, 87716 145549, 86743 145623, 86119 145613, 85779 145557, 85202 145303, 84516 144845, 83951 144273, 83645 143875, 83363 143527, 82989 142910, 82915 142704, 82701 142469, 82339 141726, 81934 141500, 81484 141172, 81120 140756, 80958 140450, 80895 140146, 80981 139953, 81395 139940, 81955 139821, 82134 139746, 82142 139705, 82423 139557, 82902 139210, 83214 138917, 83574 138434, 83757 138117, 83960 137547, 84046 136586, 83916 135946, 83821 135688, 83394 135036, 83283 134849, 82830 134445, 82060 134001, 81418 133797, 81231 133769, 80908 133032, 80557 133041, 80049 133153, 80011 132965, 80048 132647, 80134 132350, 80609 131637, 81063 131208, 81238 130371, 81385 130078, 81606 129225, 81711 129075, 81796 128819, 81998 128355, 82436 127622, 82960 127059, 83458 126672, 83775 126536, 84395 126354, 85324 126229, 86333 126211) (83409 142480, 83831 142934, 84368 143244, 85173 143393, 85841 143434, 86228 143402, 85550 143335, 84975 143216, 84476 143048, 83934 142799, 83512 142483, 83332 142191) (84034 128717, 83396 128917, 82647 129258, 82205 129689, 81854 130315, 81888 130559, 82008 130196, 82336 129795, 82993 129268, 83774 128883, 84416 128653)), ((73311 125782, 73811 125844, 74406 125943, 75327 126220, 75968 126575, 76099 126631, 76514 127133, 77432 127146, 78124 127245, 78576 127414, 79072 127752, 79133 127844, 79096 128161, 78957 128439, 78811 128585, 78458 128630, 77334 128463, 75818 128357, 74930 128417, 75477 128761, 75651 128915, 75566 128985, 75088 129025, 75745 129123, 76895 129165, 77856 129913, 78097 130171, 78024 130259, 77672 131220, 77659 132245, 77988 133232, 78628 134086, 79515 134723, 80563 135081, 80678 135085, 81159 135241, 81193 135356, 81168 137134, 80558 138805, 80223 139237, 78803 139179, 78805 139204, 77634 139488, 76732 140055, 76073 140858, 75720 141818, 75711 142581, 75504 142682, 73866 143176, 73069 142887, 72785 142818, 72114 142933, 72562 143169, 73427 143513, 74129 143734, 75492 144070, 75768 144233, 75875 144733, 75845 144933, 75707 145096, 75308 145194, 74631 145219, 74067 145095, 73072 144740, 72522 145030, 71680 145116, 71517 145088, 70705 145040, 69630 144774, 69184 144612, 68856 144433, 68417 144039, 67914 143409, 67522 142629, 67211 141799, 67170 141489, 67012 140799, 66918 140581, 66789 139746, 66599 139541, 66165 138963, 65954 138470, 65896 138141, 65930 137820, 66113 137664, 66467 137767, 67037 137827, 67256 137810, 67272 137778, 67566 137728, 68112 137553, 68594 137309, 69005 137016, 69278 136771, 69680 136246, 70025 135406, 70100 134754, 70089 134479, 69895 133760, 69837 133513, 69509 132967, 68932 132328, 68385 131938, 68238 131865, 68161 131067, 67804 130961, 67296 130913, 67311 130706, 67438 130424, 67619 130158, 67926 129944, 68140 129734, 68619 129460, 68784 129391, 69341 128492, 69464 128415, 69536 128252, 69810 127907, 69965 127637, 70330 127232, 71110 126530, 71219 126408, 71922 126010, 72474 125811, 72825 125768) (67976 141379, 68375 141828, 69095 142206, 69753 142452, 69140 142160, 68792 141942, 68131 141398, 67884 141118, 67735 140877) (71688 127975, 70997 128074, 70519 128313, 70103 128690, 70588 128391, 71085 128205, 71548 128084, 72361 127972)), ((35087 134501, 35589 134697, 36025 135016, 36364 135435, 36587 135926, 36629 136174, 36403 136577, 35851 136996, 35813 137052, 35109 137604, 34160 136920, 33416 135997, 33316 135773, 34142 134564, 34553 134442)), ((19696 118736, 20061 118865, 20651 119623, 21115 120534, 22857 126037, 24952 123954, 25927 123197, 26269 123115, 26897 123124, 27225 123688, 27225 124467, 27135 125157, 26579 127426, 26387 128154, 26085 129165, 24824 132759, 24417 134221, 24075 134003, 24891 134654, 25291 135055, 25897 134720, 26654 134366, 27179 134197, 27458 134095, 27948 133965, 29103 133745, 29557 133731, 29917 133291, 29691 132641, 29609 132109, 29579 131660, 29738 130940, 29915 130632, 30138 130449, 30422 130399, 30826 130474, 31231 130696, 31562 130996, 31913 131447, 32092 131521, 32323 131758, 32522 132117, 32687 132592, 32742 132862, 32944 132698, 33849 132291, 34829 132138, 35820 132252, 36751 132623, 37559 133227, 38191 134022, 38602 134954, 38764 135959, 38667 136970, 38318 137916, 37739 138734, 36971 139369, 36066 139775, 35087 139928, 34601 139873, 34675 140168, 34702 140578, 34618 140932, 34737 141359, 34412 141436, 34336 142463, 34201 142944, 33987 143280, 33675 143524, 33421 143605, 33117 143551, 32905 143459, 32455 142969, 32249 142588, 32104 142096, 31933 141566, 31323 141434, 31066 141399, 30513 141187, 29796 140722, 29725 140766, 29757 140909, 29631 141228, 29200 141655, 28503 142049, 27966 142261, 27305 142471, 26778 142588, 25951 142684, 24931 142668, 24340 143424, 23958 143947, 23446 144214, 22978 144498, 22787 144306, 22453 143540, 22407 143374, 22105 143425, 21729 143361, 21335 143112, 21110 142805, 20884 142201, 20832 141597, 20858 141020, 20891 140895, 20452 140843, 20250 140692, 19925 140246, 19748 139846, 19670 139382, 19747 139186, 20376 138550, 19642 137353, 19355 136743, 19252 136591, 18992 135865, 18767 135295, 18589 134797, 18298 134358, 17909 133804, 17858 133711, 17100 133063, 16397 132370, 16306 132260, 15753 131701, 15057 130786, 14794 130301, 14814 129963, 14768 129781, 14906 129504, 14533 128976, 13230 127084, 12737 126319, 12283 125540, 11789 124397, 11733 124193, 11530 123728, 11680 123296, 12101 123349, 12367 123331, 13595 123935, 13675 124013, 14825 124833, 15072 124996, 16730 126234, 17010 124726, 17379 122858, 17768 121087, 18140 120037, 18581 119256, 18899 118781, 19405 118570) (34377 134071, 33902 134283, 33499 134616, 33196 135045, 33012 135542, 32962 136072, 33047 136600, 33252 137080, 33595 137504, 34018 137820, 34507 138015, 35024 138075, 35539 137995, 36015 137783, 36417 137451, 36720 137021, 36903 136524, 36954 135994, 36869 135467, 36652 134979, 36321 134562, 35897 134246, 35409 134052, 34891 133992)), ((170689 142892, 171410 143026, 171653 143115, 171637 143176, 171097 143439, 170547 143588, 169808 143507, 169405 143326, 168946 143358, 168597 143243, 168568 143118, 168662 142898, 168767 142818, 169351 142775, 169939 142673, 170044 142633)), ((160907 142110, 161562 142170, 161979 142473, 162850 142936, 162827 143032, 162483 143109, 161881 143141, 161141 142892, 160825 142626, 160402 142540, 160139 142358, 160136 142277, 160286 142050, 160431 142018)), ((174616 135985, 175060 136201, 175419 136522, 175670 136923, 175795 137380, 175785 137861, 175631 138348, 175259 138337, 174655 138500, 174600 138535, 173815 138759, 173280 137922, 173027 136952, 173036 136732, 174185 136024, 174275 135919)), ((170062 132671, 170453 132766, 170576 132850, 170532 132915, 169947 133171, 169368 133461, 169780 133339, 170541 133435, 171199 133757, 171442 133582, 171976 133419, 172324 133433, 172705 133612, 173125 134041, 173413 134612, 173940 134499, 174839 134531, 175692 134771, 176442 135203, 177038 135797, 177437 136514, 177614 137303, 177558 138113, 177270 138884, 176772 139569, 176094 140118, 175288 140494, 174405 140672, 174149 140661, 174042 140888, 173902 141429, 173579 141935, 173243 142191, 172891 142278, 172349 142228, 171950 142053, 171510 142396, 170759 142667, 170221 142624, 169834 142449, 169691 142311, 168850 141963, 169004 141574, 169745 140936, 170341 140054, 170667 139067, 170699 138046, 170436 137056, 169895 136169, 169114 135441, 168308 135014, 168208 134673, 168097 134516, 168669 134102, 168928 133737, 169022 133667, 168534 133661, 167801 133754, 167618 133617, 167562 133516, 167558 133374, 167714 133247, 167985 133160, 168341 133112, 168690 132859, 169221 132685, 169499 132633) (173771 135824, 173473 135929, 173099 136140, 172847 136363, 172522 136803, 172393 137144, 172346 137626, 172454 138110, 172748 138594, 173139 138927, 173671 139162, 174074 139232, 174463 139228, 174771 139171, 174891 139250, 174870 139315, 175327 139101, 175723 138777, 176029 138364, 176194 137916, 176228 137499, 176162 137000, 175921 136519, 175568 136157, 175171 135925, 174716 135784, 174312 135750)), ((167562 137186, 167902 137503, 168138 137892, 168253 138322, 168240 138769, 168098 139198, 167815 139603, 167519 139503, 166917 139484, 166856 139500, 166048 139486, 165797 138566, 165832 137603, 165898 137407, 167181 137071, 167251 137022)), ((164120 132915, 164410 133110, 164398 133162, 163358 133370, 163691 133363, 164369 133634, 164937 134135, 165262 134012, 165779 133992, 166099 134091, 166399 134347, 166676 134835, 166807 135470, 167309 135502, 168150 135760, 168895 136203, 169495 136801, 169906 137513, 170102 138291, 170070 139082, 169812 139832, 169345 140489, 168700 141009, 167922 141356, 167064 141507, 166183 141452, 165924 141366, 165528 142070, 165115 142448, 164751 142599, 164404 142593, 163929 142416, 163559 142119, 163003 142352, 162269 142414, 161784 142245, 161473 141989, 161294 141695, 160695 141236, 160915 140948, 161813 140512, 162591 139834, 163144 138993, 163431 138043, 163433 137051, 163149 136084, 162599 135208, 161933 134587, 161926 134283, 161854 134088, 162387 133886, 162431 133836, 162837 133504, 162463 133399, 161761 133297, 161683 133235, 161606 133029, 161640 132897, 161820 132816, 162346 132841, 162755 132697, 163536 132689) (166507 136762, 166108 136865, 165646 137127, 165406 137338, 165202 137623, 165039 138058, 165018 138535, 165171 139062, 165451 139467, 165889 139819, 166244 139984, 166600 140075, 167094 140097, 167022 140199, 167421 140129, 167833 139943, 168238 139631, 168490 139311, 168678 138913, 168742 138428, 168636 137916, 168394 137489, 168084 137178, 167702 136938, 167168 136770, 166812 136739)), ((180603 140702, 180065 141164, 179695 141375, 179326 141489, 178815 141584, 178353 141526, 177868 141713, 177471 141709, 177407 141595, 177433 141350, 177515 141224, 178125 140984, 178629 140725, 178775 140615, 179474 140673, 180185 140589, 180607 140575)), ((62889 122041, 63363 122244, 63896 122510, 64744 123059, 65344 123649, 65564 124188, 66453 124486, 67085 124764, 67521 125103, 67863 125519, 67873 125721, 67762 125927, 67567 126133, 67387 126243, 67088 126217, 65932 125693, 65146 125419, 64586 125201, 63655 125003, 64074 125470, 64190 125669, 64096 125718, 63707 125654, 64277 125911, 65373 126271, 66104 127272, 66256 127568, 66150 127642, 65546 128468, 65252 129451, 65297 130489, 65677 131487, 66353 132344, 67261 132976, 67370 133011, 67810 133309, 67813 133424, 67297 135126, 66251 136565, 65813 136885, 64440 136430, 64435 136455, 63231 136405, 62208 136701, 61353 137292, 60750 138118, 60526 138863, 60325 138899, 58582 138917, 57902 138424, 57597 138251, 56949 138176, 57298 138521, 57843 138956, 58464 139387, 59422 139944, 59983 140295, 60144 140493, 60106 140945, 60019 141148, 59833 141283, 59315 141252, 58671 141044, 58277 140829, 57421 140202, 56840 140345, 56465 140297, 55894 140169, 55769 140109, 55065 139860, 54109 139308, 53716 139025, 53459 138780, 53125 138246, 52817 137493, 52670 136717, 52597 135754, 52634 135032, 52687 134823, 52643 134552, 52765 133707, 52546 133275, 52357 132751, 52287 132202, 52324 131858, 52442 131570, 52621 131459, 52971 131679, 53520 131900, 53693 131933, 53722 131903, 54039 131936, 54630 131918, 55051 131849, 55620 131650, 55950 131490, 56437 131130, 57061 130360, 57296 129778, 57361 129512, 57370 128766, 57384 128512, 57233 127926, 56845 127129, 56427 126600, 56286 126472, 56431 125681, 56136 125493, 55651 125301, 55725 125124, 55933 124881, 56171 124683, 56955 124361, 57580 124255, 58193 123660, 58477 123499, 59139 122915, 59349 122825, 59523 122685, 59949 122414, 60715 122053, 61472 121876, 62101 121834) (53222 134911, 53317 135523, 53588 136082, 54172 136656, 54704 137063, 55042 137253, 54519 136819, 54108 136398, 53788 135979, 53478 135470, 53306 134972, 53319 134630) (59376 123634, 58734 123958, 58626 124178, 58928 123945, 59425 123795, 60020 123747, 60545 123760, 61127 123843, 61788 124013, 61435 123851, 60794 123659, 59986 123525)), ((100546 121861, 100682 122333, 100647 122597, 100397 122824, 99313 123390, 99170 123506, 98475 123964, 98158 124146, 97406 124773, 98034 124724, 98262 124754, 98244 124857, 97956 125127, 98506 124831, 99459 124181, 100699 124210, 101028 124271, 101021 124399, 101309 125381, 101907 126211, 102759 126809, 103782 127115, 104874 127100, 105928 126764, 106023 126699, 106527 126531, 106620 126599, 107657 128045, 108162 129749, 108149 130293, 106951 131105, 106967 131124, 106196 132048, 105808 133040, 105756 134078, 106043 135060, 106498 135690, 106405 135871, 105357 137266, 104553 137505, 104231 137641, 103807 138091, 104189 138063, 104835 137900, 105592 137646, 106501 137319, 107030 137076, 107304 136993, 107560 136986, 107897 137292, 108027 137607, 107994 137708, 107598 138166, 107204 138442, 106690 138672, 105670 138968, 105430 139517, 105163 139785, 104715 140161, 104590 140222, 103964 140631, 102944 141051, 102480 141190, 102130 141247, 101502 141186, 100717 140972, 100114 140667, 99533 140282, 99205 140090, 98654 139621, 98520 139451, 98279 139321, 97977 139049, 97813 138839, 97650 138709, 97395 138666, 97095 138548, 96668 138448, 96197 138173, 95948 137934, 95792 137666, 95812 137455, 96201 137311, 96710 137010, 96840 136893, 96834 136852, 97054 136622, 97398 136142, 97601 135766, 97791 135193, 97863 134833, 97875 134174, 97652 133292, 97325 132724, 97153 132510, 96568 132049, 96371 131882, 95817 131644, 95419 131533, 94949 131470, 94274 131477, 94087 131511, 93548 130915, 93063 131129, 92771 131304, 92677 131137, 92609 130823, 92599 130515, 92660 130201, 92862 129619, 93117 129139, 93105 128933, 93053 128817, 93017 128288, 93063 127964, 93002 127083, 93054 126489, 93249 125544, 93266 125353, 93598 124600, 93948 124076, 94205 123846, 94725 123502, 95426 123125, 96420 122741, 97357 122607, 97940 122766, 98741 122211, 99211 121958, 99884 121768, 100380 121749) (98925 139096, 99460 139378, 100070 139502, 100879 139387, 101525 139214, 101890 139059, 101218 139212, 100344 139308, 99515 139217, 99119 139106, 98744 138828) (95140 125833, 94601 126224, 94000 126785, 93716 127333, 93582 128039, 93691 128260, 93689 127885, 93873 127392, 94335 126680, 94948 126072, 95485 125651)), ((160677 136473, 160910 136848, 161030 137261, 161030 137682, 160909 138088, 160674 138447, 160306 138752, 160081 138602, 159526 138434, 159466 138434, 158705 138216, 158701 137300, 158974 136411, 159082 136249, 160373 136257, 160416 136233)), ((157060 130960, 157457 130949, 158078 131139, 158280 131265, 158725 131699, 158726 131759, 158682 131783, 157928 131709, 158144 131770, 158691 132227, 159086 132864, 159475 132839, 159935 132961, 160202 133142, 160398 133454, 160513 133964, 160446 134627, 160888 134788, 161600 135271, 162171 135899, 162560 136629, 162742 137414, 162703 138198, 162446 138929, 161990 139557, 161365 140037, 160613 140340, 159786 140442, 158939 140338, 158131 140034, 157937 139892, 157344 140457, 156872 140681, 156505 140719, 156190 140616, 155819 140332, 155530 139905, 154912 139970, 154222 139822, 153831 139539, 153619 139219, 153487 138728, 153145 138260, 153397 138080, 154405 137921, 155319 137514, 156069 136891, 156604 136092, 156888 135174, 156899 134195, 156638 133226, 156183 132441, 156252 132194, 156240 131973, 156717 131943, 157265 131687, 157004 131520, 156413 131252, 156317 131150, 156308 130931, 156369 130820, 156563 130801) (158877 135859, 158596 135986, 158328 136190, 158055 136545, 157901 136978, 157894 137505, 158038 137959, 158342 138407, 158622 138657, 158949 138853, 159391 139005, 159350 139034, 159661 139074, 160058 139027, 160549 138883, 160884 138667, 161167 138354, 161361 137929, 161406 137422, 161301 136958, 161104 136589, 160822 136264, 160379 135960, 160058 135830, 159770 135766, 159375 135749)), ((181541 132724, 182048 132868, 182484 133138, 182823 133514, 183038 133970, 183116 134477, 183052 135000, 182611 135065, 182022 135341, 181972 135386, 181248 135739, 180544 134976, 180112 134028, 180080 133795, 181095 132892, 181198 132718)), ((176409 130723, 176464 130790, 175794 131356, 175342 131787, 175697 131573, 176509 131443, 177152 131545, 177225 131510, 177357 131340, 177840 131015, 178189 130924, 178637 130985, 179199 131294, 179499 131602, 179692 131734, 180146 131486, 181028 131252, 181926 131231, 182781 131428, 183534 131828, 184135 132404, 184540 133117, 184725 133917, 184675 134753, 184395 135564, 183901 136297, 183230 136900, 182427 137334, 182182 137399, 182131 137805, 182144 138230, 181974 138849, 181708 139214, 181383 139410, 180822 139525, 180419 139483, 180087 139936, 179420 140425, 178883 140541, 178442 140483, 178301 140411, 178248 140443, 177330 140356, 177349 139878, 177868 139072, 178188 138024, 178213 136955, 177936 135941, 177380 135045, 176581 134335, 175593 133855, 174711 133684, 174478 133329, 174338 133221, 174868 132515, 174957 132239, 175080 132073, 174523 132234, 173815 132546, 173685 132516, 173490 132364, 173453 132246, 173564 132078, 173825 131893, 174195 131732, 174476 131358, 174899 131057, 175236 130872, 175795 130725, 176247 130696) (180878 132458, 180982 132513, 180924 132499, 180353 132783, 180090 132977, 179781 133300, 179507 133808, 179409 134136, 179384 134513, 179485 135006, 179740 135456, 180180 135846, 180668 136057, 181266 136131, 181690 136078, 182269 135856, 182470 135975, 182463 136057, 182956 135615, 183270 135145, 183450 134628, 183482 134096, 183364 133585, 183105 133129, 182734 132772, 182259 132516, 181757 132394, 181222 132392)), ((152640 138889, 153047 139103, 153632 139355, 153898 139726, 154498 140357, 154505 140407, 154460 140443, 153827 140353, 153612 140274, 153086 139908, 152833 139545, 152508 139371, 152335 139179, 152322 139090, 152446 138937, 152544 138885)), ((104396 108493, 104829 108740, 105125 109234, 105257 109640, 105323 110060, 105323 110353, 105190 111193, 105262 111497, 105285 112197, 105348 112233, 105429 112421, 105408 112670, 105289 112942, 105065 113218, 104830 113406, 104936 113792, 104953 114257, 104880 114760, 104714 115290, 104464 115829, 104106 116405, 118382 130695, 119049 130283, 119587 130032, 120115 129867, 120620 129793, 121085 129811, 121472 129917, 121660 129675, 121936 129457, 122208 129339, 122457 129318, 122645 129398, 122683 129459, 123382 129484, 123684 129555, 124522 129423, 124817 129422, 125237 129490, 125592 129602, 126137 129918, 126386 130349, 126390 130809, 126079 131427, 125997 131502, 125491 132039, 125602 132542, 125422 132494, 124804 132501, 124369 132665, 124026 132620, 122777 132783, 121609 133263, 120598 134026, 119818 135023, 119319 136182, 119135 137428, 119156 137611, 119006 137813, 118793 138306, 118745 138843, 118784 139014, 118519 138948, 118185 139230, 117781 139626, 117266 139873, 116951 139974, 116328 139693, 116272 139684, 115975 139193, 115843 138785, 115777 138365, 115778 138056, 115951 136973, 115883 136644, 115889 136279, 115734 136213, 115636 136045, 115642 135814, 115753 135555, 116045 135214, 116325 135054, 116246 134507, 116247 134037, 116340 133532, 116524 133005, 116793 132473, 117014 132142, 102676 117815, 102231 118106, 101742 118352, 101214 118537, 100708 118630, 100238 118631, 99714 118552, 99531 118832, 99191 119123, 98931 119234, 98699 119241, 98530 119144, 98464 118989, 98010 118980, 97772 118928, 96710 119096, 96380 119101, 95960 119033, 95605 118921, 95060 118605, 95052 118549, 94771 117926, 94872 117610, 95117 117097, 95805 116393, 95730 116093, 95901 116132, 96438 116085, 96932 115872, 97133 115723, 97317 115744, 98563 115560, 99723 115060, 100719 114279, 101481 113269, 101962 112101, 102124 110853, 102078 110510, 102244 110074, 102261 109496, 102205 109281, 102703 109394, 103318 108800, 103937 108488)), ((53418 106745, 53939 106972, 54358 107355, 54695 107627, 54964 107550, 54931 107721, 54996 108257, 55227 108743, 55382 108938, 55368 109124, 55596 110363, 56136 111504, 56951 112472, 57988 113199, 59171 113638, 60424 113757, 60765 113699, 61207 113849, 61785 113847, 61998 113782, 61901 114284, 62517 114879, 62850 115486, 62862 115945, 62629 116385, 62151 116697, 61745 116844, 61327 116926, 61036 116937, 60191 116833, 59890 116915, 59191 116963, 59157 117027, 58972 117114, 58723 117102, 58447 116993, 58164 116779, 57967 116550, 57585 116669, 57121 116704, 56614 116647, 56079 116500, 55533 116269, 54944 115932, 41162 130697, 41596 131350, 41866 131878, 42050 132400, 42141 132902, 42139 133368, 42046 133758, 42295 133939, 42523 134206, 42650 134473, 42680 134721, 42607 134913, 42546 134952, 42546 135652, 42486 135956, 42648 136790, 42658 137084, 42604 137506, 42505 137865, 42208 138420, 41787 138685, 41327 138704, 40698 138415, 40622 138336, 40066 137849, 39567 137977, 39609 137796, 39580 137178, 39400 136750, 39435 136404, 39228 135162, 38707 134012, 37909 133029, 36885 132284, 35710 131825, 34459 131684, 34277 131712, 34070 131569, 33569 131373, 33031 131344, 32862 131390, 32918 131122, 32625 130799, 32215 130408, 31950 129903, 31838 129591, 32097 128958, 32104 128903, 32581 128590, 32987 128444, 33405 128362, 33714 128352, 34802 128487, 35128 128408, 35494 128401, 35554 128243, 35718 128140, 35950 128138, 36212 128239, 36563 128519, 36733 128794, 37277 128695, 37746 128679, 38254 128755, 38788 128921, 39330 129171, 39668 129381, 53486 114551, 53180 114117, 52916 113635, 52713 113115, 52602 112613, 52585 112143, 52645 111616, 52359 111443, 52056 111113, 51936 110859, 51921 110626, 52012 110455, 52165 110383, 52159 109928, 52202 109689, 51997 108634, 51980 108304, 52034 107882, 52133 107523, 52420 106989, 53098 106655)), ((188611 136357, 188558 136523, 188092 137083, 187780 137316, 186892 137700, 186614 137731, 186428 137707, 185904 138026, 185620 138101, 185478 138094, 185419 138027, 185381 137747, 185422 137597, 186062 137204, 186485 136873, 186679 136689, 187385 136619, 188597 136246)), ((154267 133574, 154459 133866, 154567 134271, 154562 134676, 154445 135059, 154223 135393, 153910 135653, 153484 135829, 153338 135651, 152875 135340, 152819 135324, 152169 134901, 152422 134058, 152924 133318, 153068 133199)), ((141037 120394, 141690 120560, 142286 120810, 143142 121272, 143270 121367, 143815 121729, 144349 122177, 144596 122346, 145107 122339, 145158 122357, 145736 122464, 146339 122644, 146616 122770, 147099 122961, 147259 123075, 147860 123381, 148008 123484, 148851 124018, 149230 124352, 149552 124591, 150101 125052, 150411 125482, 150628 125915, 150796 126540, 150780 126891, 150854 127260, 150848 127577, 150796 127830, 150975 128033, 151366 128580, 151503 128829, 151537 128659, 151886 128726, 152200 128603, 152504 128566, 152384 128432, 151861 128002, 151809 127891, 151877 127647, 151938 127607, 152124 127641, 152437 127857, 152929 127995, 153283 128240, 153597 128650, 153660 128908, 153387 128829, 153769 129371, 153962 130005, 153974 130142, 154473 130246, 154837 130455, 155041 130689, 155135 131010, 155118 131482, 154921 132027, 154838 132159, 155192 132409, 155744 133048, 156126 133788, 156310 134580, 156283 135369, 156047 136102, 155618 136730, 155027 137210, 154312 137506, 153522 137602, 152711 137489, 151935 137176, 151247 136683, 151088 136500, 150876 136682, 150356 136959, 149890 137044, 149559 136994, 149295 136822, 149041 136493, 148842 135928, 148163 135820, 147584 135522, 147301 135179, 147185 134837, 147214 134183, 146621 133944, 146030 133623, 145808 133470, 145249 133598, 144872 133568, 144527 133628, 143920 133518, 143435 133384, 142973 133123, 142189 132406, 142084 132232, 141483 131649, 141033 131096, 140656 130539, 140524 130393, 140117 129678, 139752 128845, 139601 127938, 138870 127251, 138405 126685, 137800 125856, 137443 125219, 137236 124689, 137157 124330, 137190 124074, 137380 123920, 137715 123845, 137869 123880, 137563 123237, 137306 122662, 137229 122373, 137207 121635, 137263 121533, 137168 121192, 137225 121042, 138201 120639, 138531 120565, 139259 120646, 140261 120984, 140291 120630, 140422 120424, 140672 120359) (152726 132992, 152425 133116, 152084 133377, 151833 133739, 151694 134231, 151714 134688, 151888 135183, 152083 135483, 152305 135718, 152726 136006, 152988 136112, 153331 136187, 153819 136173, 154192 136052, 154529 135832, 154813 135487, 154982 135020, 155001 134594, 154904 134171, 154726 133806, 154392 133414, 153869 133080, 153507 132966, 153196 132940) (151102 130149, 150586 130472, 150117 130869, 149710 131330, 149372 131844, 149116 132396, 148945 132974, 148867 133563, 148873 133713, 149317 133645, 150179 133246, 150885 132628, 151384 131834, 151641 130917, 151633 129920)), ((188853 128251, 189309 128537, 189664 128941, 189893 129437, 189977 129976, 189506 130188, 188997 130633, 188960 130692, 188367 131225, 187444 130659, 186740 129837, 186639 129607, 187370 128453, 187438 128192, 187767 128105, 188326 128104)), ((189034 126728, 189854 126994, 190553 127462, 191083 128101, 191408 128865, 191504 129705, 191367 130564, 191004 131380, 190442 132101, 189718 132675, 189469 132790, 189517 133340, 189579 133640, 189517 134324, 189303 134755, 189004 135015, 188446 135238, 188072 135269, 187830 135751, 187588 136033, 187221 136381, 186693 136593, 186140 136586, 186055 136660, 185092 136737, 185060 136342, 184999 136204, 185358 135339, 185496 134222, 185330 133138, 184870 132161, 184149 131356, 183214 130780, 182130 130472, 181260 130457, 180908 130083, 180765 130008, 181237 129077, 181260 128931, 181393 128662, 180786 128960, 180097 129421, 179787 129319, 179681 129168, 179761 128981, 180010 128723, 180423 128441, 180615 128033, 181326 127378, 181714 127166, 182365 126989, 182630 127056, 181951 127865, 181587 128367, 181534 128463, 181900 128108, 182719 127825, 183288 127813, 183463 127686, 183508 127602, 183945 127185, 184286 127028, 184767 127007, 185415 127228, 185666 127406, 186016 127575, 186418 127247, 187255 126859, 188147 126681) (187489 127855, 187139 128019, 187214 128044, 187164 128209, 186819 128465, 186587 128709, 186329 129096, 186197 129428, 186099 130019, 186141 130409, 186333 130896, 186677 131311, 187190 131628, 187733 131757, 188355 131724, 188782 131594, 189257 131320, 189534 131451, 189542 131537, 189687 131420, 190071 130930, 190318 130372, 190412 129788, 190346 129215, 190125 128691, 189765 128255, 189292 127938, 188733 127756, 188142 127723)), ((146435 134213, 146697 134472, 147140 134819, 147308 135253, 147602 135874, 147336 135848, 146858 135570, 146591 135268, 146394 134810, 146143 134549, 146075 134348, 146129 134267, 146345 134185)), ((55254 116892, 55568 117460, 55656 117595, 55742 118230, 56285 118593, 56901 119048, 57153 119342, 57440 119788, 57572 120116, 57533 120301, 57350 120488, 57128 120617, 56788 120646, 56443 120407, 55937 119977, 55260 119456, 54844 119170, 54493 118887, 53652 118450, 54009 119215, 53968 119267, 53541 119100, 54016 119503, 54971 120150, 55398 121316, 55462 121641, 55340 121683, 54531 122311, 53978 123174, 53735 124184, 53825 125248, 54239 126258, 54937 127116, 55033 127181, 55375 127589, 55346 127700, 54381 129194, 52980 130289, 52470 130477, 51274 129659, 51262 129681, 50126 129304, 49054 129305, 48069 129637, 47261 130264, 46840 130920, 46639 130899, 44956 130436, 44439 129774, 44192 129521, 43586 129267, 44036 129990, 44428 130515, 44956 131131, 45224 131371, 45745 131923, 45981 132236, 45976 132576, 45858 132816, 45619 133044, 45358 133007, 45191 132915, 44943 132850, 44511 132559, 43768 131730, 43469 131350, 42892 131329, 42156 130979, 41887 130795, 44699 127784, 53934 117857, 54431 117264, 55016 116629)), ((195937 129768, 195860 130057, 195632 130505, 195593 130613, 195378 130877, 194858 131337, 194579 131533, 194302 131644, 194131 131667, 193651 132176, 193398 132331, 193184 132352, 193027 132045, 193022 131952, 193089 131823, 193592 131274, 193883 130860, 194066 130560, 194726 130292, 195750 129587, 195901 129521)), ((103853 119766, 104288 120210, 104125 120469, 103934 121173, 103919 121408, 104012 122022, 104210 122278, 104083 121935, 104093 121343, 104396 120318, 114444 130360, 113692 130598, 113134 130698, 112826 130679, 112464 130548, 112647 130740, 113145 130828, 113446 130836, 113955 130766, 114545 130472, 115925 131852, 115131 131920, 114302 131825, 113793 131694, 113357 131595, 112679 131334, 112497 131219, 112218 131175, 111462 130799, 110844 130890, 110260 130884, 109881 130792, 109567 130651, 109329 130450, 109278 130248, 109597 129983, 109967 129542, 110060 129375, 110041 129338, 110321 128548, 110395 128104, 110400 127630, 110339 127089, 110104 126427, 109624 125706, 109116 125270, 108891 125135, 108150 124883, 107949 124805, 107148 124754, 106406 124907, 105812 125135, 105668 125220, 104960 124837, 104569 125207, 104360 125460, 104214 125336, 104047 125063, 103934 124776, 103881 124504, 103873 123895, 103965 123302, 103590 122546, 103545 122267, 103422 122065, 103169 121405, 102926 120351, 102854 119700, 102910 118835)), ((194074 121463, 194608 121670, 195061 122018, 195400 122490, 195591 123021, 195108 123363, 194678 123917, 194652 123985, 194182 124608, 193119 124215, 192238 123517, 192086 123297, 192587 122017, 192609 121677, 192912 121532, 193494 121416)), ((194392 120184, 195194 120442, 195879 120910, 196402 121556, 196727 122336, 196831 123199, 196707 124085, 196365 124932, 195828 125684, 195594 125885, 195767 126123, 195984 126716, 196122 127434, 196027 127937, 195802 128285, 195303 128672, 194983 128799, 194884 129306, 194501 130066, 193978 130480, 193493 130634, 193403 130773, 192455 131129, 192317 130762, 192173 130590, 192276 129681, 192095 128541, 191625 127518, 190895 126684, 189955 126094, 188869 125790, 187711 125792, 186899 126010, 186379 125701, 186237 125672, 186541 124091, 185966 124611, 185452 125221, 185356 125287, 185103 125265, 184910 125142, 184934 124937, 185117 124586, 185484 124165, 185482 123975, 185553 123687, 185759 123300, 186091 122804, 186322 122554, 186424 122501, 186835 122211, 187112 122095, 187361 122097, 187323 122249, 186886 123093, 186642 123792, 186603 123948, 186878 123465, 187556 122989, 188084 122799, 188310 122530, 188617 122005, 188913 121752, 189398 121587, 190126 121623, 190299 121681, 190853 121804, 191160 121375, 191858 120772, 192666 120355, 193531 120154) (192874 121155, 192270 121467, 191798 121877, 191953 121884, 192017 122121, 191657 122702, 191509 123163, 191483 123791, 191543 124152, 191698 124528, 192030 124960, 192492 125276, 193097 125446, 193674 125420, 194285 125209, 194674 124954, 195012 124622, 195387 124705, 195423 124880, 195641 124578, 195895 123944, 195988 123283, 195909 122639, 195668 122055, 195277 121571, 194765 121220, 194166 121028, 193521 121006)), ((108523 113957, 108693 114122, 108882 114589, 108740 114897, 108213 115455, 107268 116594, 107270 116609, 106835 117251, 106538 117774, 107133 117500, 107346 117455, 107363 117560, 107187 117905, 107605 117444, 108285 116513, 109466 116126, 109792 116074, 109830 116198, 110429 117027, 111272 117611, 112274 117889, 113336 117836, 114363 117458, 115245 116790, 115312 116697, 115733 116369, 115843 116402, 117303 117419, 118347 118857, 118517 119374, 117658 120541, 117680 120553, 117264 121676, 117227 122747, 117524 123743, 118123 124572, 118762 125015, 118735 125215, 118214 126882, 117534 127375, 117273 127614, 116994 128217, 117215 128109, 118130 127520, 119340 126517, 119863 126025, 120173 125881, 120607 126046, 120800 126234, 120849 126383, 120624 126980, 120346 127370, 119465 128114, 119076 128399, 119034 128978, 118660 129697, 118463 129962, 104799 116303, 105087 116091, 105784 115729, 106383 115684, 106774 115146, 107167 114651, 107444 114378, 107880 114094, 108342 113912)), ((52464 114857, 51138 116285, 50521 116016, 49862 115965, 49263 116073, 49062 116278, 49554 116116, 49967 116139, 50520 116248, 51029 116402, 42945 125074, 41892 126224, 41353 126794, 41070 126070, 40968 125476, 40984 125118, 41083 124841, 40881 125087, 40893 125171, 40825 125717, 40924 126300, 41237 126901, 40819 127359, 39905 128327, 39849 127907, 39825 127362, 39880 126680, 40086 125831, 40076 125746, 40263 125311, 40456 124734, 40492 124501, 40805 123823, 40709 123348, 40705 122390, 40887 121924, 41079 121680, 41280 121621, 41517 121887, 41924 122219, 42282 122412, 43015 122605, 43435 122661, 44113 122633, 44473 122571, 45073 122348, 45829 121809, 46247 121286, 46375 121057, 46673 120097, 46695 119280, 46529 118594, 46280 118002, 46179 117839, 46537 117118, 46163 116748, 45892 116540, 46012 116389, 46279 116213, 46562 116089, 46832 116026, 47416 115998, 48035 116068, 48222 115982, 48313 115889, 48781 115666, 49057 115612, 49236 115488, 49903 115207, 50453 115049, 51086 114893, 52121 114825)), ((201591 121329, 201627 121560, 201607 121976, 201418 122564, 201282 122813, 200850 123375, 200557 123677, 200317 123828, 200116 123893, 200051 124032, 199734 124541, 199507 124752, 199325 124830, 199173 124704, 199032 124463, 199077 124295, 199479 123636, 199852 122747, 200450 122338, 200822 121965, 201287 121445, 201533 121250)), ((198517 113820, 199071 114068, 199538 114473, 199862 114956, 199418 115463, 199118 116127, 199108 116202, 198802 116906, 197628 116767, 196567 116275, 196355 116085, 196545 114715, 196477 114306, 196732 114097, 197307 113834, 197917 113738)), ((198923 112461, 199677 112786, 200308 113316, 200771 114013, 201034 114832, 201082 115714, 200909 116603, 200529 117434, 200350 117661, 200391 117781, 200711 118062, 200945 118499, 201236 119219, 201236 119764, 201074 120165, 200385 120949, 200374 121331, 200135 122181, 199674 122719, 199282 122944, 199196 123164, 198292 123721, 198089 123391, 197856 123202, 197782 122314, 197377 121200, 196702 120261, 195802 119563, 194741 119152, 193586 119059, 192418 119287, 191690 119643, 191030 119407, 190903 119406, 190903 118160, 190951 118098, 190950 117746, 191169 117039, 191766 116419, 192180 116158, 192356 115830, 192446 115770, 192628 115255, 192879 114937, 193350 114666, 194279 114533, 194678 114551, 194892 114629, 194966 114602, 195181 114130, 195744 113414, 196451 112856, 197253 112498, 198096 112362) (197354 113042, 196685 113338, 196095 113803, 195625 114405, 195582 114499, 195877 114455, 195936 114566, 196002 114576, 195972 114618, 196032 114718, 195819 115301, 195759 115806, 195856 116450, 195989 116805, 196222 117157, 196649 117532, 197181 117763, 197830 117815, 198413 117674, 198998 117335, 199341 117000, 199577 116662, 200032 116702, 200142 117035, 200403 116468, 200547 115727, 200507 114990, 200286 114308, 199901 113725, 199375 113283, 198748 113012, 198058 112929)), ((40267 105213, 40904 105374, 41401 105591, 41711 105541, 41770 105497, 42242 105424, 42513 105454, 42722 105390, 43441 105314, 43889 105331, 44392 105336, 45235 105451, 45965 105715, 46515 106023, 46736 106230, 47170 106761, 47696 107633, 48064 108489, 48247 109310, 48138 109882, 48931 110926, 49168 111391, 49284 111758, 49341 112251, 49251 112415, 49048 112538, 48548 112599, 48273 112371, 47818 111643, 47102 110619, 46768 110235, 46200 109616, 46090 109523, 46192 110217, 46178 110376, 46073 110366, 45792 110118, 46118 110627, 46843 111525, 46911 112763, 46877 113094, 46748 113098, 45791 113461, 45010 114124, 44481 115020, 44257 116063, 44357 117150, 44775 118176, 44847 118265, 45054 118753, 44994 118852, 43635 119999, 41974 120636, 41431 120665, 40527 119535, 40510 119553, 39533 118861, 38507 118548, 37468 118577, 36513 118941, 35919 119443, 35732 119364, 34262 118439, 33958 117646, 33792 117328, 33314 116949, 33364 117271, 33725 118340, 34253 119472, 34679 120272, 34716 120582, 34557 120834, 34397 120993, 34220 121095, 34019 121095, 33536 120733, 33233 120362, 32744 119320, 32568 118868, 32020 118678, 31400 118109, 30786 117289, 30295 116322, 30119 115870, 30035 115525, 30047 114895, 30199 114095, 30506 113350, 30944 112601, 30960 112518, 31383 111934, 31544 111785, 31686 111464, 32221 110892, 32242 110521, 32427 109822, 32652 109361, 32848 109119, 33139 108912, 33321 108931, 33499 109316, 33822 109776, 33961 109911, 34002 109902, 34228 110089, 34690 110375, 35100 110563, 35732 110725, 36096 110769, 36755 110729, 37642 110429, 38157 110067, 38356 109878, 38795 109221, 38923 109045, 39181 108286, 39220 107596, 39159 106928, 39110 106743, 39663 106159, 39518 105840, 39217 105417, 39374 105308, 39604 105225, 39988 105183) (31929 112161, 31766 112517, 31616 113323, 31792 114132, 32016 114763, 32199 115112, 31968 114351, 31865 113781, 31843 113139, 31888 112540, 31982 112248, 32178 111968) (42345 106094, 42620 106061, 42995 106127, 43659 106448, 44485 107046, 45067 107677, 44858 107350, 44465 106883, 43795 106279, 43039 106011, 42647 105975)), ((98483 110332, 98523 110386, 99090 110786, 99328 111180, 99295 111430, 99091 111929, 98766 112360, 98340 112692, 97846 112905, 97315 112984, 96900 112877, 96033 111698, 96125 111471, 96835 110522, 97758 109804)), ((91080 98864, 91415 99335, 91519 99975, 91702 100917, 92619 101364, 93312 101828, 93728 102169, 94221 102657, 94603 103090, 95046 103757, 95236 104332, 95204 104676, 95111 104789, 95158 104868, 95966 104768, 96592 104833, 96839 104920, 97441 105078, 98186 104311, 98544 104066, 99114 103852, 99396 103847, 99693 103936, 99883 104123, 100053 104493, 100087 104879, 99992 105365, 99591 106319, 99845 106535, 99546 106861, 99461 107215, 99250 107568, 99049 107798, 99506 107969, 100311 108550, 100934 109322, 101330 110236, 101474 111228, 101356 112231, 100983 113176, 100382 113998, 99592 114640, 98668 115062, 97673 115232, 96676 115140, 95743 114793, 94938 114212, 94314 113439, 94211 113201, 94038 113416, 93677 113763, 93337 113993, 93017 114100, 92829 114085, 92312 114328, 91882 114444, 91420 114458, 91026 114343, 90799 114170, 90680 113904, 90661 113549, 90862 112812, 91076 112450, 91392 112013, 91889 111536, 91768 110982, 91362 110758, 90440 110042, 90064 109704, 89860 109487, 89469 109098, 88955 108439, 88565 107860, 88026 108039, 87011 108248, 87402 108211, 87109 109699, 86602 113471, 86411 114512, 86253 115246, 85717 117522, 85485 118174, 85132 118869, 84585 119225, 84019 118947, 83750 118718, 83225 117601, 82305 114794, 78255 118905, 77426 119507, 76559 119915, 76174 119866, 75838 119880, 75484 119464, 75471 119130, 75417 118896, 75377 118000, 75524 116891, 75981 115140, 76499 113309, 76934 111837, 74804 112201, 74602 112221, 73205 112428, 73097 112462, 71727 112441, 71500 112306, 71101 112162, 71162 111710, 71556 111386, 71697 111231, 72658 110437, 73415 109949, 74202 109492, 76794 108095, 76795 107786, 76921 107645, 77055 107335, 77510 107022, 78544 106523, 79293 106275, 79424 106218, 80363 105921, 81333 105687, 81420 105628, 82020 105309, 82479 105052, 82864 104690, 83322 104283, 83882 103754, 84045 103665, 84615 103229, 85774 102520, 85501 101667, 85524 101457, 85803 101079, 86143 100802, 86635 100553, 86884 100509, 87299 100663, 87325 100537, 87565 100010, 87878 99501, 88360 99060, 88700 98889, 89165 98847, 89529 98959, 89755 99129, 90537 98483, 90792 98401) (97078 109451, 96579 109673, 96179 110009, 95864 110441, 95669 110936, 95607 111460, 95683 111980, 95890 112460, 96216 112865, 96638 113170, 97127 113353, 97650 113401, 98172 113311, 98656 113090, 99070 112753, 99385 112321, 99580 111826, 99642 111302, 99567 110782, 99359 110302, 99033 109896, 98612 109592, 98122 109409, 97598 109361)), ((114973 104031, 115269 104438, 115202 104792, 114787 105540, 114238 106663, 114065 107142, 113797 107938, 113770 108078, 114327 107654, 114474 107589, 114515 107685, 114435 108051, 114722 107519, 115156 106451, 116206 105790, 116512 105660, 116578 105771, 117360 106431, 118319 106793, 119358 106821, 120379 106512, 121281 105897, 121976 105035, 122018 104928, 122345 104510, 122461 104515, 124123 105148, 125485 106292, 125775 106752, 125224 108091, 125249 108097, 125116 109287, 125340 110336, 125869 111230, 126650 111890, 127378 112165, 127400 112368, 127296 114109, 126757 114753, 126559 115051, 126459 115653, 126716 115454, 127476 114619, 128210 113609, 128675 112892, 128957 112665, 129255 112682, 129472 112745, 129645 112850, 129743 113026, 129660 113623, 129474 114094, 128810 115002, 128499 115375, 128599 115947, 128402 116765, 127982 117700, 127374 118598, 127034 119002, 126802 119211, 126247 119507, 125473 119761, 124686 119854, 124174 119850, 123725 119860, 123007 119771, 122801 119704, 122452 119736, 121692 119546, 121368 119701, 120590 119908, 120143 119911, 119837 119858, 119514 119703, 119442 119534, 119693 119192, 119945 118669, 119990 118500, 119962 118469, 120015 118179, 120044 117636, 120016 117280, 119906 116763, 119706 116216, 119350 115660, 118658 115028, 118092 114754, 117830 114670, 117042 114606, 116827 114579, 116031 114724, 115415 115020, 114861 115400, 114723 115532, 113944 115331, 113736 115612, 113512 116081, 113339 115996, 113156 115836, 112931 115521, 112823 115262, 112657 114627, 112604 114086, 112410 113840, 112343 113810, 112051 113432, 111945 113179, 111787 113028, 111374 112437, 111171 112036, 110931 111593, 110641 110846, 110500 110035, 110502 109404, 110590 109072, 110832 108474, 111336 107595, 111909 106855, 112538 106297, 113091 106114, 113672 104798, 114177 104202, 114579 103913, 114767 103912) (124839 118091, 124390 118457, 123968 118726, 123341 119022, 122994 119098, 122654 119062, 122943 119186, 123334 119156, 124111 118896, 124733 118350, 125176 117849, 125393 117519) (112467 110211, 112249 110781, 112045 111659, 112178 112452, 112336 112811, 112586 113018, 112424 112792, 112300 112432, 112258 111655, 112383 110684, 112652 109869)), ((191444 115423, 191420 115640, 191282 116073, 191072 116807, 190992 117420, 190987 117576, 190414 118388, 190021 119092, 189913 119196, 189714 119210, 189473 119150, 189423 118923, 189544 118500, 189864 117973, 189819 117767, 189832 117464, 189945 117078, 190275 116280, 190778 115723, 191128 115498, 191346 115413)), ((205470 111663, 205593 111977, 205674 112463, 205622 113015, 205535 113332, 205205 114071, 205002 114393, 204802 114597, 204604 114716, 204560 114947, 204372 115506, 204264 115686, 204004 115901, 203750 115743, 203632 115593, 203636 115420, 203771 115007, 203916 114454, 204064 113546, 204157 113494, 204594 112966, 205202 111841, 205387 111601)), ((198004 106383, 198207 106366, 198145 106516, 198238 106588, 198180 107146, 198244 107680, 198498 108300, 198719 108625, 199039 108924, 199561 109201, 200156 109304, 200825 109198, 201378 108916, 201883 108434, 202152 108008, 202280 107680, 202787 107615, 203174 108151, 203390 108601, 203887 108883, 204526 109786, 204659 110347, 204592 110794, 204413 111140, 204391 111274, 204151 111844, 204187 112080, 204153 112993, 203810 113664, 203533 113935, 203493 114245, 202706 115039, 202435 114768, 202094 114605, 201820 113783, 201148 112768, 200249 111992, 199181 111509, 198023 111354, 196845 111539, 195736 112046, 195099 112572, 195010 112530, 194340 112456, 194234 112480, 193930 111208, 193992 111071, 193935 110812, 193975 110104, 194034 109926, 194431 109251, 194715 108945, 194825 108548, 194958 108357, 195007 107923, 195184 107540, 195601 107142, 196260 106883, 196531 106755, 196797 106707, 197044 106749, 197150 106680, 197966 106341)), ((59597 107782, 60571 108460, 61320 109358, 60817 110100, 60765 110142, 60386 110721, 60000 110974, 59748 110950, 59242 110763, 58800 110453, 58454 110039, 58223 109552, 58127 109024, 58219 108606, 59367 107699)), ((58487 82844, 58824 83226, 58984 83361, 59812 84294, 60326 85033, 60810 85804, 62296 88346, 62605 88336, 62750 88457, 63065 88580, 63393 89023, 63928 90040, 64202 90780, 64264 90909, 64593 91837, 64861 92798, 64924 92884, 65263 93471, 65536 93921, 65911 94294, 66334 94737, 66879 95276, 66976 95438, 67438 96000, 68182 97126, 69024 96824, 69235 96839, 69622 97104, 69911 97435, 70177 97918, 70230 98165, 70090 98584, 70217 98606, 70753 98828, 71273 99124, 71729 99590, 71912 99923, 71971 100385, 71870 100754, 71710 100985, 72382 101744, 72473 101997, 72020 102302, 71561 102653, 70925 102779, 69990 102994, 69575 103926, 69136 104636, 68809 105063, 68339 105573, 67920 105969, 67269 106434, 66700 106645, 66356 106625, 66239 106536, 66169 106581, 66288 107427, 66247 108018, 66171 108259, 66032 108875, 66441 109254, 66824 109593, 67082 109942, 67314 110504, 67330 110785, 67252 111086, 67071 111283, 66719 111462, 66324 111513, 65834 111435, 64866 111066, 64659 111328, 64323 111041, 63967 110968, 63607 110769, 63370 110577, 63214 111040, 62662 111864, 61912 112514, 61012 112942, 60026 113120, 59020 113037, 58063 112698, 57220 112125, 56551 111358, 56097 110449, 55892 109462, 55949 108462, 56264 107517, 56816 106692, 57567 106043, 57801 105931, 57580 105766, 57221 105417, 56979 105084, 56861 104769, 56869 104580, 56608 104072, 56478 103646, 56448 103185, 56550 102784, 56713 102554, 56975 102426, 57329 102395, 58043 102555, 58442 102771, 58890 103072, 59384 103551, 59934 103412, 60133 103017, 60727 102181, 61151 101663, 61361 101452, 61736 101049, 62377 100512, 62941 100102, 62743 99566, 62500 98561, 62551 98951, 61053 98711, 57265 98335, 56218 98181, 54278 97816, 53186 97593, 52526 97383, 51821 97055, 51445 96519, 51703 95945, 51922 95669, 53020 95106, 55793 94087, 51542 90179, 50913 89376, 50475 88523, 50511 88137, 50485 87802, 50889 87433, 51221 87409, 51454 87346, 52349 87276, 53465 87385, 55227 87779, 57075 88233, 58562 88617, 58123 86501, 58096 86299, 57841 84910, 57803 84804, 57776 83435, 57903 83202, 58034 82798) (59072 107358, 58600 107583, 58207 107922, 57916 108354, 57752 108850, 57721 109375, 57829 109893, 58066 110369, 58419 110771, 58862 111070, 59363 111248, 59889 111292, 60406 111198, 60878 110975, 61271 110634, 61562 110203, 61727 109707, 61757 109182, 61649 108664, 61409 108174, 61060 107786, 60617 107487, 60116 107308, 59589 107265)), ((193915 108472, 193861 109094, 193827 109883, 193892 110456, 193922 110518, 193488 111614, 193272 112368, 193190 112498, 193009 112559, 192735 112561, 192657 112487, 192607 112231, 192636 111876, 192850 111233, 192750 111025, 192693 110746, 192697 110302, 192823 109567, 192917 109260, 193179 108761, 193260 108703, 193646 108282, 193789 108202, 193891 108195)), ((36699 92895, 36958 93002, 37525 93334, 37944 93679, 38256 93716, 38325 93690, 38799 93750, 39051 93855, 39268 93848, 39981 93975, 40408 94115, 40897 94261, 41668 94602, 42297 95056, 42741 95503, 42915 95801, 43169 96401, 43432 97374, 43550 98301, 43491 99158, 43238 99660, 43442 100169, 43757 101001, 43822 101780, 43741 102270, 43609 102402, 43380 102465, 42902 102397, 42696 102143, 42445 101265, 42038 100084, 41822 99623, 41448 98871, 41368 98751, 41274 99446, 41216 99595, 41118 99557, 40917 99241, 41090 99820, 41539 100882, 41264 102092, 41140 102402, 41015 102369, 39995 102455, 39061 102876, 38306 103592, 37803 104533, 37600 105605, 37718 106706, 37763 106812, 37828 107339, 37743 107417, 36119 108144, 34348 108299, 33818 108178, 33260 106842, 33239 106854, 32486 105914, 31591 105337, 30585 105078, 29566 105164, 28857 105483, 28699 105356, 27540 104052, 27466 103216, 27396 102864, 27040 102368, 26999 102691, 27048 103780, 27247 105052, 27437 105943, 27386 106247, 27022 106533, 26769 106603, 26574 106548, 26211 106067, 26020 105627, 25837 104491, 25794 104008, 25317 103672, 24880 102954, 24517 102001, 24311 100933, 24265 100450, 24278 100106, 24463 99498, 24832 98766, 25330 98136, 25688 97783, 25998 97460, 26566 97015, 26762 96916, 26936 96707, 27657 96244, 27778 95904, 28181 95209, 28495 94891, 28749 94713, 29087 94594, 29256 94663, 29322 95082, 29514 95630, 29602 95780, 29644 95783, 29810 96026, 30174 96429, 30446 96662, 30983 97010, 31417 97194, 32062 97336, 33000 97293, 33591 97087, 33836 96961, 34439 96450, 34610 96317, 35068 95654, 35296 95006, 35420 94346, 35424 94156, 36117 93747, 36066 93400, 35892 92910, 36074 92849, 36317 92832) (27028 97384, 26772 97681, 26408 98415, 26353 99240, 26395 99908, 26475 100295, 26462 99498, 26520 98922, 26676 98299, 26884 97736, 27054 97482, 27321 97267) (38713 94422, 38987 94467, 39328 94634, 39879 95125, 40503 95922, 40893 96695, 40782 96323, 40533 95765, 40056 95000, 39402 94534, 39036 94391)), ((121686 92539, 121884 92665, 122160 93076, 122023 93508, 121858 93786, 121612 94235, 121143 95171, 120717 96333, 120650 96657, 121194 96250, 121313 96206, 121345 96314, 121292 96503, 121590 96023, 122020 94994, 123098 94329, 123337 94229, 123420 94372, 124167 95014, 125086 95372, 126087 95407, 127070 95119, 127946 94533, 128622 93709, 128664 93607, 129030 93149, 129130 93154, 130718 93788, 132026 94890, 132295 95326, 131724 96679, 131746 96685, 131609 97836, 131816 98840, 132318 99706, 133065 100348, 133825 100643, 133705 102494, 133173 103122, 132886 103543, 132794 104063, 133086 103843, 133880 102978, 134502 102137, 134964 101440, 135287 101124, 135757 101173, 135964 101285, 136061 101458, 135974 102027, 135809 102449, 134888 103683, 134965 104251, 134799 104943, 134567 105516, 134270 106035, 134256 106078, 133863 106656, 133329 107290, 132646 107647, 131962 107861, 131195 107941, 130571 107927, 130298 107902, 130190 107937, 129669 107818, 129490 107684, 129860 107609, 130546 107369, 131100 106893, 131198 106758, 131629 106284, 132095 105565, 132155 105328, 131868 105725, 131286 106315, 130671 106808, 129847 107227, 129405 107322, 129033 107264, 128910 107283, 128715 107400, 129158 107664, 129007 107725, 128740 107734, 128348 107601, 127921 107807, 127166 108004, 126570 107991, 126090 107787, 126049 107697, 126326 107325, 126611 106751, 126559 106689, 126625 106350, 126657 105836, 126632 105477, 126532 104983, 126344 104455, 126006 103915, 125346 103302, 124656 102961, 123811 102881, 123596 102852, 122815 102988, 122226 103265, 121695 103620, 121505 103797, 120745 103598, 120583 103811, 120357 104278, 120055 104048, 119849 103753, 119738 103497, 119582 102885, 119538 102203, 119322 101948, 119241 101911, 119128 101670, 119113 101508, 119389 101721, 119552 101774, 119566 101554, 119522 101432, 119350 101213, 119194 100796, 119172 100097, 119315 99081, 119590 98269, 119839 97761, 119662 97922, 119222 98679, 118919 99425, 118745 100133, 118846 100865, 118945 101221, 118746 101122, 118403 100713, 118384 100600, 118238 100368, 117943 99818, 117664 99099, 117545 98384, 117556 97617, 117859 96886, 118244 96212, 118521 95789, 118976 95246, 119518 94783, 120067 94590, 120652 93334, 121126 92807, 121507 92538)), ((201018 104760, 201629 105016, 202099 105394, 201789 106118, 201706 106870, 201720 106947, 201647 107705, 200437 107940, 199233 107794, 198956 107671, 198710 106301, 198685 106309, 198466 105831, 198635 105568, 199135 105107, 199728 104807, 200370 104689)), ((194064 100544, 194191 100868, 194204 101015, 194347 101650, 194562 102424, 194810 102880, 194828 103018, 194769 103424, 194723 104249, 194746 104998, 194708 105162, 194540 105289, 194276 105375, 194154 105315, 194013 105010, 193947 104708, 193959 103978, 193786 103802, 193654 103568, 193465 102846, 193391 102322, 193382 101936, 193446 101504, 193685 100944, 193970 100537)), ((206769 100603, 207034 101148, 207119 101561, 207133 101962, 207088 102489, 206936 103220, 206818 103461, 206653 103650, 206696 104009, 206687 104506, 206635 104751, 206450 105055, 206143 104987, 205969 104869, 205922 104707, 205906 104004, 205817 103137, 205739 102752, 205745 102591, 205817 102508, 206066 101711, 206133 101316, 206254 100700, 206260 100555, 206369 100222, 206461 100210)), ((203186 97693, 203584 98142, 203953 98178, 204211 98282, 204503 98566, 204938 98889, 205254 99412, 205332 99878, 205301 100080, 205367 100518, 205302 101127, 205481 101635, 205580 102041, 205593 102285, 205560 102382, 205476 102911, 205332 103202, 205398 103581, 205111 104185, 204884 104634, 204547 104463, 204037 104395, 203566 103756, 202593 102983, 201477 102513, 200291 102382, 199115 102597, 198033 103146, 197117 103988, 196689 104661, 196493 104634, 195807 104777, 195730 104823, 195032 103679, 195052 103435, 194922 103095, 194763 102553, 194764 102324, 194936 101552, 195081 101218, 195051 100782, 195136 100373, 195083 100111, 195134 99675, 195423 99137, 195840 98793, 196113 98496, 196387 98363, 196628 98336, 196736 98202, 197310 97668, 197687 97509, 197666 97781, 197784 97811, 197895 98296, 198134 98809, 198582 99338, 198903 99587, 199316 99779, 199921 99885, 200542 99796, 201167 99479, 201623 99020, 201971 98371, 202098 97874, 202114 97584, 202631 97352)), ((200711 95064, 201328 95309, 201276 95430, 201192 96200, 201337 96973, 201375 97045, 201523 97778, 200389 98382, 199148 98603, 198829 98564, 198189 97318, 198180 97324, 197733 96853, 197813 96569, 198182 95939, 198695 95446, 199317 95123, 200004 94992)), ((191937 92877, 191986 93019, 192107 93162, 192247 93504, 192541 94034, 192898 94594, 193277 94983, 193355 95150, 193417 95704, 193640 96510, 193870 97205, 193882 97371, 193749 97558, 193517 97716, 193371 97693, 193103 97387, 192972 97138, 192759 96384, 192540 96267, 192319 96062, 191867 95297, 191678 94879, 191490 94196, 191534 93536, 191664 93014, 191751 92822, 191861 92794)), ((129542 81423, 129723 81572, 129944 82004, 129790 82362, 129570 82668, 129239 83165, 128793 83892, 128293 84945, 128154 85387, 128712 85051, 128809 85032, 128820 85145, 129051 84930, 129638 83812, 130791 83233, 130971 83176, 131056 83357, 131719 84036, 132570 84455, 133526 84573, 134497 84379, 135383 83891, 136101 83158, 136150 83063, 136573 82617, 136661 82631, 138127 83378, 139293 84539, 139517 84959, 138826 86266, 138846 86273, 138618 87366, 138733 88346, 139142 89219, 139804 89897, 140538 90258, 140268 92022, 139702 92586, 139422 92930, 139170 93529, 139546 93276, 140409 92488, 140972 91851, 141338 91407, 141579 91088, 141878 90837, 142018 90827, 142358 90923, 142532 91027, 142613 91206, 142481 91741, 142289 92128, 141345 93178, 141366 93757, 141180 94344, 140884 94931, 140529 95447, 140505 95503, 140061 96023, 139626 96457, 138942 96785, 138290 96952, 137336 96960, 136823 96876, 136751 96705, 137195 96415, 137430 96145, 137942 95682, 138046 95519, 138590 94845, 138836 94245, 138218 94963, 137613 95484, 136962 95920, 136052 96308, 135625 96337, 135133 96249, 134275 96596, 133509 96735, 132942 96681, 132484 96452, 132462 96387, 132776 96031, 133061 95562, 133014 95497, 133124 95117, 133196 94634, 133204 94272, 133151 93796, 133015 93272, 132735 92726, 132149 92079, 131516 91696, 130724 91552, 130513 91505, 129753 91569, 129168 91784, 128635 92075, 128379 92277, 127654 92020, 127527 92159, 127266 92594, 127028 92371, 126781 91888, 126646 91081, 126726 90180, 126714 89933, 126557 89690, 126440 89314, 126446 88692, 126694 87547, 127056 86724, 127574 85910, 127075 86318, 126586 87037, 126462 87185, 126169 87810, 125980 88112, 125832 88623, 125647 88603, 125500 88343, 125326 87828, 125145 87225, 125113 86552, 125226 85807, 125554 85171, 125929 84643, 126318 84152, 126797 83693, 127301 83347, 127860 83196, 128535 82043, 128995 81629, 129374 81410)), ((199636 87270, 200055 87402, 200643 87780, 200912 87704, 201255 87732, 201711 87979, 202058 88103, 202539 88536, 202766 89036, 202859 89176, 203157 89805, 203193 90289, 203635 90975, 203733 91245, 203730 91368, 203804 91898, 203758 92172, 203972 92591, 203796 93783, 203429 93719, 202782 93825, 202205 93397, 201024 92933, 199796 92808, 198599 93034, 197517 93594, 196624 94452, 195982 95548, 195777 96286, 195480 96336, 194842 96686, 194795 96739, 194151 96167, 193764 95798, 193702 95497, 193614 95412, 193271 94859, 193192 94753, 193103 94455, 193052 93699, 193078 93391, 192890 92935, 192826 92356, 192701 91826, 192824 91190, 193026 90885, 193230 90425, 193488 90190, 193706 90092, 194001 89429, 194314 89019, 194513 88880, 194597 89243, 194724 89240, 194948 89611, 195351 90058, 195948 90440, 196343 90589, 196810 90656, 197443 90577, 198035 90298, 198396 89940, 198556 89794, 198871 89199, 199020 88438, 198994 87918, 198941 87697, 199417 87293, 199444 87305, 199421 87258)), ((27547 62860, 27755 62916, 28010 63503, 28421 64264, 28703 64697, 28851 65255, 30076 67453, 30168 67579, 30568 68287, 30818 68757, 31731 70617, 31787 70800, 32035 71087, 32493 71869, 35546 75922, 36500 77328, 36609 77586, 37399 78699, 37887 79408, 38364 79508, 39215 79856, 39695 80194, 39817 80262, 39995 80535, 39942 80622, 39702 80737, 39282 80671, 39147 80685, 38752 80591, 39952 82011, 41094 83434, 41509 84013, 42091 84787, 43174 86621, 43339 87211, 43496 87994, 43385 88351, 43242 88604, 42565 88851, 41363 88791, 41208 88801, 40379 88660, 39813 88522, 39211 88362, 39581 89376, 39612 89544, 38888 89738, 38535 89981, 38166 90122, 37776 90185, 37393 90165, 37041 90065, 36746 89891, 36512 89658, 36369 89379, 36353 89068, 36412 88864, 36174 88898, 35278 89321, 34544 90045, 34053 90993, 33869 92068, 34006 93162, 34053 93267, 34120 93748, 34032 93831, 32426 94585, 30664 94769, 30127 94657, 29566 93377, 29544 93390, 28778 92465, 27876 91905, 26869 91665, 25854 91769, 25541 91915, 25728 92232, 25744 92543, 25658 92861, 25490 93161, 25235 93423, 24912 93632, 24543 93772, 24154 93835, 23731 93801, 23210 93940, 23104 93508, 22900 93304, 22766 92963, 22267 93442, 21618 93979, 21479 94048, 20469 94699, 19760 94825, 19508 94680, 19234 94425, 18978 93668, 18833 93102, 18825 91565, 19034 89274, 19224 88036, 19657 85604, 18869 86240, 18650 86278, 18538 86214, 18553 85889, 18807 85373, 19150 84856, 19506 84457, 19634 84340, 19673 83764, 19831 82085, 19797 81805, 19920 80110, 20542 75035, 20551 74124, 20476 73693, 20347 71903, 20310 70526, 20363 69960, 20416 69198, 20400 68162, 20150 67165, 20162 65932, 20214 65387, 20164 64950, 20791 64463, 21270 64114, 21829 63926, 22668 63450, 23682 62964, 23777 62988, 25804 62860, 26380 62745)), ((204081 88860, 204499 89199, 204936 89704, 205196 90366, 205294 90805, 205393 91691, 205340 91986, 205235 92212, 205411 92603, 205540 93062, 205568 93345, 205475 93711, 205152 93744, 204934 93676, 204843 93535, 204621 92884, 204400 92320, 204165 91818, 204022 91594, 203978 91401, 204037 91210, 204013 90494, 203911 89603, 203818 89246, 203826 89058, 203781 88916, 203793 88804, 203896 88759)), ((187180 86278, 187812 86970, 188415 87486, 188791 87738, 189147 87916, 189311 88074, 189542 88579, 190127 89399, 190558 89954, 190630 90129, 190562 90362, 190398 90584, 190240 90613, 189870 90409, 189639 90203, 189154 89520, 188656 89385, 187996 88862, 187563 88434, 187247 88032, 187103 87766, 186945 87245, 186855 86613, 186900 86275, 186989 86185)), ((197168 85399, 197155 85626, 197347 86408, 197763 87110, 197826 87167, 198210 87794, 197312 88791, 196180 89447, 195847 89524, 194812 88565, 194805 88575, 194111 88229, 194090 87955, 194231 87185, 194567 86501, 195075 85950, 195718 85566, 196455 85379)), ((195006 78233, 195267 78255, 195901 78514, 196494 78983, 196918 79399, 197265 79943, 197273 80045, 197787 80444, 198002 80701, 198047 80835, 198298 81309, 198339 81534, 198749 81914, 198999 83129, 198649 83191, 197950 83583, 197336 83402, 196042 83367, 194819 83678, 193751 84312, 192908 85226, 192352 86360, 192118 87635, 192176 88369, 191819 88569, 191286 89177, 190729 88957, 189975 88628, 189775 88296, 189725 88274, 189069 87779, 188854 87489, 188548 86794, 188504 86632, 188075 86133, 187579 85132, 187468 84456, 187511 84275, 187542 83671, 187706 83350, 187895 83154, 187907 82356, 188023 81937, 188233 81618, 188497 82010, 188616 81962, 188909 82194, 189475 82491, 190184 82648, 190621 82654, 191100 82553, 191691 82249, 192169 81765, 192397 81284, 192498 81092, 192594 80398, 192562 80020, 192466 79591, 192258 79103, 192169 78969, 192506 78395, 192420 78310, 192666 78230, 193109 78210, 193905 78397, 194133 78236, 194454 78153)), ((149673 84246, 149988 84518, 150010 84710, 149732 85157, 149443 85451, 148322 86112, 148157 86654, 147956 86987, 147318 87635, 146857 87983, 146808 88039, 146322 88327, 145797 88588, 145166 88707, 144489 88680, 143739 88479, 143323 88285, 143267 88152, 143642 87918, 144319 87625, 144913 87203, 145443 86790, 145961 86167, 146207 85829, 146470 85787, 146597 85702, 147623 85240, 148195 84903, 148746 84552, 149120 84292, 149423 84163)), ((141736 74085, 142141 74903, 142796 75540, 143075 75670, 142937 77070, 143179 78287, 143747 79370, 144603 80245, 145688 80851, 146930 81146, 147306 81137, 147395 81857, 147800 82674, 148387 83246, 147616 84780, 146758 85218, 146369 85686, 146037 85911, 145782 86200, 145415 86506, 144834 86861, 144142 87157, 143507 87337, 142671 87456, 142333 87439, 141966 87358, 141608 87138, 141423 87100, 140729 87151, 140009 87054, 139506 86848, 139140 86502, 139138 86460, 139556 86214, 139901 85916, 139873 85835, 140129 85469, 140336 85058, 140457 84713, 140570 84061, 140578 83745, 140487 83161, 140145 82399, 139680 81858, 138999 81492, 138812 81381, 138109 81216, 137503 81238, 136937 81343, 136570 81477, 135972 81021, 135501 81402, 135373 81158, 135296 80599, 135375 80038, 135467 79723, 135717 79153, 135752 78929, 135678 78646, 135670 78295, 135927 77510, 136418 76707, 136921 76113, 137589 75535, 138075 75238, 138405 75127, 139012 74999, 139070 75012, 139500 74815, 140286 74050, 141704 73834)), ((179929 81377, 181071 82011, 181536 82212, 182145 82371, 182505 82407, 182720 82539, 183202 83032, 184056 83642, 184606 84000, 184755 84178, 184754 84442, 184675 84689, 184526 84775, 184089 84698, 183776 84566, 183053 84043, 182519 84065, 181865 83859, 181116 83509, 180675 83222, 180390 82959, 180116 82572, 179841 82064, 179700 81505, 179755 81351)), ((185989 71080, 186832 71314, 187349 71556, 187727 71816, 188014 72145, 188428 72296, 188756 72493, 188854 72622, 189246 72988, 189334 73143, 189928 73406, 190579 74504, 190285 74667, 189764 75253, 189713 75378, 189089 75406, 187830 75801, 186753 76508, 185932 77476, 185423 78638, 185263 79917, 185461 81227, 185742 81871, 185396 82260, 185082 83027, 183616 82909, 183248 82599, 182619 82387, 182450 82343, 182109 82109, 181583 81532, 181142 81308, 180525 80759, 180178 80316, 180131 80274, 179784 79633, 179584 78950, 179625 78601, 179749 78306, 179569 77942, 179442 77477, 179414 77008, 179526 76627, 179992 76957, 180083 76878, 180380 76982, 181051 77083, 181789 76998, 182218 76856, 182654 76594, 183133 76096, 183431 75537, 183501 74899, 183534 74685, 183395 73972, 183232 73609, 182987 73214, 182556 72737, 182695 72093, 182501 71993, 182721 71812, 183130 71645, 183568 71567, 184105 71526, 184257 71329, 184523 71154, 185168 71037)), ((158603 79840, 158846 80069, 158963 80265, 158936 80450, 158567 80796, 158141 81048, 157095 81299, 156780 81789, 156315 82161, 155697 82525, 155202 82722, 154693 82883, 154179 82995, 153418 82932, 152895 82769, 152286 82421, 152015 82198, 152053 82072, 152302 81994, 152786 81921, 153349 81698, 154293 81294, 154951 80819, 155194 80600, 155289 80615, 155523 80535, 156508 80388, 157059 80235, 157754 80015, 158232 79842, 158477 79805)), ((197496 78135, 198100 78371, 198607 78673, 198799 78843, 199120 79241, 199441 79761, 199802 80524, 199821 81037, 200176 81401, 200431 81761, 200586 82086, 200638 82355, 200614 82446, 200324 82595, 200083 82612, 199943 82516, 199511 81991, 198821 81205, 198384 80869, 198259 80668, 198236 80471, 197979 79837, 197640 79155, 197107 78384, 197058 78176, 197167 78112)), ((189641 77564, 190094 78267, 190740 78817, 190821 78852, 191377 79310, 190831 80598, 189941 81626, 189634 81818, 188334 81244, 188330 81256, 187433 81139, 187331 80903, 187206 80078, 187307 79270, 187628 78536, 188144 77925, 188823 77480, 189555 77251)), ((153900 68227, 153862 68501, 154035 69362, 154392 69961, 154194 70248, 153744 71521, 153656 72834, 153942 74098, 154578 75229, 155523 76146, 156712 76789, 157219 76912, 157188 77138, 157361 77999, 157782 78706, 156683 79939, 155900 80112, 155320 80501, 154845 80661, 154716 80681, 154494 80808, 153874 81093, 152847 81277, 152163 81287, 151337 81183, 151044 81090, 150573 80822, 150270 80502, 149645 80376, 149587 80339, 149034 80123, 148615 79817, 148349 79388, 148825 79255, 149152 79096, 149145 79001, 149528 78690, 149819 78365, 150026 78061, 150294 77484, 150379 77195, 150439 76630, 150316 75862, 150015 75220, 149478 74714, 149327 74559, 148709 74227, 148148 74099, 147602 74053, 147152 74094, 146700 73513, 146227 73735, 146184 73513, 146268 72929, 146471 72454, 146965 71780, 147011 71609, 147011 71316, 147084 71006, 147300 70610, 147592 70216, 148232 69610, 148818 69207, 149449 68892, 150033 68710, 150398 68666, 150765 68680, 150916 68630, 151144 68629, 151687 68538, 152516 68074)), ((148236 76183, 148957 77593, 149036 78038, 147985 79059, 148000 79071, 147467 80005, 147269 80995, 146961 81001, 145758 80713, 144705 80126, 143874 79278, 143321 78229, 143087 77048, 143217 75737, 143637 75933, 144582 76043, 145539 75861, 146414 75403, 146487 75331, 147067 75016)), ((171574 78868, 172654 79109, 173112 79158, 173708 79138, 174015 79066, 174288 79155, 174994 79533, 176053 79892, 176637 80061, 176867 80217, 176923 80386, 176933 80736, 176807 80871, 176348 80928, 175992 80895, 175545 80762, 175056 80567, 174551 80750, 173963 80765, 172984 80633, 172449 80468, 171943 80230, 171344 79672, 171079 79302, 170941 78996, 170906 78770, 171031 78763)), ((165636 78432, 166154 78477, 166956 78497, 167620 78486, 167821 78588, 167910 78716, 168032 79073, 167948 79252, 167506 79450, 167139 79526, 166753 79527, 166078 79451, 165617 79807, 165057 80000, 164330 80146, 163630 80185, 162912 80093, 162193 79786, 161751 79451, 161419 79073, 161286 78847, 161370 78745, 161706 78789, 163322 78667, 163730 78594, 164317 78407, 164539 78278, 164722 78260)), ((175125 66843, 175666 66918, 176216 67092, 176682 67359, 177264 67474, 177412 67581, 177894 67817, 177985 67903, 178725 67992, 179696 68876, 179477 69104, 179137 69844, 179109 70153, 178600 70332, 177503 71086, 176672 72084, 176167 73258, 176019 74528, 176242 75811, 176818 77014, 177223 77486, 176926 78131, 176854 78951, 175356 79282, 174816 79047, 174224 79026, 174028 79035, 173644 78915, 173101 78611, 172459 78493, 171711 78151, 171142 77749, 170586 77218, 170408 76990, 170215 76637, 170136 76311, 170176 76124, 170152 75978, 169835 75644, 169547 75188, 169387 74758, 169390 74298, 170026 74498, 170085 74401, 170669 74384, 171049 74305, 171746 73998, 172129 73727, 172482 73335, 172806 72694, 172933 72050, 172808 71389, 172777 71175, 172485 70581, 172147 70193, 171776 69870, 171285 69581, 171234 68887, 170920 68832, 171119 68528, 171424 68278, 171841 68053, 172344 67895, 172480 67792, 172555 67592, 172777 67351, 173340 67068, 173777 66938, 174607 66828)), ((163354 65760, 163970 65910, 164343 65895, 164536 65960, 165068 66044, 165131 66076, 165962 65926, 167184 66505, 167051 66769, 166938 67608, 167039 68097, 166682 68361, 165847 69411, 165341 70616, 165200 71895, 165431 73163, 166023 74330, 166932 75319, 167380 75606, 167258 76511, 167426 77319, 166041 78097, 165340 78015, 164843 78144, 164635 78217, 164184 78215, 163807 78140, 163652 78166, 163030 78226, 162216 78133, 161448 77881, 160720 77521, 160211 77073, 160069 76851, 160012 76620, 159926 76483, 159475 76226, 159024 75832, 158734 75431, 158609 74971, 159101 74999, 159373 74967, 159400 74866, 159909 74687, 160269 74489, 160859 73977, 161155 73592, 161387 73096, 161515 72359, 161445 71685, 161116 71058, 161024 70862, 160560 70363, 160097 70076, 159623 69865, 159126 69743, 158885 69069, 158463 69119, 158484 68946, 158584 68703, 158775 68407, 159123 68039, 159668 67666, 159772 67521, 159830 67238, 159982 66993, 160377 66621, 160796 66339, 161548 66001, 162142 65838, 162703 65750)), ((140985 71884, 141050 72024, 141126 72408, 141111 72508, 140890 72752, 140545 73005, 140012 73426, 139507 73857, 138736 74677, 138613 74771, 138490 75005, 138089 75129, 137332 75413, 136769 75781, 136177 76205, 135679 76749, 135335 77029, 135228 76934, 135179 76477, 135232 75703, 135425 75059, 135744 74496, 136218 74025, 136664 73690, 137100 73395, 137956 72977, 138345 72892, 138927 72914, 139633 72265, 139906 72064, 140380 71859, 140783 71774)), ((179717 72178, 180380 72738, 181189 73088, 181280 73098, 181933 73368, 181782 74819, 181208 76111, 180958 76401, 179536 76229, 179536 76244, 178590 76402, 178465 76467, 178295 76267, 177902 75447, 177751 74576, 177850 73711, 178194 72911, 178760 72232, 179448 71753)), ((159420 72057, 159739 73548, 159702 73974, 158433 74683, 158444 74697, 157722 75429, 157500 75873, 157218 75805, 156279 75297, 155532 74572, 155030 73681, 154804 72684, 154872 71648, 155188 70701, 156021 71031, 156956 71100, 157884 70892, 157969 70843, 158627 70686)), ((168223 69749, 169052 70105, 169962 70206, 170055 70189, 170744 70255, 171035 71748, 170857 73204, 170694 73574, 169274 73829, 169279 73844, 168386 74288, 168164 74507, 167931 74359, 167264 73632, 166830 72775, 166659 71844, 166762 70906, 167133 70021, 167695 69297)), ((188065 70094, 188613 70212, 188891 70327, 189336 70604, 189972 71136, 190425 71618, 190641 72135, 191145 72391, 191499 72639, 191807 72961, 191926 73162, 191933 73274, 191720 73507, 191483 73619, 191259 73559, 190734 73235, 189787 72697, 189144 72472, 188926 72330, 188835 72127, 188404 71632, 187961 71197, 186889 70408, 186807 70283, 186922 70169, 187216 70092, 187648 70057)), ((153566 66090, 153724 66238, 153751 66438, 153717 66770, 153646 66879, 153436 67011, 152990 67184, 152295 67484, 151791 67723, 150936 68267, 150708 68360, 150646 68434, 150319 68427, 149515 68499, 148534 68814, 147964 69016, 147550 69280, 147311 69383, 147199 69314, 147257 68968, 147488 68304, 147776 67840, 148308 67293, 148941 66939, 149769 66648, 150468 66520, 151065 66494, 151623 66658, 152371 66264, 152711 66137, 153181 66069)), ((176689 65221, 177297 65372, 178130 65744, 178626 66060, 178964 66477, 179618 66594, 180009 66715, 180358 66900, 180621 67112, 180660 67299, 180539 67509, 180336 67709, 180060 67724, 179506 67579, 178394 67334, 177585 67292, 177298 67229, 177137 67050, 176612 66716, 176155 66489, 175106 66139, 174587 65950, 174482 65880, 174627 65706, 174905 65515, 175407 65306, 176324 65183)), ((164637 63872, 165206 64035, 165682 64363, 166411 64249, 166798 64246, 167224 64327, 167560 64462, 167656 64641, 167609 64859, 167470 65136, 167277 65248, 166643 65272, 165502 65358, 164539 65593, 164207 65620, 163991 65503, 163385 65344, 162973 65294, 161354 65257, 161021 65317, 160930 65221, 161050 64989, 161363 64592, 161422 64555, 161801 64226, 162487 63893, 163013 63795, 163773 63762))) \ No newline at end of file diff --git a/stress_benchmark/resources/026.settings b/stress_benchmark/resources/026.settings new file mode 100644 index 0000000000..7e20bd7a6f --- /dev/null +++ b/stress_benchmark/resources/026.settings @@ -0,0 +1,631 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.06 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=3 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=11 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.12 +raft_acceleration=3500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=True +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=6.0 +cool_min_speed=5 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +material_print_temperature=195 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=0.24 +infill_sparse_thickness=0.06 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_none +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=80 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=1500 +speed_travel=150 +layer_0_z_overlap=0.0 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.18 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.04 +wipe_retraction_speed=45 +retraction_amount=6.5 +bridge_skin_density_2=100 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=1 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0.24 +material_diameter=2.85 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=24 +raft_surface_fan_speed=50 +default_material_bed_temperature=60 +speed_ironing=23.333333333333332 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3500 +wall_extruder_nr=-1 +support_structure=tree +support_xy_distance_overhang=0.2 +skin_angles=[] +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3500 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=35 +bottom_thickness=1 +raft_interface_jerk=20 +material_shrinkage_percentage=100.2 +support_interface_wall_count=1 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.08 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +brim_gap=0.136 +acceleration_support_infill=2000 +support_meshes_present=False +travel_avoid_distance=3 +raft_interface_speed=17.5 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=20.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150 +acceleration_topbottom=1000 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=50 +skin_overlap=20 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=95.0 +skin_material_flow_layer_0=95 +bridge_skin_material_flow_2=95.0 +speed_support_interface=20 +machine_max_acceleration_x=9000 +support_interface_height=0.12 +skirt_height=3 +support_roof_pattern=zigzag +support_mesh=False +inset_direction=outside_in +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=100 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=35 +material_print_temperature_layer_0=195 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=45 +retraction_enable=True +support_line_distance=6.0 +extruder_prime_pos_abs=True +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3500 +interlocking_orientation=22.5 +speed_wall_0_roofing=24 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=30.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=15 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=0.75 +bridge_skin_speed=35 +skirt_brim_material_flow=100 +acceleration_support_roof=1500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=300 +prime_tower_base_size=3 +infill_enable_travel_optimization=False +speed_support_infill=25 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=2 +jerk_wall_0=20 +mold_angle=40 +raft_speed=15 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=True +top_bottom=0 +machine_max_feedrate_z=40 +acceleration_support=2000 +cool_min_temperature=185 +jerk_layer_0=20 +support_offset=0.0 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.06 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=1.6 +raft_interface_line_spacing=0.8 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=6 +support_join_distance=2.0 +wipe_hop_amount=2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=300 +machine_width=330 +extruder_prime_pos_y=6 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=100 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=True +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.6000000000000001 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=110.00000000000001 +material_final_print_temperature=180 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.91 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=False +acceleration_skirt_brim=1000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=100 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=35 +roofing_layer_count=1 +speed_slowdown_layers=1 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=35 +lightning_infill_straightening_angle=40 +speed_topbottom=35 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=7200 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=7.199999999999999 +machine_max_jerk_z=0.4 +support_tree_angle=45 +expand_skins_expand_distance=0.8 +prime_tower_position_y=217.0 +mesh_position_x=0 +cross_infill_pocket_size=6.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=25 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +raft_surface_acceleration=3500 +minimum_support_area=0.0 +brim_width=7 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=none +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=15 +z_seam_x=165.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=95.0 +acceleration_wall=1500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=95.0 +support_interface_pattern=zigzag +initial_bottom_layers=17 +bridge_fan_speed_2=100 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +retraction_hop_enabled=True +layer_start_y=228.0 +extruder_prime_pos_x=333 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=True +extruder_prime_pos_z=2 +support_tower_roof_angle=0 +prime_tower_position_x=308 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=17 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=4 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.3 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=triangles +material_alternate_walls=False +material_break_preparation_speed=50 +acceleration_support_bottom=100 +material_end_of_filament_purge_length=20 +speed_print=50 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=1500 +carve_multiple_volumes=True +raft_surface_thickness=0.06 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=1428.5714285714287 +speed_equalize_flow_width_factor=110.0 +wipe_brush_pos_x=100 +jerk_wall_0_roofing=20 +skin_material_flow=95.0 +support_bottom_density=100 +bridge_skin_density_3=100 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=20 +infill_extruder_nr=1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=95.0 +speed_print_layer_0=7.199999999999999 +raft_jerk=20 +speed_support=25 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=False +jerk_support_bottom=20 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=1000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1.0 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=35 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +support_bottom_pattern=zigzag +support_roof_height=0.12 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1 +min_skin_width_for_expansion=6.245698675651501e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=1 +support_fan_enable=False +infill_wipe_dist=0 +machine_shape=rectangular +support_pattern=triangles +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=1000 +material_shrinkage_percentage_z=100.2 +material_guid=44a029e6-e31b-4c9e-a12f-9282e29a92ff +support_roof_line_distance=0.4 +brim_line_count=18 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=1500 +wall_transition_angle=10 +top_thickness=1 +machine_center_is_zero=False +extruders_enabled_count=2 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=35 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=25.0 +bridge_wall_coast=0 +skirt_line_count=1 +infill_mesh=False +layer_height=0.06 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=150 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=95.0 +machine_max_feedrate_y=300 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +acceleration_prime_tower=2000 +retraction_hop_after_extruder_switch_height=2 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=2 +xy_offset_layer_0=-0.08600000000000001 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=185 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=3500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.2 +bridge_skin_material_flow=95.0 +raft_base_jerk=20 +speed_wall_x=35 +time=10:25:13 +machine_buildplate_type=glass +top_layers=17 +machine_gcode_flavor=Griffin +roofing_angles=[] +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.18 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=55 +support_bottom_extruder_nr=0 +speed_support_roof=20 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=3000 +speed_roofing=35 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=20 +material_bed_temp_wait=True +machine_depth=240 +bridge_wall_material_flow=100 +jerk_travel=20 +retraction_speed=45 +xy_offset=-0.006 +print_temperature=200 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=240 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=7.199999999999999 +raft_surface_speed=20 +material_name=empty +acceleration_wall_0=1500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/026.wkt b/stress_benchmark/resources/026.wkt new file mode 100644 index 0000000000..5512c8ee4d --- /dev/null +++ b/stress_benchmark/resources/026.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((227245 67069, 226990 67069, 226984 67075, 226984 67237, 226990 67243, 227245 67243, 227245 67582, 226990 67580, 226984 67586, 226984 67756, 226990 67762, 227245 67761, 227245 67860, 226990 67860, 226984 67866, 226984 68073, 226990 68079, 227245 68080, 227245 68588, 226990 68588, 226984 68594, 226984 68891, 226989 68897, 227163 68921, 226990 68921, 226984 68927, 226984 69286, 226990 69292, 227245 69291, 227245 70569, 226990 70569, 226984 70575, 226984 70797, 226990 70803, 227245 70807, 227245 71296, 226991 71296, 226985 71302, 226984 71369, 226990 71375, 227245 71375, 227245 71470, 226990 71470, 226984 71476, 226984 71587, 226990 71593, 227245 71593, 227245 71978, 226990 71975, 226984 71981, 226984 72080, 226990 72086, 227245 72088, 227245 72294, 226990 72294, 226984 72300, 226984 72518, 226990 72524, 227245 72524, 227245 72747, 226990 72746, 226984 72752, 226984 72819, 226990 72825, 227245 72825, 227245 73542, 225453 73542, 225447 73548, 225440 74559, 225506 75224, 225462 75588, 225479 76255, 225508 76618, 225501 77646, 225446 78404, 225452 78410, 226437 78410, 226445 78908, 226193 78909, 226187 78915, 226187 79310, 226193 79316, 226445 79317, 226445 79550, 226193 79551, 226187 79557, 226187 79884, 226193 79890, 226445 79891, 226445 80275, 226193 80275, 226187 80281, 226187 80856, 226193 80862, 226445 80863, 226445 81175, 226193 81176, 226187 81182, 226187 81812, 226193 81818, 226445 81819, 226445 83066, 226193 83067, 226187 83073, 226187 83255, 225493 83255, 225487 83261, 225491 83821, 225438 84850, 225456 85517, 225478 85879, 225453 86391, 225459 86397, 226126 86402, 225873 86995, 225879 87003, 226102 87001, 226102 88114, 226108 88120, 226328 88120, 226328 88152, 226101 88149, 226095 88155, 226095 88307, 226101 88313, 226328 88314, 226328 89584, 226108 89584, 226102 89590, 226102 89704, 226108 89710, 226328 89708, 226328 91149, 226223 91150, 226217 91156, 226217 91908, 226223 91914, 226328 91920, 226328 92963, 226223 92963, 226217 92969, 226217 93103, 225964 93104, 225958 93110, 225958 93161, 225964 93167, 226217 93167, 226217 95188, 225416 95189, 225410 95195, 225426 95804, 225446 96167, 225360 97076, 225437 97818, 225443 97824, 226102 97824, 226102 98907, 225845 98911, 225839 98917, 225839 99189, 225845 99195, 226102 99194, 226102 99575, 225845 99576, 225839 99582, 225839 99747, 225845 99753, 226102 99753, 226102 100735, 225845 100736, 225839 100742, 225839 101172, 225845 101178, 226102 101187, 226102 101794, 225849 101795, 225843 101801, 225843 102079, 225849 102085, 226102 102085, 226102 102671, 226108 102677, 226328 102677, 226328 103417, 226078 103418, 226072 103424, 226072 103529, 226078 103535, 226328 103536, 226328 103876, 226078 103876, 226072 103882, 226072 103965, 226078 103971, 226328 103972, 226328 105663, 226078 105664, 226072 105670, 226102 106506, 226108 106512, 226326 106515, 226328 107522, 225845 107522, 225839 107528, 225839 108097, 225845 108103, 226102 108104, 226102 109286, 225849 109295, 225843 109301, 225839 109506, 225845 109512, 226102 109512, 226102 110132, 225848 110133, 225842 110139, 225839 110519, 225845 110525, 226101 110528, 226102 110781, 225845 110782, 225840 110791, 225907 110931, 225912 110934, 226102 110932, 226102 111002, 225354 111011, 225348 111017, 225348 112385, 225354 112391, 227245 112391, 227245 112760, 226990 112761, 226984 112767, 226984 112929, 226990 112935, 227245 112943, 227245 113270, 226990 113271, 226984 113277, 226984 113441, 226990 113447, 227245 113446, 227245 113551, 226990 113551, 226984 113557, 226984 113766, 226990 113772, 227245 113773, 227245 114277, 226990 114277, 226984 114283, 226984 114583, 226989 114589, 227170 114615, 226990 114616, 226984 114622, 226984 114977, 226990 114983, 227245 114984, 227245 118010, 226990 118007, 226984 118013, 226984 118131, 226990 118137, 227245 118132, 227245 118384, 226990 118384, 226984 118390, 226984 118639, 226990 118645, 227245 118645, 227245 119233, 226108 119235, 226102 119241, 226102 120595, 225845 120595, 225839 120601, 225839 120718, 225845 120724, 226102 120724, 226102 121461, 225845 121461, 225839 121467, 225839 121665, 225845 121671, 226102 121671, 226102 122121, 225845 122121, 225839 122127, 225839 122298, 225845 122304, 226102 122304, 226102 124096, 226108 124102, 226442 124102, 226445 124697, 226193 124697, 226187 124703, 226187 125088, 226193 125094, 226445 125095, 226445 125523, 226193 125523, 226187 125529, 226187 126249, 226193 126255, 226445 126255, 226445 126627, 226193 126628, 226187 126634, 226187 126890, 226193 126896, 226445 126897, 226445 127186, 226193 127186, 226187 127192, 226187 127798, 226193 127804, 226445 127804, 226445 128946, 224785 128946, 224779 128952, 224779 129517, 224785 129523, 226649 129521, 226398 129955, 226403 129964, 226653 129967, 226653 131422, 226403 131430, 226397 131436, 226397 131958, 226403 131964, 226653 131963, 226653 132046, 226403 132045, 226397 132051, 226397 132594, 226403 132600, 226653 132600, 226653 134381, 226223 134381, 226217 134387, 226217 135971, 226142 134388, 226136 134382, 224785 134382, 224779 134388, 224779 137945, 224785 137951, 226223 137953, 226229 137947, 226229 136503, 226294 137947, 226300 137953, 226712 137957, 226712 139626, 226455 139626, 226449 139632, 226449 139900, 226455 139906, 226712 139906, 226712 141083, 226455 141082, 226449 141088, 226449 141134, 226455 141140, 226712 141140, 226712 141277, 226455 141277, 226449 141283, 226449 141825, 226455 141831, 226712 141831, 226712 142331, 226455 142332, 226449 142338, 226449 142401, 226455 142407, 226712 142407, 226712 142615, 226455 142616, 226449 142622, 226459 142744, 226465 142750, 226711 142751, 226712 142796, 224785 142802, 224779 142808, 224779 143516, 224785 143522, 226102 143522, 226102 145446, 225845 145446, 225839 145452, 225839 145935, 225845 145941, 226102 145942, 226102 146021, 225845 146021, 225839 146027, 225839 146451, 225845 146457, 226099 146458, 226102 147972, 225845 147969, 225839 147974, 225840 147978, 226103 148372, 226108 148375, 226316 148375, 226328 149112, 226078 149112, 226072 149118, 226072 149361, 226078 149367, 226328 149368, 226328 153220, 226108 153220, 226102 153226, 226102 154927, 225845 154928, 225839 154934, 225839 155171, 225845 155177, 226102 155177, 226102 156352, 225845 156352, 225839 156358, 225839 156420, 225845 156426, 226102 156427, 226102 156561, 225845 156562, 225839 156568, 225839 157112, 225845 157118, 226102 157121, 226102 157615, 225845 157617, 225839 157623, 225839 157675, 225845 157681, 226102 157680, 226102 157885, 225845 157886, 225839 157892, 225849 158015, 225855 158021, 226102 158022, 226102 158077, 226108 158083, 227245 158083, 227244 158453, 226990 158448, 226984 158454, 226984 158620, 226990 158626, 227245 158632, 227245 158961, 226990 158962, 226984 158968, 226984 159133, 226990 159139, 227245 159139, 227245 159242, 226990 159242, 226984 159248, 226984 159457, 226990 159463, 227245 159476, 227245 159968, 226990 159968, 226984 159974, 226984 160270, 226989 160276, 227170 160304, 226990 160303, 226984 160309, 226984 160670, 226990 160676, 227245 160674, 227245 167473, 226990 167474, 226984 167480, 226984 168402, 226990 168408, 227245 168408, 227245 168479, 226990 168478, 226984 168484, 226984 169332, 226990 169338, 227245 169325, 227245 169495, 224469 169495, 224469 169241, 224463 169235, 223759 169235, 223753 169241, 223749 169495, 222914 169495, 222914 169241, 222908 169235, 221659 169235, 221653 169241, 221652 169495, 221007 169495, 221006 169241, 221000 169235, 220380 169235, 220374 169241, 220375 169495, 219261 169495, 219261 168649, 219255 168643, 208976 168643, 208970 168649, 208970 169036, 206691 169036, 206691 168649, 206685 168643, 196409 168642, 196403 168648, 196403 169269, 195311 169269, 195311 169014, 195305 169008, 194631 169008, 194625 169014, 194625 169269, 192872 169269, 192873 169014, 192867 169008, 192673 169008, 192667 169014, 192667 169269, 192297 169269, 192299 169014, 192293 169008, 192088 169008, 192082 169014, 192082 169269, 189562 169269, 189562 168649, 189556 168643, 180417 168642, 180411 168648, 180411 169036, 178136 169036, 178135 168216, 178129 168210, 175932 168209, 175926 168215, 175943 168640, 173850 168644, 173849 168641, 173843 168637, 171956 168643, 171547 168400, 171546 168399, 170399 168034, 170397 168034, 168420 168029, 168414 168035, 168414 169036, 166140 169036, 166140 168646, 166134 168640, 157003 168641, 156997 168647, 156997 169269, 156085 169269, 156088 169014, 156082 169008, 155625 169008, 155619 169014, 155621 169269, 154599 169269, 154603 169014, 154597 169008, 154534 169008, 154528 169014, 154528 169269, 154490 169269, 154489 169014, 154483 169008, 154298 169008, 154292 169014, 154292 169269, 152655 169269, 152654 169014, 152648 169008, 152525 169008, 152519 169014, 152516 169269, 151890 169269, 151890 169014, 151884 169008, 151736 169008, 151730 169014, 151730 169269, 150150 169269, 150150 168649, 150144 168643, 139866 168642, 139860 168648, 139860 169036, 137585 169036, 137585 167495, 137579 167489, 137058 167491, 137052 167499, 137397 168640, 127296 168642, 127290 168648, 127290 169495, 126418 169495, 126418 169241, 126412 169235, 126036 169235, 126030 169241, 126035 169495, 125232 169495, 125232 169241, 125226 169235, 124834 169235, 124828 169241, 124828 169495, 124577 169495, 124577 169241, 124571 169235, 124083 169235, 124077 169241, 124077 169495, 122883 169495, 122883 169241, 122877 169235, 122176 169235, 122170 169241, 122171 169495, 122090 169495, 122090 169241, 122084 169235, 121255 169235, 121249 169241, 121249 169495, 119308 169495, 119308 165781, 119591 165784, 119597 165778, 119597 165480, 119591 165474, 119308 165474, 119308 163404, 119521 163406, 119527 163401, 119522 163394, 119308 163352, 119308 159313, 119563 159311, 119569 159305, 119569 159189, 119563 159183, 119308 159184, 119308 158933, 119563 158932, 119569 158926, 119569 158681, 119563 158675, 119308 158675, 119308 158083, 127290 158083, 127290 158200, 127043 158201, 127037 158207, 127037 158549, 127043 158555, 127290 158555, 127290 158659, 127043 158659, 127037 158665, 127037 158939, 127043 158945, 127290 158945, 127290 158983, 127043 158983, 127037 158989, 127037 159644, 127043 159650, 127290 159651, 127290 160412, 127043 160413, 127037 160419, 127037 160720, 127043 160726, 127290 160729, 127290 162555, 127296 162561, 127861 162525, 128427 162475, 128590 162505, 128592 162505, 129210 162420, 129891 162457, 130618 162512, 130619 162512, 130783 162484, 131352 162505, 131515 162540, 131517 162540, 132154 162460, 132814 162549, 132815 162549, 132977 162540, 133623 162615, 133626 162615, 134279 162417, 134374 162442, 134465 162875, 134398 163326, 134403 163333, 134678 163379, 134680 163379, 135079 163315, 135084 163309, 135084 162492, 135735 162516, 135898 162510, 136467 162516, 137191 162498, 138043 162546, 138044 162546, 138654 162459, 140111 162372, 140503 162437, 140510 162433, 140509 162428, 140101 161648, 139893 160969, 139880 160697, 140338 160134, 141078 159828, 141293 159776, 142020 159562, 142172 159500, 142699 159443, 143513 159519, 143515 159519, 144637 159393, 145596 159154, 145951 159158, 146133 159275, 146444 159683, 146715 160227, 146776 160783, 146655 161124, 146112 161461, 146111 161462, 145990 161586, 145496 161966, 144801 162259, 144610 162372, 144606 162380, 144611 162384, 145222 162476, 145385 162487, 145953 162553, 145956 162552, 146112 162481, 146112 162482, 146684 162399, 146846 162449, 146848 162449, 147578 162465, 148141 162498, 148304 162486, 148998 162564, 148999 162564, 149605 162411, 150143 162472, 150150 162466, 150150 161511, 151678 161511, 151698 161761, 151704 161767, 151962 161767, 151968 161761, 151969 161511, 152625 161511, 152625 161761, 152631 161767, 152732 161767, 152738 161761, 152738 161511, 154268 161511, 154268 161761, 154274 161767, 154854 161767, 154860 161761, 154859 161511, 155741 161511, 155738 161761, 155744 161767, 156146 161767, 156152 161761, 156153 161511, 156997 161511, 156997 162479, 157002 162485, 157680 162589, 157682 162589, 158669 162428, 159645 162455, 160580 162398, 161423 162492, 162350 162458, 163285 162466, 163379 162476, 164315 162453, 165298 162384, 165298 163176, 165300 163181, 165556 163384, 164994 163384, 164988 163389, 164991 163395, 165549 163674, 165553 163675, 166485 163496, 167428 163719, 167431 163719, 168361 163400, 168365 163393, 168359 163388, 166187 163384, 166456 163181, 166458 163176, 166455 162472, 167112 162564, 167114 162564, 167951 162480, 168885 162541, 169913 162562, 170756 162473, 171693 162528, 172628 162505, 173555 162444, 173646 162450, 174491 162382, 175428 162428, 175519 162417, 176454 162408, 177299 162446, 177395 162443, 178234 162491, 179163 162419, 179253 162434, 179254 162434, 180188 162395, 181123 162508, 182059 162449, 182904 162528, 183929 162518, 184769 162587, 185703 162463, 185794 162471, 186637 162447, 186728 162464, 187574 162535, 187575 162535, 188300 162510, 188388 162735, 188389 162736, 188795 163369, 188798 163371, 188909 163420, 188913 163421, 189430 163272, 189430 165717, 157004 165717, 156998 165723, 156997 166072, 157003 166078, 189556 166078, 189562 166072, 189562 161511, 191348 161511, 191349 161761, 191355 161767, 192311 161767, 192317 161761, 192317 161511, 193982 161511, 193982 161761, 193988 161767, 194499 161767, 194505 161761, 194505 161511, 195337 161511, 195337 161761, 195343 161767, 195749 161767, 195755 161761, 195754 161511, 196098 161511, 196098 161761, 196105 161767, 196297 161722, 196302 161716, 196296 161511, 196403 161511, 196403 162457, 196410 162463, 196900 162404, 197629 162425, 198360 162496, 198362 162496, 198641 162446, 199706 162536, 200549 162486, 200828 162530, 201559 162544, 202291 162522, 203473 162451, 204200 162520, 204202 162520, 204479 162466, 205211 162515, 205942 162505, 205943 162505, 206674 162390, 207124 162505, 207126 162505, 207405 162458, 208136 162488, 208137 162488, 208310 162452, 208308 163176, 208310 163180, 208516 163390, 208522 163392, 208721 163316, 208723 163314, 208852 163180, 208854 163176, 208851 162429, 209590 162419, 210043 162520, 210044 162520, 210594 162475, 210600 162467, 210346 161818, 210371 161465, 211497 161539, 211438 162437, 211444 162443, 212510 162450, 213235 162392, 213965 162501, 214696 162406, 215235 162523, 215237 162523, 216161 162429, 216614 162487, 217623 162463, 218640 162594, 218642 162594, 219256 162493, 219261 162487, 219261 161492, 219515 161120, 219514 161113, 219510 161111, 219261 161114, 219261 160157, 219510 160157, 219516 160151, 219516 159857, 219510 159851, 219261 159850, 219261 159793, 219510 159793, 219516 159787, 219516 159487, 219510 159481, 219261 159480, 219261 158083, 220320 158083, 220326 158078, 220440 157452, 220440 157450, 220346 156631, 220325 156106, 220283 155605, 220198 155079, 220338 154584, 220454 154062, 220454 154059, 220358 153042, 220356 152016, 220288 151516, 220262 150836, 220297 149974, 220363 149479, 220382 148957, 220382 148956, 220354 148457, 220328 147648, 220428 146906, 220428 146905, 220326 144750, 220412 143848, 220388 143345, 220269 142612, 220241 141795, 220357 141301, 220357 141300, 220387 140778, 220341 140283, 220350 139761, 220345 139258, 220412 138728, 220382 138231, 220363 137707, 220416 137210, 220416 137209, 220352 136686, 220408 135667, 220369 135170, 220416 134646, 220416 134645, 220343 134005, 220337 134000, 220332 134002, 219840 134589, 219514 135107, 219514 135108, 219268 135632, 218960 135837, 218600 135853, 218764 134811, 218764 134810, 218730 134202, 218703 134013, 218682 133256, 218751 132744, 218978 132119, 219163 131926, 219319 131914, 220301 132315, 220309 132310, 220392 131562, 220915 132039, 220916 132040, 221190 132185, 221199 132182, 221298 131884, 221298 131880, 221102 131391, 221284 130411, 221284 130409, 221157 129838, 221294 129343, 221294 129339, 221096 128808, 221095 128806, 220713 128313, 220825 127788, 220878 127295, 221223 126269, 221223 126266, 221014 125734, 221035 125240, 221034 124711, 221057 123989, 221051 123983, 220774 124006, 220516 123795, 220453 123591, 220495 123160, 220796 122897, 221048 122925, 221312 123196, 221320 123197, 221322 123190, 221094 122662, 221093 122660, 220732 122171, 221247 121143, 221248 121140, 221271 120612, 221271 120611, 221201 120118, 221201 120117, 220975 119586, 220907 119242, 220901 119237, 219261 119233, 219261 119119, 219510 119118, 219516 119112, 219516 118766, 219510 118760, 219261 118760, 219261 118659, 219510 118659, 219516 118653, 219516 118382, 219510 118376, 219261 118376, 219261 118338, 219510 118338, 219516 118332, 219516 117672, 219510 117666, 219261 117665, 219261 116906, 219510 116905, 219516 116899, 219516 116598, 219510 116592, 219261 116592, 219262 114315, 219510 114306, 219516 114301, 219510 114294, 219261 114295, 219261 112391, 220841 112391, 220847 112387, 221050 111839, 221050 111837, 221014 111387, 221022 110806, 220952 110353, 220952 110351, 220750 109767, 220762 109043, 220760 109038, 220453 108776, 220405 108436, 220457 108195, 220699 107922, 220852 107919, 220858 107914, 220989 107261, 220989 107258, 220791 106679, 220842 106226, 221239 105646, 221239 105640, 221156 105505, 221147 105504, 216915 109727, 216033 109405, 214963 108409, 214452 107979, 214451 107978, 213681 107594, 213371 107375, 212547 106935, 211403 106009, 211562 105698, 212552 104750, 213538 103841, 214308 103230, 215723 102292, 216185 102093, 216188 102091, 216287 101957, 216337 103856, 216349 105765, 216349 105767, 216447 106048, 216512 106854, 216587 107247, 216593 107253, 216597 107251, 220091 103755, 220811 104470, 220820 104469, 221263 103584, 221263 103579, 221059 103129, 220871 102551, 220947 102098, 220971 101514, 221067 101064, 221071 100687, 221067 100680, 221061 100682, 220750 100992, 220256 101278, 220274 100887, 220410 100296, 220410 100294, 220319 99858, 220225 99273, 220317 98834, 220416 98242, 220416 98240, 220352 97801, 220287 97211, 220312 96773, 220321 96183, 220351 95746, 220359 95157, 220325 94719, 220321 94129, 220366 93690, 220348 93097, 220304 92656, 220339 92062, 220357 90818, 220357 90817, 220242 90014, 220319 89575, 220378 88983, 220378 88981, 220285 88540, 220282 87945, 220291 87509, 220271 86485, 220305 85897, 220356 85458, 220282 84563, 220331 83830, 220315 83392, 220329 82802, 220310 82365, 220361 81456, 220302 80312, 220290 79718, 220313 79278, 220275 78685, 220325 78250, 220361 77664, 220209 76490, 220384 75561, 220384 75560, 220281 74137, 220277 73548, 220271 73542, 219261 73542, 219261 73001, 219510 73001, 219516 72995, 219516 72676, 219510 72670, 219261 72670, 219261 72463, 219510 72462, 219516 72456, 219516 72363, 219510 72357, 219261 72357, 219261 71786, 219510 71786, 219516 71780, 219516 71703, 219510 71697, 219261 71694, 219261 71498, 219510 71497, 219516 71491, 219516 71440, 219510 71434, 219261 71434, 219261 70120, 219515 69761, 219514 69754, 219510 69752, 219261 69759, 219261 68779, 219510 68780, 219516 68774, 219516 68408, 219510 68402, 219261 68402, 219261 68364, 219510 68363, 219516 68357, 219516 68034, 219510 68028, 219261 68027, 219261 66700, 227245 66700) (144376 167490, 144370 167495, 144372 167501, 145656 168487, 145665 168486, 146401 167499, 146400 167491, 146396 167489) (172799 163384, 172793 163389, 172797 163396, 173032 163462, 173034 163462, 173970 163489, 174906 163551, 175836 163689, 176780 163706, 177705 163647, 177708 163646, 178100 163395, 178102 163387, 178097 163384) (183060 163384, 183054 163389, 183057 163395, 183301 163540, 183305 163541, 184248 163435, 185182 163643, 185184 163643, 186167 163396, 186172 163389, 186166 163384) (199854 163384, 199848 163389, 199852 163396, 200299 163570, 200302 163570, 200517 163552, 201029 163551, 201243 163531, 201760 163641, 201762 163641, 201975 163614, 202737 163580, 202739 163579, 203118 163395, 203121 163388, 203115 163384) (217539 163384, 217533 163389, 217537 163396, 218039 163566, 218044 163565, 218344 163395, 218347 163388, 218341 163384) (179270 163384, 179264 163389, 179267 163395, 179567 163563, 179570 163564, 180513 163491, 180515 163491, 180852 163396, 180856 163389, 180850 163384) (169846 163384, 169840 163389, 169844 163396, 170235 163552, 170239 163552, 170763 163396, 170767 163389, 170761 163384) (203735 163384, 203729 163389, 203733 163396, 204163 163545, 204168 163544, 204471 163395, 204474 163388, 204468 163384) (197345 163384, 197339 163389, 197344 163396, 197592 163444, 197593 163444, 198102 163431, 198320 163542, 198326 163542, 198646 163395, 198649 163388, 198643 163384) (137874 163384, 137868 163389, 137872 163396, 138235 163507, 138239 163507, 138561 163396, 138565 163389, 138559 163384) (206747 163384, 206741 163389, 206745 163396, 207083 163506, 207088 163505, 207258 163395, 207260 163387, 207255 163384)), ((169671 152745, 170202 153253, 170927 154227, 171257 154872, 172153 156116, 172154 156117, 172595 156617, 172917 156954, 173092 157304, 172987 157689, 172694 158108, 171814 158747, 171209 159113, 168206 162129, 167381 161300, 168670 160011, 168668 160001, 168308 159867, 168306 159867, 168001 159850, 167818 159755, 167815 159754, 166727 159747, 164129 158681, 164503 158259, 165428 157177, 166125 156075, 167136 154902, 167137 154901, 167379 154495, 168150 153502, 168929 152985, 169515 152732)), ((100335 154873, 100340 154879, 100345 154877, 100551 154669, 100556 161492, 99605 161493, 99601 161445, 99595 161439, 99589 161445, 99586 161493, 98435 161494, 98436 161278, 98430 161272, 98139 161270, 98133 161276, 98133 161494, 96286 161493, 96282 159681, 96419 159684, 96425 159678, 96423 159138, 96417 159132, 96282 159132, 96282 157636, 96416 157636, 96422 157630, 96422 156997, 96416 156991, 96282 156991, 96282 156341, 96416 156341, 96422 156335, 96422 156136, 96416 156130, 96282 156131, 96282 155856, 96416 155857, 96422 155851, 96422 155697, 96416 155691, 96282 155692, 96282 155622, 96416 155614, 96422 155608, 96416 155602, 96282 155601, 96283 154664, 98837 154659, 98852 154874, 98858 154880, 98864 154874, 98865 154659, 100335 154658)), ((113941 158262, 113941 158347, 113947 158353, 114063 158357, 114069 158351, 114069 158266, 115991 158269, 115992 158353, 116001 158358, 116150 158269, 116153 161190, 115333 161187, 115308 161095, 115301 161091, 115296 161097, 115297 161188, 114461 161184, 114461 161101, 114454 161095, 114400 161101, 114395 161107, 114399 161186, 112729 161180, 112734 160582, 112838 160582, 112844 160576, 112843 160173, 112837 160167, 112730 160167, 112734 159565, 112836 159562, 112842 159556, 112843 159414, 112837 159408, 112733 159408, 112729 159098, 112834 159099, 112840 159093, 112842 158918, 112836 158912, 112731 158911, 112728 158786, 112832 158787, 112838 158781, 112840 158710, 112834 158704, 112745 158703, 112810 158668, 112813 158661, 112807 158657, 112729 158655, 112723 158260)), ((212508 156972, 213258 157082, 214087 157279, 214550 157455, 214547 157486, 214552 157493, 214990 157537, 214510 157514, 214506 157516, 212112 159731, 211970 159822, 211968 159823, 211598 160294, 210953 161072, 210811 161123, 210611 161054, 210559 160792, 210558 160790, 210322 160346, 210131 159148, 209693 157491, 209679 156920, 209750 156738, 209938 156695)), ((203880 156686, 203601 159222, 196085 157828, 196554 157073, 197215 156043, 197543 155514)), ((195255 155681, 195043 157633, 193835 157414, 194047 155461)), ((159674 152760, 159585 152853, 159587 152863, 160214 153127, 160220 153125, 160317 153030, 160382 153055, 160285 153144, 160287 153154, 160903 153412, 160909 153410, 161010 153319, 162717 154035, 162622 154119, 162621 154126, 162625 154129, 163265 154271, 162240 155265, 162212 155281, 162211 155282, 161826 155652, 161787 155703, 160816 156619, 160196 157240, 158599 156572, 158686 156482, 158684 156472, 158540 156414, 158534 156416, 158434 156506, 157501 156113, 157589 156026, 157587 156017, 157411 155940, 157405 155941, 157314 156035, 156754 155802, 156837 155709, 156835 155699, 156653 155622, 156647 155624, 156545 155717, 154422 154829, 155476 153824, 155672 153893, 155679 153890, 155676 153882, 155498 153803, 156117 153176, 156316 153262, 156322 153260, 156453 153142, 156451 153132, 156262 153060, 156331 152993, 156521 153066, 156527 153064, 156837 152754, 156835 152744, 156662 152677, 157046 152315, 157252 152362, 157259 152358, 157256 152351, 157202 152325, 157244 152341, 157251 152338, 157249 152330, 157093 152252, 157515 151856)), ((191588 155004, 191377 156957, 190166 156733, 190372 154777)), ((187923 154328, 187711 156278, 186494 156055, 186708 154102)), ((184316 153071, 184042 155601, 181606 155154, 181880 152620)), ((100281 128668, 100286 128674, 100292 128671, 100566 128252, 100575 139194, 100569 140910, 100578 141934, 100041 141938, 99816 141814, 99807 141819, 99812 141946, 99440 141938, 99410 141503, 99404 141497, 99398 141503, 99399 141939, 99298 141939, 99297 141500, 99291 141494, 99078 141507, 99072 141513, 99076 141937, 98910 141942, 98910 141508, 98904 141502, 98610 141494, 98604 141500, 98588 141940, 98449 141946, 98449 141508, 98443 141502, 97975 141499, 97969 141505, 97986 141941, 97882 141933, 97882 141504, 97876 141498, 97530 141503, 97524 141509, 97523 141943, 96297 141941, 96298 136253, 96433 136229, 96438 136223, 96432 136217, 96298 136218, 96294 134335, 96425 134335, 96431 134329, 96435 133824, 96429 133818, 96296 133818, 96296 133498, 96429 133499, 96435 133493, 96431 132123, 96425 132117, 96294 132117, 96295 130523, 96426 130522, 96432 130516, 96432 130278, 96426 130272, 96294 130271, 96294 130167, 96426 130149, 96431 130143, 96425 130137, 96296 130137, 96291 128241, 98238 128239, 98228 128673, 98234 128679, 98423 128681, 98429 128675, 98430 128241, 98690 128239, 98682 128668, 98688 128674, 98875 128685, 98881 128679, 98877 128239, 100284 128238)), ((134104 134524, 134096 134617, 134094 135586, 133961 135587, 133955 135593, 133944 136150, 133950 136156, 134088 136155, 134082 137640, 133950 137642, 133944 137648, 133934 138279, 133940 138285, 134077 138285, 134071 138940, 133937 138942, 133931 138948, 133933 139151, 133939 139157, 134071 139158, 134069 139431, 133934 139430, 133928 139436, 133928 139588, 133934 139594, 134067 139597, 134068 139664, 133933 139671, 133927 139677, 133933 139683, 134071 139685, 134062 140630, 131483 140627, 131485 140411, 131480 140405, 131473 140410, 131450 140626, 129961 140628, 129963 140412, 129958 140406, 129953 140408, 129742 140616, 129772 134800, 129779 134754, 129781 133789, 130738 133790, 130750 133856, 130756 133861, 130762 133855, 130764 133790, 131924 133792, 131925 134004, 131931 134010, 132224 134006, 132230 134000, 132227 133788, 134105 133785)), ((127290 70902, 127043 70901, 127037 70907, 127037 71203, 127043 71209, 127290 71210, 127290 71973, 127043 71974, 127037 71980, 127037 72634, 127043 72640, 127290 72640, 127290 72678, 127043 72678, 127037 72684, 127037 72964, 127043 72970, 127290 72971, 127290 73066, 127043 73066, 127037 73072, 127037 73419, 127043 73425, 127290 73426, 127290 73542, 126559 73542, 126553 73548, 126548 74588, 126527 74969, 126577 75563, 126554 76539, 126516 76920, 126617 77895, 126585 78484, 126585 78485, 126653 78861, 126620 79451, 126559 79837, 126559 79838, 126627 80432, 126607 81407, 126532 82382, 126532 82383, 126581 82763, 126522 83737, 126509 84329, 126542 84708, 126543 85301, 126501 85681, 126525 86275, 126485 86656, 126507 87630, 126558 88605, 126582 89302, 126508 90174, 126508 90175, 126565 90551, 126566 91143, 126513 91524, 126513 91525, 126541 92154, 126547 92160, 126553 92156, 126792 91430, 127165 90747, 128084 89250, 128269 89002, 128689 88086, 128918 87864, 129285 87746, 129763 87887, 130898 88455, 131162 88717, 131240 89104, 130912 90689, 130841 91624, 130841 91626, 130857 91810, 130825 92385, 130594 92945, 130324 94060, 129803 94870, 129489 95137, 129206 95118, 128285 94748, 127305 94241, 126558 93935, 126550 93941, 126572 94454, 126581 95673, 125859 95662, 125854 95664, 125641 95949, 125640 95955, 125713 96210, 125714 96212, 125854 96389, 125859 96391, 126604 96387, 126593 96998, 126607 97373, 126483 98116, 126582 98939, 126567 99317, 126585 100293, 126580 101266, 126656 102080, 126517 103083, 126639 104050, 126508 104898, 126598 106135, 126540 106737, 126577 108014, 126471 109066, 126463 109660, 126586 110636, 126586 110637, 126644 111017, 126620 111612, 126623 112385, 126629 112391, 127290 112391, 127290 113789, 127043 113789, 127037 113795, 127037 114097, 127043 114103, 127290 114104, 127290 114159, 127043 114160, 127037 114166, 127037 114462, 127043 114468, 127290 114468, 127290 115425, 127043 115424, 127037 115429, 127038 115433, 127289 115795, 127038 116195, 127043 116204, 127290 116200, 127290 117156, 127043 117156, 127037 117162, 127037 117457, 127043 117463, 127290 117464, 127290 117520, 127043 117520, 127037 117526, 127037 117833, 127043 117839, 127290 117840, 127290 119233, 120514 119233, 120508 119239, 120508 126033, 120248 125720, 120240 125719, 120237 125724, 120235 126046, 119619 126042, 119615 125700, 119609 125694, 119477 125686, 119471 125692, 119469 126039, 119370 126043, 119370 125698, 119364 125692, 119226 125688, 119220 125694, 119215 126046, 118221 126041, 118221 123016, 118293 123016, 118299 123010, 118299 122013, 118293 122007, 118221 122006, 118221 119650, 118293 119649, 118299 119643, 118299 119309, 118293 119303, 118221 119303, 118222 118862, 118292 118871, 118299 118865, 118299 118051, 118293 118045, 118221 118046, 118221 115882, 118217 115876, 117796 115734, 117788 115739, 117780 115797, 117155 115655, 117180 115551, 117175 115544, 117022 115508, 117015 115513, 117003 115618, 116029 115391, 116034 115289, 116029 115283, 115914 115256, 115907 115262, 115900 115360, 115224 115210, 115206 115092, 115200 115087, 115194 115093, 115187 115201, 113211 114744, 113353 113598, 113515 113613, 113522 113608, 113517 113601, 113349 113562, 113372 113377, 113538 113415, 113545 113409, 113549 113360, 113544 113354, 113380 113315, 113436 112812, 113605 112850, 113612 112845, 113628 112704, 113624 112697, 113457 112649, 113465 112534, 113635 112576, 113642 112571, 113677 112313, 113672 112306, 113504 112267, 113552 111806, 113757 111851, 113764 111847, 113759 111839, 113555 111790, 113609 111331, 115799 111831, 115782 111935, 115787 111942, 116275 112053, 116282 112048, 116302 111946, 116479 111990, 116472 112096, 116477 112102, 116855 112185, 116862 112180, 116872 112073, 118319 112412, 118300 112496, 118306 112503, 118985 112541, 118792 114128, 118792 114130, 118795 114160, 118675 115090, 118681 115097, 119195 115090, 119186 115443, 119192 115449, 119302 115451, 119308 115445, 119308 114981, 119563 114983, 119569 114977, 119569 114623, 119564 114617, 119374 114585, 119563 114585, 119569 114579, 119569 114282, 119563 114276, 119308 114275, 119308 113773, 119563 113773, 119569 113767, 119569 113559, 119563 113553, 119308 113553, 119308 113446, 119563 113445, 119569 113439, 119569 113279, 119563 113273, 119308 113274, 119308 112936, 119563 112936, 119569 112930, 119569 112766, 119563 112760, 119308 112747, 119308 112391, 121064 112391, 121070 112385, 121070 111017, 121064 111011, 120339 111003, 120339 110935, 120528 110934, 120534 110930, 120595 110790, 120589 110782, 120339 110782, 120339 110529, 120589 110528, 120595 110522, 120595 110142, 120589 110136, 120339 110135, 120339 109516, 120589 109515, 120595 109509, 120595 109302, 120589 109296, 120339 109296, 120339 108103, 120589 108103, 120595 108097, 120595 107528, 120589 107522, 120108 107522, 120109 106516, 120333 106516, 120339 106510, 120368 105670, 120362 105664, 120108 105663, 120108 103972, 120362 103971, 120368 103965, 120368 103883, 120362 103877, 120108 103878, 120108 103535, 120362 103535, 120368 103529, 120368 103424, 120362 103418, 120108 103417, 120108 102684, 120445 102684, 120450 102682, 120710 102377, 120709 102369, 120705 102367, 120451 102367, 120451 100763, 120705 100762, 120711 100756, 120711 100584, 120705 100578, 120451 100578, 120451 100249, 120705 100248, 120711 100242, 120711 100078, 120705 100072, 120451 100072, 120451 97825, 120445 97819, 120225 97819, 120225 94918, 120475 94918, 120481 94912, 120481 94307, 120475 94301, 120225 94303, 120225 92975, 120333 92975, 120339 92969, 120339 90006, 120334 90000, 119658 89826, 119508 89550, 119501 89547, 119498 89550, 119350 89866, 118706 89695, 118706 89429, 118701 89423, 118321 89327, 118314 89333, 118315 89593, 117453 89371, 117451 89106, 117446 89100, 117439 89106, 117433 89366, 117299 89321, 117286 89060, 117282 89054, 116903 88954, 116895 88960, 116889 89225, 115928 88974, 115782 88581, 115773 88578, 115624 88657, 115159 88533, 115158 88272, 115154 88266, 114924 88206, 114916 88212, 114919 88474, 114399 88334, 114402 88074, 114397 88068, 114276 88041, 114269 88047, 114266 88302, 113590 88128, 113590 87864, 113585 87858, 113448 87835, 113441 87841, 113440 88075, 113253 88039, 113248 87775, 113243 87769, 112999 87709, 112992 87715, 112989 87975, 112194 87762, 112048 87608, 112039 87609, 111894 87925, 111534 87833, 111531 87566, 111526 87560, 111376 87522, 111369 87528, 111365 87780, 111037 87686, 111042 87439, 111038 87433, 110882 87392, 110874 87398, 110867 87657, 110653 87601, 110652 87340, 110648 87334, 110520 87295, 110512 87301, 110510 87566, 109960 87422, 109960 87159, 109956 87153, 109704 87084, 109696 87090, 109693 87353, 109622 87333, 109619 87069, 109614 87063, 109257 86971, 109250 86977, 109247 87237, 108474 87038, 108319 86640, 108321 85961, 108317 85955, 108276 85943, 108272 83803, 108420 83605, 110132 84051, 110137 84304, 110142 84310, 110149 84304, 110156 84055, 110917 84255, 110954 84526, 110960 84531, 110966 84525, 110968 84268, 111843 84496, 111991 84768, 111998 84771, 112001 84768, 112148 84458, 112781 84618, 112782 84885, 112787 84891, 113161 84984, 113168 84978, 113168 84722, 114017 84941, 114053 85218, 114059 85223, 114065 85217, 114063 84952, 114204 84994, 114203 85253, 114207 85259, 114567 85354, 114575 85348, 114574 85084, 115572 85343, 115717 85738, 115726 85741, 115877 85663, 116339 85795, 116335 86038, 116340 86044, 116574 86097, 116581 86091, 116581 85847, 117101 85978, 117099 86240, 117103 86246, 117225 86284, 117233 86278, 117231 86018, 117913 86194, 117915 86456, 117920 86462, 118053 86495, 118060 86489, 118061 86230, 118249 86281, 118255 86545, 118259 86551, 118500 86619, 118508 86613, 118507 86348, 119303 86552, 119455 86713, 119464 86711, 119606 86394, 119971 86487, 119967 86752, 119972 86758, 120127 86797, 120134 86791, 120133 86529, 120455 86616, 120457 86739, 120463 86745, 120623 86748, 120629 86742, 120632 86661, 120704 86677, 120711 86671, 120711 86560, 120705 86554, 120451 86558, 120451 86218, 120705 86220, 120711 86214, 120711 85908, 120705 85902, 120451 85906, 120451 85661, 120705 85661, 120711 85655, 120711 85464, 120705 85458, 120451 85454, 120451 85065, 120705 85064, 120711 85058, 120711 84740, 120705 84734, 120451 84736, 120451 84629, 120705 84627, 120711 84621, 120711 84441, 120705 84435, 120458 84436, 120451 83756, 120705 83758, 120711 83752, 120711 83445, 120705 83439, 120451 83442, 120451 83261, 120445 83255, 120225 83255, 120225 82211, 120475 82209, 120481 82203, 120480 81454, 120474 81448, 120225 81447, 120225 80000, 120445 80004, 120451 79998, 120451 79882, 120445 79876, 120225 79876, 120225 78608, 120445 78605, 120451 78599, 120451 78453, 120445 78447, 120225 78446, 120225 78410, 120445 78410, 120451 78404, 120451 77298, 120672 77297, 120678 77289, 120426 76693, 121064 76692, 121070 76686, 121070 73548, 121064 73542, 119308 73541, 119308 72955, 119563 72957, 119569 72951, 119569 72700, 119563 72694, 119308 72694, 119308 72441, 119563 72444, 119569 72438, 119569 72326, 119563 72320, 119308 72319, 119308 70131, 127290 70131) (125639 111254, 125574 111562, 125574 111564, 125639 111922, 125645 111927, 125651 111921, 125651 111255, 125646 111249) (125639 107979, 125467 108647, 125467 108650, 125639 109048, 125647 109052, 125651 109046, 125651 107980, 125646 107974) (125640 103498, 125489 103765, 125489 103771, 125640 104058, 125647 104061, 125651 104055, 125651 103501, 125646 103495) (120967 90172, 120967 92963, 120776 92963, 120770 92969, 120770 97825, 120776 97831, 120997 97831, 120997 102678, 121003 102684, 121064 102684, 121070 102678, 121070 90200, 121066 90194, 120975 90166) (125639 93577, 125521 94029, 125522 94034, 125640 94256, 125647 94259, 125651 94253, 125651 93579, 125646 93573) (125639 89557, 125489 90129, 125489 90133, 125639 90540, 125646 90544, 125651 90538, 125651 89559, 125646 89553) (125639 84375, 125464 84970, 125464 84972, 125482 85263, 125483 85943, 125506 86233, 125394 86918, 125394 86920, 125420 87208, 125442 87893, 125438 88188, 125438 88189, 125639 88721, 125646 88725, 125651 88719, 125651 84377, 125646 84371) (125639 81031, 125592 81362, 125605 82042, 125490 82336, 125490 82340, 125639 82764, 125646 82768, 125651 82762, 125651 81032, 125646 81026)), ((133160 117222, 133497 117540, 134001 117977, 135242 118878, 135243 118879, 135886 119204, 136877 119957, 137371 120469, 137383 120620, 137127 121210, 136608 121986, 135614 122753, 135212 122990, 134052 123994, 132964 124688, 131433 126003, 130368 123404, 130361 122317, 130360 122314, 130258 122133, 130244 121832, 130244 121830, 130116 121463, 130106 121461, 128811 122755, 127988 121932, 131000 118928, 131001 118927, 131367 118328, 132002 117447, 132424 117143, 132806 117046)), ((173001 106432, 172901 106683, 172908 106691, 173144 106663, 173149 106659, 173217 106431, 173457 106433, 173379 106682, 173385 106690, 173530 106696, 173536 106692, 173612 106435, 174122 106434, 174207 106445, 174817 106453, 174739 106705, 174745 106713, 175220 106710, 175226 106706, 175301 106453, 176045 106469, 175997 106642, 176001 106650, 176009 106646, 176065 106457, 176814 106478, 175733 110127, 175566 110109, 175559 110113, 175446 110495, 175452 110503, 175621 110498, 175556 110712, 175393 110699, 175387 110703, 175349 110820, 175353 110701, 175348 110695, 174531 110486, 174526 110488, 174234 110769, 174106 110115, 174100 110110, 173697 110114, 173694 110115, 173418 110270, 173258 110160, 173268 109657, 173267 109654, 173208 109565, 173201 109562, 172928 109645, 172925 109648, 172863 109736, 172498 109618, 172450 109147, 172448 109143, 172321 109040, 172316 109039, 171603 109106, 171281 109027, 171118 108767, 171113 108764, 171009 108771, 170683 108585, 170932 107736, 170952 107691, 171327 106408)), ((203706 94221, 205206 94725, 205208 94725, 205770 94754, 206543 94904, 206896 94930, 207648 95049, 208116 95175, 209084 95347, 209153 95631, 208206 97880, 207967 98325, 207598 99150, 206823 100343, 206822 100344, 206770 100479, 206773 100486, 206779 100486, 208023 99767, 209219 99091, 210762 98244, 211337 99195, 210383 100078, 210382 100085, 210386 100088, 210951 100151, 211142 100463, 211082 100937, 210794 101544, 210636 101745, 210250 102310, 209606 103017, 209408 103252, 208815 103842, 207624 101866, 207616 101864, 207255 102096, 206774 101837, 206397 101395, 206351 101139, 206345 101134, 206340 101137, 206108 101593, 206108 101599, 206386 102016, 206393 102525, 206441 102819, 206365 103319, 206339 104057, 206213 104935, 206118 105046, 206117 105050, 206143 108401, 205930 108925, 205477 108566, 203557 107317, 202864 106733, 202462 106436, 201893 105908, 200693 104824, 200605 104488, 201065 104171, 201776 103630, 202413 103204, 202717 103036, 203360 102573, 203754 102368, 205018 101221, 205497 101011, 205607 101065, 205615 101063, 205616 101058, 205377 100495, 204302 98164, 204300 98162, 203979 97823, 203700 97349, 203368 96703, 202992 96129, 202984 96001, 202983 95999, 202776 95534, 202929 94534, 203179 94251, 203378 94197)), ((134377 86878, 134263 87029, 134264 87037, 134273 87037, 134390 86888, 134867 87240, 134775 87364, 134776 87373, 135070 87597, 135079 87596, 135171 87470, 135251 87531, 135161 87650, 135162 87659, 135318 87773, 135327 87772, 135416 87654, 135946 88054, 135883 88189, 135885 88197, 135893 88196, 135986 88071, 137430 89156, 136425 90502, 136319 90418, 136310 90419, 136247 90503, 136248 90512, 136355 90595, 135977 91102, 135868 91024, 135859 91025, 135799 91105, 135800 91114, 135907 91199, 135410 91868, 135303 91781, 135294 91782, 135221 91880, 135222 91889, 135332 91974, 134535 93041, 133556 92326, 132107 91240, 132068 91219, 130992 90411, 131343 90174, 131344 90164, 131236 90086, 132134 88878, 132243 88959, 132252 88958, 132559 88550, 132558 88542, 132502 88481, 132566 88529, 132575 88528, 132920 88062, 132919 88053, 132810 87969, 133893 86519)), ((100555 70099, 100022 70097, 99795 70036, 99787 70042, 99790 70097, 99424 70097, 99393 69884, 99387 69879, 99381 69885, 99380 70101, 99278 70101, 99278 69885, 99272 69879, 99065 69879, 99059 69885, 99058 70101, 98891 70095, 98890 69885, 98884 69879, 98580 69879, 98574 69885, 98574 70101, 98434 70095, 98433 69885, 98427 69879, 97967 69879, 97961 69885, 97960 70101, 97864 70101, 97864 69885, 97858 69879, 97513 69879, 97507 69885, 97508 70101, 96282 70098, 96282 67772, 96417 67752, 96422 67746, 96416 67740, 96282 67740, 96282 67327, 96416 67326, 96422 67320, 96422 67253, 96416 67247, 96282 67248, 96282 66213, 96416 66212, 96422 66206, 96422 65893, 96416 65887, 96282 65887, 96282 65685, 96416 65685, 96422 65679, 96422 65160, 96416 65154, 96280 65154, 96297 64228, 96444 64222, 96450 64217, 96444 64210, 96280 64211, 96276 63271, 97847 63266, 97847 63480, 97853 63486, 98330 63486, 98336 63480, 98338 63268, 98407 63269, 98407 63480, 98413 63486, 98864 63486, 98870 63480, 98871 63266, 100140 63272, 100135 63483, 100144 63488, 100554 63264))) \ No newline at end of file diff --git a/stress_benchmark/resources/027.settings b/stress_benchmark/resources/027.settings new file mode 100644 index 0000000000..bfb55d304d --- /dev/null +++ b/stress_benchmark/resources/027.settings @@ -0,0 +1,632 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=2 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.15 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=40 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=11 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.3 +raft_acceleration=3500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=True +zig_zaggify_support=True +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=0.5 +cool_min_speed=6 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +material_print_temperature=215 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=0.6 +infill_sparse_thickness=0.15 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_none +jerk_wall_x=50.0 +infill=0 +coasting_speed=90 +bridge_skin_density=80 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=3500 +speed_travel=150 +layer_0_z_overlap=0.125 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.3 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.04 +wipe_retraction_speed=45 +retraction_amount=6.5 +bridge_skin_density_2=100 +support_tower_diameter=3.0 +jerk_skirt_brim=30 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=2.85 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=30 +raft_surface_fan_speed=100 +default_material_bed_temperature=60 +speed_ironing=20 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +skin_angles=[] +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.8 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3500 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=True +support_xy_distance=0.7 +speed_wall=100 +bottom_thickness=1 +raft_interface_jerk=50.0 +material_shrinkage_percentage=100.3 +support_interface_wall_count=1 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.08 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=230 +brim_gap=0.14500000000000002 +acceleration_support_infill=2000 +support_meshes_present=False +travel_avoid_distance=3 +raft_interface_speed=57.5 +jerk_prime_tower=50.0 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150 +acceleration_topbottom=3500 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=100 +skin_overlap=20 +print_sequence=all_at_once +infill_overlap=0 +support_interface_material_flow=95.0 +skin_material_flow_layer_0=95 +bridge_skin_material_flow_2=95.0 +speed_support_interface=20 +machine_max_acceleration_x=9000 +support_interface_height=0.3 +skirt_height=3 +support_roof_pattern=zigzag +support_mesh=False +inset_direction=outside_in +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=100 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=45 +material_print_temperature_layer_0=215 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=50.0 +machine_max_feedrate_e=45 +retraction_enable=True +support_line_distance=0.5 +extruder_prime_pos_abs=True +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=1 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3500 +interlocking_orientation=22.5 +speed_wall_0_roofing=30 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=0.4 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=30.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=15 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=30 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=1.3 +bridge_skin_speed=30 +skirt_brim_material_flow=100 +acceleration_support_roof=1500 +support_roof_offset=0.8 +travel_retract_before_outer_wall=False +machine_height=300 +prime_tower_base_size=3 +infill_enable_travel_optimization=False +speed_support_infill=25 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=2 +jerk_wall_0=30 +mold_angle=40 +raft_speed=15 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=40 +acceleration_support=2000 +cool_min_temperature=205 +jerk_layer_0=30 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=1 +acceleration_enabled=True +prime_tower_base_height=0.15 +fill_outline_gaps=True +meshfix_maximum_resolution=0.7 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=1.9 +raft_interface_line_spacing=0.8 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=6 +support_join_distance=2.0 +wipe_hop_amount=2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=300 +machine_width=330 +extruder_prime_pos_y=6 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=115 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=True +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.6000000000000001 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=110.00000000000001 +quality_name=Normal +material_final_print_temperature=200 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.93 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=False +acceleration_skirt_brim=1500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=100 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=100 +roofing_layer_count=1 +speed_slowdown_layers=1 +default_material_print_temperature=215 +conical_overhang_angle=50 +infill_overlap_mm=0 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=1 +wall_distribution_count=1 +raft_airgap=0.25 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=100 +lightning_infill_straightening_angle=40 +speed_topbottom=100 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=7200 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=45 +machine_max_jerk_z=0.4 +support_tree_angle=45 +expand_skins_expand_distance=0.8 +prime_tower_position_y=213.2 +mesh_position_x=0 +cross_infill_pocket_size=0.4 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=25 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=1500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=2 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +raft_surface_acceleration=3500 +minimum_support_area=0.0 +brim_width=7 +small_skin_width=4 +shell=0 +jerk_print=50.0 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=15 +z_seam_x=0.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=95.0 +acceleration_wall=3500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=95.0 +support_interface_pattern=zigzag +initial_bottom_layers=7 +bridge_fan_speed_2=100 +support_use_towers=True +support_extruder_nr=1 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1500 +retraction_hop_enabled=True +layer_start_y=228.0 +extruder_prime_pos_x=-3 +build_volume_temperature=24 +retraction_retract_speed=45 +zig_zaggify_infill=True +extruder_prime_pos_z=2 +support_tower_roof_angle=0 +prime_tower_position_x=305 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=7 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.8 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.3 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=zigzag +material_alternate_walls=False +material_break_preparation_speed=50 +acceleration_support_bottom=100 +material_end_of_filament_purge_length=20 +speed_print=100 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3500 +carve_multiple_volumes=True +raft_surface_thickness=0.15 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=2142.8571428571427 +speed_equalize_flow_width_factor=110.0 +wipe_brush_pos_x=100 +jerk_wall_0_roofing=30 +skin_material_flow=95.0 +support_bottom_density=100 +bridge_skin_density_3=100 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=100 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=50 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=95.0 +speed_print_layer_0=45 +raft_jerk=50.0 +speed_support=25 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=50.0 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=False +jerk_support_bottom=20 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=1000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1.0 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=30 +support_infill_extruder_nr=1 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +support_bottom_pattern=zigzag +support_roof_height=0.3 +gradual_support_infill_steps=2 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1 +min_skin_width_for_expansion=6.429395695523605e-17 +wall_x_material_flow=100 +infill_material_flow=95.0 +ironing_monotonic=False +retraction_extrusion_window=1 +support_fan_enable=False +infill_wipe_dist=0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=1500 +material_shrinkage_percentage_z=100.3 +material_guid=03f24266-0291-43c2-a6da-5211892a2699 +support_roof_line_distance=0.4 +brim_line_count=18 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=1500 +wall_transition_angle=10 +top_thickness=1 +machine_center_is_zero=False +extruders_enabled_count=2 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.8 +bridge_wall_speed=30 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=50.0 +wall_transition_filter_distance=100 +raft_interface_fan_speed=50.0 +bridge_wall_coast=0 +skirt_line_count=1 +infill_mesh=False +layer_height=0.15 +material_break_preparation_retracted_position=-14 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=150 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=95.0 +machine_max_feedrate_y=300 +alternate_carve_order=True +jerk_roofing=30 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +acceleration_prime_tower=2000 +retraction_hop_after_extruder_switch_height=2 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=2 +xy_offset_layer_0=-0.095 +skirt_brim_extruder_nr=-1 +z_seam_relative=True +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=205 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=3500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=80 +material_shrinkage_percentage_xy=100.3 +bridge_skin_material_flow=95.0 +raft_base_jerk=50.0 +speed_wall_x=100 +time=10:26:42 +machine_buildplate_type=glass +top_layers=7 +machine_gcode_flavor=Griffin +roofing_angles=[] +jerk_ironing=50.0 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.22499999999999998 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=55 +support_bottom_extruder_nr=1 +speed_support_roof=20 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=3000 +speed_roofing=45 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=20 +material_bed_temp_wait=True +machine_depth=240 +bridge_wall_material_flow=100 +jerk_travel=50.0 +retraction_speed=45 +xy_offset=-0.015 +print_temperature=200 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=50.0 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=120.0 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=45 +raft_surface_speed=100 +material_name=empty +acceleration_wall_0=1500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=50.0 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/027.wkt b/stress_benchmark/resources/027.wkt new file mode 100644 index 0000000000..026926c0a1 --- /dev/null +++ b/stress_benchmark/resources/027.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((165176 119605, 165191 119612, 165809 119528, 165814 119526, 166113 119374, 165603 119864, 165598 119875, 165593 120336, 165253 120350, 165240 120359, 165003 120937, 165002 120942, 164985 121273, 164816 120588, 164809 120579, 164413 120346, 164568 120044, 164567 120028, 164186 119536, 164182 119532, 163901 119349, 164580 119545, 164591 119544, 164992 119317))) \ No newline at end of file diff --git a/stress_benchmark/resources/028.settings b/stress_benchmark/resources/028.settings new file mode 100644 index 0000000000..b8537c9277 --- /dev/null +++ b/stress_benchmark/resources/028.settings @@ -0,0 +1,631 @@ +material_bed_temperature=60 +support_tree_rest_preference=buildplate +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=1.6 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=8 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=zigzag +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=1 +raft_acceleration=3000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=False +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.1 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.6666666666666665 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100.0 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=220 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=4.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=3000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0.3 +acceleration_wall_x_roofing=3000 +speed_travel=120 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=25 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=30.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=20.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3000 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=30.0 +bottom_thickness=0.8 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.1 +small_feature_max_length=0.0 +wall_line_count=4 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=220 +brim_gap=0 +acceleration_support_infill=3000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=22.5 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=30.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=120 +acceleration_topbottom=3000 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=60 +skin_overlap=25 +print_sequence=all_at_once +infill_overlap=0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=40.0 +machine_max_acceleration_x=9000 +support_interface_height=1 +skirt_height=3 +support_roof_pattern=concentric +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=60.0 +material_print_temperature_layer_0=220 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=2.6666666666666665 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=False +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3000 +interlocking_orientation=22.5 +speed_wall_0_roofing=30.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=1.6 +minimum_bottom_area=1.0 +infill_line_distance=0.4 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=33.333333333333336 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=50 +raft_base_speed=22.5 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=50 +skirt_brim_material_flow=100 +acceleration_support_roof=3000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=900 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=60 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=25 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=1 +jerk_wall_0=20 +mold_angle=40 +raft_speed=30.0 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=3000 +cool_min_temperature=220 +jerk_layer_0=20 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=5 +support_join_distance=2.0 +wipe_hop_amount=1 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=450 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=25 +roofing_pattern=zigzag +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +quality_name=Coarse +material_final_print_temperature=220 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=True +cool_fan_speed_min=100.0 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=50 +roofing_layer_count=1 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.1 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=50 +lightning_infill_straightening_angle=40 +speed_topbottom=30.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=30.0 +machine_max_jerk_z=0.4 +support_tree_angle=50 +expand_skins_expand_distance=1.6 +prime_tower_position_y=280.575 +mesh_position_x=0 +cross_infill_pocket_size=0.4 +interlocking_enable=False +support_tree_top_rate=10 +wall_line_width_0=0.4 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=3000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=3000 +minimum_support_area=0.0 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=brim +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=0 +z_seam_x=225.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=3000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=concentric +initial_bottom_layers=5 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=3000 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=25 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=440.575 +bridge_wall_min_length=3.0 +experimental=0 +bottom_layers=5 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=buildplate +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=zigzag +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=3000 +material_end_of_filament_purge_length=20 +speed_print=60 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100.0 +acceleration_travel_layer_0=5000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=20 +skin_material_flow=100 +support_bottom_density=100 +bridge_skin_density_3=80 +support_interface_enable=False +support_roof_wall_count=0 +infill_sparse_density=100 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=30.0 +raft_jerk=20 +speed_support=60 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=1.6 +acceleration_ironing=3000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=60 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=25 +support_bottom_pattern=concentric +support_roof_height=1 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=6.123233995736766e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=6.5 +support_fan_enable=False +infill_wipe_dist=0.1 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=3000 +material_shrinkage_percentage_z=100.0 +material_guid=4f14d5fb-3b32-4bc4-adc2-e83693b02d69 +support_roof_line_distance=0.4 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=3000 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=50 +support_roof_enable=False +alternate_extra_perimeter=False +remove_empty_first_layers=False +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=0.0 +skirt_line_count=1 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=60.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.32 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=False +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=zigzag +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +machine_name=Unknown +acceleration_prime_tower=3000 +retraction_hop_after_extruder_switch_height=1 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=220 +material_break_retracted_position=-50 +slicing_tolerance=exclusive +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=False +dual=0 +raft_interface_acceleration=3000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=95 +raft_base_jerk=20 +speed_wall_x=60.0 +time=10:42:02 +machine_buildplate_type=glass +top_layers=5 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=1.6 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=900 +support_bottom_extruder_nr=0 +speed_support_roof=40.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=30.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=40.0 +material_bed_temp_wait=True +machine_depth=310 +bridge_wall_material_flow=95 +jerk_travel=30 +retraction_speed=25 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=310 +bottom_skin_expand_distance=1.6 +infill_support_angle=40 +speed_layer_0=30.0 +raft_surface_speed=30.0 +material_name=empty +acceleration_wall_0=3000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/028.wkt b/stress_benchmark/resources/028.wkt new file mode 100644 index 0000000000..f412731098 --- /dev/null +++ b/stress_benchmark/resources/028.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409)), ((304291 234278, 304213 234268, 304209 234256)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635)), ((263149 232614, 263148 232634, 262998 232699, 262943 232710, 262943 232707, 263148 232615, 262970 232644, 262967 232628, 263142 232543)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287)), ((262946 77330, 262946 77335, 262861 77308)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340)), ((304210 75744, 304213 75732, 304293 75722)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405)), ((302030 75040, 302005 75052, 302026 75021)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299741 233580, 299454 233446, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246950 170896, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791) (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654))) \ No newline at end of file diff --git a/stress_benchmark/resources/029.settings b/stress_benchmark/resources/029.settings new file mode 100644 index 0000000000..38caf27106 --- /dev/null +++ b/stress_benchmark/resources/029.settings @@ -0,0 +1,631 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=1.2000000000000002 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=8 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=2 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.6 +raft_acceleration=3000 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=True +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.6666666666666665 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=220 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=50 +acceleration_support_interface=3000 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_inner +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=1.3333333333333333 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=3000 +speed_travel=180 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=4.0 +meshfix_maximum_deviation=0.025 +wipe_retraction_speed=40 +retraction_amount=6.5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=1 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=75.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=60 +speed_ironing=46.666666666666664 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3000 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3000 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.5 +speed_wall=75.0 +bottom_thickness=1.0 +raft_interface_jerk=20 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=15.707963267948966 +wall_line_count=3 +material_print_temp_prepend=False +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=220 +brim_gap=0 +acceleration_support_infill=3000 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=56.25 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=20 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=180 +acceleration_topbottom=3000 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=150 +skin_overlap=10 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=53.333333333333336 +machine_max_acceleration_x=9000 +support_interface_height=0.6 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=150.0 +material_print_temperature_layer_0=220 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=299792458000 +retraction_enable=True +support_line_distance=2.6666666666666665 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3000 +interlocking_orientation=22.5 +speed_wall_0_roofing=75.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=1.2000000000000002 +minimum_bottom_area=1.0 +infill_line_distance=5.333333333333333 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=5 +support_tree_angle_slow=40.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=60 +raft_base_speed=56.25 +raft_remove_inside_corners=False +ironing_only_highest_layer=True +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=35.0 +skirt_brim_material_flow=100 +acceleration_support_roof=3000 +support_roof_offset=0.0 +travel_retract_before_outer_wall=False +machine_height=320 +prime_tower_base_size=4.0 +infill_enable_travel_optimization=False +speed_support_infill=80 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=40 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=60 +retraction_hop=0.3 +jerk_wall_0=10 +mold_angle=40 +raft_speed=75.0 +prime_tower_wipe_enabled=True +support_roof_density=60 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=299792458000 +acceleration_support=3000 +cool_min_temperature=220 +jerk_layer_0=20 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=4 +support_join_distance=2.0 +wipe_hop_amount=0.3 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=299792458000 +machine_width=264 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=40 +roofing_pattern=lines +material_bed_temp_prepend=False +material=0 +infill_before_walls=False +material_standby_temperature=175 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=True +wall_0_material_flow_layer_0=100 +quality_name=Normal +material_final_print_temperature=220 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=3000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=50 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=35.0 +roofing_layer_count=0 +speed_slowdown_layers=5 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.6 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=35.0 +lightning_infill_straightening_angle=40 +speed_topbottom=70 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=25 +machine_max_jerk_z=0.4 +support_tree_angle=60 +expand_skins_expand_distance=1.2000000000000002 +prime_tower_position_y=106.775 +mesh_position_x=0 +cross_infill_pocket_size=5.333333333333333 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=90 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=1.2000000000000002 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=3000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=3000 +minimum_support_area=0.0 +brim_width=4.0 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=skirt +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=10 +z_seam_x=0.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=3000 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=5 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=3000 +retraction_hop_enabled=True +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=40 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=142.0 +bridge_wall_min_length=1.9 +experimental=0 +bottom_layers=5 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=grid +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=3000 +material_end_of_filament_purge_length=20 +speed_print=150 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=3000 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=5000.0 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=10 +skin_material_flow=100 +support_bottom_density=60 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=15 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=25 +raft_jerk=20 +speed_support=80 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=20 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=1.2000000000000002 +acceleration_ironing=3000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=150 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=40 +support_bottom_pattern=grid +support_roof_height=0.6 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1.0 +min_skin_width_for_expansion=6.123233995736766e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=6.5 +support_fan_enable=False +infill_wipe_dist=0.1 +machine_shape=elliptic +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=3000 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=1.3333333333333333 +brim_line_count=10 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=3000 +wall_transition_angle=10 +top_thickness=1.0 +machine_center_is_zero=True +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=37.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=2 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=True +conical_overhang_enabled=False +speed_travel_layer_0=50 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=299792458000 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.2 +machine_extruders_share_nozzle=False +machine_name=Unknown +acceleration_prime_tower=3000 +retraction_hop_after_extruder_switch_height=0.3 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=60 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=220 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=3000 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=15 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=20 +speed_wall_x=150.0 +time=10:51:35 +machine_buildplate_type=glass +top_layers=5 +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=50 +top_skin_preshrink=1.2000000000000002 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=60 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=0 +support_bottom_extruder_nr=0 +speed_support_roof=53.333333333333336 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=4000 +speed_roofing=70 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=53.333333333333336 +material_bed_temp_wait=True +machine_depth=264 +bridge_wall_material_flow=50 +jerk_travel=25 +retraction_speed=40 +xy_offset=0 +print_temperature=220 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=132.0 +bottom_skin_expand_distance=1.2000000000000002 +infill_support_angle=50 +speed_layer_0=25 +raft_surface_speed=75.0 +material_name=empty +acceleration_wall_0=3000 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/029.wkt b/stress_benchmark/resources/029.wkt new file mode 100644 index 0000000000..ba3c3f48af --- /dev/null +++ b/stress_benchmark/resources/029.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((1211 -19762, 662 -10796, 985 -10781, 1537 -10716, 1628 -10701, 2978 -19575, 4683 -19074, 2581 -10513, 2598 -10509, 3105 -10371, 3513 -10238, 6373 -18578, 4683 -19074, 4721 -19228, 6425 -18728, 6373 -18578, 8078 -18077, 4416 -9881, 4574 -9812, 5045 -9579, 5284 -9445, 4882 -8726, 5645 -8253, 6107 -8929, 5948 -9046, 5503 -9323, 5284 -9445, 9666 -17279, 11176 -16344, 6107 -8929, 6795 -8427, 6886 -8350, 6362 -7714, 7027 -7113, 7608 -7701, 7579 -7730, 7196 -8088, 6886 -8350, 12596 -15276, 13915 -14085, 7608 -7701, 7944 -7354, 8267 -6988, 7636 -6455, 8184 -5745, 8859 -6219, 8619 -6551, 8292 -6960, 8267 -6988, 15122 -12781, 16206 -11374, 8859 -6219, 8926 -6126, 9213 -5686, 9380 -5399, 8666 -4988, 9078 -4191, 9826 -4536, 9725 -4757, 9477 -5233, 9380 -5399, 17160 -9875, 17977 -8297, 9826 -4536, 9949 -4269, 10149 -3768, 10324 -3258, 10474 -2740, 10597 -2215, 10694 -1684, 10764 -1149, 10811 -576, 10826 0, 10822 177, 19796 323, 19688 2096, 10761 1146, 10810 728, 10822 177, 9998 164, 9943 1059, 10761 1146, 10716 1537, 10623 2086, 10509 2599, 10386 3050, 18998 5579, 18421 7259, 10070 3968, 10209 3603, 10371 3105, 10386 3050, 9594 2818, 9303 3666, 10070 3968, 10022 4094, 9812 4574, 9673 4855, 17696 8881, 16829 10432, 9198 5703, 9046 5948, 8643 6499, 15825 11898, 14695 13269, 8034 7254, 7730 7579, 7354 7944, 7352 7946, 13446 14533, 11992 15553, 12089 15679, 10636 16700, 10550 16565, 11992 15553, 6610 8572, 6960 8292, 7352 7946, 6790 7339, 6106 7918, 6610 8572, 6551 8619, 6126 8926, 5815 9129, 10550 16565, 9095 17586, 4972 9613, 5233 9477, 5686 9213, 5815 9129, 5372 8434, 4594 8881, 4972 9613, 4757 9725, 4269 9949, 4090 10020, 7482 18331, 5809 18928, 3176 10348, 3258 10324, 3768 10149, 4090 10020, 3779 9257, 2934 9559, 3176 10348, 2740 10474, 2236 10592, 4089 19372, 2336 19661, 1277 10747, 1684 10694, 2214 10597, 2236 10592, 2065 9783, 1180 9929, 1277 10747, 1149 10764, 575 10811, 308 10818, 564 19791, -1211 19762, -662 10796, -985 10781, -1537 10716, -1628 10701, -1504 9885, -2384 9711, -2581 10513, -2086 10623, -1628 10701, -2978 19575, -4683 19074, -2581 10513, -2599 10509, -3105 10371, -3513 10238, -3245 9458, -4080 9129, -4416 9881, -4094 10022, -3603 10209, -3513 10238, -6373 18578, -4683 19074, -4721 19228, -6425 18728, -6373 18578, -8078 18077, -4416 9881, -4574 9812, -5045 9579, -5284 9445, -9666 17279, -11176 16344, -6107 8929, -6795 8427, -6886 8350, -12595 15274, -13915 14085, -7608 7701, -7944 7354, -8267 6988, -7636 6455, -8184 5745, -8859 6219, -8619 6551, -8292 6960, -8267 6988, -15122 12781, -16206 11374, -8859 6219, -8926 6126, -9213 5686, -9380 5399, -8666 4988, -9078 4191, -9826 4536, -9725 4757, -9477 5233, -9380 5399, -17160 9875, -17977 8297, -9826 4536, -9949 4269, -10149 3768, -10324 3258, -10474 2740, -10597 2215, -10694 1684, -10764 1149, -10811 576, -10826 0, -10818 -177, -19795 -323, -19688 -2096, -10762 -1146, -10716 -1537, -10623 -2086, -10509 -2599, -10386 -3050, -18998 -5579, -18421 -7259, -10070 -3968, -10209 -3603, -10371 -3105, -10386 -3050, -9594 -2818, -9303 -3666, -10070 -3968, -10022 -4094, -9812 -4574, -9579 -5045, -9323 -5503, -9199 -5703, -16829 -10432, -15825 -11898, -8643 -6499, -9046 -5948, -9199 -5703, -8499 -5269, -7992 -6009, -8643 -6499, -8427 -6795, -8088 -7196, -8034 -7254, -14695 -13269, -13447 -14533, -7352 -7946, -7354 -7944, -7730 -7579, -8034 -7254, -7421 -6701, -6791 -7339, -7352 -7946, -6960 -8292, -6610 -8572, -12089 -15679, -10636 -16700, -5815 -9129, -6126 -8926, -6551 -8619, -6610 -8572, -6106 -7918, -5372 -8434, -5815 -9129, -5686 -9213, -5233 -9477, -4757 -9725, -4269 -9949, -4090 -10020, -7482 -18331, -5809 -18928, -3176 -10348, -2740 -10474, -2236 -10592, -4089 -19372, -2336 -19661, -1277 -10747, -1684 -10694, -2215 -10597, -2236 -10592, -2065 -9783, -1180 -9929, -1277 -10747, -1149 -10764, -576 -10811, -308 -10818, -564 -19791) (-662 10796, 0 10826, 308 10818, 285 9995, -612 9980) (-308 -10818, -285 -9995, 612 -9980, 662 -10796, 0 -10826)), ((1831 -37382, 3665 -37248, 5489 -37022, 7297 -36709, 9092 -36306, 10860 -35816, 12608 -35239, 14320 -34579, 16000 -33834, 17641 -33008, 19240 -32103, 20792 -31120, 22294 -30062, 23743 -28932, 25134 -27732, 26465 -26465, 27732 -25134, 28910 -23770, 30063 -22293, 31119 -20793, 32104 -19239, 33008 -17642, 33835 -15998, 34578 -14322, 35241 -12604, 35815 -10863, 36307 -9088, 36708 -7301, 37023 -5485, 37247 -3668, 37382 -1829, 37412 0, 37383 1832, 37247 3665, 37022 5489, 36709 7297, 36306 9092, 35816 10860, 35239 12608, 34579 14320, 33834 16000, 33008 17641, 32103 19240, 31120 20792, 30062 22294, 28932 23743, 27732 25134, 26465 26465, 25134 27732, 23770 28910, 22293 30063, 20793 31119, 19238 32104, 17642 33008, 15998 33835, 14322 34578, 12604 35241, 10863 35815, 9088 36307, 7301 36708, 5485 37023, 3668 37247, 1829 37382, 0 37427, -1831 37382, -3665 37248, -5489 37022, -7297 36709, -9092 36306, -10860 35816, -12608 35239, -14320 34579, -16001 33834, -17641 33008, -19240 32103, -20792 31120, -22294 30062, -23743 28932, -25134 27732, -26465 26465, -27732 25134, -28910 23770, -30063 22293, -31119 20793, -32104 19239, -33008 17642, -33835 15998, -34578 14322, -35241 12604, -35815 10863, -36307 9088, -36708 7301, -37023 5485, -37247 3668, -37382 1829, -37412 0, -37383 -1832, -37248 -3665, -37022 -5489, -36709 -7297, -36306 -9092, -35816 -10860, -35239 -12608, -34579 -14320, -33834 -16000, -33009 -17641, -32103 -19240, -31120 -20792, -30062 -22294, -28932 -23743, -27732 -25134, -26465 -26465, -25134 -27732, -23770 -28910, -22293 -30063, -20793 -31119, -19238 -32104, -17643 -33008, -15998 -33835, -14322 -34578, -12604 -35241, -10863 -35815, -9088 -36307, -7301 -36708, -5485 -37023, -3668 -37247, -1829 -37382, 0 -37427) (-968 -19849, -1936 -19778, -2862 -19666, -3797 -19506, -4737 -19300, -5678 -19044, -6617 -18739, -7550 -18383, -8473 -17976, -9374 -17523, -10242 -17030, -11088 -16492, -11911 -15908, -12706 -15281, -13469 -14613, -14198 -13905, -14890 -13162, -15541 -12385, -16152 -11578, -16717 -10746, -17237 -9890, -17711 -9015, -18136 -8125, -18513 -7223, -18844 -6313, -19126 -5398, -19361 -4483, -19549 -3570, -19701 -2611, -19804 -1654, -19859 -701, -19873 0, -19849 968, -19779 1936, -19666 2862, -19506 3797, -19300 4737, -19044 5678, -18739 6617, -18383 7550, -17976 8473, -17523 9374, -17030 10242, -16492 11088, -15908 11911, -15281 12706, -14613 13469, -13905 14198, -13162 14890, -12385 15541, -11578 16152, -10746 16717, -9890 17237, -9015 17711, -8125 18136, -7223 18513, -6313 18844, -5398 19126, -4483 19361, -3570 19549, -2611 19701, -1654 19804, -701 19859, 0 19873, 968 19849, 1936 19778, 2862 19666, 3797 19506, 4737 19300, 5678 19044, 6617 18739, 7550 18383, 8473 17976, 9374 17523, 10242 17030, 11088 16492, 11911 15908, 12706 15281, 13469 14613, 14198 13905, 14889 13162, 15541 12385, 16152 11578, 16717 10746, 17237 9890, 17711 9015, 18136 8125, 18513 7223, 18844 6313, 19126 5398, 19361 4483, 19549 3570, 19701 2611, 19804 1654, 19859 701, 19872 -21, 19849 -968, 19778 -1936, 19666 -2862, 19506 -3797, 19300 -4737, 19044 -5678, 18739 -6617, 18383 -7550, 17976 -8473, 17523 -9374, 17030 -10242, 16492 -11088, 15908 -11911, 15281 -12706, 14613 -13469, 13905 -14198, 13162 -14890, 12385 -15541, 11578 -16152, 10746 -16717, 9890 -17237, 9015 -17711, 8125 -18136, 7223 -18513, 6313 -18844, 5398 -19126, 4483 -19361, 3570 -19549, 2610 -19701, 1654 -19804, 701 -19859, 0 -19873))) \ No newline at end of file diff --git a/stress_benchmark/resources/030.settings b/stress_benchmark/resources/030.settings new file mode 100644 index 0000000000..433def02f4 --- /dev/null +++ b/stress_benchmark/resources/030.settings @@ -0,0 +1,632 @@ +material_bed_temperature=60 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.1 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=True +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=40 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=11 +cool_fan_full_layer=1 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.2 +raft_acceleration=3500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=True +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.30000000000000004 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=0.5 +cool_min_speed=4 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=20 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=15 +layer_start_x=330.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=6.5 +material_break_temperature=60 +acceleration_support_interface=1000 +adhesion_extruder_nr=0 +mold_width=5 +gradual_support_infill_step_height=0.4 +infill_sparse_thickness=0.1 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_none +jerk_wall_x=20 +infill=0 +coasting_speed=90 +bridge_skin_density=80 +support_bottom_line_distance=0.4 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=1500 +speed_travel=150 +layer_0_z_overlap=0.125 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.1 +material_bed_temperature_layer_0=60 +support_tree_limit_branch_reach=True +support_brim_width=1.2000000000000002 +meshfix_maximum_deviation=3 +wipe_retraction_speed=45 +retraction_amount=6.5 +bridge_skin_density_2=100 +support_tower_diameter=3.0 +jerk_skirt_brim=20 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0.4 +material_diameter=2.85 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=20 +raft_surface_fan_speed=100 +default_material_bed_temperature=60 +speed_ironing=20.0 +machine_max_acceleration_e=10000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=3500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.2 +skin_angles=[] +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.8 +machine_max_acceleration_y=9000 +support_tree_min_height_to_model=3 +acceleration_infill=3500 +travel_avoid_supports=False +draft_shield_enabled=False +minimum_interface_area=1.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.7 +speed_wall=30 +bottom_thickness=1 +raft_interface_jerk=20 +material_shrinkage_percentage=100.2 +support_interface_wall_count=1 +machine_max_jerk_e=5.0 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.08 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=210 +brim_gap=0.14 +acceleration_support_infill=2000 +support_meshes_present=False +travel_avoid_distance=0.75 +raft_interface_speed=22.5 +jerk_prime_tower=20 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=20.0 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150 +acceleration_topbottom=1000 +machine_settings=0 +prime_tower_brim_enable=True +gradual_infill_step_height=1.5 +speed_infill=70 +skin_overlap=20 +print_sequence=all_at_once +infill_overlap=10 +support_interface_material_flow=95.0 +skin_material_flow_layer_0=95 +bridge_skin_material_flow_2=95.0 +speed_support_interface=30 +machine_max_acceleration_x=9000 +support_interface_height=0.2 +skirt_height=3 +support_roof_pattern=zigzag +support_mesh=False +inset_direction=outside_in +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=100 +infill_support_enabled=False +support_brim_line_count=3 +blackmagic=0 +speed_wall_x_roofing=30 +material_print_temperature_layer_0=200 +bridge_settings_enabled=True +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=20 +machine_max_feedrate_e=45 +retraction_enable=True +support_line_distance=0.5 +extruder_prime_pos_abs=True +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=3500 +interlocking_orientation=22.5 +speed_wall_0_roofing=20 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=1.0 +infill_line_distance=6.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=40.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=60 +raft_base_speed=15 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=20 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=0.75 +bridge_skin_speed=30 +skirt_brim_material_flow=100 +acceleration_support_roof=1000 +support_roof_offset=0.8 +travel_retract_before_outer_wall=False +machine_height=300 +prime_tower_base_size=15 +infill_enable_travel_optimization=False +speed_support_infill=20 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=100 +retraction_hop=2 +jerk_wall_0=20 +mold_angle=40 +raft_speed=15 +prime_tower_wipe_enabled=True +support_roof_density=100 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=40 +acceleration_support=2000 +cool_min_temperature=190 +jerk_layer_0=20 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=True +prime_tower_base_height=0.1 +fill_outline_gaps=True +meshfix_maximum_resolution=0.5 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=1.6 +raft_interface_line_spacing=0.8 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=6 +support_join_distance=2.0 +wipe_hop_amount=2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=300 +machine_width=330 +extruder_prime_pos_y=6 +retraction_extra_prime_amount=0 +z_seam_type=sharpest_corner +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=True +material_standby_temperature=100 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=True +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.6000000000000001 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=110.00000000000001 +quality_name=Fine +material_final_print_temperature=185 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.91 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=False +acceleration_skirt_brim=1000 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=no_outer_surfaces +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=100 +ironing_inset=0.38 +speed_z_hop=10 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=30 +roofing_layer_count=1 +speed_slowdown_layers=1 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.04 +mesh_position_z=0 +machine_max_jerk_xy=20.0 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.8 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.25 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.30000000000000004 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=30 +lightning_infill_straightening_angle=40 +speed_topbottom=30 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=False +material_maximum_park_duration=7200 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=10.0 +machine_max_jerk_z=0.4 +support_tree_angle=60 +expand_skins_expand_distance=0.8 +prime_tower_position_y=203.45 +mesh_position_x=0 +cross_infill_pocket_size=6.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=25 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.30000000000000004 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=1000 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=50 +raft_surface_acceleration=3500 +minimum_support_area=0.0 +brim_width=7 +small_skin_width=0.8 +shell=0 +jerk_print=20 +adhesion_type=raft +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=15 +z_seam_x=165.0 +acceleration_travel=5000 +ironing_enabled=False +support_bottom_material_flow=95.0 +acceleration_wall=1500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.1 +bridge_skin_material_flow_3=95.0 +support_interface_pattern=zigzag +initial_bottom_layers=10 +bridge_fan_speed_2=100 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=1000 +retraction_hop_enabled=False +layer_start_y=237.0 +extruder_prime_pos_x=-3 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=True +extruder_prime_pos_z=2 +support_tower_roof_angle=0 +prime_tower_position_x=313.45 +bridge_wall_min_length=2.1 +experimental=0 +bottom_layers=10 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.2 +skin_edge_support_layers=4 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.3 +roofing_extruder_nr=-1 +jerk_support=20 +wall_line_width_x=0.4 +support_bottom_wall_count=1 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=triangles +material_alternate_walls=False +material_break_preparation_speed=50 +acceleration_support_bottom=1000 +material_end_of_filament_purge_length=20 +speed_print=70 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=1500 +carve_multiple_volumes=False +raft_surface_thickness=0.1 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=1428.5714285714287 +speed_equalize_flow_width_factor=110.0 +wipe_brush_pos_x=100 +jerk_wall_0_roofing=20 +skin_material_flow=95.0 +support_bottom_density=100 +bridge_skin_density_3=100 +support_interface_enable=True +support_roof_wall_count=1 +infill_sparse_density=20 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=95.0 +speed_print_layer_0=10.0 +raft_jerk=20 +speed_support=20 +jerk_support_interface=20 +machine_disallowed_areas=[] +minimum_roof_area=1.0 +raft_surface_jerk=20 +adaptive_layer_height_variation_step=0.01 +support_conical_min_width=5.0 +acceleration_travel_enabled=False +jerk_support_bottom=20 +jerk_travel_enabled=False +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=60 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=1000 +prime_tower_flow=100 +support_xy_overrides_z=z_overrides_xy +machine_nozzle_tip_outer_diameter=1.0 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=30 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0 +wipe_retraction_retract_speed=45 +support_bottom_pattern=zigzag +support_roof_height=0.2 +gradual_support_infill_steps=2 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=1 +min_skin_width_for_expansion=6.123233995736766e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=1 +support_fan_enable=False +infill_wipe_dist=0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=0.8 +acceleration_layer_0=1000 +material_shrinkage_percentage_z=100.1 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +support_roof_line_distance=0.4 +brim_line_count=18 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=1500 +wall_transition_angle=10 +top_thickness=1 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.8 +bridge_wall_speed=30 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=20 +wall_transition_filter_distance=100 +raft_interface_fan_speed=50.0 +bridge_wall_coast=0 +skirt_line_count=1 +infill_mesh=False +layer_height=0.1 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=150 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=95.0 +machine_max_feedrate_y=300 +alternate_carve_order=True +jerk_roofing=20 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0 +machine_extruders_share_nozzle=False +acceleration_prime_tower=2000 +retraction_hop_after_extruder_switch_height=2 +skirt_gap=3 +wall_0_material_flow_roofing=100 +jerk_support_roof=20 +machine_extruder_count=2 +xy_offset_layer_0=-0.09 +skirt_brim_extruder_nr=0 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=190 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=3500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=80 +material_shrinkage_percentage_xy=100.2 +bridge_skin_material_flow=95.0 +raft_base_jerk=20 +speed_wall_x=30 +time=11:54:33 +machine_buildplate_type=glass +top_layers=10 +machine_gcode_flavor=Griffin +roofing_angles=[] +jerk_ironing=20 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=10 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.2 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=55 +support_bottom_extruder_nr=0 +speed_support_roof=30 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=True +magic_fuzzy_skin_enabled=False +machine_acceleration=3000 +speed_roofing=30 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=True +speed_support_bottom=30 +material_bed_temp_wait=True +machine_depth=240 +bridge_wall_material_flow=100 +jerk_travel=20 +retraction_speed=45 +xy_offset=-0.010000000000000002 +print_temperature=200 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=20 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=240 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=10.0 +raft_surface_speed=30 +material_name=empty +acceleration_wall_0=1500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=20 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/030.wkt b/stress_benchmark/resources/030.wkt new file mode 100644 index 0000000000..0772ef253f --- /dev/null +++ b/stress_benchmark/resources/030.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((165545 104990, 166144 105023, 166739 105081, 167332 105162, 167922 105267, 168506 105395, 169505 105667, 170226 105918, 170226 105917, 171059 106256, 171602 106509, 172135 106783, 173046 107311, 173905 107904, 174613 108458, 175285 109054, 175699 109458, 176112 109894, 176504 110344, 176881 110811, 177238 111293, 177576 111788, 177893 112296, 178191 112816, 178466 113347, 178721 113890, 179119 114861, 179118 114861, 179437 115859, 179591 116439, 179778 117318, 179873 117909, 179944 118505, 180007 119400, 180020 120000, 180007 120599, 179947 121473, 179873 122091, 179778 122682, 179597 123539, 179437 124140, 179260 124712, 179061 125278, 179062 125278, 178721 126109, 178466 126652, 178190 127183, 177666 128079, 177238 128706, 176881 129188, 176504 129655, 176112 130105, 175684 130556, 175034 131176, 174581 131567, 174111 131939, 173628 132294, 172877 132787, 172099 133235, 171564 133508, 170744 133877, 169924 134190, 169334 134381, 169334 134380, 168466 134613, 167880 134740, 167290 134843, 166420 134952, 165502 135010, 164903 135020, 164006 134987, 163408 134935, 162518 134813, 161929 134703, 161055 134492, 160194 134230, 160194 134231, 159632 134029, 159076 133803, 158532 133557, 158532 133556, 157732 133144, 157213 132843, 156707 132523, 156214 132183, 155503 131636, 154823 131047, 154405 130646, 153989 130215, 153397 129539, 152847 128827, 152505 128336, 152182 127831, 151736 127050, 151466 126516, 151101 125694, 150884 125135, 150883 125135, 150691 124570, 150442 123705, 150306 123123, 150307 123123, 150147 122238, 150070 121643, 150002 120899, 149980 120150, 149996 119273, 150070 118355, 150147 117760, 150307 116876, 150443 116293, 150692 115428, 150884 114863, 150885 114862, 150885 114861, 151217 114028, 151466 113482, 151737 112948, 152183 112167, 152506 111662, 152847 111171, 153397 110459, 153788 110005, 154195 109566, 154853 108923, 155304 108529, 155768 108151, 156248 107792, 156742 107452, 157249 107135, 157768 106835, 158300 106557, 158841 106300, 159797 105904, 160521 105663, 160521 105664, 161386 105421, 161970 105288, 162560 105180, 163320 105070, 164326 104995, 164945 104980) (164828 109971, 164229 110000, 163633 110063, 163631 110063, 163041 110163, 162456 110297, 162455 110297, 161879 110466, 161316 110670, 161315 110671, 160764 110907, 160229 111177, 160228 111177, 159710 111477, 159209 111809, 159208 111810, 158730 112171, 158273 112560, 158272 112561, 157854 112960, 157345 113509, 157344 113510, 156884 114104, 156458 114730, 156457 114731, 156097 115379, 155836 115919, 155836 115920, 155609 116474, 155415 117042, 155414 117043, 155255 117621, 155130 118207, 155130 118209, 155041 118802, 154974 119557, 154974 120299, 155010 120897, 155010 120898, 155077 121472, 155188 122084, 155188 122085, 155330 122667, 155553 123388, 155554 123390, 155836 124079, 156097 124619, 156097 124620, 156388 125144, 156795 125780, 156796 125781, 157251 126369, 157750 126940, 157751 126941, 158303 127466, 158761 127853, 158762 127854, 159242 128213, 159726 128532, 159727 128533, 160264 128841, 160782 129101, 160783 129101, 161353 129343, 161918 129545, 161919 129546, 162495 129712, 163080 129844, 163081 129844, 163797 129963, 164548 130019, 164550 130019, 165170 130028, 165769 129999, 165770 129999, 166366 129936, 166956 129836, 166957 129836, 167543 129702, 168118 129533, 168119 129532, 168682 129328, 169359 129038, 169361 129038, 170033 128676, 170542 128359, 170543 128358, 171015 128025, 171500 127637, 171501 127636, 171945 127235, 172351 126822, 172352 126822, 172747 126370, 173114 125896, 173114 125895, 173451 125400, 173759 124885, 173760 124884, 174036 124352, 174280 123804, 174280 123803, 174544 123097, 174743 122379, 174744 122377, 174868 121791, 174957 121198, 174957 121197, 175011 120600, 175030 120001, 175030 120000, 175013 119422, 174943 118650, 174943 118648, 174782 117759, 174584 117044, 174583 117043, 174389 116475, 174162 115921, 174162 115920, 173902 115380, 173610 114856, 173609 114855, 173202 114219, 172747 113631, 172747 113629, 172248 113058, 171696 112533, 171694 112532, 171237 112145, 170756 111786, 170272 111467, 169735 111159, 169733 111158, 169215 110898, 168645 110656, 168644 110656, 168079 110454, 167504 110288, 167503 110287, 166917 110155, 166201 110036, 166200 110036, 165449 109980, 164829 109971))) \ No newline at end of file diff --git a/stress_benchmark/resources/031.settings b/stress_benchmark/resources/031.settings new file mode 100644 index 0000000000..25fa556794 --- /dev/null +++ b/stress_benchmark/resources/031.settings @@ -0,0 +1,628 @@ +material_bed_temperature=50 +support_tree_rest_preference=graceful +relative_extrusion=False +wall_0_inset=0 +resolution=0 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +skin_preshrink=0.8 +clean_between_layers=False +support_interface_skip_height=0.2 +machine_feeder_wheel_diameter=10.0 +retraction_hop_only_when_collides=False +machine_steps_per_mm_y=50 +support_tree_branch_diameter=5 +smooth_spiralized_contours=True +mold_roof_height=0.5 +support_zag_skip_count=10 +material_type=empty +cooling=0 +cool_min_layer_time_fan_speed_max=10 +cool_fan_full_layer=4 +top_bottom_pattern=lines +skirt_brim_line_width=0.4 +center_object=False +support_mesh_drop_down=True +infill_multiplier=1 +initial_layer_line_width_factor=100.0 +support_bottom_height=0.8 +raft_acceleration=500 +material_is_support_material=False +machine_minimum_feedrate=0.0 +optimize_wall_printing_order=True +wipe_hop_enable=False +zig_zaggify_support=False +min_bead_width=0.34 +switch_extruder_prime_speed=20 +wall_x_extruder_nr=-1 +machine_firmware_retract=False +switch_extruder_retraction_speeds=20 +support_z_distance=0.2 +meshfix_union_all=True +layer_height_0=0.2 +support_initial_layer_line_distance=2.0 +cool_min_speed=10 +cool_fan_enabled=True +cool_fan_speed_max=100 +wall_overhang_angle=90 +jerk_support_infill=8 +wall_overhang_speed_factor=100 +support_roof_line_width=0.4 +switch_extruder_extra_prime_amount=0 +draft_shield_dist=10 +coasting_volume=0.064 +machine_endstop_positive_direction_z=True +machine_min_cool_heat_time_window=50.0 +layer_start_x=0.0 +material_print_temperature=200 +min_even_wall_line_width=0.34 +interlocking_boundary_avoidance=2 +minimum_polygon_circumference=1.0 +raft_base_wall_count=1 +wipe_retraction_amount=5 +material_break_temperature=50 +acceleration_support_interface=500 +adhesion_extruder_nr=-1 +mold_width=5 +gradual_support_infill_step_height=1 +infill_sparse_thickness=0.2 +brim_smart_ordering=True +z_seam_corner=z_seam_corner_weighted +jerk_wall_x=8 +infill=0 +coasting_speed=90 +bridge_skin_density=100 +support_bottom_line_distance=2.4000240002400024 +support_bottom_stair_step_height=0 +acceleration_wall_x_roofing=500 +speed_travel=150.0 +layer_0_z_overlap=0.15 +infill_mesh_order=0 +support=0 +ironing_pattern=zigzag +support_infill_sparse_thickness=0.2 +material_bed_temperature_layer_0=50 +support_tree_limit_branch_reach=True +support_brim_width=4 +meshfix_maximum_deviation=2.9 +wipe_retraction_speed=45 +retraction_amount=5 +bridge_skin_density_2=75 +support_tower_diameter=3.0 +jerk_skirt_brim=8 +machine_heat_zone_length=16 +top_bottom_extruder_nr=-1 +machine_steps_per_mm_x=50 +support_bottom_line_width=0.4 +meshfix_union_all_remove_holes=False +support_wall_count=0 +machine_max_acceleration_z=100 +skin_edge_support_thickness=0 +material_diameter=1.75 +flow_rate_max_extrusion_offset=0 +max_skin_angle_for_expansion=90 +machine_extruders_share_heater=False +cool_lift_head=False +speed_wall_0=25.0 +raft_surface_fan_speed=0 +default_material_bed_temperature=50 +speed_ironing=16.666666666666668 +machine_max_acceleration_e=5000 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel=0 +connect_infill_polygons=False +raft_base_acceleration=500 +wall_extruder_nr=-1 +support_structure=normal +support_xy_distance_overhang=0.4 +machine_steps_per_mm_z=50 +support_tree_bp_diameter=7.5 +infill_line_width=0.4 +magic_fuzzy_skin_outside_only=False +skin_line_width=0.4 +support_interface_offset=0.0 +machine_max_acceleration_y=500 +support_tree_min_height_to_model=3 +acceleration_infill=500 +travel_avoid_supports=True +draft_shield_enabled=False +minimum_interface_area=10 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +support_xy_distance=0.8 +speed_wall=25.0 +bottom_thickness=0.8 +raft_interface_jerk=8 +material_shrinkage_percentage=100.0 +support_interface_wall_count=0 +machine_max_jerk_e=5 +raft_margin=15 +roofing_monotonic=True +skin_overlap_mm=0.04 +small_feature_max_length=0.0 +wall_line_count=2 +material_print_temp_prepend=True +wall_transition_filter_deviation=0.1 +material_break_preparation_temperature=200 +brim_gap=0 +acceleration_support_infill=500 +support_meshes_present=False +travel_avoid_distance=0.625 +raft_interface_speed=18.75 +jerk_prime_tower=8 +skin_outline_count=1 +mold_enabled=False +jerk_travel_layer_0=8 +platform_adhesion=0 +ooze_shield_dist=2 +speed=0 +travel_speed=150.0 +acceleration_topbottom=500 +machine_settings=0 +prime_tower_brim_enable=False +gradual_infill_step_height=1.5 +speed_infill=50.0 +skin_overlap=10.0 +print_sequence=all_at_once +infill_overlap=30.0 +support_interface_material_flow=100 +skin_material_flow_layer_0=100 +bridge_skin_material_flow_2=100 +speed_support_interface=25.0 +machine_max_acceleration_x=500 +support_interface_height=0.8 +skirt_height=3 +support_roof_pattern=grid +support_mesh=False +inset_direction=inside_out +wall_0_material_flow=100 +meshfix_maximum_extrusion_area_deviation=50000 +cool_fan_speed_0=0 +infill_support_enabled=False +support_brim_line_count=10 +blackmagic=0 +speed_wall_x_roofing=25.0 +material_print_temperature_layer_0=200 +bridge_settings_enabled=False +raft_base_fan_speed=0 +prime_tower_line_width=0.4 +jerk_wall_x_roofing=8 +machine_max_feedrate_e=50 +retraction_enable=True +support_line_distance=2.0 +extruder_prime_pos_abs=False +material_adhesion_tendency=0 +machine_extruders_shared_nozzle_initial_retraction=0 +prime_tower_base_curve_magnitude=4 +support_tower_maximum_supported_diameter=3.0 +support_interface_extruder_nr=0 +nozzle_disallowed_areas=[] +machine_heated_bed=True +machine_use_extruder_offset_to_offset_coords=True +acceleration_print=500 +interlocking_orientation=22.5 +speed_wall_0_roofing=25.0 +sub_div_rad_add=0.4 +bottom_skin_preshrink=0.8 +minimum_bottom_area=10 +infill_line_distance=6.0 +wall_0_extruder_nr=-1 +hole_xy_offset_max_diameter=0 +small_hole_max_size=0 +support_tree_angle_slow=30.0 +support_interface_line_width=0.4 +support_skip_zag_per_mm=20 +support_angle=45 +raft_base_speed=18.75 +raft_remove_inside_corners=False +ironing_only_highest_layer=False +roofing_line_width=0.4 +hole_xy_offset=0 +jerk_print_layer_0=8 +material_anti_ooze_retracted_position=-4 +machine_nozzle_cool_down_speed=2.0 +bridge_skin_speed=12.5 +skirt_brim_material_flow=100 +acceleration_support_roof=500 +support_roof_offset=0.0 +travel_retract_before_outer_wall=True +machine_height=250 +prime_tower_base_size=8.0 +infill_enable_travel_optimization=False +speed_support_infill=25.0 +raft_base_line_spacing=1.6 +max_extrusion_before_wipe=10 +ironing_line_spacing=0.1 +wipe_retraction_prime_speed=45 +wipe_pause=0 +prime_tower_raft_base_line_spacing=1.6 +support_bottom_stair_step_width=5.0 +support_interface_density=33.333 +retraction_hop=0.2 +jerk_wall_0=8 +mold_angle=40 +raft_speed=25.0 +prime_tower_wipe_enabled=True +support_roof_density=33.333 +prime_tower_enable=False +top_bottom=0 +machine_max_feedrate_z=10 +acceleration_support=500 +cool_min_temperature=200 +jerk_layer_0=8 +support_offset=0.8 +material_flow=100 +support_roof_extruder_nr=0 +acceleration_enabled=False +prime_tower_base_height=0.2 +fill_outline_gaps=False +meshfix_maximum_resolution=0.25 +wipe_repeat_count=5 +brim_inside_margin=2.5 +machine_nozzle_heat_up_speed=2.0 +raft_interface_line_spacing=1.0 +material_flush_purge_length=60 +wipe_retraction_enable=True +day=Thu +cool_min_layer_time=10 +support_join_distance=2.0 +wipe_hop_amount=0.2 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_feedrate_x=500 +machine_width=235 +extruder_prime_pos_y=0 +retraction_extra_prime_amount=0 +z_seam_type=back +retraction_prime_speed=45 +roofing_pattern=lines +material_bed_temp_prepend=True +material=0 +infill_before_walls=False +material_standby_temperature=180 +brim_outside_only=True +support_conical_angle=30 +machine_heated_build_volume=False +wall_line_width=0.4 +retract_at_layer_change=False +wall_transition_length=0.4 +command_line_settings=0 +raft_surface_layers=2 +skirt_brim_minimal_length=250 +raft_interface_line_width=0.8 +small_skin_on_surface=False +skin_no_small_gaps_heuristic=False +wall_0_material_flow_layer_0=100 +material_final_print_temperature=200 +machine_endstop_positive_direction_x=False +ooze_shield_angle=60 +raft_surface_line_spacing=0.4 +material_no_load_move_factor=0.940860215 +infill_wall_line_count=0 +support_supported_skin_fan_speed=100 +nozzle_offsetting_for_disallowed_areas=True +acceleration_skirt_brim=500 +meshfix=0 +material_flow_layer_0=100 +retraction_combing=noskin +wall_material_flow=100 +meshfix_keep_open_polygons=False +skin_monotonic=False +cool_fan_speed_min=100 +wipe_move_distance=20 +bridge_fan_speed_3=0 +ironing_inset=0.38 +speed_z_hop=5 +magic_fuzzy_skin_point_dist=0.8 +bridge_skin_speed_3=12.5 +roofing_layer_count=0 +speed_slowdown_layers=2 +default_material_print_temperature=200 +conical_overhang_angle=50 +infill_overlap_mm=0.12 +mesh_position_z=0 +machine_max_jerk_xy=10 +cutting_mesh=False +meshfix_maximum_travel_resolution=0.25 +support_extruder_nr_layer_0=0 +wall_distribution_count=1 +raft_airgap=0.3 +material_flush_purge_speed=0.5 +material_print_temp_wait=True +support_top_distance=0.2 +retraction_hop_after_extruder_switch=True +bridge_skin_speed_2=12.5 +lightning_infill_straightening_angle=40 +speed_topbottom=25.0 +raft_smoothing=5 +anti_overhang_mesh=False +bridge_enable_more_layers=True +material_maximum_park_duration=300 +machine_nozzle_temp_enabled=True +switch_extruder_retraction_amount=16 +skirt_brim_speed=20.0 +machine_max_jerk_z=0.4 +support_tree_angle=45 +expand_skins_expand_distance=0.8 +prime_tower_position_y=202.375 +mesh_position_x=0 +cross_infill_pocket_size=6.0 +interlocking_enable=False +support_tree_top_rate=30 +wall_line_width_0=0.4 +retraction_count_max=100 +material_id=empty_material +support_tree_branch_diameter_angle=7 +interlocking_beam_width=0.8 +support_bottom_distance=0.2 +wall_thickness=0.8 +machine_steps_per_mm_e=1600 +material_crystallinity=False +travel_avoid_other_parts=True +acceleration_print_layer_0=500 +z_seam_position=back +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +machine_nozzle_expansion_angle=45 +min_odd_wall_line_width=0.34 +support_conical_enabled=False +material_anti_ooze_retraction_speed=5 +raft_surface_acceleration=500 +minimum_support_area=2 +brim_width=8.0 +small_skin_width=0.8 +shell=0 +jerk_print=8 +adhesion_type=skirt +draft_shield_height=10 +machine_always_write_active_tool=False +retraction_combing_max_distance=30 +z_seam_x=117.5 +acceleration_travel=500 +ironing_enabled=False +support_bottom_material_flow=100 +acceleration_wall=500 +raft_base_extruder_nr=0 +raft_surface_line_width=0.4 +raft_interface_layers=1 +adaptive_layer_height_variation=0.04 +bridge_skin_material_flow_3=110 +support_interface_pattern=grid +initial_bottom_layers=4 +bridge_fan_speed_2=0 +support_use_towers=True +support_extruder_nr=0 +switch_extruder_retraction_speed=20 +raft_surface_extruder_nr=0 +acceleration_roofing=500 +retraction_hop_enabled=False +layer_start_y=0.0 +extruder_prime_pos_x=0 +build_volume_temperature=28 +retraction_retract_speed=45 +zig_zaggify_infill=False +extruder_prime_pos_z=0 +support_tower_roof_angle=65 +prime_tower_position_x=222.375 +bridge_wall_min_length=2.2 +experimental=0 +bottom_layers=4 +infill_offset_y=0 +magic_fuzzy_skin_thickness=0.3 +meshfix_extensive_stitching=False +wall_0_wipe_dist=0.0 +skin_edge_support_layers=0 +support_type=everywhere +support_skip_some_zags=False +support_line_width=0.4 +ooze_shield_enabled=False +raft_base_thickness=0.24 +roofing_extruder_nr=-1 +jerk_support=8 +wall_line_width_x=0.4 +support_bottom_wall_count=0 +connect_skin_polygons=False +meshfix_fluid_motion_enabled=True +infill_pattern=cubic +material_alternate_walls=False +material_break_preparation_speed=2 +acceleration_support_bottom=500 +material_end_of_filament_purge_length=20 +speed_print=50.0 +flow_rate_extrusion_offset_factor=100 +acceleration_wall_x=500 +carve_multiple_volumes=False +raft_surface_thickness=0.2 +coasting_min_volume=0.8 +cool_fan_speed=100 +acceleration_travel_layer_0=500 +speed_equalize_flow_width_factor=100.0 +wipe_brush_pos_x=100 +machine_nozzle_id=unknown +jerk_wall_0_roofing=8 +skin_material_flow=100 +support_bottom_density=33.333 +bridge_skin_density_3=80 +support_interface_enable=True +support_roof_wall_count=0 +infill_sparse_density=20 +infill_extruder_nr=-1 +interlocking_beam_layer_count=2 +bridge_sparse_infill_max_density=0 +draft_shield_height_limitation=full +wall_x_material_flow_layer_0=100 +speed_print_layer_0=20.0 +raft_jerk=8 +speed_support=25.0 +jerk_support_interface=8 +minimum_roof_area=10 +raft_surface_jerk=8 +adaptive_layer_height_variation_step=0.04 +support_conical_min_width=5.0 +acceleration_travel_enabled=True +jerk_support_bottom=8 +jerk_travel_enabled=True +conical_overhang_hole_size=0 +group_outer_walls=True +print_bed_temperature=50 +lightning_infill_support_angle=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +raft_fan_speed=0 +magic_mesh_surface_mode=normal +lightning_infill_prune_angle=40 +top_skin_expand_distance=0.8 +acceleration_ironing=500 +prime_tower_flow=100 +support_xy_overrides_z=xy_overrides_z +machine_nozzle_tip_outer_diameter=1 +min_infill_area=0 +roofing_material_flow=100 +speed_prime_tower=25.0 +support_infill_extruder_nr=0 +support_tree_max_diameter=25 +support_material_flow=100 +bridge_fan_speed=100 +multiple_mesh_overlap=0.15 +wipe_retraction_retract_speed=45 +support_bottom_pattern=grid +support_roof_height=0.8 +gradual_support_infill_steps=0 +meshfix_fluid_motion_small_distance=0.01 +top_bottom_thickness=0.8 +min_skin_width_for_expansion=4.898587196589413e-17 +wall_x_material_flow=100 +infill_material_flow=100 +ironing_monotonic=False +retraction_extrusion_window=10 +support_fan_enable=False +infill_wipe_dist=0.0 +machine_shape=rectangular +support_pattern=zigzag +min_wall_line_width=0.34 +support_connect_zigzags=True +adaptive_layer_height_enabled=False +retraction_min_travel=1.5 +acceleration_layer_0=500 +material_shrinkage_percentage_z=100.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +support_roof_line_distance=2.4000240002400024 +brim_line_count=20 +interlocking_depth=2 +wall_x_material_flow_roofing=100 +quality_changes_name=empty +machine_nozzle_size=0.4 +material_extrusion_cool_down_speed=0.7 +acceleration_wall_0_roofing=500 +wall_transition_angle=10 +top_thickness=0.8 +machine_center_is_zero=False +extruders_enabled_count=1 +machine_scale_fan_speed_zero_to_one=False +support_bottom_offset=0.0 +bridge_wall_speed=12.5 +support_roof_enable=True +alternate_extra_perimeter=False +remove_empty_first_layers=True +jerk_topbottom=8 +wall_transition_filter_distance=100 +raft_interface_fan_speed=0 +bridge_wall_coast=100 +skirt_line_count=3 +infill_mesh=False +layer_height=0.2 +material_break_preparation_retracted_position=-16 +support_enable=False +conical_overhang_enabled=False +speed_travel_layer_0=100.0 +support_tree_branch_reach_limit=30 +min_feature_size=0.1 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +line_width=0.4 +support_roof_material_flow=100 +machine_max_feedrate_y=500 +alternate_carve_order=True +jerk_roofing=8 +raft_base_line_width=0.8 +top_bottom_pattern_0=lines +support_brim_enable=True +cool_fan_full_at_height=0.6000000000000001 +machine_extruders_share_nozzle=False +acceleration_prime_tower=500 +retraction_hop_after_extruder_switch_height=0.2 +skirt_gap=10.0 +wall_0_material_flow_roofing=100 +jerk_support_roof=8 +machine_extruder_count=1 +xy_offset_layer_0=0 +skirt_brim_extruder_nr=-1 +z_seam_relative=False +small_feature_speed_factor=50 +raft_interface_extruder_nr=0 +material_break_speed=25 +material_initial_print_temperature=200 +material_break_retracted_position=-50 +slicing_tolerance=middle +infill_randomize_start_location=False +mesh_position_y=0 +support_bottom_enable=True +dual=0 +raft_interface_acceleration=500 +magic_fuzzy_skin_point_density=1.25 +support_infill_rate=20 +material_shrinkage_percentage_xy=100.0 +bridge_skin_material_flow=60 +raft_base_jerk=8 +speed_wall_x=25.0 +time=11:55:41 +machine_buildplate_type=glass +top_layers=4 +jerk_ironing=8 +machine_nozzle_head_distance=3 +date=23-11-2023 +wipe_hop_speed=5 +top_skin_preshrink=0.8 +meshfix_fluid_motion_angle=15 +machine_endstop_positive_direction_y=False +raft_interface_thickness=0.30000000000000004 +prime_tower_size=20 +lightning_infill_overhang_angle=40 +small_feature_speed_factor_0=50 +machine_show_variants=False +gradual_infill_steps=0 +material_surface_energy=100 +gantry_height=25 +support_bottom_extruder_nr=0 +speed_support_roof=25.0 +support_bottom_stair_step_min_slope=10.0 +jerk_enabled=False +magic_fuzzy_skin_enabled=False +machine_acceleration=500 +speed_roofing=25.0 +ironing_flow=10.0 +adaptive_layer_height_threshold=0.2 +material_end_of_filament_purge_speed=0.5 +infill_offset_x=0 +brim_replaces_support=False +speed_support_bottom=25.0 +material_bed_temp_wait=True +machine_depth=235 +bridge_wall_material_flow=50 +jerk_travel=8 +retraction_speed=45 +xy_offset=0 +print_temperature=210 +wipe_retraction_extra_prime_amount=0 +support_tree_tip_diameter=0.8 +material_brand=empty_brand +prime_blob_enable=False +jerk_wall=8 +bridge_skin_support_threshold=50 +prime_tower_min_volume=6 +z_seam_y=235 +bottom_skin_expand_distance=0.8 +infill_support_angle=40 +speed_layer_0=20.0 +raft_surface_speed=25.0 +material_name=empty +acceleration_wall_0=500 +magic_spiralize=False +support_interface_priority=interface_area_overwrite_support_area +coasting_enable=False +jerk_infill=8 +initial_extruder_nr=0 diff --git a/stress_benchmark/resources/031.wkt b/stress_benchmark/resources/031.wkt new file mode 100644 index 0000000000..4fcd765f04 --- /dev/null +++ b/stress_benchmark/resources/031.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((97927 134531, 98345 134621, 98747 134771, 99122 134976, 99464 135232, 99768 135536, 100024 135878, 100229 136253, 100379 136655, 100469 137071, 100500 137500, 100469 137929, 100379 138345, 100229 138747, 100024 139122, 99768 139464, 99464 139768, 99122 140024, 98747 140229, 98345 140379, 97927 140469, 97500 140500, 97073 140469, 96655 140379, 96253 140229, 95878 140024, 95536 139768, 95232 139464, 94976 139122, 94771 138747, 94621 138345, 94531 137929, 94500 137500, 94531 137071, 94621 136655, 94771 136253, 94976 135878, 95232 135536, 95536 135232, 95878 134976, 96253 134771, 96655 134621, 97073 134531, 97500 134500)), ((137927 134531, 138345 134621, 138747 134771, 139122 134976, 139464 135232, 139768 135536, 140024 135878, 140229 136253, 140379 136655, 140469 137071, 140500 137500, 140469 137929, 140379 138345, 140229 138747, 140024 139122, 139768 139464, 139464 139768, 139122 140024, 138747 140229, 138345 140379, 137927 140469, 137500 140500, 137073 140469, 136655 140379, 136253 140229, 135878 140024, 135536 139768, 135232 139464, 134976 139122, 134771 138747, 134621 138345, 134531 137929, 134500 137500, 134531 137071, 134621 136655, 134771 136253, 134976 135878, 135232 135536, 135536 135232, 135878 134976, 136253 134771, 136655 134621, 137073 134531, 137500 134500)), ((117927 114531, 118345 114621, 118747 114771, 119122 114976, 119464 115232, 119768 115536, 120024 115878, 120229 116253, 120379 116655, 120469 117071, 120500 117500, 120469 117929, 120379 118345, 120229 118747, 120024 119122, 119768 119464, 119464 119768, 119122 120024, 118747 120229, 118345 120379, 117927 120469, 117500 120500, 117073 120469, 116655 120379, 116253 120229, 115878 120024, 115536 119768, 115232 119464, 114976 119122, 114771 118747, 114621 118345, 114531 117929, 114500 117500, 114531 117071, 114621 116655, 114771 116253, 114976 115878, 115232 115536, 115536 115232, 115878 114976, 116253 114771, 116655 114621, 117073 114531, 117500 114500)), ((118197 109531, 118889 109622, 119572 109773, 120237 109982, 120882 110250, 121501 110573, 122091 110948, 122644 111373, 123159 111845, 123630 112360, 124055 112914, 124430 113503, 124752 114123, 125019 114768, 125227 115428, 125379 116116, 125469 116805, 125500 117500, 125469 118200, 125378 118889, 125227 119572, 125018 120237, 124750 120882, 124427 121501, 124052 122091, 123627 122644, 123155 123159, 122640 123630, 122086 124055, 121497 124430, 120877 124752, 120232 125019, 119572 125227, 118884 125379, 118192 125469, 117500 125500, 116803 125469, 116111 125378, 115428 125227, 114763 125018, 114118 124750, 113499 124427, 112909 124052, 112356 123627, 111841 123155, 111370 122640, 110945 122086, 110570 121497, 110248 120877, 109981 120232, 109773 119572, 109621 118884, 109531 118195, 109500 117500, 109531 116800, 109622 116111, 109773 115428, 109982 114763, 110250 114118, 110573 113499, 110948 112909, 111373 112356, 111845 111841, 112360 111370, 112914 110945, 113503 110570, 114123 110248, 114768 109981, 115428 109773, 116116 109621, 116808 109531, 117500 109500) (117166 110508, 116504 110571, 115849 110698, 115211 110885, 114591 111133, 114001 111438, 113439 111798, 112916 112210, 112433 112670, 111998 113173, 111611 113716, 111278 114292, 111001 114899, 110784 115528, 110626 116175, 110532 116832, 110500 117500, 110532 118168, 110626 118825, 110784 119472, 111001 120101, 111278 120708, 111611 121284, 111998 121827, 112433 122330, 112916 122790, 113439 123202, 114001 123562, 114591 123867, 115211 124115, 115849 124302, 116504 124429, 117166 124492, 117834 124492, 118496 124429, 119151 124302, 119789 124115, 120409 123867, 120999 123562, 121561 123202, 122084 122790, 122567 122330, 123002 121827, 123389 121284, 123722 120708, 123999 120101, 124216 119472, 124374 118825, 124468 118168, 124500 117500, 124468 116832, 124374 116175, 124216 115528, 123999 114899, 123722 114292, 123389 113716, 123002 113173, 122567 112670, 122084 112210, 121561 111798, 120999 111438, 120409 111133, 119789 110885, 119151 110698, 118496 110571, 117834 110508)), ((118147 102071, 118563 102195, 118956 102377, 119320 102615, 119645 102903, 119925 103234, 120155 103603, 120329 104001, 120443 104418, 120496 104850, 121366 105088, 122211 105384, 123035 105737, 123835 106148, 124603 106612, 125339 107129, 126035 107695, 126692 108308, 127305 108965, 127871 109661, 128388 110397, 128852 111165, 129263 111965, 129616 112789, 129912 113634, 130150 114504, 130574 114555, 130999 114671, 131397 114845, 131766 115075, 132097 115355, 132385 115680, 132623 116044, 132805 116437, 132929 116853, 132992 117283, 132992 117717, 132929 118147, 132805 118563, 132623 118956, 132385 119320, 132097 119645, 131766 119925, 131397 120155, 130999 120329, 130582 120443, 130150 120496, 129912 121366, 129616 122211, 129263 123035, 128852 123835, 128388 124603, 127871 125339, 127305 126035, 126692 126692, 126035 127305, 125339 127871, 124603 128388, 123835 128852, 123035 129263, 122211 129616, 121366 129912, 120496 130150, 120445 130574, 120329 130999, 120155 131397, 119925 131766, 119645 132097, 119320 132385, 118956 132623, 118563 132805, 118147 132929, 117717 132992, 117283 132992, 116853 132929, 116437 132805, 116044 132623, 115680 132385, 115355 132097, 115075 131766, 114845 131397, 114671 130999, 114557 130582, 114504 130150, 113634 129912, 112789 129616, 111965 129263, 111165 128852, 110397 128388, 109661 127871, 108965 127305, 108308 126692, 107695 126035, 107129 125339, 106612 124603, 106148 123835, 105737 123035, 105384 122211, 105088 121366, 104850 120496, 104426 120445, 104001 120329, 103603 120155, 103234 119925, 102903 119645, 102615 119320, 102377 118956, 102195 118563, 102071 118147, 102008 117717, 102008 117283, 102071 116853, 102195 116437, 102377 116044, 102615 115680, 102903 115355, 103234 115075, 103603 114845, 104001 114671, 104418 114557, 104850 114504, 105088 113634, 105384 112789, 105737 111965, 106148 111165, 106612 110397, 107129 109661, 107695 108965, 108308 108308, 108965 107695, 109661 107129, 110397 106612, 111165 106148, 111965 105737, 112789 105384, 113634 105088, 114504 104850, 114555 104426, 114671 104001, 114845 103603, 115075 103234, 115355 102903, 115680 102615, 116044 102377, 116437 102195, 116853 102071, 117283 102008, 117717 102008) (120226 106252, 120022 106625, 119765 106967, 119462 107269, 119120 107525, 118745 107730, 118344 107879, 117927 107969, 117500 108000, 117073 107969, 116656 107879, 116255 107730, 115880 107525, 115538 107269, 115235 106967, 114978 106625, 114774 106252, 114623 105850, 113785 106090, 112971 106388, 112179 106744, 111414 107158, 110682 107625, 109984 108145, 109328 108713, 108713 109328, 108145 109984, 107625 110682, 107158 111414, 106744 112179, 106388 112971, 106090 113785, 105850 114623, 106252 114774, 106625 114978, 106967 115235, 107269 115538, 107525 115880, 107730 116255, 107879 116656, 107969 117073, 108000 117500, 107969 117927, 107879 118344, 107730 118745, 107525 119120, 107269 119462, 106967 119765, 106625 120022, 106252 120226, 105850 120377, 106090 121215, 106388 122029, 106744 122821, 107158 123586, 107625 124318, 108145 125016, 108713 125672, 109328 126287, 109984 126855, 110682 127375, 111414 127842, 112179 128256, 112971 128612, 113785 128910, 114623 129150, 114774 128748, 114978 128375, 115235 128033, 115538 127731, 115880 127475, 116255 127270, 116656 127121, 117073 127031, 117500 127000, 117927 127031, 118344 127121, 118745 127270, 119120 127475, 119462 127731, 119765 128033, 120022 128375, 120226 128748, 120377 129150, 121215 128910, 122029 128612, 122821 128256, 123586 127842, 124318 127375, 125016 126855, 125672 126287, 126287 125672, 126855 125016, 127375 124318, 127842 123586, 128256 122821, 128612 122029, 128910 121215, 129150 120377, 128748 120226, 128375 120022, 128033 119765, 127731 119462, 127475 119120, 127270 118745, 127121 118344, 127031 117927, 127000 117500, 127031 117073, 127121 116656, 127270 116255, 127475 115880, 127731 115538, 128033 115235, 128375 114978, 128748 114774, 129150 114623, 128910 113785, 128612 112971, 128256 112179, 127842 111414, 127375 110682, 126855 109984, 126287 109328, 125672 108713, 125016 108145, 124318 107625, 123586 107158, 122821 106744, 122029 106388, 121215 106090, 120377 105850)), ((118575 99031, 119649 99125, 120712 99281, 121767 99499, 122806 99777, 123827 100116, 124828 100513, 125802 100968, 126751 101479, 127665 102043, 128547 102661, 129392 103329, 130195 104043, 130957 104805, 131671 105608, 132339 106453, 132957 107335, 133521 108249, 134032 109198, 134487 110172, 134884 111173, 135223 112194, 135501 113233, 135719 114288, 135875 115351, 135968 116421, 136000 117500, 135968 118579, 135875 119649, 135719 120712, 135501 121767, 135223 122806, 134884 123827, 134487 124828, 134032 125802, 133521 126751, 132957 127665, 132339 128547, 131671 129392, 130957 130195, 130195 130957, 129392 131671, 128547 132339, 127665 132957, 126751 133521, 125802 134032, 124828 134487, 123827 134884, 122806 135223, 121767 135501, 120712 135719, 119649 135875, 118575 135969, 117500 136000, 116425 135969, 115351 135875, 114288 135719, 113233 135501, 112194 135223, 111173 134884, 110172 134487, 109198 134032, 108249 133521, 107335 132957, 106453 132339, 105608 131671, 104805 130957, 104043 130195, 103329 129392, 102661 128547, 102043 127665, 101479 126751, 100968 125802, 100513 124828, 100116 123827, 99777 122806, 99499 121767, 99281 120712, 99125 119649, 99032 118579, 99000 117500, 99032 116421, 99125 115351, 99281 114288, 99499 113233, 99777 112194, 100116 111173, 100513 110172, 100968 109198, 101479 108249, 102043 107335, 102661 106453, 103329 105608, 104043 104805, 104805 104043, 105608 103329, 106453 102661, 107335 102043, 108249 101479, 109198 100968, 110172 100513, 111173 100116, 112194 99777, 113233 99499, 114288 99281, 115351 99125, 116425 99031, 117500 99000) (116444 100032, 115390 100128, 114346 100287, 113311 100509, 112294 100792, 111294 101137, 110318 101542, 109368 102004, 108446 102524, 107560 103097, 106707 103725, 105896 104401, 105126 105126, 104401 105896, 103725 106707, 103097 107560, 102524 108446, 102004 109368, 101542 110318, 101137 111294, 100792 112294, 100509 113311, 100287 114346, 100128 115389, 100032 116440, 100000 117500, 100032 118560, 100128 119611, 100287 120654, 100509 121689, 100792 122706, 101137 123706, 101542 124682, 102004 125632, 102524 126554, 103097 127440, 103725 128293, 104401 129104, 105126 129874, 105896 130599, 106707 131275, 107560 131903, 108446 132476, 109368 132996, 110318 133458, 111294 133863, 112294 134208, 113311 134491, 114346 134713, 115390 134872, 116444 134968, 117500 135000, 118556 134968, 119610 134872, 120654 134713, 121689 134491, 122706 134208, 123706 133863, 124682 133458, 125632 132996, 126554 132476, 127440 131903, 128293 131275, 129104 130599, 129874 129874, 130599 129104, 131275 128293, 131903 127440, 132476 126554, 132996 125632, 133458 124682, 133863 123706, 134208 122706, 134491 121689, 134713 120654, 134872 119611, 134968 118560, 135000 117500, 134968 116440, 134872 115389, 134713 114346, 134491 113311, 134208 112294, 133863 111294, 133458 110318, 132996 109368, 132476 108446, 131903 107560, 131275 106707, 130599 105896, 129874 105126, 129104 104401, 128293 103725, 127440 103097, 126554 102524, 125632 102004, 124682 101542, 123706 101137, 122706 100792, 121689 100509, 120654 100287, 119610 100128, 118556 100032, 117500 100000)), ((137927 94531, 138345 94621, 138747 94771, 139122 94976, 139464 95232, 139768 95536, 140024 95878, 140229 96253, 140379 96655, 140469 97071, 140500 97500, 140469 97929, 140379 98345, 140229 98747, 140024 99122, 139768 99464, 139464 99768, 139122 100024, 138747 100229, 138345 100379, 137927 100469, 137500 100500, 137073 100469, 136655 100379, 136253 100229, 135878 100024, 135536 99768, 135232 99464, 134976 99122, 134771 98747, 134621 98345, 134531 97929, 134500 97500, 134531 97071, 134621 96655, 134771 96253, 134976 95878, 135232 95536, 135536 95232, 135878 94976, 136253 94771, 136655 94621, 137073 94531, 137500 94500)), ((97927 94531, 98345 94621, 98747 94771, 99122 94976, 99464 95232, 99768 95536, 100024 95878, 100229 96253, 100379 96655, 100469 97071, 100500 97500, 100469 97929, 100379 98345, 100229 98747, 100024 99122, 99768 99464, 99464 99768, 99122 100024, 98747 100229, 98345 100379, 97927 100469, 97500 100500, 97073 100469, 96655 100379, 96253 100229, 95878 100024, 95536 99768, 95232 99464, 94976 99122, 94771 98747, 94621 98345, 94531 97929, 94500 97500, 94531 97071, 94621 96655, 94771 96253, 94976 95878, 95232 95536, 95536 95232, 95878 94976, 96253 94771, 96655 94621, 97073 94531, 97500 94500))) \ No newline at end of file From 92ea208ec8802331370441bc542f04d667026766 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Thu, 23 Nov 2023 12:51:15 +0100 Subject: [PATCH 115/218] Fix setting writing CURA-11378 --- src/WallsComputation.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index 17e8c44316..ff40e0ce93 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -107,6 +107,10 @@ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) { continue; } + if (value.find(' ') != std::string::npos) + { + continue; + } SettingsFile << key << "=" << value << std::endl; } SettingsFile.close(); From ebf2c68a5404869d0d5c5c76da36550ab4958d9e Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Thu, 23 Nov 2023 12:51:30 +0100 Subject: [PATCH 116/218] Remove debug wkt writing CURA-11378 --- src/WallsComputation.cpp | 57 ---------------------------------------- 1 file changed, 57 deletions(-) diff --git a/src/WallsComputation.cpp b/src/WallsComputation.cpp index ff40e0ce93..248dffb9ce 100644 --- a/src/WallsComputation.cpp +++ b/src/WallsComputation.cpp @@ -96,63 +96,6 @@ void WallsComputation::generateWalls(SliceLayerPart* part, SectionType section_t */ void WallsComputation::generateWalls(SliceLayer* layer, SectionType section) { - // TODO remove this block before merging PR! - // This code exists to generate the test wkt, and setting files - { - std::ofstream SettingsFile("settings.txt"); - SettingsFile.clear(); - for (auto [key, value] : settings.getFlattendSettings()) - { - if (value == "") - { - continue; - } - if (value.find(' ') != std::string::npos) - { - continue; - } - SettingsFile << key << "=" << value << std::endl; - } - SettingsFile.close(); - - std::ofstream PolygonFile("slice_polygon.wkt"); - PolygonFile.clear(); - - std::vector multi_polygons; - for (const auto& part : layer->parts) - { - multi_polygons.push_back(part.outline); - } - - PolygonFile << "MULTIPOLYGON ("; - const auto paths_str = multi_polygons - | ranges::views::transform( - [](const auto& path) - { - const auto path_str = path - | ranges::views::transform( - [](const auto& path) - { - const auto path_str = path - | ranges::views::transform( - [](const auto& point) - { - return fmt::format("{} {}", point.X, point.Y); - }) - | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(" ")) | ranges::to(); - return "(" + path_str + ")"; - }) - | ranges::views::join(ranges::views::c_str(", ")) | ranges::to(); - - PolygonFile << paths_str; - PolygonFile << ")"; - - PolygonFile.close(); - } - for (SliceLayerPart& part : layer->parts) { generateWalls(&part, section); From 49f8400403d510997c89e328ede0208709c7cec4 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 24 Nov 2023 21:27:52 +0100 Subject: [PATCH 117/218] Fix issue where part of raft was missing CURA-11355 --- src/FffGcodeWriter.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index a42d12889d..bb803e6a73 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -929,9 +929,37 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) skip_some_zags, zag_skip_count, pocket_size); + std::vector raft_paths; // Should remain empty, since we have no walls. infill_comp.generate(raft_paths, raft_polygons, raft_lines, surface_settings, layer_nr, SectionType::ADHESION); - gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage.raft_surface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); + + const auto wipe_dist = 0; + const auto spiralize = false; + const auto flow_ratio = 1.0_r; + const auto enable_travel_optimization = false; + const auto always_retract = false; + const auto reverse_order = false; + + gcode_layer.addLinesByOptimizer( + raft_lines, + gcode_layer.configs_storage.raft_surface_config, + SpaceFillType::Lines, + enable_travel_optimization, + wipe_dist, + flow_ratio, + last_planned_position + ); + gcode_layer.addPolygonsByOptimizer( + raft_polygons, + gcode_layer.configs_storage.raft_surface_config, + ZSeamConfig(), + wipe_dist, + spiralize, + flow_ratio, + always_retract, + reverse_order, + gcode_layer.getLastPlannedPositionOrStartingPosition() + ); raft_polygons.clear(); raft_lines.clear(); From 1d7038b8a67d7eb76bd16ae3782935da4b731636 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Fri, 24 Nov 2023 20:28:24 +0000 Subject: [PATCH 118/218] Applied clang-format. --- src/FffGcodeWriter.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index bb803e6a73..e9694634f8 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -947,8 +947,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) enable_travel_optimization, wipe_dist, flow_ratio, - last_planned_position - ); + last_planned_position); gcode_layer.addPolygonsByOptimizer( raft_polygons, gcode_layer.configs_storage.raft_surface_config, @@ -958,8 +957,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) flow_ratio, always_retract, reverse_order, - gcode_layer.getLastPlannedPositionOrStartingPosition() - ); + gcode_layer.getLastPlannedPositionOrStartingPosition()); raft_polygons.clear(); raft_lines.clear(); From e1b96412e4176fe24d14fe2e7ce65f2d2f52ac9c Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Sat, 25 Nov 2023 11:12:03 +0100 Subject: [PATCH 119/218] Remove `ReadTestSettings` class CURA-11378 --- CMakeLists.txt | 2 +- tests/ReadTestSettings.cpp | 43 -------------------------------------- tests/ReadTestSettings.h | 13 ------------ 3 files changed, 1 insertion(+), 57 deletions(-) delete mode 100644 tests/ReadTestSettings.cpp delete mode 100644 tests/ReadTestSettings.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c5109f8ce6..82b2319188 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,7 +245,7 @@ target_compile_definitions(CuraEngine PRIVATE VERSION=\"${CURA_ENGINE_VERSION}\" # Compiling the test environment. if (ENABLE_TESTING OR ENABLE_BENCHMARKS) - set(TESTS_HELPERS_SRC tests/ReadTestPolygons.cpp tests/ReadTestSettings.cpp) + set(TESTS_HELPERS_SRC tests/ReadTestPolygons.cpp) set(TESTS_SRC_ARCUS) if (ENABLE_ARCUS) diff --git a/tests/ReadTestSettings.cpp b/tests/ReadTestSettings.cpp deleted file mode 100644 index 8c384e5053..0000000000 --- a/tests/ReadTestSettings.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher. - -#include "ReadTestSettings.h" -#include -#include - -namespace cura -{ - -bool readTestSettings(const std::string& filename, Settings& settings) -{ - spdlog::info("filename: {}", filename); - - FILE* handle = std::fopen(filename.c_str(), "r"); - if (! handle) - { - spdlog::error("Failed to open file: {}", filename); - return false; - } - - while (true) - { - char key[100]; - char value[100]; - - int read = std::fscanf(handle, "%[a-zA-Z0-9_]=%[][a-zA-Z0-9_-.,:()/; ]\n", key, value); - - if (read == EOF) - { - break; - } - else if (read <= 0) - { - return false; - } - - settings.add(std::string(key), std::string(value)); - } - - return true; -} -} // namespace cura \ No newline at end of file diff --git a/tests/ReadTestSettings.h b/tests/ReadTestSettings.h deleted file mode 100644 index 63f8d6d6fd..0000000000 --- a/tests/ReadTestSettings.h +++ /dev/null @@ -1,13 +0,0 @@ - -// Copyright (c) 2023 UltiMaker -// CuraEngine is released under the terms of the AGPLv3 or higher. - - -#include "settings/Settings.h" -#include -#include - -namespace cura -{ -bool readTestSettings(const std::string& filename, Settings& settings_out); -} \ No newline at end of file From edffb9762ead06e0ef543bf778ae281dcb62487b Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 28 Nov 2023 13:32:19 +0100 Subject: [PATCH 120/218] Exclude Windows from stress-benchmark (uses 'fork') + fix copy-folder. done as part of CURA-11378 --- CMakeLists.txt | 4 +++- conanfile.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82b2319188..5f69116126 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,7 +274,9 @@ endif () if (ENABLE_BENCHMARKS) add_subdirectory(benchmark) - add_subdirectory(stress_benchmark) + if (NOT WIN32) + add_subdirectory(stress_benchmark) + endif() endif () if (ENABLE_TESTING) diff --git a/conanfile.py b/conanfile.py index 5764da2ff0..1a606e0fb1 100644 --- a/conanfile.py +++ b/conanfile.py @@ -51,7 +51,8 @@ def export_sources(self): copy(self, "*", path.join(self.recipe_folder, "src"), path.join(self.export_sources_folder, "src")) copy(self, "*", path.join(self.recipe_folder, "include"), path.join(self.export_sources_folder, "include")) copy(self, "*", path.join(self.recipe_folder, "benchmark"), path.join(self.export_sources_folder, "benchmark")) - copy(self, "*", path.join(self.recipe_folder, "stress_benchmark"), path.join(self.export_sources_folder, "benchmark")) + if self.settings.os != "Windows": + copy(self, "*", path.join(self.recipe_folder, "stress_benchmark"), path.join(self.export_sources_folder, "stress_benchmark")) copy(self, "*", path.join(self.recipe_folder, "tests"), path.join(self.export_sources_folder, "tests")) def config_options(self): From 686fc0bb7be8156bcc739a72161c9707bfe3a110 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 28 Nov 2023 13:48:28 +0100 Subject: [PATCH 121/218] ... but _don't_ exclude anything when exporting sources. part of CURA-11378 --- conanfile.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/conanfile.py b/conanfile.py index 1a606e0fb1..81c20f819a 100644 --- a/conanfile.py +++ b/conanfile.py @@ -51,8 +51,7 @@ def export_sources(self): copy(self, "*", path.join(self.recipe_folder, "src"), path.join(self.export_sources_folder, "src")) copy(self, "*", path.join(self.recipe_folder, "include"), path.join(self.export_sources_folder, "include")) copy(self, "*", path.join(self.recipe_folder, "benchmark"), path.join(self.export_sources_folder, "benchmark")) - if self.settings.os != "Windows": - copy(self, "*", path.join(self.recipe_folder, "stress_benchmark"), path.join(self.export_sources_folder, "stress_benchmark")) + copy(self, "*", path.join(self.recipe_folder, "stress_benchmark"), path.join(self.export_sources_folder, "stress_benchmark")) copy(self, "*", path.join(self.recipe_folder, "tests"), path.join(self.export_sources_folder, "tests")) def config_options(self): From 592e0b70219860b6c6598cbd65d7ef50f5f9e5f0 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 28 Nov 2023 15:08:11 +0100 Subject: [PATCH 122/218] 'Fix' compiler error on Mac. The compiler there isn't modern enough to understand that including should add floating_point to std. --- include/utils/SVG.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/utils/SVG.h b/include/utils/SVG.h index d0fb38bbe8..d76592849f 100644 --- a/include/utils/SVG.h +++ b/include/utils/SVG.h @@ -202,7 +202,7 @@ class SVG : NoCopy * @param color The colour to draw the diagram with. * @param stroke_width The width of the lines. */ - template + template // Currently our compiler for Mac can't handle `template`, since aparently floating_point isn't in std yet. void writeVoronoiDiagram(const boost::polygon::voronoi_diagram& voronoi_diagram, const Color color = Color::BLACK, const float stroke_width = 0.1) const { for (const auto& edge : voronoi_diagram.edges()) From 537f1c2fb53f0661954d1f3f87094d178a94af02 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 29 Nov 2023 14:33:14 +0100 Subject: [PATCH 123/218] Fix Semver linking Contributes to CURA-10831 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f69116126..d0b91aba49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,7 +201,7 @@ find_package(spdlog REQUIRED) find_package(fmt REQUIRED) find_package(range-v3 REQUIRED) find_package(scripta REQUIRED) -find_package(neargye-semver REQUIRED) +find_package(semver REQUIRED) if (ENABLE_TESTING) find_package(GTest REQUIRED) @@ -217,7 +217,7 @@ target_link_libraries(_CuraEngine stb::stb boost::boost scripta::scripta - neargye-semver::neargye-semver + semver::semver curaengine_grpc_definitions::curaengine_grpc_definitions asio-grpc::asio-grpc grpc::grpc From 1884fbcea08fc2af15841985a175876f7c096389 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 Nov 2023 15:21:26 +0100 Subject: [PATCH 124/218] Update src/utils/PolygonsPointIndex.cpp Use at() instead or brackets Co-authored-by: Casper Lamboo --- src/utils/PolygonsPointIndex.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/PolygonsPointIndex.cpp b/src/utils/PolygonsPointIndex.cpp index d41092baba..7084831e0a 100644 --- a/src/utils/PolygonsPointIndex.cpp +++ b/src/utils/PolygonsPointIndex.cpp @@ -9,7 +9,7 @@ namespace cura template<> ConstPolygonRef PathsPointIndex::getPolygon() const { - return (*polygons_)[poly_idx_]; + return polygons_->at(poly_idx_); } } // namespace cura From 4d203599b08143a2725112a24f4eed66562a68ec Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 Nov 2023 15:24:34 +0100 Subject: [PATCH 125/218] Update src/utils/ExtrusionLine.cpp Remove useless code Co-authored-by: Casper Lamboo --- src/utils/ExtrusionLine.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/utils/ExtrusionLine.cpp b/src/utils/ExtrusionLine.cpp index 7d0ef20561..5183aab67b 100644 --- a/src/utils/ExtrusionLine.cpp +++ b/src/utils/ExtrusionLine.cpp @@ -11,12 +11,6 @@ namespace cura { -/*ExtrusionLine::ExtrusionLine(const size_t inset_idx, const bool is_odd) - : inset_idx_(inset_idx) - , is_odd_(is_odd) - , is_closed_(false) -{ -}*/ coord_t ExtrusionLine::getLength() const { From a33ad67da1285111b4c8d2592540617e54edf377 Mon Sep 17 00:00:00 2001 From: Casper Lamboo Date: Fri, 1 Dec 2023 10:57:21 +0100 Subject: [PATCH 126/218] Use explicit `std::optional` utility functions CURA-11359 --- src/bridge.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bridge.cpp b/src/bridge.cpp index 91616a1d87..aeae8aeb9e 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -195,11 +195,11 @@ double bridgeAngle( } } - if (! idx1 || ! idx2) + if (! idx1.hasValue() || ! idx2.hasValue()) return -1.0; - Point2LL center1 = islands[*idx1].centerOfMass(); - Point2LL center2 = islands[*idx2].centerOfMass(); + Point2LL center1 = islands[idx1.value()].centerOfMass(); + Point2LL center2 = islands[idx2.value()].centerOfMass(); return angle(center2 - center1); } From 3672b0b4caa0337e0b9e5a10dec5e7f2d7d80707 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 11:33:57 +0100 Subject: [PATCH 127/218] Use OpenSSL 3.2.0 Contributes to CURA-10831 and CURA-11080 --- conanfile.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/conanfile.py b/conanfile.py index 58d4bb8d9f..8949b40797 100644 --- a/conanfile.py +++ b/conanfile.py @@ -61,10 +61,11 @@ def config_options(self): def configure(self): self.options["boost"].header_only = True self.options["clipper"].shared = True - self.options["protobuf"].shared = False if self.options.enable_arcus: self.options["arcus"].shared = True + if self.settings.os == "Linux": + self.options["openssl"].shared = True def validate(self): if self.settings.compiler.get_safe("cppstd"): @@ -100,7 +101,7 @@ def requirements(self): self.requires("neargye-semver/0.3.0") self.requires("protobuf/3.21.9") self.requires("zlib/1.2.12") - self.requires("openssl/1.1.1l") + self.requires("openssl/3.2.0") def generate(self): deps = CMakeDeps(self) From 44e6a12acdffb00c3b1c34c8c073aa63ff7eeb64 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 11:35:36 +0100 Subject: [PATCH 128/218] Set version to 5.7.0-alpha.0 Contributes to CURA-10831 --- conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conandata.yml b/conandata.yml index 55f6e19c5f..63534b7175 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,4 +1,4 @@ -version: "5.6.0-beta.1" +version: "5.7.0-alpha.0" requirements: - "arcus/5.3.0" - "curaengine_grpc_definitions/(latest)@ultimaker/testing" From 05e12db08ce23d2295c1e355d35aa8b5844a8a81 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 11:38:57 +0100 Subject: [PATCH 129/218] Clean up conan-package workflow Contributes to CURA-10831 --- .github/workflows/conan-package.yml | 42 ----------------------------- 1 file changed, 42 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index d103e091f6..859f36ddd7 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -1,51 +1,10 @@ ---- name: conan-package -# Exports the recipe, sources and binaries for Mac, Windows and Linux and upload these to the server such that these can -# be used downstream. -# -# It should run on pushes against main or CURA-* branches, but it will only create the binaries for main and release branches - on: - workflow_dispatch: - inputs: - # FIXME: Not yet implemented - conan_id: - required: false - type: string - description: 'The full conan package ID, e.g. "curaengine/1.2.3@ultimaker/stable"' - create_latest_alias: - required: true - default: false - type: boolean - description: 'Create latest alias' - create_release: - required: true - default: false - type: boolean - description: 'Create a conan-package-release' - create_binaries_windows: - required: true - default: false - type: boolean - description: 'create binaries Windows' - create_binaries_linux: - required: true - default: false - type: boolean - description: 'create binaries Linux' - create_binaries_macos: - required: true - default: false - type: boolean - description: 'create binaries Macos' - push: paths: - 'include/**' - 'src/**' - - 'cmake/**' - - 'tests/**' - 'test_package/**' - 'conanfile.py' - 'conandata.yml' @@ -66,7 +25,6 @@ jobs: uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine - release: ${{ github.event.inputs.create_release == 'true' }} conan-package-export: needs: [ conan-recipe-version ] From 02190bdd75a9a4da4a9e59e7e3491de3881e2f5c Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 11:56:36 +0100 Subject: [PATCH 130/218] Fix typo Contributes to CURA-10831 --- src/bridge.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridge.cpp b/src/bridge.cpp index aeae8aeb9e..554d81d5b1 100644 --- a/src/bridge.cpp +++ b/src/bridge.cpp @@ -195,7 +195,7 @@ double bridgeAngle( } } - if (! idx1.hasValue() || ! idx2.hasValue()) + if (! idx1.has_value() || ! idx2.has_value()) return -1.0; Point2LL center1 = islands[idx1.value()].centerOfMass(); From d4f747eeacde726ae17947271ad3c4e5185e9d61 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 14:13:39 +0100 Subject: [PATCH 131/218] Use cura-workflows Contributes to CURA-10831 --- .github/workflows/benchmark.yml | 149 ++++---------------------------- 1 file changed, 19 insertions(+), 130 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 074024add1..eaf23c8faa 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -1,4 +1,5 @@ name: Benchmark + on: push: paths: @@ -6,11 +7,9 @@ on: - 'src/**' - 'benchmark/**' - '.github/workflows/benchmark.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - tags: - - '[0-9].[0-9].[0-9]*' + pull_request: types: [ opened, reopened, synchronize ] paths: @@ -18,45 +17,26 @@ on: - 'src/**' - 'benchmark/**' - '.github/workflows/benchmark.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - 'CURA-*' + - 'PP-*' - '[0-9]+.[0-9]+' - tags: - - '[0-9]+.[0-9]+.[0-9]+' permissions: contents: write deployments: write env: - CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }} - CONAN_LOGIN_USERNAME_CURA_CE: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA_CE: ${{ secrets.CONAN_PASS }} - CONAN_LOG_RUN_TO_OUTPUT: 1 - CONAN_LOGGING_LEVEL: info - CONAN_NON_INTERACTIVE: 1 + CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} + +# FIXME: Use `main` instead of `CURA-10831` once merged jobs: check_actor: - runs-on: ubuntu-latest - outputs: - proceed: ${{ steps.skip_check.outputs.proceed }} - steps: - - id: skip_check - run: | - if [[ "${{ github.actor }}" == *"[bot]"* ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request }}" == "" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request.head.repo.fork }}" == "false" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - else - echo "proceed=false" >> $GITHUB_OUTPUT - fi - shell: bash + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + secrets: inherit conan-recipe-version: needs: [ check_actor ] @@ -67,104 +47,13 @@ jobs: benchmark: needs: [ conan-recipe-version ] - name: Run C++ benchmark - runs-on: ubuntu-22.04 - steps: - - name: Checkout CuraEngine - uses: actions/checkout@v3 - - - name: Setup Python and pip - uses: actions/setup-python@v4 - with: - python-version: '3.11.x' - architecture: 'x64' - cache: 'pip' - cache-dependency-path: .github/workflows/requirements-conan-package.txt - - - name: Cache Benchmark library - uses: actions/cache@v1 - with: - path: ./cache - key: ${{ runner.os }}-googlebenchmark-v1.5.0 - - - name: Install Python requirements and Create default Conan profile - run: | - pip install -r .github/workflows/requirements-conan-package.txt - - # NOTE: Due to what are probably github issues, we have to remove the cache and reconfigure before the rest. - # This is maybe because grub caches the disk it uses last time, which is recreated each time. - - name: Install Linux system requirements - if: ${{ runner.os == 'Linux' }} - run: | - sudo rm /var/cache/debconf/config.dat - sudo dpkg --configure -a - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt update - sudo apt upgrade - sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y - - - name: Install GCC-132 on ubuntu - run: | - sudo apt install g++-13 gcc-13 -y - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13 - - - name: Create the default Conan profile - run: conan profile new default --detect - - - name: Get Conan configuration - run: | - conan config install https://github.com/Ultimaker/conan-config.git - conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" - - - name: Use Conan download cache (Bash) - if: ${{ runner.os != 'Windows' }} - run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" - - - name: Cache Conan local repository packages (Bash) - uses: actions/cache@v3 - if: ${{ runner.os != 'Windows' }} - with: - path: | - $HOME/.conan/data - $HOME/.conan/conan_download_cache - key: conan-${{ runner.os }}-${{ runner.arch }} - - - name: Install dependencies - run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -o enable_benchmarks=True -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv - - - name: Upload the Dependency package(s) - run: conan upload "*" -r cura --all -c - - - name: Set Environment variables from Conan install (bash) - if: ${{ runner.os != 'Windows' }} - run: | - . ./activate_github_actions_runenv.sh - . ./activate_github_actions_buildenv.sh - working-directory: build/Release/generators - - - name: Build CuraEngine and tests - run: | - cmake --preset release - cmake --build --preset release - - - name: Run benchmark CuraEngine - id: run-test - run: ./benchmarks --benchmark_format=json --benchmark_out=benchmark_result.json - working-directory: build/Release/benchmark - - - name: Store benchmark result - uses: benchmark-action/github-action-benchmark@v1 - with: - name: C++ Benchmark - output-file-path: build/Release/benchmark/benchmark_result.json - gh-repository: github.com/Ultimaker/CuraEngineBenchmarks - gh-pages-branch: main - benchmark-data-dir-path: dev/bench - tool: 'googlecpp' - github-token: ${{ secrets.CURA_BENCHMARK_PAT }} - auto-push: true - # alert-threshold: '175%' - # summary-always: true - # comment-on-alert: true - max-items-in-chart: 250 + uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@CURA-10831 + with: + recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + conan_extra_args: "-o curaengine:enable_benchmarks=True" + benchmark_cmd: "benchmark/benchmarks --benchmark_format=json --benchmark_out=benchmark_result.json" + name: "C++ Benchmark" + output_file_path: "build/Release/benchmark_result.json" + data_dir: "dev/bench" + tool: "googlecpp" + secrets: inherit From 6a782d6731ec33a70871136a5401978fd7e8fbc7 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 15:43:07 +0100 Subject: [PATCH 132/218] Use Point2LL Contributes to CURA-10831 --- stress_benchmark/stress_benchmark.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index 62502c1c5f..ad2e205e48 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -80,7 +80,7 @@ struct Resource cura::Polygon outer; for (const auto& point : boost_polygon.outer()) { - outer.add(cura::Point(point.x(), point.y())); + outer.add(cura::Point2LL(point.x(), point.y())); } polygon.add(outer); @@ -89,7 +89,7 @@ struct Resource cura::Polygon inner; for (const auto& point : hole) { - inner.add(cura::Point(point.x(), point.y())); + inner.add(cura::Point2LL(point.x(), point.y())); } polygon.add(inner); } From b04f5681169e24fd179bbabccd6edd0fbc7401a0 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 15:50:14 +0100 Subject: [PATCH 133/218] Use cura-workflows Contributes to CURA-10831 --- .github/workflows/stress_benchmark.yml | 150 ++++--------------------- 1 file changed, 19 insertions(+), 131 deletions(-) diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml index 01d98e8db5..166ffe44e6 100644 --- a/.github/workflows/stress_benchmark.yml +++ b/.github/workflows/stress_benchmark.yml @@ -6,11 +6,9 @@ on: - 'src/**' - 'stress_benchmark/**' - '.github/workflows/stress_benchmark.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - tags: - - '[0-9].[0-9].[0-9]*' + pull_request: types: [ opened, reopened, synchronize ] paths: @@ -18,153 +16,43 @@ on: - 'src/**' - 'stress_benchmark/**' - '.github/workflows/stress_benchmark.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - 'CURA-*' + - 'PP-*' - '[0-9]+.[0-9]+' - tags: - - '[0-9]+.[0-9]+.[0-9]+' permissions: contents: write deployments: write env: - CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }} - CONAN_LOGIN_USERNAME_CURA_CE: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA_CE: ${{ secrets.CONAN_PASS }} - CONAN_LOG_RUN_TO_OUTPUT: 1 - CONAN_LOGGING_LEVEL: info - CONAN_NON_INTERACTIVE: 1 + CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} + +# FIXME: Use `main` instead of `CURA-10831` once merged jobs: check_actor: - runs-on: ubuntu-latest - outputs: - proceed: ${{ steps.skip_check.outputs.proceed }} - steps: - - id: skip_check - run: | - if [[ "${{ github.actor }}" == *"[bot]"* ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request }}" == "" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request.head.repo.fork }}" == "false" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - else - echo "proceed=false" >> $GITHUB_OUTPUT - fi - shell: bash + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + secrets: inherit conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura/.github/workflows/conan-recipe-version.yml@main + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine benchmark: needs: [ conan-recipe-version ] - name: Run C++ benchmark - runs-on: ubuntu-22.04 - steps: - - name: Checkout CuraEngine - uses: actions/checkout@v3 - - - name: Setup Python and pip - uses: actions/setup-python@v4 - with: - python-version: '3.11.x' - architecture: 'x64' - cache: 'pip' - cache-dependency-path: .github/workflows/requirements-conan-package.txt - - - name: Cache Benchmark library - uses: actions/cache@v1 - with: - path: ./cache - key: ${{ runner.os }}-stressbenchmark - - - name: Install Python requirements and Create default Conan profile - run: | - pip install -r .github/workflows/requirements-conan-package.txt - - # NOTE: Due to what are probably github issues, we have to remove the cache and reconfigure before the rest. - # This is maybe because grub caches the disk it uses last time, which is recreated each time. - - name: Install Linux system requirements - if: ${{ runner.os == 'Linux' }} - run: | - sudo rm /var/cache/debconf/config.dat - sudo dpkg --configure -a - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt update - sudo apt upgrade - sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y - - - name: Install GCC-132 on ubuntu - run: | - sudo apt install g++-13 gcc-13 -y - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13 - - - name: Create the default Conan profile - run: conan profile new default --detect - - - name: Get Conan configuration - run: | - conan config install https://github.com/Ultimaker/conan-config.git - conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" - - - name: Use Conan download cache (Bash) - if: ${{ runner.os != 'Windows' }} - run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" - - - name: Cache Conan local repository packages (Bash) - uses: actions/cache@v3 - if: ${{ runner.os != 'Windows' }} - with: - path: | - $HOME/.conan/data - $HOME/.conan/conan_download_cache - key: conan-${{ runner.os }}-${{ runner.arch }} - - - name: Install dependencies - run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -o enable_benchmarks=True -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv - - - name: Upload the Dependency package(s) - run: conan upload "*" -r cura --all -c - - - name: Set Environment variables from Conan install (bash) - if: ${{ runner.os != 'Windows' }} - run: | - . ./activate_github_actions_runenv.sh - . ./activate_github_actions_buildenv.sh - working-directory: build/Release/generators - - - name: Build CuraEngine and tests - run: | - cmake --preset release - cmake --build --preset release - - - name: Run Stress Benchmark CuraEngine - id: run-test - run: ./stress_benchmark -o benchmark_result.json - working-directory: build/Release/stress_benchmark - - - name: Store benchmark result - uses: benchmark-action/github-action-benchmark@v1 - with: - name: Stress Benchmark - output-file-path: build/Release/stress_benchmark/benchmark_result.json - gh-repository: github.com/Ultimaker/CuraEngineBenchmarks - gh-pages-branch: main - benchmark-data-dir-path: dev/stress_bench - tool: customSmallerIsBetter - github-token: ${{ secrets.CURA_BENCHMARK_PAT }} - auto-push: true - # alert-threshold: '175%' - # summary-always: true - # comment-on-alert: true - max-items-in-chart: 250 + uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@CURA-10831 + with: + recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + conan_extra_args: "-o curaengine:enable_benchmarks=True" + benchmark_cmd: "stress_benchmark/stress_benchmark -o benchmark_result.json" + name: "Stress Benchmark" + output_file_path: "build/Release/benchmark_result.json" + data_dir: "dev/stress_bench" + tool: "customSmallerIsBetter" + secrets: inherit \ No newline at end of file From 8a42a767f2395465ff1008c91ed07d9208444beb Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 1 Dec 2023 17:11:42 +0100 Subject: [PATCH 134/218] Rework gcodeanalyzer workflow Such that it uses caching an Contributes to CURA-10831 --- .github/workflows/gcodeanalyzer.yml | 121 ++++++++++++++-------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 7225acde20..1c76682503 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -5,7 +5,6 @@ on: - 'include/**' - 'src/**' - '.github/workflows/gcodeanalyzer.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main pull_request: @@ -14,45 +13,27 @@ on: - 'include/**' - 'src/**' - '.github/workflows/gcodeanalyzer.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - 'CURA-*' + - 'PP-*' - '[0-9]+.[0-9]+' - tags: - - '[0-9]+.[0-9]+.[0-9]+' permissions: contents: write deployments: write env: - CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }} - CONAN_LOGIN_USERNAME_CURA_CE: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA_CE: ${{ secrets.CONAN_PASS }} - CONAN_LOG_RUN_TO_OUTPUT: 1 - CONAN_LOGGING_LEVEL: info - CONAN_NON_INTERACTIVE: 1 + CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} + +# FIXME: Use `main` instead of `CURA-10831` once merged +# TODO: Make cura-workflows/benchmark.yml generic enough to fit the gcodeanalyzer benchmark jobs: check_actor: - runs-on: ubuntu-latest - outputs: - proceed: ${{ steps.skip_check.outputs.proceed }} - steps: - - id: skip_check - run: | - if [[ "${{ github.actor }}" == *"[bot]"* ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request }}" == "" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - elif [[ "${{ github.event.pull_request.head.repo.fork }}" == "false" ]]; then - echo "proceed=true" >> $GITHUB_OUTPUT - else - echo "proceed=false" >> $GITHUB_OUTPUT - fi - shell: bash + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + secrets: inherit conan-recipe-version: needs: [ check_actor ] @@ -64,12 +45,23 @@ jobs: gcodeanalyzer: needs: [ conan-recipe-version ] name: Run GCodeAnalyzer on the engine - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - - name: Checkout CuraEngine - uses: actions/checkout@v3 + - name: Checkout repo + uses: actions/checkout@v4 + if: ${{ github.event.pull_request.head.repo.full_name == github.repository }} with: path: 'CuraEngine' + fetch-depth: 1 + ref: ${{ github.head_ref }} + + - name: Checkout repo PR + uses: actions/checkout@v4 + if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} + with: + path: 'CuraEngine' + fetch-depth: 1 + ref: ${{ github.base_ref }} - name: Checkout GCodeAnalyzer uses: actions/checkout@v3 @@ -77,6 +69,7 @@ jobs: repository: 'Ultimaker/GCodeAnalyzer' ref: 'main' path: 'GCodeAnalyzer' + fetch-depth: 1 token: ${{ secrets.CURA_BENCHMARK_PAT }} - name: Checkout Test Models @@ -85,6 +78,7 @@ jobs: repository: 'Ultimaker/NightlyTestModels' ref: 'main' path: 'NightlyTestModels' + fetch-depth: 1 token: ${{ secrets.GITHUB_TOKEN }} - name: Determine the corresponding Cura branch @@ -104,44 +98,43 @@ jobs: repository: 'Ultimaker/Cura' ref: ${{ steps.curabranch.outputs.branch}} path: 'Cura' + fetch-depth: 1 sparse-checkout: | resources/definitions resources/extruders + # FIXME: point to `main` once merged + - name: Sync pip requirements + run: wget https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/.github/workflows/requirements-runner.txt -O .github/workflows/requirements-runner.txt + - name: Setup Python and pip uses: actions/setup-python@v4 with: - python-version: '3.10.x' - architecture: 'x64' - cache: 'pip' - cache-dependency-path: CuraEngine/.github/workflows/requirements-conan-package.txt + python-version: 3.11.x + cache: pip + cache-dependency-path: .github/workflows/requirements-runner.txt - name: Install Python requirements and Create default Conan profile run: | - pip install -r CuraEngine/.github/workflows/requirements-conan-package.txt + pip install -r .github/workflows/requirements-runner.txt pip install wheel numpy pandas python-dateutil pytz six pip install git+https://github.com/ultimaker/libcharon@CURA-9495_analyzer_requisites#egg=charon pip install pytest pytest-benchmark - # NOTE: Due to what are probably github issues, we have to remove the cache and reconfigure before the rest. - # This is maybe because grub caches the disk it uses last time, which is recreated each time. - - name: Install Linux system requirements - if: ${{ runner.os == 'Linux' }} + # FIXME: point to `main` once merged + - name: Install Linux system requirements for building run: | - sudo rm /var/cache/debconf/config.dat - sudo dpkg --configure -a - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt update - sudo apt upgrade - sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y + mkdir runner_scripts + wget https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/runner_scripts/ubuntu_setup.sh -O runner_scripts/ubuntu_setup.sh + chmod +x runner_scripts/ubuntu_setup.sh + sudo ./runner_scripts/ubuntu_setup.sh - - name: Install GCC-132 on ubuntu + - name: Setup pipeline caches run: | - sudo apt install g++-13 gcc-13 -y - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13 + mkdir -p /home/runner/.conan/downloads + mkdir -p /home/runner/.conan/data - - name: Create the default Conan profile + - name: Create default Conan profile run: conan profile new default --detect - name: Get Conan configuration @@ -149,21 +142,32 @@ jobs: conan config install https://github.com/Ultimaker/conan-config.git conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" - - name: Use Conan download cache (Bash) - run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" + - name: Cache Conan packages + uses: actions/cache@v3 + with: + path: /home/runner/.conan/data + key: ${{ runner.os }}-conan-data-${{ github.run_id }} + restore-keys: | + ${{ runner.os }}-conan-data- + + - name: Cache Conan downloads + uses: actions/cache@v3 + with: + path: /home/runner/.conan/downloads + key: ${{ runner.os }}-conan-downloads-${{ github.run_id }} + restore-keys: | + ${{ runner.os }}-conan-downloads- - name: Install dependencies - run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -o enable_benchmarks=False -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv -c tools.build:skip_test=True + run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv -c tools.build:skip_test=True working-directory: CuraEngine - - name: Upload the Dependency package(s) - run: conan upload "*" -r cura --all -c - - name: Set Environment variables from Conan install (bash) if: ${{ runner.os != 'Windows' }} run: | . ./activate_github_actions_runenv.sh . ./activate_github_actions_buildenv.sh + echo "CURA_ENGINE_SEARCH_PATH=$GITHUB_WORKSPACE/Cura/resources/definitions:$GITHUB_WORKSPACE/Cura/resources/extruders" >> $GITHUB_ENV working-directory: CuraEngine/build/Release/generators - name: Build CuraEngine and tests @@ -174,13 +178,13 @@ jobs: - name: Collect STL-files, run CuraEngine, output GCode-files run: | - export CURA_ENGINE_SEARCH_PATH=../Cura/resources/definitions:../Cura/resources/extruders for file in `ls ../NightlyTestModels/*.stl`; do ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode done working-directory: CuraEngine + # TODO: Move this to GCodeAnalyzer - name: Run GCodeAnalyzer on generated GCode files id: gcode_out run: | @@ -306,7 +310,4 @@ jobs: tool: customBiggerIsBetter github-token: ${{ secrets.CURA_BENCHMARK_PAT }} auto-push: true - # alert-threshold: '110%' - # summary-always: true - # comment-on-alert: true max-items-in-chart: 250 From effddefd2f36357e6a3b5192900679e5825e3657 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 4 Dec 2023 11:22:52 +0100 Subject: [PATCH 135/218] Fix non-constant-expression cannot be narrowed in initializer list Contributes to CURA-10831 --- src/gcodeExport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 8372ba1656..8465874a50 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -1429,7 +1429,7 @@ void GCodeExport::writeFanCommand(double speed) else if (speed > 0) { const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); - *output_stream_ << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? 2u : 1u), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; + *output_stream_ << "M106 S" << PrecisionedDouble{ static_cast((should_scale_zero_to_one ? 2u : 1u)), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; if (fan_number_) { *output_stream_ << " P" << fan_number_; From e70050e3d5b3454dd15b036bf1d8040288ed3f59 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 4 Dec 2023 13:33:11 +0100 Subject: [PATCH 136/218] Use std::optional instead of NO_INDEX macro --- src/LayerPlan.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 6077daa44d..7d4ede0d0f 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -2283,8 +2283,8 @@ bool LayerPlan::writePathWithCoasting( bool length_is_less_than_min_dist = true; - unsigned int acc_dist_idx_gt_coast_dist = NO_INDEX; // the index of the first point with accumulated_dist more than coasting_dist (= index into accumulated_dist_per_point) - // == the point printed BEFORE the start point for coasting + std::optional acc_dist_idx_gt_coast_dist; // the index of the first point with accumulated_dist more than coasting_dist (= index into accumulated_dist_per_point) + // == the point printed BEFORE the start point for coasting const Point2LL* last = &path.points[path.points.size() - 1]; for (unsigned int backward_point_idx = 1; backward_point_idx < path.points.size(); backward_point_idx++) @@ -2294,7 +2294,7 @@ bool LayerPlan::writePathWithCoasting( accumulated_dist += distance; accumulated_dist_per_point.push_back(accumulated_dist); - if (acc_dist_idx_gt_coast_dist == NO_INDEX && accumulated_dist >= coasting_dist) + if (! acc_dist_idx_gt_coast_dist.has_value() && accumulated_dist >= coasting_dist) { acc_dist_idx_gt_coast_dist = backward_point_idx; // the newly added point } @@ -2321,22 +2321,23 @@ bool LayerPlan::writePathWithCoasting( { return false; // Skip coasting at all then. } - for (acc_dist_idx_gt_coast_dist = 1; acc_dist_idx_gt_coast_dist < accumulated_dist_per_point.size(); acc_dist_idx_gt_coast_dist++) + for (acc_dist_idx_gt_coast_dist = 1; acc_dist_idx_gt_coast_dist.value() < accumulated_dist_per_point.size(); acc_dist_idx_gt_coast_dist.value()++) { // search for the correct coast_dist_idx - if (accumulated_dist_per_point[acc_dist_idx_gt_coast_dist] >= actual_coasting_dist) + if (accumulated_dist_per_point[acc_dist_idx_gt_coast_dist.value()] >= actual_coasting_dist) { break; } } } - assert(acc_dist_idx_gt_coast_dist < accumulated_dist_per_point.size()); // something has gone wrong; coasting_min_dist < coasting_dist ? + assert( + acc_dist_idx_gt_coast_dist.has_value() && acc_dist_idx_gt_coast_dist < accumulated_dist_per_point.size()); // something has gone wrong; coasting_min_dist < coasting_dist ? - const size_t point_idx_before_start = path.points.size() - 1 - acc_dist_idx_gt_coast_dist; + const size_t point_idx_before_start = path.points.size() - 1 - acc_dist_idx_gt_coast_dist.value(); Point2LL start; { // computation of begin point of coasting - const coord_t residual_dist = actual_coasting_dist - accumulated_dist_per_point[acc_dist_idx_gt_coast_dist - 1]; + const coord_t residual_dist = actual_coasting_dist - accumulated_dist_per_point[acc_dist_idx_gt_coast_dist.value() - 1]; const Point2LL& a = path.points[point_idx_before_start]; const Point2LL& b = path.points[point_idx_before_start + 1]; start = b + normal(a - b, residual_dist); From 126c2ea89712e9979f91c9bc7b15a13c0ce36b18 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 4 Dec 2023 13:33:45 +0100 Subject: [PATCH 137/218] Make sure NO_INDEX is always used with size_t types --- include/utils/polygonUtils.h | 2 +- src/utils/polygonUtils.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/utils/polygonUtils.h b/include/utils/polygonUtils.h index 59d71a9354..ecda641626 100644 --- a/include/utils/polygonUtils.h +++ b/include/utils/polygonUtils.h @@ -207,7 +207,7 @@ class PolygonUtils * \param max_dist2 The squared maximal allowed distance from the point to the nearest polygon. * \return The index to the polygon onto which we have moved the point. */ - static unsigned int moveInside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); + static size_t moveInside(const Polygons& polygons, Point2LL& from, int distance = 0, int64_t max_dist2 = std::numeric_limits::max()); /** * \brief Moves the point \p from onto the nearest polygon or leaves the diff --git a/src/utils/polygonUtils.cpp b/src/utils/polygonUtils.cpp index 42f9204a05..4855f34046 100644 --- a/src/utils/polygonUtils.cpp +++ b/src/utils/polygonUtils.cpp @@ -327,13 +327,13 @@ ClosestPolygonPoint PolygonUtils::_moveInside2(const ClosestPolygonPoint& closes /* * Implementation assumes moving inside, but moving outside should just as well be possible. */ -unsigned int PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) +size_t PolygonUtils::moveInside(const Polygons& polygons, Point2LL& from, int distance, int64_t maxDist2) { Point2LL ret = from; int64_t bestDist2 = std::numeric_limits::max(); - unsigned int bestPoly = NO_INDEX; + size_t bestPoly = NO_INDEX; bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary - for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) + for (size_t poly_idx = 0; poly_idx < polygons.size(); poly_idx++) { ConstPolygonRef poly = polygons[poly_idx]; if (poly.size() < 2) From 73c41c8d097435342307ba3dbe4d75df79ebba67 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 06:03:09 +0100 Subject: [PATCH 138/218] Use curl instead of wget Contributes to CURA-10831 --- .github/workflows/gcodeanalyzer.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 1c76682503..6c0eb4f70b 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -105,7 +105,8 @@ jobs: # FIXME: point to `main` once merged - name: Sync pip requirements - run: wget https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/.github/workflows/requirements-runner.txt -O .github/workflows/requirements-runner.txt + run: curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/.github/workflows/requirements-runner.txt + working-directory: .github/workflows - name: Setup Python and pip uses: actions/setup-python@v4 @@ -125,9 +126,10 @@ jobs: - name: Install Linux system requirements for building run: | mkdir runner_scripts - wget https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/runner_scripts/ubuntu_setup.sh -O runner_scripts/ubuntu_setup.sh - chmod +x runner_scripts/ubuntu_setup.sh - sudo ./runner_scripts/ubuntu_setup.sh + cd runner_scripts + curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/runner_scripts/ubuntu_setup.sh + chmod +x ubuntu_setup.sh + sudo ./ubuntu_setup.sh - name: Setup pipeline caches run: | From 66dd95be001a268d6fb9bf19891203075c065393 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 06:07:32 +0100 Subject: [PATCH 139/218] Use `CuraEngine` directory Contributes to CURA-10831 --- .github/workflows/gcodeanalyzer.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 6c0eb4f70b..f5bbcf0a7f 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -106,18 +106,18 @@ jobs: # FIXME: point to `main` once merged - name: Sync pip requirements run: curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/.github/workflows/requirements-runner.txt - working-directory: .github/workflows + working-directory: CuraEngine/.github/workflows - name: Setup Python and pip uses: actions/setup-python@v4 with: python-version: 3.11.x cache: pip - cache-dependency-path: .github/workflows/requirements-runner.txt + cache-dependency-path: CuraEngine/.github/workflows/requirements-runner.txt - name: Install Python requirements and Create default Conan profile run: | - pip install -r .github/workflows/requirements-runner.txt + pip install -r CuraEngine/.github/workflows/requirements-runner.txt pip install wheel numpy pandas python-dateutil pytz six pip install git+https://github.com/ultimaker/libcharon@CURA-9495_analyzer_requisites#egg=charon pip install pytest pytest-benchmark From a520503868a85ad37982bd4fd31d5cbe0c3030fc Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 06:24:13 +0100 Subject: [PATCH 140/218] Use cura-workflows unit-test Contributes to CURA-10831 --- .github/workflows/unit-test.yml | 133 ++++---------------------------- 1 file changed, 17 insertions(+), 116 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 117718f5b5..b73aaf6b05 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -5,45 +5,37 @@ on: paths: - 'include/**' - 'src/**' - - 'cmake/**' - 'tests/**' - - 'test_package/**' - 'conanfile.py' + - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/unit-test.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main + - 'CURA-*' + - 'PP-*' - '[0-9]+.[0-9]+' - tags: - - '[0-9]+.[0-9]+.[0-9]+' + pull_request: types: [ opened, reopened, synchronize ] paths: - 'include/**' - 'src/**' - - 'cmake/**' - 'tests/**' - - 'test_package/**' - 'conanfile.py' + - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/unit-test.yml' - - '.github/workflows/requirements-conan-package.txt' branches: - main - - 'CURA-*' - '[0-9]+.[0-9]+' - tags: - - '[0-9]+.[0-9]+.[0-9]+' + +permissions: + contents: read env: - CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }} - CONAN_LOGIN_USERNAME_CURA_CE: ${{ secrets.CONAN_USER }} - CONAN_PASSWORD_CURA_CE: ${{ secrets.CONAN_PASS }} - CONAN_LOG_RUN_TO_OUTPUT: 1 - CONAN_LOGGING_LEVEL: info - CONAN_NON_INTERACTIVE: 1 + CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} + CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} jobs: conan-recipe-version: @@ -52,103 +44,12 @@ jobs: project_name: curaengine testing: - runs-on: ubuntu-22.04 + uses: ultimaker/cura-workflows/.github/workflows/unit-test.yml@CURA-10831 needs: [ conan-recipe-version ] + with: + recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} + conan_extra_args: '-c tools.build:skip_test=False' + unit_test_cmd: 'ctest --output-junit engine_test.xml' + unit_test_dir: 'build/Release' + build: true - steps: - - name: Checkout CuraEngine - uses: actions/checkout@v3 - - - name: Setup Python and pip - uses: actions/setup-python@v4 - with: - python-version: '3.10.x' - architecture: 'x64' - cache: 'pip' - cache-dependency-path: .github/workflows/requirements-conan-package.txt - - - name: Install Python requirements and Create default Conan profile - run: | - pip install -r .github/workflows/requirements-conan-package.txt - - # NOTE: Due to what are probably github issues, we have to remove the cache and reconfigure before the rest. - # This is maybe because grub caches the disk it uses last time, which is recreated each time. - - name: Install Linux system requirements - if: ${{ runner.os == 'Linux' }} - run: | - sudo rm /var/cache/debconf/config.dat - sudo dpkg --configure -a - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt update - sudo apt upgrade - sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y - - - name: Install GCC-132 on ubuntu - run: | - sudo apt install g++-13 gcc-13 -y - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 13 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 13 - - - name: Create the default Conan profile - run: conan profile new default --detect - - - name: Get Conan configuration - run: | - conan config install https://github.com/Ultimaker/conan-config.git - conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" - - - name: Use Conan download cache (Bash) - if: ${{ runner.os != 'Windows' }} - run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" - - - name: Cache Conan local repository packages (Bash) - uses: actions/cache@v3 - if: ${{ runner.os != 'Windows' }} - with: - path: | - $HOME/.conan/data - $HOME/.conan/conan_download_cache - key: conan-${{ runner.os }}-${{ runner.arch }} - - - name: Install dependencies - run: conan install . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -s build_type=Release --build=missing --update -g GitHubActionsRunEnv -g GitHubActionsBuildEnv - - - name: Upload the Dependency package(s) - run: conan upload "*" -r cura --all -c - - - name: Set Environment variables from Conan install (bash) - if: ${{ runner.os != 'Windows' }} - run: | - . ./activate_github_actions_runenv.sh - . ./activate_github_actions_buildenv.sh - working-directory: build/Release/generators - - - name: Build CuraEngine and tests - run: | - cmake --preset release - cmake --build --preset release - - - name: Run Unit Test CuraEngine - id: run-test - run: ctest --output-junit engine_test.xml - working-directory: build/Release - - - name: Publish Unit Test Results - id: test-results - uses: EnricoMi/publish-unit-test-result-action@v1 - if: ${{ always() }} - with: - files: | - **/*.xml - - - name: Upload the detailed tests report - uses: actions/upload-artifact@v3 - if: ${{ always() }} - with: - name: LastTest.log - path: | - build/Release/Testing/Temporary/LastTest.log - retention-days: 5 - - - name: Conclusion - run: echo "Conclusion is ${{ fromJSON( steps.test-results.outputs.json ).conclusion }}" From 12e9ea5f201eea06a2eb2bc70ccade934f0a4fa3 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:07:36 +0100 Subject: [PATCH 141/218] Add FIXME reminders Contributes to CURA-10831 --- .github/workflows/unit-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index b73aaf6b05..80b011cc19 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -38,11 +38,13 @@ env: CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} jobs: + # FIXME: Change to `main` instead of `CURA-10831` once merged conan-recipe-version: uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 with: project_name: curaengine + # FIXME: Change to `main` instead of `CURA-10831` once merged testing: uses: ultimaker/cura-workflows/.github/workflows/unit-test.yml@CURA-10831 needs: [ conan-recipe-version ] From 548a32d54c40a32bebd2c7c6f4d3fb0eea41b35e Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:22:13 +0100 Subject: [PATCH 142/218] Post Unit Test results on PR Contributes to CURA-10831 --- .github/workflows/unit-test-post.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/unit-test-post.yml diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml new file mode 100644 index 0000000000..b4ca2ee699 --- /dev/null +++ b/.github/workflows/unit-test-post.yml @@ -0,0 +1,14 @@ +name: unit-test-post + +on: + workflow_run: + workflows: [ "unit-test" ] + types: [ completed ] + +jobs: + # FIXME: Use `main` instead of `CURA-10831` once merged + publish-test-results: + uses: ultimaker/cura-workflows/.github/workflows/unit-test-post.yml@CURA-10831 + with: + event: ${{ github.event.workflow_run.event }} + conclusion: ${{ github.event.workflow_run.conclusion }} From 9d659254b6bb48d9aff272cbe2818e0573f60dd3 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:22:13 +0100 Subject: [PATCH 143/218] Post Unit Test results on PR Contributes to CURA-10831 --- .github/workflows/unit-test-post.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/workflows/unit-test-post.yml diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml new file mode 100644 index 0000000000..b4ca2ee699 --- /dev/null +++ b/.github/workflows/unit-test-post.yml @@ -0,0 +1,14 @@ +name: unit-test-post + +on: + workflow_run: + workflows: [ "unit-test" ] + types: [ completed ] + +jobs: + # FIXME: Use `main` instead of `CURA-10831` once merged + publish-test-results: + uses: ultimaker/cura-workflows/.github/workflows/unit-test-post.yml@CURA-10831 + with: + event: ${{ github.event.workflow_run.event }} + conclusion: ${{ github.event.workflow_run.conclusion }} From dd666608abbd6cfd5d2e67be4ca4c9696ec16320 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:33:13 +0100 Subject: [PATCH 144/218] Remove qoutes Contributes to CURA-10831 --- .github/workflows/unit-test-post.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml index b4ca2ee699..5f21bcb3ef 100644 --- a/.github/workflows/unit-test-post.yml +++ b/.github/workflows/unit-test-post.yml @@ -2,7 +2,7 @@ name: unit-test-post on: workflow_run: - workflows: [ "unit-test" ] + workflows: [ unit-test ] types: [ completed ] jobs: From 255c33148d4dbd760c94025d0510ba4416f3cebd Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:33:52 +0100 Subject: [PATCH 145/218] Also run UT when post workflow changes Contributes to CURA-10831 --- .github/workflows/unit-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 80b011cc19..26e03c8659 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -10,6 +10,7 @@ on: - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/unit-test.yml' + - '.github/workflows/unit-test-post.yml' branches: - main - 'CURA-*' @@ -26,6 +27,7 @@ on: - 'conandata.yml' - 'CMakeLists.txt' - '.github/workflows/unit-test.yml' + - '.github/workflows/unit-test-post.yml' branches: - main - '[0-9]+.[0-9]+' From 3bbd9cc048aae98b9b7f03408f19efaa03e3e6f0 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 07:45:51 +0100 Subject: [PATCH 146/218] Update conan_data with actual version Contributes to CURA-10831 --- conanfile.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 8949b40797..3abc8e855a 100644 --- a/conanfile.py +++ b/conanfile.py @@ -5,7 +5,7 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration -from conan.tools.files import copy, mkdir +from conan.tools.files import copy, mkdir, update_conandata from conan.tools.cmake import CMakeToolchain, CMakeDeps, CMake, cmake_layout from conan.tools.build import check_min_cppstd from conan.tools.scm import Version @@ -42,6 +42,8 @@ def set_version(self): if not self.version: self.version = self.conan_data["version"] + def export(self): + update_conandata(self, {"version": self.version}) def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, self.export_sources_folder) copy(self, "Cura.proto", self.recipe_folder, self.export_sources_folder) From 641db45f09659329526ced83681e6dd5fb6483ad Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 08:07:23 +0100 Subject: [PATCH 147/218] Only build on main and release branch Contributes to CURA-10831 --- .github/workflows/conan-package.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index 859f36ddd7..fa8f3f77e9 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -36,7 +36,7 @@ jobs: conan-package-create-macos: needs: [ conan-recipe-version, conan-package-export ] - + if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} @@ -44,7 +44,7 @@ jobs: conan-package-create-windows: needs: [ conan-recipe-version, conan-package-export ] - + if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} @@ -52,7 +52,7 @@ jobs: conan-package-create-linux: needs: [ conan-recipe-version, conan-package-export ] - + if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@CURA-10831 with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} From 88253883f93de0ae634be57bc72b4e24302d2e8f Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 4 Dec 2023 13:09:40 +0100 Subject: [PATCH 148/218] Add stress benchmark test cases --- stress_benchmark/resources/001.settings | 1 - stress_benchmark/resources/002.settings | 1 - stress_benchmark/resources/003.settings | 1 - stress_benchmark/resources/004.settings | 1 - stress_benchmark/resources/005.settings | 1 - stress_benchmark/resources/006.settings | 1 - stress_benchmark/resources/007.settings | 1 - stress_benchmark/resources/008.settings | 1 - stress_benchmark/resources/009.settings | 1 - stress_benchmark/resources/010.settings | 1 - stress_benchmark/resources/011.settings | 1 - stress_benchmark/resources/012.settings | 1 - stress_benchmark/resources/013.settings | 1 - stress_benchmark/resources/014.settings | 1 - stress_benchmark/resources/015.settings | 1 - stress_benchmark/resources/016.settings | 1 - stress_benchmark/resources/017.settings | 1 - stress_benchmark/resources/018.settings | 1 - stress_benchmark/resources/019.settings | 1 - stress_benchmark/resources/020.settings | 1 - stress_benchmark/resources/021.settings | 1 - stress_benchmark/resources/022.settings | 1 - stress_benchmark/resources/023.settings | 1 - stress_benchmark/resources/024.settings | 1 - stress_benchmark/resources/025.settings | 1 - stress_benchmark/resources/026.settings | 1 - stress_benchmark/resources/027.settings | 1 - stress_benchmark/resources/028.settings | 1 - stress_benchmark/resources/029.settings | 1 - stress_benchmark/resources/030.settings | 1 - stress_benchmark/resources/031.settings | 1 - stress_benchmark/resources/032.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/032.wkt | 1 + stress_benchmark/resources/033.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/033.wkt | 1 + stress_benchmark/resources/034.settings | 626 +++++++++++++++++++++++ stress_benchmark/resources/034.wkt | 1 + stress_benchmark/resources/035.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/035.wkt | 1 + stress_benchmark/resources/036.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/036.wkt | 1 + stress_benchmark/resources/037.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/037.wkt | 1 + stress_benchmark/resources/038.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/038.wkt | 1 + stress_benchmark/resources/039.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/039.wkt | 1 + stress_benchmark/resources/040.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/040.wkt | 1 + stress_benchmark/resources/041.settings | 631 ++++++++++++++++++++++++ stress_benchmark/resources/041.wkt | 1 + stress_benchmark/resources/042.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/042.wkt | 1 + stress_benchmark/resources/043.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/043.wkt | 1 + stress_benchmark/resources/044.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/044.wkt | 1 + stress_benchmark/resources/045.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/045.wkt | 1 + stress_benchmark/resources/046.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/046.wkt | 1 + stress_benchmark/resources/047.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/047.wkt | 1 + stress_benchmark/resources/048.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/048.wkt | 1 + stress_benchmark/resources/049.settings | 626 +++++++++++++++++++++++ stress_benchmark/resources/049.wkt | 1 + stress_benchmark/resources/050.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/050.wkt | 1 + stress_benchmark/resources/051.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/051.wkt | 1 + stress_benchmark/resources/052.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/052.wkt | 1 + stress_benchmark/resources/053.settings | 631 ++++++++++++++++++++++++ stress_benchmark/resources/053.wkt | 1 + stress_benchmark/resources/054.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/054.wkt | 1 + stress_benchmark/resources/055.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/055.wkt | 1 + stress_benchmark/resources/056.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/056.wkt | 1 + stress_benchmark/resources/057.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/057.wkt | 1 + stress_benchmark/resources/058.settings | 626 +++++++++++++++++++++++ stress_benchmark/resources/058.wkt | 1 + stress_benchmark/resources/059.settings | 628 +++++++++++++++++++++++ stress_benchmark/resources/059.wkt | 1 + stress_benchmark/resources/060.settings | 627 +++++++++++++++++++++++ stress_benchmark/resources/060.wkt | 1 + 89 files changed, 18249 insertions(+), 31 deletions(-) create mode 100644 stress_benchmark/resources/032.settings create mode 100644 stress_benchmark/resources/032.wkt create mode 100644 stress_benchmark/resources/033.settings create mode 100644 stress_benchmark/resources/033.wkt create mode 100644 stress_benchmark/resources/034.settings create mode 100644 stress_benchmark/resources/034.wkt create mode 100644 stress_benchmark/resources/035.settings create mode 100644 stress_benchmark/resources/035.wkt create mode 100644 stress_benchmark/resources/036.settings create mode 100644 stress_benchmark/resources/036.wkt create mode 100644 stress_benchmark/resources/037.settings create mode 100644 stress_benchmark/resources/037.wkt create mode 100644 stress_benchmark/resources/038.settings create mode 100644 stress_benchmark/resources/038.wkt create mode 100644 stress_benchmark/resources/039.settings create mode 100644 stress_benchmark/resources/039.wkt create mode 100644 stress_benchmark/resources/040.settings create mode 100644 stress_benchmark/resources/040.wkt create mode 100644 stress_benchmark/resources/041.settings create mode 100644 stress_benchmark/resources/041.wkt create mode 100644 stress_benchmark/resources/042.settings create mode 100644 stress_benchmark/resources/042.wkt create mode 100644 stress_benchmark/resources/043.settings create mode 100644 stress_benchmark/resources/043.wkt create mode 100644 stress_benchmark/resources/044.settings create mode 100644 stress_benchmark/resources/044.wkt create mode 100644 stress_benchmark/resources/045.settings create mode 100644 stress_benchmark/resources/045.wkt create mode 100644 stress_benchmark/resources/046.settings create mode 100644 stress_benchmark/resources/046.wkt create mode 100644 stress_benchmark/resources/047.settings create mode 100644 stress_benchmark/resources/047.wkt create mode 100644 stress_benchmark/resources/048.settings create mode 100644 stress_benchmark/resources/048.wkt create mode 100644 stress_benchmark/resources/049.settings create mode 100644 stress_benchmark/resources/049.wkt create mode 100644 stress_benchmark/resources/050.settings create mode 100644 stress_benchmark/resources/050.wkt create mode 100644 stress_benchmark/resources/051.settings create mode 100644 stress_benchmark/resources/051.wkt create mode 100644 stress_benchmark/resources/052.settings create mode 100644 stress_benchmark/resources/052.wkt create mode 100644 stress_benchmark/resources/053.settings create mode 100644 stress_benchmark/resources/053.wkt create mode 100644 stress_benchmark/resources/054.settings create mode 100644 stress_benchmark/resources/054.wkt create mode 100644 stress_benchmark/resources/055.settings create mode 100644 stress_benchmark/resources/055.wkt create mode 100644 stress_benchmark/resources/056.settings create mode 100644 stress_benchmark/resources/056.wkt create mode 100644 stress_benchmark/resources/057.settings create mode 100644 stress_benchmark/resources/057.wkt create mode 100644 stress_benchmark/resources/058.settings create mode 100644 stress_benchmark/resources/058.wkt create mode 100644 stress_benchmark/resources/059.settings create mode 100644 stress_benchmark/resources/059.wkt create mode 100644 stress_benchmark/resources/060.settings create mode 100644 stress_benchmark/resources/060.wkt diff --git a/stress_benchmark/resources/001.settings b/stress_benchmark/resources/001.settings index 0626051682..d56461c776 100644 --- a/stress_benchmark/resources/001.settings +++ b/stress_benchmark/resources/001.settings @@ -530,7 +530,6 @@ mesh_position_y=0 infill_randomize_start_location=False raft_base_jerk=12.5 speed_wall_x=65 -time=17:54:18 machine_buildplate_type=glass machine_nozzle_head_distance=3 support_brim_width=1.2000000000000002 diff --git a/stress_benchmark/resources/002.settings b/stress_benchmark/resources/002.settings index 2da8498c4c..c5ec85db58 100644 --- a/stress_benchmark/resources/002.settings +++ b/stress_benchmark/resources/002.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=12.5 support_brim_width=4 top_bottom_thickness=0.8 raft_jerk=8 -time=18:43:21 machine_buildplate_type=glass center_object=False speed_print=50.0 diff --git a/stress_benchmark/resources/003.settings b/stress_benchmark/resources/003.settings index 00353b70cf..d0fd7a001a 100644 --- a/stress_benchmark/resources/003.settings +++ b/stress_benchmark/resources/003.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=12.5 support_brim_width=4 top_bottom_thickness=0.84 raft_jerk=8 -time=18:49:06 machine_buildplate_type=glass center_object=False speed_print=50.0 diff --git a/stress_benchmark/resources/004.settings b/stress_benchmark/resources/004.settings index c601d4e1cf..4683743db7 100644 --- a/stress_benchmark/resources/004.settings +++ b/stress_benchmark/resources/004.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=12.5 support_brim_width=4 top_bottom_thickness=0.8 raft_jerk=8 -time=18:50:45 machine_buildplate_type=glass center_object=False speed_print=50.0 diff --git a/stress_benchmark/resources/005.settings b/stress_benchmark/resources/005.settings index 366cdd5c24..b4ee5d4563 100644 --- a/stress_benchmark/resources/005.settings +++ b/stress_benchmark/resources/005.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=12.5 support_brim_width=4 top_bottom_thickness=0.8 raft_jerk=8 -time=18:54:59 machine_buildplate_type=glass center_object=False speed_print=50.0 diff --git a/stress_benchmark/resources/006.settings b/stress_benchmark/resources/006.settings index 7fff40c135..ec75660851 100644 --- a/stress_benchmark/resources/006.settings +++ b/stress_benchmark/resources/006.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=12.5 support_brim_width=4 top_bottom_thickness=0.8 raft_jerk=8 -time=18:56:12 machine_buildplate_type=glass center_object=False speed_print=50.0 diff --git a/stress_benchmark/resources/007.settings b/stress_benchmark/resources/007.settings index 2a63b6dbd9..635226ed8c 100644 --- a/stress_benchmark/resources/007.settings +++ b/stress_benchmark/resources/007.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=20.0 support_brim_width=4 top_bottom_thickness=0.8 raft_jerk=8 -time=19:00:31 machine_buildplate_type=glass center_object=False speed_print=80.0 diff --git a/stress_benchmark/resources/008.settings b/stress_benchmark/resources/008.settings index 4c0a14ef71..f4771e572b 100644 --- a/stress_benchmark/resources/008.settings +++ b/stress_benchmark/resources/008.settings @@ -62,7 +62,6 @@ skirt_line_count=1 prime_tower_size=20 extruders_enabled_count=2 smooth_spiralized_contours=True -time=15:31:27 machine_buildplate_type=glass mesh_position_y=0 jerk_print=20 diff --git a/stress_benchmark/resources/009.settings b/stress_benchmark/resources/009.settings index d18eb80b4c..f4771e572b 100644 --- a/stress_benchmark/resources/009.settings +++ b/stress_benchmark/resources/009.settings @@ -62,7 +62,6 @@ skirt_line_count=1 prime_tower_size=20 extruders_enabled_count=2 smooth_spiralized_contours=True -time=15:42:02 machine_buildplate_type=glass mesh_position_y=0 jerk_print=20 diff --git a/stress_benchmark/resources/010.settings b/stress_benchmark/resources/010.settings index 3843da798c..f4771e572b 100644 --- a/stress_benchmark/resources/010.settings +++ b/stress_benchmark/resources/010.settings @@ -62,7 +62,6 @@ skirt_line_count=1 prime_tower_size=20 extruders_enabled_count=2 smooth_spiralized_contours=True -time=15:50:07 machine_buildplate_type=glass mesh_position_y=0 jerk_print=20 diff --git a/stress_benchmark/resources/011.settings b/stress_benchmark/resources/011.settings index 7b90f1f8a8..3f63e86a10 100644 --- a/stress_benchmark/resources/011.settings +++ b/stress_benchmark/resources/011.settings @@ -49,7 +49,6 @@ bridge_skin_speed_2=15.0 support_brim_width=1.2000000000000002 top_bottom_thickness=0.8 raft_jerk=20 -time=17:02:46 machine_buildplate_type=glass center_object=False speed_print=60 diff --git a/stress_benchmark/resources/012.settings b/stress_benchmark/resources/012.settings index 99daccc636..712087c5e2 100644 --- a/stress_benchmark/resources/012.settings +++ b/stress_benchmark/resources/012.settings @@ -238,7 +238,6 @@ acceleration_travel_enabled=True coasting_enable=False support_interface_density=100 machine_buildplate_type=glass -time=21:10:13 speed_wall_x=65 material_final_print_temperature=250 machine_endstop_positive_direction_x=False diff --git a/stress_benchmark/resources/013.settings b/stress_benchmark/resources/013.settings index a78ed7616e..dd1893e2c9 100644 --- a/stress_benchmark/resources/013.settings +++ b/stress_benchmark/resources/013.settings @@ -569,7 +569,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=35 -time=09:20:33 machine_buildplate_type=glass top_layers=8 jerk_ironing=8 diff --git a/stress_benchmark/resources/014.settings b/stress_benchmark/resources/014.settings index cfc003e2af..3838f85463 100644 --- a/stress_benchmark/resources/014.settings +++ b/stress_benchmark/resources/014.settings @@ -569,7 +569,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=80 -time=09:27:03 machine_buildplate_type=glass top_layers=8 jerk_ironing=8 diff --git a/stress_benchmark/resources/015.settings b/stress_benchmark/resources/015.settings index a56803e6fe..b2a53600c9 100644 --- a/stress_benchmark/resources/015.settings +++ b/stress_benchmark/resources/015.settings @@ -571,7 +571,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=20 speed_wall_x=100.0 -time=09:28:31 machine_buildplate_type=glass top_layers=4 jerk_ironing=20 diff --git a/stress_benchmark/resources/016.settings b/stress_benchmark/resources/016.settings index 63a8d5a7f4..af2f42cf1e 100644 --- a/stress_benchmark/resources/016.settings +++ b/stress_benchmark/resources/016.settings @@ -568,7 +568,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=25.0 -time=09:29:32 machine_buildplate_type=glass top_layers=4 jerk_ironing=8 diff --git a/stress_benchmark/resources/017.settings b/stress_benchmark/resources/017.settings index dee1eba618..02d045445e 100644 --- a/stress_benchmark/resources/017.settings +++ b/stress_benchmark/resources/017.settings @@ -569,7 +569,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=12.0 speed_wall_x=30 -time=09:31:42 machine_buildplate_type=glass top_layers=7 jerk_ironing=12.0 diff --git a/stress_benchmark/resources/018.settings b/stress_benchmark/resources/018.settings index e92d385fed..2b377d53e0 100644 --- a/stress_benchmark/resources/018.settings +++ b/stress_benchmark/resources/018.settings @@ -570,7 +570,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=25.0 -time=09:32:51 machine_buildplate_type=glass top_layers=4 jerk_ironing=8 diff --git a/stress_benchmark/resources/019.settings b/stress_benchmark/resources/019.settings index 42fd9c7708..8910e83a35 100644 --- a/stress_benchmark/resources/019.settings +++ b/stress_benchmark/resources/019.settings @@ -570,7 +570,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=40.0 -time=09:34:51 machine_buildplate_type=glass top_layers=4 jerk_ironing=8 diff --git a/stress_benchmark/resources/020.settings b/stress_benchmark/resources/020.settings index aa4cb141d8..87cecf33c7 100644 --- a/stress_benchmark/resources/020.settings +++ b/stress_benchmark/resources/020.settings @@ -570,7 +570,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=20 speed_wall_x=70 -time=09:35:50 machine_buildplate_type=glass top_layers=4 jerk_ironing=20 diff --git a/stress_benchmark/resources/021.settings b/stress_benchmark/resources/021.settings index bec147df9c..8ddb9175ff 100644 --- a/stress_benchmark/resources/021.settings +++ b/stress_benchmark/resources/021.settings @@ -571,7 +571,6 @@ material_shrinkage_percentage_xy=100.1 bridge_skin_material_flow=95.0 raft_base_jerk=30 speed_wall_x=35 -time=09:44:20 machine_buildplate_type=glass top_layers=8 machine_gcode_flavor=Griffin diff --git a/stress_benchmark/resources/022.settings b/stress_benchmark/resources/022.settings index f9d345efde..6d484adf38 100644 --- a/stress_benchmark/resources/022.settings +++ b/stress_benchmark/resources/022.settings @@ -572,7 +572,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=20 speed_wall_x=63 -time=09:45:42 machine_buildplate_type=glass top_layers=4 jerk_ironing=20 diff --git a/stress_benchmark/resources/023.settings b/stress_benchmark/resources/023.settings index 8ef7f56f7e..abc56c6905 100644 --- a/stress_benchmark/resources/023.settings +++ b/stress_benchmark/resources/023.settings @@ -571,7 +571,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=10.0 speed_wall_x=280.0 -time=09:47:39 machine_buildplate_type=glass top_layers=5 jerk_ironing=10.0 diff --git a/stress_benchmark/resources/024.settings b/stress_benchmark/resources/024.settings index ca30eecf44..05c420b03e 100644 --- a/stress_benchmark/resources/024.settings +++ b/stress_benchmark/resources/024.settings @@ -572,7 +572,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=35.0 -time=09:49:12 machine_buildplate_type=glass top_layers=6 roofing_angles=[] diff --git a/stress_benchmark/resources/025.settings b/stress_benchmark/resources/025.settings index 3239862a7f..a6e3d3500e 100644 --- a/stress_benchmark/resources/025.settings +++ b/stress_benchmark/resources/025.settings @@ -572,7 +572,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=20 speed_wall_x=60.0 -time=09:53:09 machine_buildplate_type=glass top_layers=8 jerk_ironing=20 diff --git a/stress_benchmark/resources/026.settings b/stress_benchmark/resources/026.settings index 7e20bd7a6f..a008515e9f 100644 --- a/stress_benchmark/resources/026.settings +++ b/stress_benchmark/resources/026.settings @@ -570,7 +570,6 @@ material_shrinkage_percentage_xy=100.2 bridge_skin_material_flow=95.0 raft_base_jerk=20 speed_wall_x=35 -time=10:25:13 machine_buildplate_type=glass top_layers=17 machine_gcode_flavor=Griffin diff --git a/stress_benchmark/resources/027.settings b/stress_benchmark/resources/027.settings index bfb55d304d..1b4b00078a 100644 --- a/stress_benchmark/resources/027.settings +++ b/stress_benchmark/resources/027.settings @@ -571,7 +571,6 @@ material_shrinkage_percentage_xy=100.3 bridge_skin_material_flow=95.0 raft_base_jerk=50.0 speed_wall_x=100 -time=10:26:42 machine_buildplate_type=glass top_layers=7 machine_gcode_flavor=Griffin diff --git a/stress_benchmark/resources/028.settings b/stress_benchmark/resources/028.settings index b8537c9277..7f958d05c2 100644 --- a/stress_benchmark/resources/028.settings +++ b/stress_benchmark/resources/028.settings @@ -572,7 +572,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=95 raft_base_jerk=20 speed_wall_x=60.0 -time=10:42:02 machine_buildplate_type=glass top_layers=5 jerk_ironing=20 diff --git a/stress_benchmark/resources/029.settings b/stress_benchmark/resources/029.settings index 38caf27106..823bf8129b 100644 --- a/stress_benchmark/resources/029.settings +++ b/stress_benchmark/resources/029.settings @@ -572,7 +572,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=20 speed_wall_x=150.0 -time=10:51:35 machine_buildplate_type=glass top_layers=5 jerk_ironing=20 diff --git a/stress_benchmark/resources/030.settings b/stress_benchmark/resources/030.settings index 433def02f4..f003931b0a 100644 --- a/stress_benchmark/resources/030.settings +++ b/stress_benchmark/resources/030.settings @@ -571,7 +571,6 @@ material_shrinkage_percentage_xy=100.2 bridge_skin_material_flow=95.0 raft_base_jerk=20 speed_wall_x=30 -time=11:54:33 machine_buildplate_type=glass top_layers=10 machine_gcode_flavor=Griffin diff --git a/stress_benchmark/resources/031.settings b/stress_benchmark/resources/031.settings index 25fa556794..35ea2a8526 100644 --- a/stress_benchmark/resources/031.settings +++ b/stress_benchmark/resources/031.settings @@ -569,7 +569,6 @@ material_shrinkage_percentage_xy=100.0 bridge_skin_material_flow=60 raft_base_jerk=8 speed_wall_x=25.0 -time=11:55:41 machine_buildplate_type=glass top_layers=4 jerk_ironing=8 diff --git a/stress_benchmark/resources/032.settings b/stress_benchmark/resources/032.settings new file mode 100644 index 0000000000..8187ab3099 --- /dev/null +++ b/stress_benchmark/resources/032.settings @@ -0,0 +1,627 @@ +experimental=0 +infill_pattern=trihexagon +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=95 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=120 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=7 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=195 +machine_max_feedrate_x=299792458000 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=1.2 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=53.333333333333336 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=120 +support_xy_distance=0.7 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.1 +support_offset=0.8 +acceleration_layer_0=1000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=all +support_zag_skip_count=8 +retraction_speed=40 +acceleration_roofing=1000 +raft_interface_jerk=8 +support_roof_height=1 +acceleration_travel=3000 +acceleration_wall_x_roofing=1000 +support_roof_enable=False +acceleration_travel_layer_0=3000.0 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=40 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=1 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=95 +material_is_support_material=False +raft_interface_speed=30.0 +skirt_brim_speed=40 +retraction_amount=6 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.04 +acceleration_wall_x=1000 +prime_tower_flow=95 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=22.5 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=95 +skin_material_flow=95 +roofing_material_flow=95 +acceleration_infill=1000 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=1000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=False +support_brim_width=1.6800000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=1000 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=10 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=299792458000 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=120 +relative_extrusion=False +wall_0_material_flow_roofing=95 +raft_surface_speed=40.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=40 +acceleration_ironing=1000 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=220 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_inner +travel_speed=100 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=10 +jerk_travel=10 +speed_travel=100 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=95 +anti_overhang_mesh=False +z_seam_x=110 +support_interface_material_flow=95 +wipe_retraction_retract_speed=40 +speed_support_bottom=53.333333333333336 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=95 +bridge_wall_min_length=2.1 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=9000 +resolution=0 +support_angle=50 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=1000 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.1 +minimum_bottom_area=1.0 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.075 +wall_thickness=1.2 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=40 +material_brand=empty_brand +initial_bottom_layers=8 +support_material_flow=95 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=1000 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.2000000000000002 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=20.0 +support_bottom_distance=0.1 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1.6 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.075 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=95 +bridge_wall_coast=100 +support_interface_density=100 +bridge_wall_speed=22.5 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=80 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=53.333333333333336 +support_bottom_wall_count=0 +speed_print_layer_0=45 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=50 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.02 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=195 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +min_wall_line_width=0.34 +acceleration_support_infill=1000 +meshfix=0 +machine_max_feedrate_y=299792458000 +bridge_skin_speed=22.5 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=33.333333333333336 +bridge_fan_speed_3=0 +raft_speed=40.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0.3 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=45 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=45 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=1000 +inset_direction=inside_out +wall_x_material_flow_roofing=95 +infill_before_walls=True +acceleration_wall_0_roofing=1000 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=13 +raft_surface_line_spacing=0.4 +retraction_retract_speed=40 +bottom_layers=8 +material_print_temperature_layer_0=0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=6 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=402 +acceleration_skirt_brim=1000 +skin_overlap=5 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=402 +raft_smoothing=5 +acceleration_support_interface=1000 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=1000 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=20 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=195 +wipe_hop_amount=0.075 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=80 +support_interface_enable=False +raft_base_acceleration=1000 +wall_line_width_x=0.4 +machine_acceleration=4000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=7 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=8 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=1.2000000000000002 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=1000 +wall_material_flow=95 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_travel_layer_0=10.0 +raft_base_speed=30.0 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.625 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=1000 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=6 +ironing_monotonic=False +skin_material_flow_layer_0=120 +top_thickness=1.6 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=45 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=22.5 +infill=0 +prime_tower_position_y=380.575 +jerk_support=8 +speed_wall_x_roofing=80 +speed_layer_0=45 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +acceleration_prime_tower=1000 +material_print_temperature=195 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=80 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=none +min_odd_wall_line_width=0.34 +speed_z_hop=20 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=95 +prime_tower_position_x=400.575 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=1000 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.1 +machine_height=452 +speed_infill=80 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=45 +speed_support=80 +speed_prime_tower=80 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=140 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=1000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.6666666666666665 +infill_line_width=0.4 +speed_wall_x=80 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=1000 +infill_sparse_density=20 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=1.2000000000000002 +retraction_count_max=90 +jerk_infill=8 +speed_ironing=30.0 +gantry_height=452 +bottom_skin_expand_distance=1.2000000000000002 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=195 +material_adhesion_tendency=0 +default_material_print_temperature=195 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=9.797174393178826e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=1.2000000000000002 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=195 diff --git a/stress_benchmark/resources/032.wkt b/stress_benchmark/resources/032.wkt new file mode 100644 index 0000000000..81b51da4a0 --- /dev/null +++ b/stress_benchmark/resources/032.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((171025 202017, 171280 202159, 171529 202543, 171632 202842, 171761 203498, 171801 205287, 171805 208719, 171893 212263, 171858 216296, 171598 216999, 171059 218039, 171269 218249, 171365 218266, 171573 218175, 171637 218251, 171796 218245, 171885 218527, 171893 219256, 171884 220173, 171904 220480, 171856 224509, 171796 225316, 171758 226225, 171653 227973, 171619 229081, 171653 229663, 171736 230288, 171832 230862, 171865 231711, 171873 232834, 171765 233465, 171496 234122, 171646 234392, 171757 234829, 171711 235541, 171684 236138, 171667 236944, 171682 237999, 171808 240513, 171238 241098, 171466 241735, 171606 242337, 171592 242940, 171892 243549, 171953 244203, 172035 246354, 171966 249888, 171954 251669, 171919 253624, 171745 254130, 171486 254377, 171254 254841, 171681 256113, 171793 256804, 171797 257224, 171831 258137, 171831 259025, 171851 259154, 171911 259842, 171939 260520, 171891 261269, 171711 260758, 171184 261246, 171676 261979, 171883 262720, 171878 263638, 171860 264610, 171734 266990, 171809 267764, 171937 268854, 171900 272390, 171896 273615, 171869 275179, 169816 275179, 169623 273958, 169676 273162, 169695 273119, 169846 271721, 169857 271195, 169904 270102, 169987 269086, 170058 268446, 170042 267761, 169985 267244, 169944 267073, 169928 266365, 169951 266258, 169992 265635, 169794 265134, 169668 264918, 169516 264287, 169480 264191, 169123 262760, 169104 262045, 169019 261330, 168669 259727, 168594 258975, 168386 257785, 168339 257237, 168333 256983, 168232 256066, 168318 255965, 168414 255277, 168423 254956, 168596 254297, 168607 253847, 168658 253630, 168661 253039, 168927 252348, 169012 251659, 169105 251392, 169151 250974, 169288 250805, 169341 250501, 169517 250553, 169690 251125, 169848 251258, 169777 251688, 170011 252804, 170135 252689, 170076 253009, 170266 253633, 170451 253913, 170625 253963, 170769 254058, 170975 253604, 170953 253286, 170808 253236, 170740 253290, 170634 253191, 170479 253395, 170598 252953, 170556 252720, 170481 252621, 170361 252634, 170418 252290, 170322 251861, 170259 251797, 170279 251612, 170157 251015, 170132 250997, 170087 250490, 170014 250222, 169925 249706, 169837 249376, 169738 248390, 169642 247830, 169500 247734, 169433 247209, 169352 248087, 169390 248789, 169396 249468, 169208 250262, 168963 251125, 168933 251646, 168825 252058, 168910 252326, 168689 252617, 168557 253434, 168449 254030, 168443 254273, 168181 254931, 167989 255373, 167851 256282, 167814 256955, 167858 257589, 167953 258112, 168038 258721, 168167 259389, 168715 261704, 168833 262042, 168988 262763, 169016 263490, 169151 264214, 169223 264957, 169329 265677, 169497 266364, 169621 267102, 169734 268441, 169682 269118, 169581 270135, 169537 270462, 169517 271403, 169480 271940, 169418 272636, 169323 273417, 169366 274457, 169374 275178, 167667 275179, 167669 274079, 167615 273486, 167323 272501, 167263 272516, 167285 272378, 167212 271919, 167191 271159, 167116 270525, 167080 270024, 167060 269874, 167057 269359, 166991 269214, 167174 268953, 167740 267886, 167543 267443, 167406 267867, 167095 268529, 166880 269171, 166751 269333, 166538 269922, 166685 270575, 166714 271021, 166823 271983, 167068 273225, 167145 273338, 167235 273342, 167196 273599, 167197 274414, 167256 275179, 166021 275179, 165998 274676, 165794 273690, 165785 273693, 165600 272453, 165483 272316, 165522 272009, 165462 271761, 165398 271195, 165204 271298, 165328 270758, 165303 270241, 165438 269572, 165462 269382, 165682 268638, 165967 267928, 166115 267187, 166171 266446, 166171 265711, 166072 264999, 165820 264618, 165572 264565, 165165 264685, 165036 264797, 164831 264800, 164770 265097, 164946 265370, 165048 265442, 165328 265503, 165451 265570, 165553 265515, 165680 265828, 165873 266065, 165870 266795, 165767 267629, 165672 267945, 165665 268652, 165507 268197, 165390 268345, 165106 269393, 164929 270097, 164963 270596, 165036 271189, 165135 271417, 165267 272024, 165302 272372, 165391 272954, 165446 273136, 165436 273242, 165515 273765, 165448 274573, 165458 275179, 163897 275179, 163865 273669, 163870 273181, 163777 267335, 163810 265854, 163758 262865, 163766 261996, 163850 261220, 163891 260424, 163913 257927, 163961 256340, 163977 256087, 163981 255090, 164060 254796, 164340 255051, 164506 255038, 164566 254981, 164959 255732, 165027 255639, 165020 256018, 165163 256348, 165322 256517, 165761 257497, 165899 258118, 166009 258921, 166162 259777, 166360 260503, 166522 261324, 167038 263521, 167326 264634, 167452 265007, 167464 265193, 167584 265748, 167690 266453, 167660 266843, 167741 267882, 167817 267461, 167974 267362, 168048 267188, 168012 266457, 167889 265877, 167842 265851, 167852 265720, 167417 263803, 167343 263778, 167355 263552, 167231 262954, 167224 262826, 167087 262082, 166929 261344, 166821 260515, 166813 259777, 166762 259049, 166712 258874, 166576 258263, 166509 257701, 166457 257029, 166356 256292, 166292 256032, 166239 255487, 166294 254746, 166638 252925, 166946 250317, 167015 249611, 167068 248620, 167132 247060, 167152 245107, 167138 244341, 167139 243596, 167033 242886, 166949 242793, 166714 242712, 166508 242540, 166443 242365, 166006 241914, 165251 241071, 165305 241295, 165794 241882, 165770 242109, 166053 242541, 166461 243473, 166542 244100, 166586 244353, 166635 244998, 166725 245635, 166790 246313, 166874 246742, 166846 246989, 166826 247664, 166703 248275, 166626 248964, 166669 249609, 166643 250260, 166561 250640, 166447 251594, 166300 252233, 166132 252870, 166103 253113, 165935 254204, 165829 255507, 165803 255472, 165436 255796, 165282 255859, 165205 255744, 165142 255844, 165142 255426, 164841 254972, 164389 253862, 163975 252937, 163929 252303, 164042 251592, 164124 250996, 164163 250047, 164165 249088, 164090 247856, 164065 246588, 164035 245925, 163952 245197, 163873 244199, 163827 241047, 163925 240752, 164078 240822, 164369 240654, 164519 240654, 164644 240597, 164727 240633, 164749 240500, 163969 239656, 163801 238962, 163798 238036, 163906 235814, 163907 235050, 163861 233743, 163832 232576, 163844 230868, 163857 230357, 163860 228506, 163940 227851, 164103 227247, 164185 225268, 164175 225054, 164198 224517, 164078 223381, 163983 222226, 163970 220737, 163976 218464, 164012 217202, 164032 213775, 164075 212969, 164086 211848, 164071 211252, 163965 210621, 164019 209442, 164022 209005, 164057 207604, 164023 205835, 164053 205241, 164054 204962, 164135 202838, 164325 202223, 164734 202060, 165092 202299, 165180 202932, 165176 203041, 165230 203750, 165346 204359, 165409 205192, 165723 207865, 165969 209098, 165953 209287, 166002 209880, 166101 210473, 166208 210743, 166213 211062, 166435 211942, 166525 212000, 166548 212457, 166691 212890, 166838 213532, 166804 214192, 166888 214964, 166937 216036, 166972 216590, 167009 216779, 166964 217079, 166934 217590, 166586 219881, 166596 220235, 166561 220818, 166501 221052, 166357 221750, 166239 222446, 166075 223140, 165857 223823, 165581 224364, 165347 225130, 165327 225673, 165332 225860, 165228 226622, 165165 227291, 165150 228119, 165097 229394, 165039 230171, 165006 230848, 165166 232319, 165183 233050, 165167 233776, 165185 234491, 165258 235247, 165448 236617, 165465 237047, 165573 238014, 165856 238589, 165892 238001, 165819 237489, 165775 237315, 165704 236802, 165665 236618, 165518 235532, 165442 234692, 165412 234505, 165457 234240, 165458 232208, 165423 231636, 165404 230886, 165549 228730, 165574 227857, 165640 226637, 165659 225877, 165714 225641, 165806 225140, 166013 224532, 166344 223903, 166551 223185, 166674 222474, 166846 221711, 166922 221067, 166788 220586, 166830 220066, 166908 219647, 166982 219049, 167121 218184, 167204 217579, 167258 217037, 167297 216898, 167343 216332, 167361 216215, 167419 215532, 167400 214856, 167492 214179, 167420 213526, 167547 212254, 167670 211558, 167687 211039, 167833 210456, 167884 209859, 167973 209393, 167746 209254, 167704 209829, 167612 210304, 167788 210448, 167579 210556, 167551 211021, 167616 211575, 167291 212235, 167262 212378, 167233 212329, 166879 212173, 166724 211768, 166555 211027, 166438 210363, 166356 210121, 166347 209850, 166254 209197, 166170 208741, 166072 207516, 165983 206783, 165861 205521, 165798 204624, 165731 203269, 165722 202675, 165768 202296, 165979 202094, 166187 202030, 166831 202015, 167158 202063, 167460 202195, 167795 203120, 167897 203742, 167891 204211, 168075 205214, 168199 205491, 168068 205557, 168110 206302, 168116 206665, 168166 206879, 168398 207438, 168451 207143, 168424 206514, 168394 206310, 168433 205921, 168362 205207, 168286 204956, 168414 204493, 168402 204182, 168362 204110, 168438 203917, 168316 203217, 168415 203080, 168276 202642, 168261 202461, 168477 202195, 168801 202064, 169193 202092, 169358 202212, 169533 202415, 169660 202987, 169760 203508, 169779 204051, 169744 204453, 169778 205087, 169848 205776, 169881 206661, 169884 207538, 170209 208137, 170296 208772, 170444 210848, 170457 212750, 170353 213352, 170149 213972, 169935 214565, 169946 214861, 169844 214777, 169765 214914, 169648 215426, 169470 215640, 169086 216452, 168877 216925, 168818 217194, 168640 217561, 168444 218235, 168398 218720, 168442 218780, 168381 218940, 168408 219697, 168669 218973, 168756 218269, 168920 217617, 168992 217185, 169224 216918, 169453 216386, 169781 215818, 169801 215523, 169933 215502, 170064 215248, 170290 214664, 170714 213441, 170835 212776, 170868 212200, 170964 211424, 170947 210123, 170887 209715, 170776 208781, 170620 207841, 170481 206768, 170491 206323, 170466 205741, 170368 205141, 170318 204322, 170246 203622, 170244 203487, 170176 202471, 170395 202005) (170585 260507, 170848 260843, 170764 260512, 170687 260390) (170138 259071, 170173 259202, 170247 259788, 170484 260302, 170564 259795, 170439 259539, 170209 258967) (170904 254217, 171173 254656, 171452 254235, 171185 254048) (166858 228965, 166618 229573, 166538 230326, 166564 231081, 166750 231844, 166917 233219, 167072 234160, 167499 236450, 167642 237263, 167649 237463, 167763 238567, 167967 239870, 168113 241281, 168240 241999, 168400 242676, 168491 243325, 168615 244101, 168827 244927, 168970 245639, 169189 246147, 169216 246390, 169235 245998, 169185 245770, 169009 245353, 169020 245054, 168899 244459, 168647 242798, 168543 241944, 168534 241236, 168638 240548, 168505 239819, 168346 239090, 168288 238699, 168084 237592, 167989 237239, 167774 235899, 167697 235339, 167531 234400, 167302 232743, 167203 231526, 167071 230376, 167141 229625, 167153 229135, 167066 228862) (170741 239500, 170808 239296, 170790 239075, 170723 239069, 170473 238656) (170274 237799, 170391 238329, 170428 237908, 170398 237715, 170349 237686) (170640 233267, 170497 233273, 170318 233557, 170501 233770, 171023 233947, 171194 233449, 170772 233145) (169143 230474, 169122 231057, 169247 231624, 169244 231746, 169347 232441, 169378 233144, 169667 233424, 169871 233422, 170004 232953, 169829 232604, 169680 231990, 169665 231646, 169593 231306, 169581 230987, 169412 230414) (169691 226419, 169421 227051, 169062 227785, 168762 228333, 168718 228518, 168544 229046, 168801 229590, 169030 229910, 169092 230141, 169322 230184, 169160 229725, 169150 229597, 169106 229549, 168943 229048, 169015 228363, 169414 227829, 169603 227392, 169762 226567, 170007 226488, 169906 225812) (170412 218423, 170241 218590, 170215 218740, 169990 219268, 169975 219776, 169866 219497, 169238 220930, 169142 221020, 169040 221322, 168345 222976, 168222 223644, 168024 224072, 167640 225378, 167494 226044, 167343 226646, 167369 227067, 167269 226934, 167146 227405, 166959 228607, 167068 228849, 167211 228135, 167235 227690, 167407 227605, 167557 227081, 167697 226511, 167785 226072, 167922 225586, 167937 225425, 168121 224915, 168542 223445, 168660 223190, 169050 222192, 169198 221752, 169383 221442, 170028 220026, 170102 219522, 170209 219646, 170362 219327, 170452 219007, 170501 219080, 170855 218662, 170861 218184) (170960 227016, 170707 227270, 170553 227901, 170572 227976, 170764 227967, 170841 227907, 171070 227460, 171227 227281, 171092 226992) (169920 225774, 170053 226483, 170314 226414, 170480 225874, 170432 225432, 170287 225365) (168044 207459, 168094 207867, 167927 208218, 167823 208636, 168013 209172, 168100 208671, 168285 208084, 168232 207693, 168367 207486, 168085 207177)), ((180401 253120, 180770 253328, 180896 254044, 180950 255594, 180939 256385, 180965 257447, 181027 261131, 180999 262268, 181043 264621, 181053 265621, 180959 266394, 180915 267136, 180917 267899, 180885 269921, 180833 270636, 180822 271584, 180687 271860, 180454 271664, 180287 271686, 180232 271793, 180039 271309, 179876 271205, 179793 271061, 179737 271411, 180003 271830, 180043 271711, 180113 272031, 180472 272798, 180776 273320, 180789 273492, 180877 274014, 180761 274625, 180696 275178, 178285 275179, 178395 274311, 178686 273480, 178802 272821, 178885 272446, 178967 271340, 179110 270986, 179202 271276, 179395 271100, 179508 271097, 179586 270941, 179659 271080, 179728 270749, 179664 270546, 179588 270495, 179314 270104, 179004 269444, 178874 268689, 178842 268581, 178587 267454, 178520 267233, 178318 266433, 178117 265699, 178042 265304, 177864 264756, 177673 263988, 177631 263918, 177450 264122, 177446 263482, 177402 263217, 177118 262649, 177153 261776, 177113 261350, 177427 260679, 177543 260189, 177766 260004, 178111 259341, 178186 258677, 178157 258248, 178095 257998, 178021 257333, 177905 256808, 177690 256176, 177595 255795, 177664 255549, 177677 255139, 177455 254508, 177497 254397, 177502 254014, 177623 253544, 177344 253492, 177001 254010, 177108 254823, 177116 255366, 177250 256146, 177469 256730, 177602 257273, 177680 257746, 177620 258001, 177622 258393, 177721 258588, 177878 258335, 177756 258660, 177761 259328, 177495 259815, 177448 259982, 177185 260456, 177057 260654, 176743 261367, 176831 261995, 176937 261799, 176843 262087, 176977 262493, 177020 262803, 177232 263557, 177566 264892, 177634 265261, 177841 266124, 177948 266497, 178025 267262, 178023 268038, 178220 268832, 178454 270557, 178543 271123, 178555 271680, 178466 272184, 178378 272540, 178245 273191, 178177 273439, 178024 274602, 177937 275179, 175161 275179, 175072 275072, 174908 274173, 174714 273290, 174381 272616, 174234 272588, 173997 272447, 173780 272239, 173774 272831, 173992 273174, 174151 273286, 174465 272849, 174247 273520, 174301 273788, 174403 273931, 174579 273719, 174440 274198, 174664 275178, 172846 275179, 172865 273846, 172901 272749, 173051 272549, 173167 272557, 173719 272179, 173502 271725, 173394 271713, 173417 271519, 173166 270882, 173005 270158, 172980 269156, 172980 268299, 172950 268129, 172869 266955, 173554 266273, 173146 265709, 173043 265790, 173080 265615, 172920 264829, 172954 263238, 173064 261698, 173017 260894, 172927 260304, 172881 259667, 172877 258774, 172930 254727, 172963 254554, 172960 254036, 173186 253499, 173819 253445, 174231 253475, 174503 253549, 174778 253704, 174974 254220, 175060 254700, 175178 255218, 175228 255741, 175028 256553, 175013 257058, 174980 257428, 174954 257950, 174961 258036, 174850 259350, 174765 260073, 174775 260816, 174881 261556, 174830 262315, 175308 263779, 175500 264496, 175675 265237, 175706 265944, 175811 266316, 175976 267035, 176065 267367, 176312 268766, 176418 269461, 176469 270178, 176566 270842, 176468 271328, 176563 271518, 176380 271962, 176355 272547, 176432 272178, 176728 271531, 176930 270862, 176996 270177, 176942 269466, 176791 268635, 176657 268032, 176424 267147, 176088 265976, 175886 265331, 175693 265214, 175821 264614, 175640 263734, 175562 262989, 175407 262252, 175200 261520, 175150 261022, 175089 260055, 175038 259698, 175109 259351, 175013 258923, 175196 259164, 175286 258135, 175320 257566, 175298 257251, 175353 256828, 175271 256599, 175393 256615, 175445 256395, 175498 255706, 175459 255176, 175454 254504, 175393 253577, 175648 253330, 176162 253286, 176581 253523, 176964 253903, 177368 253320, 177734 253188, 178337 253134, 178523 253171, 178685 253329, 178775 253691, 178801 254546, 178865 255240, 178966 255468, 179088 256099, 179295 255568, 179365 254747, 179322 254036, 179231 253412, 179336 253192, 179637 253104, 180046 253063) (175991 273453, 175935 274592, 176030 274154, 176152 273474, 176069 273100) (174513 268260, 174573 268260, 174641 268168, 174606 268043, 174543 267495, 174502 267461) (173356 266952, 173422 267327, 173855 267192, 173962 267088, 174066 267084, 174157 266911, 173590 266311) (179435 258004, 179481 258574, 179512 258664, 179363 259483, 179301 259522, 179164 259912, 178895 260523, 178700 261164, 178632 261896, 178649 262712, 178932 263370, 179179 263498, 179455 263371, 179240 262631, 179185 262546, 179051 261822, 179080 261071, 179213 260623, 179217 260473, 179533 259927, 179743 259304, 179889 258648, 179784 257986, 179635 257451) (180103 262636, 180236 262838, 180346 262652, 180361 262426, 180257 262285) (179094 256146, 179375 257647, 179571 257341, 179485 256716, 179311 255736)), ((210371 236583, 210437 236987, 210423 238199, 210408 238705, 210363 239537, 210345 239619, 210237 241105, 210284 241303, 210263 241676, 210403 242034, 210377 242415, 210534 242603, 210747 242198, 210937 242016, 210943 241628, 211006 241514, 211045 240126, 211078 239928, 211078 239033, 211065 238756, 211048 237470, 211053 236639, 211541 236561, 212150 236589, 212485 236727, 212868 236681, 213127 236726, 213250 236647, 213587 236885, 213784 237300, 213725 237419, 213778 237927, 213763 238030, 213787 238618, 213701 238670, 213716 238801, 213638 238937, 213679 239498, 213657 239654, 213688 241111, 213713 241332, 213630 241755, 213433 241987, 213439 242652, 213380 242912, 213322 244710, 213309 245571, 213292 245698, 213279 247011, 213309 247187, 213278 247829, 213316 248066, 213228 248778, 213257 248973, 213206 249912, 213243 250285, 213232 250885, 213193 251271, 213010 251420, 212879 251836, 212858 252032, 212906 252547, 212966 252671, 212974 252836, 213170 253144, 213082 253843, 213053 254142, 212852 254808, 212776 255347, 212971 256139, 213254 256402, 213463 255845, 213182 255538, 213438 254872, 213433 254322, 213372 253878, 213450 252891, 213574 251908, 213603 251005, 213691 250488, 213811 249958, 213795 249018, 213736 248454, 213777 248111, 213726 247625, 213774 247244, 213793 246659, 213845 245639, 213858 244903, 213944 243972, 214097 243330, 214086 243000, 214135 242811, 214115 242409, 214148 241836, 214166 240676, 214385 240121, 214642 239843, 214763 239293, 214421 238631, 214430 238492, 214348 238098, 214348 237420, 214416 237296, 214621 237091, 214926 237034, 215218 237070, 215313 237311, 215300 237723, 215350 238331, 215349 238645, 215375 239875, 215466 241183, 215491 241364, 215524 242093, 215480 242836, 215539 245017, 215569 249801, 215519 250422, 215458 250861, 215411 251663, 215407 252032, 215351 253010, 215402 253459, 215421 254636, 215415 255114, 215455 256206, 215457 256759, 215421 258910, 215425 259358, 215397 260086, 215398 260502, 215293 262075, 215271 263131, 215310 265849, 215340 266017, 215387 266985, 215375 267578, 215384 268312, 215294 269081, 215355 269442, 215306 270405, 215348 270956, 215217 272603, 215225 273215, 215294 273883, 215324 274050, 215365 275179, 214010 275178, 214121 274427, 214144 273935, 214267 273280, 214121 273135, 213872 273670, 213784 273998, 213719 275179, 212500 275178, 212609 274425, 212306 273683, 212231 272881, 212128 272077, 212134 271540, 212064 270849, 211924 270399, 211924 270287, 211692 270010, 211745 269521, 211719 268974, 211731 267653, 211713 267283, 211763 266285, 211701 265910, 211728 265535, 211731 265001, 211770 264643, 211621 263985, 211302 263948, 211384 263182, 211484 262759, 211658 262293, 211779 261587, 211845 261397, 211800 261313, 211714 260486, 211659 259559, 211694 259215, 211732 258522, 212084 256372, 211943 255909, 211646 256687, 211417 258821, 211308 259548, 211215 259981, 211204 260469, 211119 260780, 211025 262093, 211058 262269, 211085 262800, 211217 263233, 211213 264433, 211488 264377, 211274 264994, 211202 265919, 211297 267437, 211276 267725, 211297 268674, 211396 270043, 211472 270386, 211624 271359, 211721 271896, 211639 272871, 211721 273874, 211702 274355, 211731 275179, 209671 275178, 209589 273375, 209558 270973, 209567 270083, 209557 269395, 209453 265898, 209474 265256, 209461 264650, 209522 264004, 209561 263439, 209628 263073, 209686 262518, 209768 261868, 209866 261614, 209865 261272, 209929 260698, 209953 260368, 210149 259466, 210351 258329, 210499 257964, 210555 257223, 210689 256640, 210714 256044, 210173 255631, 210070 255333, 209913 255204, 209646 256019, 209673 256579, 209666 256952, 209760 258438, 209647 259046, 209533 259398, 209469 260311, 209521 260646, 209406 260558, 209244 260721, 209216 261195, 209156 261400, 209046 262094, 209099 263195, 209025 263179, 208847 263329, 208911 263962, 208909 264207, 208950 264921, 209013 265675, 209048 265876, 209097 266814, 209119 267731, 209124 268450, 209110 268629, 209092 269509, 209130 269818, 209113 270368, 209131 270982, 209127 271210, 209226 272253, 209223 272893, 209201 273464, 209228 273844, 209243 274433, 209279 275179, 207459 275179, 207453 274391, 207432 273626, 207509 273197, 207475 272858, 207499 272521, 207487 271922, 207518 271253, 207516 270384, 207487 269505, 207528 268928, 207440 267149, 207420 265699, 207458 264874, 207492 264422, 207464 263892, 207503 262920, 207561 262036, 207532 261530, 207488 261113, 207509 260664, 207439 258429, 207433 257403, 207443 256351, 207438 255810, 207481 254980, 207476 254525, 207531 254236, 207567 253521, 207724 252682, 207680 251734, 207585 250846, 207565 250210, 207530 249784, 207534 249023, 207521 248364, 207541 247818, 207568 247406, 207547 246528, 207562 245867, 207533 243968, 207550 243442, 207534 242863, 207556 241959, 207544 241563, 207594 240329, 207523 239544, 207557 239023, 207576 238447, 207567 238056, 207731 236998, 207940 236719, 208392 236523, 208870 236551, 208956 236719, 208957 236941, 209095 237154, 208961 237870, 209008 238014, 208975 238139, 209054 238196, 209411 238019, 209267 237871, 209448 237591, 209538 237072, 209648 236542, 210166 236499) (213710 270437, 213663 271249, 213640 271460, 213608 272085, 213549 272596, 213726 272891, 213717 272982, 213758 273017, 213895 272882, 213850 272764, 214158 272058, 214273 271222, 214286 270900, 214416 269831, 214233 269443) (213895 265092, 213840 265877, 213871 266358, 213790 267208, 213773 267699, 213640 268209, 213796 268604, 213752 268795, 213865 268740, 214140 267689, 214160 267322, 214231 266776, 214315 266417, 214345 265863, 214345 265439, 214391 264467, 214238 264031) (213795 261352, 213777 261635, 213553 262263, 213505 262879, 213697 263159, 213841 263544, 213995 263148, 214003 262876, 214195 262238, 214221 261625, 213968 261055) (212981 256966, 212856 257708, 212866 258347, 213118 258646, 213118 258785, 213203 258788, 213341 259561, 213290 260058, 213389 260467, 213354 260736, 213518 260729, 213676 260457, 213731 260121, 213899 259546, 213696 258683, 213593 258646, 213690 258621, 213691 257096, 213403 256876) (208567 252322, 208564 252738, 208518 253280, 208521 254049, 208655 254448, 208835 254113, 208851 253147, 208815 252344, 208770 251719, 208776 251553, 208730 250899) (209120 240735, 209088 240963, 208879 241805, 208904 242455, 208948 242786, 208933 243669, 208854 244453, 208695 244910, 208674 245446, 208642 245654, 208625 246270, 208697 246406, 208760 246901, 208754 247204, 208866 247689, 209036 247172, 209050 246855, 209156 246342, 209189 245843, 209280 245547, 209307 244951, 209150 244440, 209154 243659, 209279 242692, 209391 242330, 209391 242021, 209465 241428, 209451 240913, 209476 240693, 209366 240216) (212215 246286, 212251 246632, 212309 246242, 212276 245297) (210252 244747, 210408 244996, 211017 245524, 211184 244740, 211186 244573, 210438 244466) (212394 237474, 212164 237568, 212284 238866, 212427 239052, 212434 239271, 212604 239527, 212568 239651, 212645 240024, 212618 240418, 212208 240333, 212065 240521, 211759 241057, 211942 241912, 212274 242018, 212712 241642, 212828 241088, 212814 240537, 212764 240067, 212772 239464, 212891 239093, 212875 238894, 212953 238676, 212935 238279, 212855 237892, 212609 237575, 212597 237413, 212485 237294) (209085 238393, 209069 238667, 208966 239142, 208981 239771, 209037 240003, 209358 240195, 209217 239743, 209339 239570, 209411 238919, 209486 238699, 209563 238144, 209413 238017)), ((192410 128152, 192443 129647, 192451 132488, 192594 132474, 192572 130626, 192581 129942, 192578 128942, 192657 128493, 193435 128418, 193984 128420, 194511 128458, 196757 128379, 198201 128396, 198659 128347, 199100 128408, 199897 128452, 200575 128448, 201158 128404, 202011 128379, 202190 128387, 202832 128329, 203208 128368, 203595 128335, 204050 128436, 204879 128287, 206187 128266, 206563 128213, 206912 128270, 207484 128250, 208104 128246, 208521 128339, 208588 128761, 208599 129944, 208635 129492, 208711 129151, 208790 129008, 209227 128726, 209432 128563, 209924 128454, 210534 128416, 210887 128433, 211395 128437, 211700 128498, 212242 128471, 213091 128468, 213408 128515, 214379 128518, 214572 128553, 215166 128454, 215998 128600, 216830 128587, 217466 128428, 218691 128484, 218829 128471, 219338 128476, 219687 128434, 220130 128516, 220952 128525, 221033 128510, 221749 128452, 222479 128452, 223076 128480, 223861 128448, 224423 128603, 224638 128600, 225114 128936, 225270 129119, 226145 129939, 226530 130320, 226653 130418, 227440 131200, 228401 132191, 228534 132427, 228712 132636, 228980 132761, 229481 133302, 229783 133595, 230250 134140, 230354 134206, 231056 134906, 231191 135292, 231148 135601, 231615 135292, 232157 135551, 232520 135938, 232626 136089, 232997 136496, 233273 136770, 233648 137166, 233851 137327, 234359 137890, 234423 137940, 234804 138326, 235248 138726, 235672 139171, 235891 139426, 236228 139659, 236684 140130, 237065 140431, 237393 140885, 238475 141886, 238692 142176, 239200 142607, 239380 142806, 239914 143313, 240529 143955, 240589 144059, 241505 144961, 241646 145187, 242058 145493, 242551 145938, 242936 146331, 243263 146625, 244368 147784, 244667 148326, 244654 148645, 244995 148367, 245894 149270, 246188 149580, 246655 150003, 247145 150486, 247731 151097, 248096 151452, 248483 151859, 249643 152993, 249978 153520, 250108 154140, 250128 158178, 250319 158231, 250424 158343, 250966 158305, 251139 158331, 251683 158603, 251956 158389, 252376 158525, 252834 158468, 252927 158562, 253133 158468, 253657 158397, 254206 158253, 254935 158265, 255427 158326, 256313 158390, 257434 158287, 258107 158325, 259066 158325, 259906 158284, 260766 158296, 261428 158215, 261592 158169, 262454 158165, 263248 158570, 263312 158665, 263440 159107, 263453 159678, 263450 160545, 263405 161735, 263380 162793, 263338 163779, 263354 164910, 263320 165580, 263282 165627, 263180 166119, 263050 166312, 263095 166617, 263049 167185, 263268 167536, 263291 167907, 257174 182673, 257168 185685, 257174 217532, 256904 217498, 256902 219138, 257174 219142, 257174 231170, 256863 231143, 256858 232925, 257174 232823, 257174 275178, 246644 275178, 246447 274181, 246321 273595, 246144 272551, 246065 271817, 245897 270538, 245849 270272, 245950 269348, 246003 268707, 246238 267945, 246483 267201, 247079 265284, 247400 264557, 247777 263745, 247772 263537, 247799 263707, 248111 263115, 248114 262843, 248156 263037, 248376 262617, 248376 261874, 248363 261798, 248035 262423, 247693 263038, 247362 263667, 247081 264320, 246835 264968, 246319 266443, 246155 267060, 245893 267917, 245748 268684, 245642 268862, 245434 269447, 245293 270263, 245337 271021, 245548 271792, 245640 272526, 245744 273086, 245984 274189, 246218 275179, 244435 275179, 244374 274651, 244273 274001, 244245 273255, 244269 272421, 244254 271265, 244224 270942, 244295 270003, 244406 267717, 244447 267079, 244539 266259, 244792 265619, 245251 264908, 245280 264660, 245407 264167, 245440 263967, 245709 262815, 245637 262163, 245650 261775, 245821 260799, 246055 259608, 246155 258787, 246248 258152, 246228 257465, 246296 256783, 246274 256113, 246377 255451, 246201 254977, 246154 255263, 245949 255301, 245528 255170, 245513 254822, 245308 254046, 245188 253717, 245078 253155, 245046 252781, 244960 252189, 244692 249985, 244564 248462, 244538 247567, 244579 247146, 244664 247054, 245066 246940, 245603 246921, 245591 246309, 245533 246174, 245230 246566, 244497 246480, 244347 246328, 244267 245423, 244165 244972, 244187 244428, 244133 245249, 244027 245689, 243929 246227, 243785 246362, 243159 246387, 242895 246296, 242753 246106, 242652 245459, 242609 243888, 242607 242872, 242580 241048, 242576 239765, 242615 237368, 242498 229349, 242500 228464, 242480 226741, 242506 225790, 242586 224526, 242641 223025, 242654 221933, 242648 219036, 242662 217151, 242646 214088, 242705 210897, 242700 208895, 242678 206165, 242639 203402, 242626 200390, 242638 199146, 242610 197892, 242563 196697, 242525 195344, 242517 194183, 242478 192990, 242417 190420, 242397 187920, 242434 187427, 242482 185917, 242578 184128, 242602 183876, 242634 183140, 242650 182318, 242609 181433, 242537 178701, 242477 177249, 242476 174782, 241961 174785, 241953 175694, 241926 176337, 241906 177653, 241909 178593, 241854 179943, 241844 180599, 241953 181918, 241912 182604, 241907 183194, 241877 183894, 241907 185371, 241868 185928, 241795 187666, 241639 188074, 241353 188228, 240589 188239, 240358 187862, 240300 187494, 240297 187803, 240088 188059, 239597 188098, 239353 187904, 239160 188239, 238313 188250, 237976 188131, 237876 187818, 237900 187016, 237689 186988, 237519 187603, 237528 187749, 237311 188249, 236809 188207, 236262 188235, 236161 187816, 236059 186978, 235917 186787, 235930 186317, 235758 185822, 235707 186250, 235829 186862, 235571 188099, 235419 188078, 235194 188201, 234786 188171, 234463 187980, 234249 187540, 234165 187127, 234109 185720, 234114 183040, 234065 181445, 234021 180489, 234060 176553, 234039 175800, 234048 175081, 234019 173962, 234020 173212, 234064 170877, 234139 169927, 234214 168675, 234275 167900, 234297 167153, 234085 165668, 233687 164974, 233638 166365, 233630 167434, 233674 168185, 233733 168747, 233747 169449, 233678 169987, 233674 170133, 233561 170778, 233447 171584, 233436 172973, 233527 174984, 233532 175455, 233595 176493, 233717 177539, 233751 178590, 233812 183152, 233784 184229, 233718 185390, 233700 186493, 233751 188019, 233768 188288, 233781 189008, 233780 189559, 233754 190779, 233745 192596, 233698 193250, 233573 193649, 233518 193990, 233492 194799, 233455 195451, 233427 196478, 233507 197434, 233571 197942, 233617 198718, 233633 200041, 233626 202233, 233592 203457, 233576 204957, 233578 206464, 233523 207639, 233514 208538, 233533 209220, 233634 209877, 233586 210868, 233574 211821, 233547 212474, 233550 213097, 233582 214354, 233476 217213, 233429 217466, 233306 217743, 233094 217919, 232408 217952, 231862 217752, 231421 217817, 231101 217721, 230811 217964, 230373 217979, 229780 217960, 229558 217902, 229493 217835, 229403 217402, 229482 217303, 229490 216468, 229458 216266, 229368 216514, 229261 217115, 229308 217350, 229185 217720, 228997 217986, 228320 218011, 227860 217973, 227756 217303, 227679 217185, 227530 217255, 227102 217570, 226591 217911, 225937 217428, 225708 216545, 225670 214441, 225673 211706, 225635 209836, 225599 208952, 225589 208087, 225605 204975, 225570 203517, 225584 201299, 225574 200124, 225612 196932, 225689 195623, 225781 193717, 225841 192829, 225858 192095, 225797 191405, 225671 190660, 225622 190017, 225595 188988, 225615 188162, 225710 186730, 225741 186420, 225794 185525, 225813 184576, 225782 183386, 225740 182421, 225631 180559, 225513 177500, 225444 176008, 225492 174050, 225566 168640, 225733 167673, 225833 167291, 225827 166627, 225631 165377, 225608 164541, 225582 163986, 225584 163344, 225539 161836, 225582 160497, 225633 158127, 225752 156302, 225733 155632, 225565 154405, 225561 152207, 225590 150576, 224795 149775, 224711 150371, 224256 151138, 224239 151261, 224281 151194, 224416 151487, 224579 151610, 224799 151936, 224792 153471, 224811 156117, 224800 158616, 224744 161961, 224547 163360, 224493 164031, 224509 164671, 224608 165960, 224658 167029, 224692 168247, 224594 168963, 224570 169753, 224344 170506, 224605 171125, 224688 171256, 224737 171574, 224779 172359, 224782 172964, 224724 175850, 224745 176633, 224777 177263, 224795 178342, 224754 181712, 224691 182222, 224382 182539, 223970 182586, 223672 182572, 223475 182411, 223287 182384, 223121 181913, 222944 181222, 222921 180632, 222983 179987, 222944 179287, 222928 179160, 222903 178581, 223010 177873, 223247 177176, 223459 176481, 223628 175773, 223754 175041, 223843 174298, 223829 173977, 223837 172981, 223972 172288, 224127 172025, 224232 171557, 224050 171167, 223824 171712, 223660 172005, 223447 172850, 223481 173509, 223472 173641, 223492 174259, 223178 175557, 222955 176407, 222785 176750, 222640 177424, 222572 177637, 222509 178135, 222488 178540, 222410 179244, 222381 179922, 222432 180561, 222521 181189, 222545 182205, 222448 182430, 221886 182595, 220831 182599, 220701 182566, 220574 182469, 220526 181902, 220321 181305, 220191 181586, 220103 182083, 219958 182499, 219673 182627, 219268 182356, 219092 181880, 219099 181253, 219152 180747, 219166 179635, 219211 179025, 219159 178325, 219196 177700, 219068 176786, 218707 175603, 218522 175126, 218435 174589, 218239 174275, 218151 173993, 218047 173389, 218008 173641, 218029 173808, 217981 174330, 218112 174999, 218429 176364, 218507 176859, 218598 177649, 218615 177728, 218640 178233, 218662 178418, 218691 179539, 218678 179800, 218671 180346, 218604 181203, 218382 181969, 218242 182079, 218156 182267, 218001 182392, 217626 182299, 216968 182012, 216870 181781, 216771 181725, 216726 181266, 216691 180362, 216693 179999, 216654 177370, 216699 174541, 216646 172147, 216559 166166, 216603 164803, 216674 163773, 216717 162823, 216734 161909, 216729 159917, 216744 157655, 216729 155257, 216763 153372, 216781 153168, 216803 152631, 216773 149664, 216867 148838, 217241 148141, 217141 147828, 216917 147404, 216855 147065, 215946 146528, 216035 148472, 216046 149815, 216005 151774, 216062 154229, 216042 155158, 215960 157591, 215917 158179, 215873 158626, 215792 160732, 215487 160955, 215119 161020, 214930 160442, 214829 159937, 214788 159868, 214717 159975, 214602 160884, 214517 160964, 214229 161051, 213586 161046, 213253 160860, 213314 160788, 213348 160461, 213280 159871, 213191 159662, 213383 159471, 213442 159357, 213348 158735, 213271 158533, 213162 158663, 213160 159269, 213040 159734, 213110 160180, 213073 160432, 213108 160503, 212762 161057, 211563 161008, 211146 160859, 211045 160712, 211072 160508, 211006 159563, 211002 159050, 210950 158538, 210891 158277, 210961 157458, 210909 156219, 210759 155771, 210815 155090, 210864 154933, 210773 154558, 210707 153849, 210689 153219, 210760 152627, 210721 152106, 210597 150812, 210475 149054, 210401 147777, 210387 147196, 210329 146929, 210398 146455, 210396 145921, 210368 145424, 210410 144567, 210512 143891, 210482 143170, 210315 142460, 210272 142431, 209996 142484, 209869 143171, 209909 143876, 210095 144833, 210075 146498, 210099 147198, 210138 147449, 210151 148297, 210177 148425, 210189 148954, 210234 149162, 210207 149780, 210276 150885, 210315 152037, 210380 152715, 210446 153159, 210511 154050, 210546 154971, 210600 155441, 210626 156589, 210704 157357, 210669 157518, 210722 157933, 210677 158666, 210601 158868, 210604 159231, 210665 159826, 210634 160752, 210459 160852, 210062 160898, 209065 160776, 208455 160667, 207849 160510, 207787 159837, 207839 158038, 207822 157460, 207767 156542, 207706 154959, 207805 153711, 207812 153134, 207658 151279, 207632 149622, 207649 148992, 207719 148366, 207828 147865, 208031 147116, 208116 146508, 208102 145757, 208104 144541, 207982 143866, 207733 143193, 207652 142528, 207126 142528, 207081 145956, 207012 147181, 206955 148773, 206842 150961, 206869 151792, 206930 152440, 207027 153120, 207077 153801, 207100 155303, 207083 156129, 207007 157672, 206947 158469, 206915 159264, 206897 160039, 206894 160859, 206920 161941, 206925 162607, 206985 164000, 207027 164618, 207081 165673, 207273 171437, 207240 173152, 207159 180144, 206953 181247, 206903 181441, 206878 182101, 206921 182768, 207050 183463, 207103 184130, 207151 185617, 207154 186539, 207195 187978, 207116 191678, 207105 192839, 206967 195345, 207031 196214, 207096 196735, 207147 197409, 207162 199810, 207120 202908, 207114 204678, 207075 205290, 206979 205800, 206456 205948, 206676 206105, 206767 206528, 206831 207114, 206863 208664, 206863 209360, 206879 210399, 206879 211170, 206930 213225, 206957 214926, 206929 216286, 206985 220098, 206915 220769, 206852 221522, 206836 222237, 206843 222970, 206810 224819, 206757 225846, 206745 226798, 206796 227636, 206860 228406, 206851 229243, 206611 230855, 206573 231742, 206567 232507, 206653 234315, 206656 234809, 206692 235704, 206851 237166, 206870 237748, 206923 241217, 206943 243335, 206825 245802, 206828 246410, 206864 247502, 206898 248170, 206907 249269, 206878 250731, 206862 252832, 206787 253242, 206669 253555, 206597 254286, 206571 255458, 206534 256511, 206691 257872, 206760 259072, 206759 262159, 206722 263703, 206708 265244, 206709 266697, 206658 267690, 206644 268981, 206732 269665, 206758 270280, 206717 271077, 206703 272111, 206676 272785, 206713 274883, 206689 275178, 200778 275179, 200788 274640, 200747 274512, 200744 274192, 200572 274125, 200488 274963, 200509 275179, 198843 275179, 198845 271897, 198811 270166, 198756 268769, 198779 265030, 198754 262997, 198761 261728, 198751 261102, 198751 259938, 198795 256481, 198856 255729, 198931 254059, 199018 252678, 199031 251943, 198964 251226, 198843 250512, 198792 249791, 198773 249075, 198780 248229, 198855 246918, 198928 246116, 198970 245182, 198987 244400, 198963 243221, 198790 239950, 198609 235343, 198623 234580, 198660 233480, 198727 228366, 198800 227574, 198997 226793, 198991 226029, 198851 225257, 198795 224576, 198754 223659, 198738 222514, 198705 221644, 198709 220956, 198773 218723, 198786 217774, 198831 216829, 198920 215545, 198889 214829, 198770 213963, 198738 213462, 198721 212253, 198773 208758, 198774 207516, 198826 206788, 199338 206423, 199393 206425, 199248 206277, 199133 205306, 199096 203617, 199096 202218, 199074 201131, 199090 200372, 199040 198312, 199001 195525, 199025 194278, 199010 192825, 198985 191746, 198972 189522, 199067 188431, 199102 187733, 199116 186903, 199106 186317, 199135 184276, 199191 183087, 199223 182094, 199215 181310, 199101 179448, 199116 178549, 199190 177833, 199278 177193, 199357 176417, 199381 175050, 199376 174397, 199312 173183, 199269 171339, 199213 170393, 199121 169473, 199083 168235, 199070 166211, 199041 164973, 199011 161524, 199075 160062, 199123 159231, 199133 158419, 199064 155948, 199081 150808, 199129 150130, 199338 149482, 199409 148818, 199439 146993, 199471 146296, 199428 145598, 199287 144358, 199233 143804, 199198 142997, 199190 142471, 197987 142381, 197973 143321, 197994 145273, 197957 146910, 197955 147413, 197924 147986, 197943 150070, 197892 150737, 197595 151074, 197474 151368, 197731 151905, 197810 152027, 197966 152682, 197967 153701, 197954 154400, 197958 154622, 197915 155329, 197903 155412, 197909 156283, 198039 159371, 198126 160814, 197956 161292, 197763 161129, 197502 161316, 197380 161470, 197881 162110, 198054 162796, 198098 163516, 198118 164579, 198111 165602, 198053 166530, 198005 167051, 197989 167743, 198046 168793, 198058 169212, 198148 171146, 198165 171965, 198161 172709, 198125 173503, 198126 174004, 198105 174661, 198158 176761, 198171 177914, 198072 180939, 197976 182091, 197906 184105, 197785 184452, 197708 184511, 197328 184602, 196833 184576, 196689 184496, 196538 184146, 196380 183296, 196072 180728, 196021 180495, 195928 180561, 195978 180309, 195903 179920, 195905 179718, 195846 179101, 195747 178518, 195597 179131, 195680 179475, 195658 179748, 195714 180342, 195804 180906, 195857 181449, 195972 181789, 195964 181954, 196036 182457, 196144 183440, 196171 184125, 196121 184348, 195976 184541, 196206 184567, 196309 184624, 196313 184717, 196465 184988, 196492 185129, 196623 185274, 197002 184638, 197670 184634, 197919 184724, 198038 184951, 198127 185524, 198159 187024, 198157 187411, 198192 189029, 198157 190303, 198146 191317, 198190 192935, 198264 196789, 198262 197451, 198279 198108, 198264 198952, 198143 200792, 198120 201790, 198110 205340, 198124 207092, 198081 209002, 198082 210397, 198106 212849, 198138 214541, 198136 215847, 198148 216267, 198143 217185, 198179 218509, 198256 219862, 198281 221341, 198318 222395, 198329 222991, 198351 223492, 198368 226035, 198266 227712, 198212 228283, 198166 228642, 198131 229429, 198152 230091, 198191 230779, 198220 231956, 198262 232680, 198290 233739, 198292 234335, 198261 235453, 198250 236759, 198296 238521, 198306 239245, 198290 240144, 198209 242819, 198121 243957, 198038 246213, 197926 246413, 197662 246482, 197819 246479, 197976 246608, 198159 246990, 198235 247688, 198262 248855, 198282 250763, 198276 251220, 198294 252049, 198318 252649, 198356 254840, 198323 256215, 198379 258614, 198374 259744, 198282 260440, 198243 261135, 198241 262307, 198204 264037, 198169 264568, 198146 265461, 198162 266195, 198249 267136, 198269 267690, 198245 267863, 198209 268405, 198096 268996, 197988 269763, 197969 271124, 198050 272537, 198078 273756, 198234 275179, 193720 275179, 193685 274563, 193643 275179, 190079 275178, 190011 273738, 190063 271654, 190116 267968, 190149 266686, 190368 265983, 190412 265318, 190327 264644, 190196 263998, 190175 263173, 190146 262520, 190144 261870, 190113 261139, 190108 260430, 190173 258279, 190197 257074, 190316 255366, 190282 254633, 190175 253918, 190135 253212, 190125 251943, 190178 247902, 190223 247371, 190333 247044, 190639 246921, 191575 246902, 191881 246870, 192882 246810, 192955 246844, 193065 246995, 193146 247319, 193167 247747, 193119 248499, 193101 249583, 193107 249632, 193089 250155, 193128 250347, 193032 250777, 192857 252295, 192804 253033, 192937 253719, 193013 252664, 193046 252009, 193131 251585, 193101 251377, 193237 251042, 193615 248580, 193690 247117, 193651 246998, 193736 246732, 193921 246679, 194752 246670, 195133 246836, 195131 247272, 195177 247788, 194974 247824, 194874 249182, 194931 249582, 194808 249597, 194738 250356, 194654 250836, 194672 250968, 194594 251204, 194477 252034, 194427 252844, 194412 253727, 194438 254301, 194471 255510, 194573 256179, 194658 256866, 194709 257746, 194918 258507, 194912 258918, 194987 259617, 195125 260300, 195261 259610, 195165 259116, 195142 258914, 195033 258222, 195013 257533, 194913 256853, 194901 256191, 194820 255543, 194777 254893, 194759 254205, 194757 252983, 194779 252257, 194850 251485, 194845 250996, 194909 250385, 195027 249948, 195135 248899, 195131 248799, 195262 247887, 195311 247058, 195463 246650, 195523 246590, 195822 246563, 195615 246230, 195591 245812, 195517 245453, 195561 245281, 195445 245126, 195627 245092, 195608 244394, 195537 243896, 195349 244047, 195370 244710, 195524 244915, 195342 244994, 195276 245240, 195416 245878, 195194 246424, 194838 246569, 194320 246552, 193779 246506, 193469 246422, 193324 245962, 193261 245166, 193214 245025, 193245 244938, 193251 244075, 193197 243914, 193185 243344, 193212 242885, 193166 242160, 193116 240365, 193079 239667, 193009 239079, 192913 238448, 193005 237864, 192975 237161, 192821 235432, 192794 235314, 192782 234738, 192711 233573, 192683 232960, 192643 231453, 192633 229783, 192648 229054, 192738 228394, 192756 227614, 192600 226911, 192580 226892, 192487 226332, 192275 226214, 192247 226902, 192101 227636, 192175 228349, 192329 229069, 192318 229368, 192327 231098, 192355 232462, 192430 234133, 192480 234953, 192513 235257, 192547 235895, 192577 236047, 192541 236297, 192577 237196, 192676 238086, 192757 238465, 192769 239111, 192794 239349, 192818 240263, 192834 240354, 192862 240865, 192879 240964, 192870 241673, 192898 243459, 192846 244475, 192912 244875, 192887 245428, 192878 245965, 192722 246352, 192383 246417, 191500 246308, 190689 246164, 190157 246017, 190048 245880, 190020 245729, 190079 243431, 190073 242776, 190032 242249, 189995 241316, 189942 240500, 189963 239848, 190007 239360, 190058 238544, 190038 237850, 189890 236199, 189877 234905, 189886 233768, 189992 232831, 190265 231773, 190361 231110, 190350 230171, 190352 229114, 190277 228427, 190039 227700, 189911 227014, 189893 226231, 189898 225037, 189966 220139, 189886 218314, 189907 217131, 189908 216382, 189882 215438, 189851 213545, 189876 211180, 189912 209435, 189911 208541, 189883 206660, 189894 204532, 189927 202659, 189963 201614, 190113 200721, 190200 199774, 190063 197992, 189974 195938, 189956 194314, 189896 192906, 189960 190449, 189942 189678, 189881 188780, 189905 187594, 189905 186497, 189939 185209, 190142 184731, 190280 184649, 190748 184552, 191548 184532, 192068 184654, 192522 184510, 192831 184499, 192541 184454, 192378 184089, 192294 183352, 192207 182899, 192224 182815, 192049 181297, 191947 181065, 191971 180885, 191853 180305, 191703 179059, 191736 178986, 191771 178325, 191620 176985, 191558 176857, 191562 176203, 191579 176033, 191338 175254, 191081 174646, 190502 173743, 190096 173009, 189938 172175, 189971 171421, 190097 170672, 190296 169948, 190401 169271, 190397 167362, 190349 166727, 190176 166093, 189972 165475, 189924 164820, 189912 163601, 189924 163009, 189921 162394, 189950 160674, 189997 160364, 190137 160265, 190205 160390, 190567 160724, 190641 160685, 190786 161037, 191068 161281, 191170 161220, 191340 161485, 191335 161618, 191579 162195, 191666 162742, 191733 163285, 191730 163403, 191861 164005, 191890 164630, 191911 164721, 191933 165261, 191971 165814, 191988 166604, 192041 167605, 192090 167737, 192067 167851, 192106 168350, 192082 168518, 192103 169462, 192146 169627, 192266 169577, 192227 169883, 192169 169987, 192151 170750, 192217 172036, 192186 172905, 192139 173519, 192144 174311, 192307 175097, 192517 175873, 193058 177609, 193230 178081, 193429 178858, 193527 179423, 193746 180173, 193965 181039, 194186 181972, 194486 183115, 194546 183564, 194522 184140, 194409 184460, 194689 184470, 195091 184602, 195178 184579, 195106 184574, 195012 184485, 194977 183824, 194896 183414, 194742 182505, 194534 181556, 194218 180256, 194031 179341, 193845 178580, 193675 178017, 193626 177765, 193466 177247, 193199 176568, 193037 176316, 192888 176172, 192864 175841, 192760 175333, 192680 175345, 192680 175072, 192579 174535, 192461 173530, 192463 172745, 192487 171993, 192589 171242, 192525 170388, 192446 169859, 192460 169165, 192403 167906, 192413 167824, 192379 166537, 192337 165881, 192316 165232, 192304 165130, 192388 163959, 192325 163389, 192328 163345, 192151 162497, 192004 161526, 191987 160912, 191804 160713, 191482 160056, 191253 159315, 191233 158533, 191235 157850, 191189 157150, 191154 155774, 191002 156126, 190985 156441, 190905 157180, 191153 157787, 190916 157569, 190847 157624, 190906 157896, 191155 158474, 190944 158318, 190927 158589, 190953 159243, 191168 159853, 191349 160639, 191219 160585, 191173 160785, 191015 160600, 190742 160103, 190005 158678, 189887 156181, 189880 154961, 189888 153069, 189867 152481, 189891 150260, 190022 149515, 190335 149065, 189980 148522, 189202 147175, 189113 148121, 188932 148781, 188901 149601, 188854 150377, 189002 151348, 189058 152066, 189074 153401, 189064 154839, 189024 155786, 189011 157981, 188963 158751, 188955 159524, 189075 160259, 189028 160987, 189020 161519, 188984 162406, 189018 163599, 188978 164281, 188919 165745, 188705 166093, 188388 166234, 188032 166259, 187555 166219, 187390 166132, 187214 166104, 186681 166152, 186408 166088, 186163 166273, 185095 166274, 184984 166147, 185041 166059, 184948 165383, 184782 165412, 184779 165944, 184719 166075, 184430 166257, 183688 166321, 183237 166265, 183097 165702, 182982 164978, 183001 164602, 183078 164238, 183121 163646, 183078 162869, 183060 162805, 182962 163237, 182986 163361, 182932 164223, 182975 164614, 182952 164977, 182787 165651, 182560 166249, 181877 166226, 181499 166070, 181204 165482, 181152 165132, 181116 164154, 181107 161326, 181076 160315, 181030 159410, 181039 158201, 181035 157069, 181042 156518, 181037 155941, 181011 155442, 181029 153480, 180690 153967, 179915 154689, 180089 155358, 180144 155503, 180296 156000, 180366 156711, 180368 158506, 180343 160696, 180312 162390, 180305 163625, 180366 164900, 180376 165616, 180348 166488, 180348 167432, 180382 168633, 180406 170177, 180404 171895, 180346 174654, 180379 177365, 180367 179699, 180328 181607, 180298 182535, 180164 183381, 180055 184305, 180100 185163, 180169 185917, 180236 187143, 180286 188741, 180281 189502, 180347 191863, 180299 193912, 180303 194629, 180384 196037, 180330 199485, 180217 199955, 179950 200065, 180198 200062, 180567 200146, 180693 200525, 180751 201077, 180783 202030, 180780 202682, 180807 204260, 180832 204794, 180876 206712, 180837 207736, 180900 210366, 180777 211226, 180749 212002, 180745 212783, 180726 213720, 180710 213873, 180667 215028, 180705 215750, 180783 216485, 180761 217177, 180605 217828, 180497 218495, 180480 219229, 180497 219808, 180564 220710, 180571 221099, 180613 221859, 180728 222566, 180786 223225, 180814 224883, 180834 225524, 180857 227458, 180786 228301, 180735 229231, 180809 230810, 180819 231874, 180808 232495, 180790 232906, 180791 233896, 180715 234652, 180536 235308, 180504 236128, 180457 236900, 180606 237873, 180661 238593, 180677 239931, 180669 241359, 180630 242292, 180615 244507, 180566 245282, 180558 246050, 180678 246785, 180631 247514, 180623 248048, 180588 248920, 180621 250125, 180582 250808, 180522 252272, 180309 252619, 179991 252761, 179635 252786, 179158 252745, 178993 252659, 178819 252631, 178285 252679, 178011 252616, 177765 252799, 177032 252807, 176678 252777, 176587 252672, 176644 252582, 176551 251910, 176385 251939, 176384 252470, 176322 252601, 176034 252784, 175287 252849, 174840 252792, 174701 252228, 174586 251505, 174604 251129, 174681 250766, 174725 250161, 174681 249397, 174663 249331, 174566 249764, 174590 249888, 174536 250750, 174579 251153, 174556 251504, 174391 252178, 174164 252775, 173480 252752, 173102 252597, 172804 252019, 172756 251690, 172715 250338, 172713 248030, 172684 246944, 172634 245798, 172641 242482, 172615 241970, 172613 241330, 172631 240249, 172620 239695, 172662 237268, 172806 235100, 172885 234184, 172882 233397, 172707 232535, 172651 231755, 172645 230968, 172751 229685, 172799 229328, 172847 228591, 172855 227767, 172823 227034, 172778 226450, 172762 226061, 172700 225441, 172495 221653, 172504 220898, 172530 220515, 172602 216618, 172653 215894, 172878 215187, 172822 214447, 172669 213672, 172627 212808, 172621 212118, 172587 211242, 172649 209574, 172677 208441, 172768 207486, 172798 206804, 172689 206149, 172608 205489, 172597 204980, 172644 202288, 172639 201794, 172671 200979, 172965 200420, 174331 200378, 175382 200325, 175521 200415, 175617 200582, 175625 200760, 175706 201026, 175651 201114, 175680 201312, 175634 201381, 175615 201859, 175644 201951, 175614 202218, 175575 203004, 175578 203723, 175516 204000, 175584 204264, 175524 204440, 175605 204348, 175777 203193, 175826 203120, 176113 201556, 176140 200783, 176114 200457, 176167 200338, 176349 200250, 175637 200251, 175226 200103, 174785 200214, 174172 200171, 173994 200115, 173882 200011, 173884 199821, 173793 199248, 173788 198935, 173703 199307, 173501 199811, 173357 200047, 172639 200073, 172378 199984, 172224 199511, 172170 198194, 172137 195413, 172176 193338, 172119 191158, 172054 187393, 172057 186870, 172036 185993, 172073 185078, 172129 184388, 172189 183359, 172216 182302, 172208 181125, 172221 178730, 172210 176775, 172231 175534, 172267 174376, 172262 172921, 172239 170735, 172203 169588, 172202 167958, 172191 166877, 172201 166203, 172196 165276, 171870 165083, 172041 165793, 172041 166608, 171922 168997, 171936 169941, 171995 171091, 172011 171708, 171998 173158, 171981 173723, 171972 176018, 171825 176754, 171734 177109, 171643 179584, 171689 179975, 171855 181765, 171866 183058, 171862 185335, 171827 186629, 171810 189678, 171759 190868, 171749 191761, 171769 192412, 171870 193059, 171818 194159, 171805 195064, 171776 195798, 171807 197028, 171810 197823, 171702 200589, 171527 200988, 171282 201197, 170878 201112, 170748 200943, 170637 200468, 170606 199761, 170485 199097, 170398 198096, 170147 195995, 169904 194659, 169820 193608, 169635 192700, 169572 192675, 169590 192497, 169416 191812, 169039 190460, 168993 189801, 168981 189038, 168917 188423, 168854 187624, 168853 187042, 168820 187023, 168822 186492, 169143 184469, 169187 184283, 169319 182983, 169440 182430, 169546 181748, 169720 181049, 169934 180331, 169947 180341, 170242 179774, 170459 179098, 170473 178728, 170531 178059, 170629 177335, 170692 175832, 170709 174978, 170334 174970, 170275 175821, 170263 176459, 170225 176995, 170189 177750, 170169 178424, 170011 179086, 169760 179791, 169625 179913, 169462 180256, 169324 180680, 169129 181719, 168989 182303, 168917 182962, 169041 183620, 168780 185352, 168621 186326, 168534 186946, 168426 188096, 168426 188457, 168363 189889, 168440 191006, 168354 191179, 168493 191259, 168709 191262, 168923 191370, 169094 191861, 169201 192267, 169347 192002, 169322 192530, 169388 192819, 169412 193204, 169492 193748, 169706 194835, 169749 195559, 169749 195748, 169913 197223, 170057 199026, 170101 199972, 170111 200629, 170066 200942, 169972 201112, 169714 201226, 168814 201260, 168417 201132, 168260 200874, 167976 199777, 167938 199117, 167871 198892, 167622 197336, 167711 196719, 167752 195863, 167595 195409, 167475 195836, 167374 196800, 167409 197085, 167466 197956, 167531 198410, 167499 198792, 167395 199024, 167444 199662, 167576 200877, 167322 201111, 167019 201215, 166812 201161, 166677 201181, 166459 201073, 166248 200713, 166049 199792, 166067 199042, 166053 198382, 165991 197761, 165955 197119, 165941 196452, 165864 195775, 165540 195125, 165502 194406, 165397 192983, 165324 190513, 165510 190234, 165539 190117, 165776 189438, 166055 188777, 166132 188531, 166355 188127, 166303 187540, 166025 188052, 166001 188304, 165927 188243, 165635 188841, 165197 190051, 165169 190202, 165003 190788, 164970 191492, 164871 192237, 164875 192972, 164933 193830, 165055 194599, 165342 196589, 165340 197102, 165401 197852, 165498 198440, 165525 199073, 165600 199599, 165628 200210, 165669 200767, 165548 201172, 165195 201272, 164990 201267, 164744 201171, 164317 200816, 164067 200069, 164024 198788, 164011 197889, 164005 194421, 163923 191739, 163938 190188, 163932 189662, 163953 187624, 164160 186981, 164467 186372, 164836 185756, 164139 185359, 164066 185726, 163925 185226, 163922 183872, 163912 183337, 163958 179676, 164028 178800, 164034 178512, 164120 176909, 164153 176588, 164195 175391, 164176 174909, 163316 174926, 163347 175589, 163251 176906, 163226 177660, 163257 178411, 163403 180144, 163426 182879, 163368 183543, 163252 184293, 163182 184535, 162984 185459, 162923 186130, 162940 187169, 162938 188497, 163009 189112, 163348 190328, 163406 190993, 163423 192639, 163409 194401, 163351 198629, 163364 199217, 163422 200616, 163413 201410, 163386 202455, 163448 205469, 163441 206093, 163454 206384, 163443 208813, 163396 211235, 163429 214580, 163420 216750, 163365 219741, 163265 220691, 163123 221675, 163124 222612, 163174 223208, 163251 224424, 163313 226065, 163329 226757, 163345 228616, 163379 229447, 163395 230381, 163384 231215, 163357 232219, 163347 233536, 163424 234956, 163402 238135, 163386 238987, 163339 239426, 163106 239665, 162760 239789, 161653 239821, 161301 239669, 160832 239834, 160413 239844, 160180 239799, 160128 239450, 159942 238987, 159928 239457, 159861 239701, 159601 239856, 159273 239867, 159266 239927, 159629 239915, 160535 240006, 160938 239974, 161345 240038, 161770 240882, 162085 240125, 162755 240112, 163121 240436, 163188 240752, 163220 241371, 163268 243838, 163280 245271, 163238 247469, 163286 249665, 163366 254762, 163367 256265, 163324 257168, 163244 258416, 163203 259673, 163206 262495, 163190 264186, 163207 266160, 163171 268244, 163154 268504, 163145 269263, 163176 272989, 163191 273326, 163212 275179, 144700 275179, 144712 274792, 144788 274066, 144821 273493, 144971 273125, 145452 272841, 146023 272792, 147449 272773, 152208 272763, 152233 272660, 151428 272736, 150436 272747, 148039 272748, 147465 272740, 147036 272750, 146271 272747, 145483 272728, 144953 272682, 144742 272539, 144487 271888, 144546 271470, 144366 270992, 144415 270197, 144336 269319, 144316 267943, 144346 266960, 144258 266350, 144256 265823, 144206 264601, 144185 264353, 144209 263538, 144167 262793, 144201 262023, 144342 261209, 144491 260157, 144376 258934, 144323 257514, 144357 256882, 144304 256245, 144343 255728, 144280 255041, 144320 254463, 144225 253872, 144297 253309, 144331 252861, 144410 252545, 144579 252398, 144948 252269, 145544 252201, 145280 252167, 145076 252044, 144901 251719, 144993 250786, 145023 250282, 145028 249478, 144887 248646, 144813 247937, 144746 246839, 144655 245970, 144727 245338, 144765 244394, 144719 243225, 144751 241955, 144703 240863, 144749 239931, 144753 239452, 144873 238461, 145101 237975, 145598 237694, 146728 237624, 147335 237620, 148259 237665, 149032 237659, 149379 237631, 150760 237612, 151269 237641, 152331 237735, 152650 237892, 152578 237426, 152018 237410, 151653 237441, 149515 237459, 148965 237433, 147132 237441, 145669 237418, 145208 237316, 144989 236928, 144764 235880, 144811 235012, 144746 234263, 144774 233253, 145006 233150, 145141 233031, 145194 232160, 144855 231765, 144880 230482, 144899 230226, 144834 229003, 144938 228102, 144856 227504, 144838 225837, 144773 225200, 144792 224635, 144913 224001, 144934 223418, 145065 222888, 145300 222520, 145147 222137, 145097 221641, 145138 221398, 145418 220833, 145251 220111, 145286 219929, 145272 219164, 145495 218163, 145495 217969, 145690 217453, 145328 216644, 145370 215987, 145451 215835, 145372 215699, 145205 214946, 145369 214620, 146051 214564, 146302 214604, 146369 214569, 147387 214580, 148140 214633, 149886 214615, 150346 214704, 150764 214577, 151489 214553, 151493 214270, 150940 214258, 149644 214163, 148337 214234, 147728 214295, 146084 214350, 145501 214350, 145238 214288, 145135 214210, 145023 213887, 145036 213813, 144904 213322, 144849 212450, 144893 211942, 144833 211191, 144866 210552, 144863 209895, 144897 209496, 144867 209022, 144754 208627, 144814 208148, 144828 207584, 144802 206856, 144783 206675, 144753 205673, 144725 205404, 144732 204708, 144761 204416, 144719 203879, 144564 202442, 144609 201648, 144535 200441, 144499 200131, 144494 199487, 144505 199311, 144458 198606, 144557 197874, 144513 197140, 144403 196276, 144470 195060, 144433 194270, 144546 193880, 144564 193258, 144630 192449, 144652 191709, 144613 191304, 144554 190433, 144592 189976, 144587 189361, 144667 188397, 144624 187791, 144595 187560, 144610 186949, 144579 186328, 144631 185986, 144620 185294, 144656 184431, 144678 184255, 144622 183373, 144596 183223, 144504 182183, 144558 181615, 144551 180348, 144660 179762, 144814 179475, 145169 179331, 146039 179297, 145065 179271, 144531 179091, 144407 178927, 144433 177691, 144473 177087, 144453 176806, 144463 176110, 144500 175708, 144519 174628, 144509 174485, 144583 174080, 144550 173417, 144605 172688, 144677 171216, 144669 170950, 144670 169896, 144606 168981, 144454 168276, 144515 167858, 144431 167301, 144478 166037, 144541 165329, 144511 164785, 144530 163830, 144528 163280, 144506 163033, 144514 162422, 144537 161715, 144500 161474, 144517 160325, 144562 160046, 144524 159648, 144631 159280, 144907 158944, 145406 158856, 146707 158822, 147946 158825, 150704 158798, 151042 158785, 152216 158784, 152531 158774, 154217 158779, 155236 158797, 157450 158799, 157489 158547, 157462 157758, 157545 157256, 157540 157003, 157556 156101, 157678 155517, 158121 154939, 158426 154675, 159484 153578, 160022 153054, 160149 152896, 160647 152396, 160994 151837, 161480 151447, 162137 150795, 162499 150550, 162618 150375, 163159 149803, 163258 149667, 163643 149287, 163921 148880, 164078 148762, 164481 148345, 164622 148249, 165028 147716, 165587 147163, 165862 146935, 166385 146451, 166990 145918, 167434 145376, 167940 144884, 168340 144622, 168913 144489, 169160 144497, 169289 144560, 169178 144422, 169131 144264, 170155 143341, 171052 142374, 171511 141958, 172004 141380, 173257 140328, 173472 140044, 173995 139464, 174559 139147, 174750 139134, 175141 139477, 175145 139364, 175575 138849, 176050 138410, 176433 137968, 176845 137616, 177010 137493, 177385 137010, 177829 136529, 178584 135811, 179691 134787, 180110 134382, 180265 134246, 180652 133827, 181157 133346, 181668 132774, 181763 132691, 182239 132223, 182717 131720, 183336 131142, 183690 130735, 184652 129746, 185079 129370, 185646 128839, 186236 128394, 186878 128200, 187900 128249, 188725 128250, 189047 128191, 189338 128211, 189823 128162, 190727 128144, 191524 128170, 192151 128135) (205036 273709, 205010 274271, 204985 274483, 205015 274774, 205136 274932, 205261 274445, 205274 274168, 205175 273289) (247820 270238, 247863 270976, 248052 271684, 248027 272433, 248181 272681, 248248 272679, 248238 271456, 248285 270960, 248275 270373, 248213 270297, 248089 270526, 248004 270222, 247893 270155, 247861 269984) (203773 269999, 203713 270513, 203749 271165, 203815 271517, 203893 271319, 203944 270768, 203950 270268, 203920 269702, 203859 269412) (191635 271452, 191672 270912, 191644 270827) (247895 268052, 247426 268749, 247417 269505, 247544 269787, 247736 269505, 247693 269202, 247745 268766, 248162 268118, 248161 267584) (195319 268434, 195359 268389, 195292 267737) (195409 264465, 195310 265264, 195376 266003, 195353 266513, 195393 266747, 195322 267369, 195504 267474, 195650 265290, 195490 264773, 195437 264436) (194064 265183, 194092 265294, 194114 265233, 194083 264660) (152691 259011, 152712 260009, 152745 260834, 152690 261516, 152724 262290, 152699 263746, 153047 263665, 153026 262962, 152748 262280, 152707 261527, 152808 261253, 152799 261052, 152867 260519, 152883 260094, 152755 259337, 152770 258901, 152711 258436) (191454 262488, 191405 263188, 191441 263533, 191533 263451, 191507 263183, 191502 262430, 191485 262312) (195302 261011, 195365 261293, 195377 261710, 195531 262726, 195598 262076, 195488 260965, 195367 260402) (200531 261940, 200542 262429, 200605 262236, 200586 261856) (247777 258918, 247752 258941, 247447 259614, 247212 260250, 247121 261304, 247161 261637, 247208 261608, 247213 261545, 247484 260933, 247639 259977, 247742 259677, 247920 259441, 248285 258845, 248195 258163) (192699 258837, 192728 259018, 192677 259673, 192639 260469, 192621 261201, 192678 261298, 192786 261065, 192758 260906, 192775 260370, 192772 259671, 192789 259519, 192766 258763) (152745 257572, 152714 258360, 152783 257995, 152825 256945, 152799 256820, 152778 256189) (192515 256106, 192459 256828, 192500 257377, 192584 256830, 192574 256687, 192590 256108, 192581 255706) (196796 252899, 196798 253748, 196838 255063, 196814 255286, 196865 255337, 196967 256917, 196969 256531, 197028 256159, 196976 255967, 196975 255342, 197026 255309, 196990 255066, 197005 254441, 196998 254278, 197017 253757, 197003 253099, 196903 252628) (200886 253409, 200824 254109, 200757 255172, 200733 255873, 200737 256226, 200794 255849, 200913 254730, 200961 253935, 200923 253387) (192629 254726, 192713 255156, 192987 254712, 192928 254213, 192744 254208) (246787 250980, 246821 251449, 246777 251695, 246695 251838, 246507 252692, 246457 252763, 246524 253504, 246381 253840, 246336 254141, 246462 254764, 246399 254792, 246479 254893, 246538 254375, 246669 253782, 246749 253503, 246664 253064, 246712 252881, 246849 252725, 247198 251696, 247095 251375, 247208 251145, 246839 250818) (152779 254035, 152788 253354, 152762 253164) (152537 249747, 152090 250399, 152174 250996, 152621 251765, 152212 252072, 151954 252128, 151169 252199, 152183 252203, 152595 252360, 152679 252567, 152861 251779, 152859 251633, 152980 250927, 153066 250499, 153066 249565, 152789 249450, 152583 249270) (147828 252238, 148142 252248, 148898 252226) (246853 249859, 246813 249993, 246850 250404, 246904 250560, 247249 251097, 247339 250831, 247189 249919, 247135 249786, 246791 249785) (178949 249400, 178888 250214, 178914 250387, 179007 250405, 179020 250221, 179148 249641, 179078 249303) (161245 247644, 161320 248226, 161348 248343, 161357 248231, 161332 247638, 161340 247503, 161269 247325) (177741 247708, 177788 248016, 177871 247793, 177806 246927) (196884 245487, 196879 246314, 196732 246502, 196475 246571, 196234 246576, 196470 246731, 196691 247210, 196826 246759, 197018 246574, 197335 246494, 197232 246427, 197149 246174, 197128 245885, 197025 245866, 196965 245295) (161394 246276, 161461 246563, 161459 246072, 161414 246053) (149054 242941, 149324 243447, 149417 243522, 149540 243510, 149583 243259, 149267 242971, 149121 242920) (176201 240709, 176253 241344, 176336 241615, 176366 241465, 176280 240577, 176202 240214) (195320 240717, 195328 241042, 195454 241364, 195425 240829, 195310 240329, 195317 240242, 195249 240095) (152796 240421, 152744 240917, 152345 241048, 152523 241164, 152577 241260, 152736 241098, 153037 241025, 153008 240492, 152974 240457, 152747 239959) (247326 236433, 247284 237082, 247259 237739, 247284 238567, 247246 239359, 247285 240868, 247349 240863, 247353 236162) (195206 238525, 195304 239021, 195302 239138, 195364 239265, 195336 238952, 195261 238402, 195254 238248, 195166 238022) (244563 235703, 244596 236416, 244438 237024, 244399 237853, 244393 238480, 244447 239121, 244481 238867, 244514 238280, 244503 237869, 244566 237278, 244448 237040, 244632 236607, 244648 236319, 244593 235662) (159948 237680, 159982 237942, 159938 238326, 159999 238691, 160067 238716, 159962 238322, 160061 237977, 159996 237584, 160046 237300, 159936 237120) (202126 237510, 202097 237640, 202203 238333, 202228 237641, 202189 237493) (159960 232550, 159990 233304, 159933 233925, 159920 234523, 159967 235323, 159954 235923, 159978 236439, 160021 236615, 159943 237075, 160109 236830, 160119 235214, 160131 234678, 160106 233665, 160061 233304, 160076 232670, 160042 232155) (174626 236039, 174665 236339, 174709 235883, 174670 235705) (195122 236194, 195104 235803, 195020 235516) (174867 234131, 174826 234502, 174883 234818, 174920 234315, 174993 233799) (194902 233254, 194959 234032, 194964 234370, 195114 234599, 195110 234054, 194977 233503, 195023 232980) (200547 234235, 200588 234521, 200566 233909) (244623 232450, 244678 233094, 244659 233424, 244772 233575, 244779 232785, 244629 232298) (200226 232669, 200254 233503, 200286 233571, 200419 233377, 200321 233209, 200320 232514, 200249 232225) (194858 231416, 194864 231721, 194941 232087, 194931 232411, 195061 232650, 195009 231489, 194997 230977, 194759 230017) (194729 227865, 194791 228546, 194781 228793, 194844 229292, 194947 229670, 194924 229310, 194755 227846, 194639 226573) (204060 225066, 203953 225846, 203876 226534, 204025 227467, 204010 227792, 204130 228345, 204241 226660, 204247 225857, 204102 225142, 204057 224673) (200033 223536, 200048 224065, 200116 223701, 200099 223374) (194475 219745, 194495 220662, 194467 221792, 194496 222933, 194567 221934, 194572 220917, 194546 220717, 194613 220247, 194528 219620) (203725 220115, 203774 220787, 203791 221321, 203825 221565, 203861 222286, 203934 222612, 204062 222140, 203999 221846, 203915 220985, 203878 220783, 203887 220252, 203776 219454) (201298 221541, 201362 221761, 201372 222338, 201415 222430, 201475 222213, 201546 221384, 201472 221267) (174162 219334, 174126 219861, 174239 220399, 174480 220660, 174352 220066, 174225 219396, 174181 219267) (201193 219122, 201168 219514, 201200 220274, 201219 220470, 201362 219511, 201420 218673, 201331 218508, 201144 218358) (203389 217451, 203471 217572, 203424 218122, 203458 218269, 203438 218792, 203486 219300, 203620 218781, 203602 218108, 203568 217854, 203520 216948) (201078 216815, 201097 217629, 201189 216818, 201215 215795) (205557 213368, 205409 213545, 205454 215387, 205594 217406, 205563 215981, 205564 214747, 205591 214111, 205653 213367) (177745 215035, 177806 215615, 177805 216457, 177795 216644, 177837 217182, 177856 217289, 177888 217125, 177959 216442, 177996 215740, 178055 215568, 178122 215013, 178034 214506, 177874 214443) (204629 192513, 204789 192612, 204698 193219, 204734 193435, 204702 193922, 204690 194622, 204616 194850, 204560 195316, 204431 195451, 204294 196007, 204364 196707, 204346 197246, 204353 197399, 204281 198322, 204267 198670, 204210 199233, 204217 199400, 204117 200062, 204067 200580, 203882 202121, 203710 203669, 203637 204884, 203606 205027, 203665 205548, 203580 206130, 203486 206192, 203601 206454, 203604 206621, 203724 207598, 203558 207788, 203521 207896, 203574 208957, 203409 209336, 203330 210102, 203298 210302, 203263 210834, 203206 211147, 203029 212911, 203021 213573, 203066 214188, 203118 214640, 203103 214999, 203155 216125, 203197 216355, 203244 217163, 203460 216770, 203374 216443, 203455 215954, 203390 215424, 203380 214704, 203358 214253, 203364 212436, 203415 211733, 203413 211475, 203458 210841, 203429 210627, 203496 210126, 203683 209329, 203710 208798, 203795 207944, 203866 207445, 203914 206221, 204116 206085, 204419 206039, 204287 205881, 204189 205314, 204186 204456, 204212 203960, 204234 203212, 204231 203023, 204251 202496, 204259 201860, 204295 201234, 204468 199271, 204480 198975, 204529 198277, 204518 198097, 204618 197397, 204670 196723, 204724 195779, 204719 195157, 204732 194519, 204841 193926, 204892 193228, 204818 192278) (201332 213488, 201216 214893, 201249 215252, 201418 215112, 201576 214854, 201581 214772, 201362 214145, 201381 213568, 201373 213489, 201393 212892) (231855 213838, 232042 214241, 232111 214015, 232014 213356, 232010 213097, 231947 213039) (173883 212862, 173949 213705, 173969 213807, 173983 213705, 173979 213057, 173901 212139) (177959 211937, 178042 212199, 178052 212024, 177984 211672) (201697 186599, 201810 187800, 201930 188294, 202005 188835, 202001 189527, 202165 190777, 202230 191137, 202268 192156, 202397 193290, 202394 193956, 202444 194359, 202483 194858, 202522 195589, 202532 196243, 202553 196736, 202545 198545, 202514 199297, 202542 199510, 202457 200022, 202408 201040, 202492 201511, 202376 201316, 202332 201718, 202405 202044, 202292 201923, 202263 202005, 202169 203287, 202266 203573, 202110 203588, 202229 204020, 202062 204020, 202187 204431, 202066 204518, 201988 205600, 202004 206023, 201921 206286, 201597 206394, 201690 206568, 201747 206850, 201764 207274, 201728 207962, 201660 210734, 201562 211477, 201685 211631, 201636 211846, 201741 211683, 201810 211204, 201859 210593, 202006 209355, 202220 208074, 202220 207725, 202265 206955, 202202 206795, 202231 206473, 202349 206212, 202398 206191, 202237 205691, 202365 205386, 202335 205033, 202117 204646, 202354 204830, 202444 204830, 202292 204453, 202378 204439, 202358 204097, 202398 204095, 202425 203787, 202388 203665, 202439 203644, 202602 201566, 202681 201162, 202733 200585, 202773 200395, 202824 199646, 202855 199392, 202885 198580, 202910 198160, 202908 196684, 202893 196245, 202887 195342, 202871 194840, 202715 193253, 202644 192276, 202529 191475, 202346 189463, 202271 189340, 202296 189114, 202153 188464, 202170 188121, 202097 187502, 202032 186823, 201848 186256, 201798 185521, 201758 185236) (175123 211263, 175213 211653, 175328 211270, 175250 210420) (191878 211554, 191958 211491, 191994 211024, 191880 210838) (230714 210796, 230767 211008, 230781 210505) (176990 204502, 176940 205311, 176947 205408, 176925 206477, 177046 207636, 177156 208109, 177241 208800, 177365 209592, 177480 210448, 177595 210814, 177673 210355, 177497 209586, 177401 209085, 177438 208829, 177244 208104, 177341 207506, 177263 206697, 177242 205648, 177247 205043, 177116 204391, 177252 204261, 177056 204066) (161338 208376, 161504 209268, 161292 209950, 161264 210277, 161337 210319, 161347 210115, 161538 209315, 161508 208543, 161381 208109) (230550 209397, 230559 210069, 230622 209388, 230587 209221) (232369 207814, 232334 208618, 232362 208794, 232389 208618, 232377 207931, 232537 207237) (174980 208087, 175013 208695, 175121 208086, 175097 207710) (179328 205404, 179344 206018, 179391 206519, 179395 206664, 179447 207196, 179455 207554, 179574 207753, 179599 207342, 179560 206667, 179544 206184, 179480 205277, 179401 205080) (175206 205931, 175141 206823, 175164 206895, 175287 206705, 175239 206559, 175301 205791, 175297 205180) (205643 205960, 204785 206043, 204991 206128, 205270 206463, 205343 206846, 205426 206352, 205656 205998, 206181 205952) (200443 205602, 200445 206148, 200346 206395, 201033 206344, 200857 206173, 200655 205888, 200528 205498) (177337 202292, 177391 202631, 177236 203159, 177172 203730, 177301 204178, 177353 203506, 177277 203232, 177455 202995, 177539 202335, 177488 202039, 177548 201787, 177451 201590) (177624 200894, 177540 201156, 177746 201129, 177770 200710) (176853 200021, 176561 200223, 177253 200212, 177529 200413, 177781 200372, 178070 200150, 178446 200118, 178358 200051, 178155 200031, 178051 200123, 177708 200223, 177279 200225, 177030 200080, 176872 199767) (178907 200202, 179009 200307, 179076 200257, 179374 200244, 179472 200191) (200171 193180, 200213 193482, 200195 194026, 200211 194285, 200228 195005, 200246 195284, 200261 195987, 200356 196947, 200376 197546, 200456 198481, 200543 198705, 200572 198651, 200565 197975, 200488 196318, 200483 195517, 200460 195296, 200430 194445, 200413 193539, 200358 193363, 200275 192835, 200286 192697, 200221 192522) (176812 193659, 176864 194592, 176874 195613, 176971 196715, 176976 196864, 177057 197569, 177069 196930, 177064 196659, 177091 195390, 177042 194852, 176988 193663, 176868 192934) (246067 195478, 246190 196451, 246274 196027, 246253 195475) (167917 193899, 168024 194534, 167787 194513, 167760 195004, 167683 195209, 167859 195517, 168054 194591, 168043 194055, 168057 193916, 167970 193470) (246011 189379, 246017 189859, 245967 190238, 245989 192001, 246038 191929, 246004 192086, 246046 192488, 245999 192743, 245981 193861, 246049 193860, 245999 194065, 246030 194462, 245982 194731, 246050 195333, 246244 194702, 246276 194018, 246283 193352, 246210 189725, 246209 189186, 246168 188699) (173983 193717, 173987 194337, 173974 194534, 174022 194738, 174084 194311, 174110 193810, 174145 193393, 174090 192595) (227777 193488, 227762 193676, 227823 193903, 227873 193403) (191669 192716, 191517 193694, 191608 193873, 191769 193456, 191786 192603, 191744 192556) (168097 192552, 168134 193105, 168062 193237, 168188 193392, 168207 193254, 168118 192399) (160322 177695, 160281 178342, 160303 178887, 160456 180921, 160578 183057, 160643 184726, 160680 188122, 160621 188822, 160569 189240, 160539 189870, 160671 190500, 160782 191143, 160870 192031, 160918 193203, 160974 193114, 160964 193021, 161028 192444, 161029 192171, 161098 191577, 161120 191124, 161248 189994, 161273 189851, 161053 188224, 161040 185390, 160923 182027, 160880 181298, 160793 179031, 160712 178071, 160660 177692, 160655 177221, 160609 176351, 160255 176336) (204546 190576, 204557 191442, 204583 191810, 204605 192495, 204816 191680, 204779 190232, 204761 189896) (168227 191871, 168307 192046, 168332 191877, 168278 191366) (193242 189697, 193301 190202, 193304 190998, 193381 191689, 193421 190835, 193353 190273, 193352 189703, 193368 189478, 193316 189140, 193354 188849, 193214 188735) (204412 186998, 204392 187709, 204616 187819, 204515 188361, 204546 188582, 204536 189624, 204615 189031, 204623 188913, 204711 188347, 204709 187667, 204686 187532, 204402 187664, 204450 186995, 204427 186894) (152945 188667, 153137 188664, 153138 188236, 152929 188115) (193344 187964, 193330 188083, 193420 188317, 193366 187678, 193368 187414, 193267 187155) (248032 178717, 248068 182641, 248043 183307, 247931 184522, 247948 185177, 248109 185974, 248169 186978, 248258 187785, 248276 188309, 248320 187663, 248258 187013, 248364 186325, 248387 185607, 248313 184914, 248298 183805, 248266 183433, 248314 183077, 248312 182380, 248283 181944, 248321 181262, 248372 181020, 248359 180124, 248375 179914, 248267 179322, 248303 178877, 248202 177880, 248246 177403, 248255 176508, 247968 176503) (166399 187422, 166368 188107, 166676 187490, 166678 186793) (245582 176486, 245651 177190, 245711 178724, 245675 179822, 245729 181530, 245810 183302, 245876 184141, 245980 186304, 245998 187839, 246061 187255, 246082 186650, 246007 185171, 246006 184920, 245957 184264, 246006 183220, 245974 182608, 245935 182229, 245958 180969, 245920 179906, 245871 177794, 245810 176481) (238998 187574, 239100 187565, 239199 187404, 239068 186936) (167197 184511, 167136 185099, 167026 185765, 166903 186666, 166691 186784, 166808 187211, 166974 186850, 167051 186563, 167234 186150, 167399 185539, 167452 184862, 167426 184401, 167327 184231) (205785 184863, 205830 186461, 205873 187081, 205918 187081, 205899 186932, 205961 186463, 205950 186069, 205967 185548, 205956 184687, 205901 184369) (240213 184281, 240226 184468, 240173 184992, 240203 185477, 240320 186232, 240310 186336, 240434 186647, 240443 186415, 240323 185477, 240460 185286, 240580 185277, 240546 184990, 240421 184466, 240457 183919) (237962 185970, 237970 185728, 237942 185445) (239141 185577, 239184 185719, 239180 185599, 239111 185088, 239080 184946) (168656 175857, 168541 176320, 168514 176614, 168322 177042, 168013 178161, 167993 178403, 167854 178746, 167636 179511, 167603 179713, 167442 180155, 167439 180272, 167414 180221, 167212 180790, 167174 181046, 167034 181263, 166883 181694, 166596 182303, 166434 182582, 166333 182961, 166234 183021, 165831 183918, 165797 184112, 165766 184059, 165522 184538, 165548 185099, 165456 184911, 165392 184987, 165317 184901, 165215 184932, 165153 185159, 165214 185536, 165445 185428, 165615 185223, 165661 184996, 165715 184968, 165903 184450, 166096 184132, 166440 183371, 166448 182827, 166549 183122, 166624 183044, 166736 182748, 166715 182112, 166814 182569, 167014 182115, 167014 181652, 167100 181929, 167313 181489, 167330 181334, 167393 181269, 167586 180656, 167805 180049, 168198 178657, 168646 176968, 168744 176350, 168809 175806) (235958 184195, 236025 184822, 236072 184841, 236007 184193, 235982 184130) (200200 183488, 200221 184186, 200256 184468, 200284 184187, 200285 183440, 200248 182728, 200214 182292) (203055 183103, 203137 183828, 203247 182992, 203191 182226) (258533 170918, 258025 171330, 257788 171452, 257414 171507, 256839 170956, 256603 170919, 256473 170770, 256332 171086, 256204 171849, 255715 171684, 255670 172206, 255653 172793, 255618 172847, 255658 173119, 255583 173732, 255475 174054, 255295 174277, 254850 174558, 254780 174663, 254969 174779, 255067 174947, 255236 175551, 255295 176183, 255343 176384, 255303 176971, 255432 177401, 255425 177902, 255510 178385, 255388 178802, 255464 179162, 255470 179407, 255560 179798, 255526 179989, 255543 180351, 255431 180723, 255455 181322, 255385 181681, 255403 182070, 255117 182498, 255109 182618, 255361 182749, 255601 182955, 255757 183221, 255790 183615, 256079 183112, 256258 182590, 256586 181933, 256790 181621, 256997 180892, 257317 180079, 257886 178809, 258777 177069, 259277 175973, 259656 175502, 259236 175306, 259070 175286, 258869 174878, 258701 174277, 258968 174208, 259157 174066, 259271 173487, 259444 173474, 259634 173272, 259681 173150, 259486 173050, 259656 172717, 259608 172244, 259478 171605, 259052 171337, 258519 171708, 258832 171267, 258915 171018, 258660 170768) (201861 177762, 201867 178156, 201835 178686, 201833 178882, 201794 179385, 201651 182144, 201669 182837, 201740 183339, 201890 182844, 201986 182649, 202070 182154, 202068 181295, 201938 180771, 201967 180080, 201949 179726, 201975 178819, 201973 177982, 201927 177659) (238931 181210, 238902 181830, 239014 182746, 239133 183246, 239189 182970, 239193 182225, 239114 181437, 238996 181006) (205659 182818, 205678 183225, 205700 182816, 205710 182108, 205688 182073) (240796 179333, 240742 180040, 240759 180509, 240717 180734, 240816 180934, 240854 180860, 240908 180041, 240900 179524, 240942 179011, 240858 178840) (177399 179315, 177377 179795, 177502 180666, 177523 180577, 177589 179765, 177580 179330, 177490 179103) (222126 170842, 221864 171589, 221631 171917, 221550 172352, 221573 172952, 221458 172458, 221306 172540, 221165 173188, 221037 173490, 220858 174300, 220584 175435, 220495 175930, 220421 176737, 220392 177698, 220459 178429, 220579 179130, 220803 179481, 220888 179446, 220945 179031, 220969 177724, 221068 176226, 221093 176086, 221145 175469, 221278 174561, 221424 173765, 221580 173322, 221848 172424, 222158 171683, 222389 171017, 222409 170981, 222583 170184, 222569 170074) (146545 179301, 147300 179320, 148040 179387, 149250 179445, 150186 179400, 150829 179335, 152323 179294) (193894 158758, 194101 159394, 194125 160080, 194232 160696, 194422 161415, 194543 162007, 194647 162635, 194684 163761, 194834 164468, 194859 165026, 194780 166345, 194786 166496, 194674 167512, 194554 169229, 194468 170111, 194419 171120, 194345 171770, 194333 172468, 194319 172646, 194358 173428, 194491 174210, 194850 175751, 195009 176484, 195203 177022, 195306 176877, 195290 177339, 195406 178197, 195536 179026, 195734 178444, 195601 177833, 195535 177163, 195442 176462, 195357 176131, 195234 175979, 195235 175739, 195184 175189, 195184 174192, 195167 174025, 195233 173803, 195382 172640, 195504 171887, 195679 171147, 195630 170616, 195848 170517, 195932 169967, 196126 169095, 196397 168346, 196470 167670, 196331 167448, 196265 167488, 196243 167651, 196303 168233, 196079 168038, 195967 168297, 195957 168611, 196037 169002, 195838 169377, 195741 169689, 195820 170368, 195560 170270, 195502 170434, 195446 171136, 195255 171468, 195111 171867, 195017 172529, 195073 172914, 194937 172681, 194753 172629, 194630 171867, 194630 171524, 194571 171116, 194623 170297, 194756 168962, 194777 168624, 194869 168001, 194925 167316, 195097 166768, 195202 166255, 195260 165024, 195216 164441, 195274 163821, 195240 163319, 195152 162771, 195010 161757, 194830 160639, 194641 159993, 194554 159613, 194441 159384, 194218 158784, 194125 159258, 194167 158676, 194032 158467, 193954 158104) (166078 177081, 165946 177692, 165681 177884, 165377 178407, 165384 178732, 165532 178813, 165874 178488, 166090 177880, 166175 177499, 166316 177266, 166160 177007) (164890 176516, 164768 177123, 165082 177518, 165165 177124, 165193 176268) (166807 174942, 166956 175417, 166714 175959, 166809 176042, 166649 176136, 166468 176642, 166470 177036, 166648 176672, 166980 176109, 167272 175438, 167085 174939) (235715 175711, 235729 175444, 235683 175206) (227303 174676, 227619 175674, 227654 175678, 227649 175564, 227320 174674, 227325 174481) (168707 175489, 168839 175586, 168854 175667, 168945 175529, 169157 174991, 168729 174976) (205286 171819, 205320 171880, 205271 172498, 205313 172735, 205373 173344, 205382 173868, 205474 174524, 205753 174620, 205666 173866, 205550 173522, 205465 172990, 205456 172494, 205345 171756) (178350 172158, 178242 172939, 178249 173688, 178208 174287, 178412 173869, 178279 172969, 178480 172706, 178487 172046, 178377 171628) (237360 173322, 237505 173849, 237453 173155, 237302 172512) (227078 173082, 227107 173181, 227176 172962, 227160 172650) (217503 169812, 217635 171074, 217845 170628, 217774 169808, 217664 169389, 217545 169375) (219779 163326, 219640 163961, 219537 164592, 219285 165202, 218969 165841, 219017 166492, 219222 167783, 219487 168474, 219692 168836, 219784 169088, 219855 169487, 219882 170099, 220301 170549, 220462 170622, 220535 170597, 220829 170670, 221236 170448, 221336 169889, 221498 170039, 221654 169829, 222183 168514, 222235 167581, 222189 167237, 222198 166618, 222249 165872, 222345 165544, 222350 165379, 222037 164844, 221561 164634, 221518 165196, 221813 165589, 221999 166064, 222073 166531, 222055 167085, 221824 167044, 221775 167101, 221777 167200, 221670 167434, 221610 168087, 221720 168135, 221963 168039, 221899 168447, 221757 169076, 221577 169608, 221347 169394, 221306 169481, 220901 169568, 220485 169265, 220394 168998, 220252 168767, 220174 168538, 220012 168298, 219988 168322, 219704 167337, 219641 166826, 219476 166491, 219522 165863, 219731 165675, 219900 164901, 219947 164332, 220045 163681, 220111 163400, 220013 162958) (235937 169403, 235965 170155, 235951 170303, 236003 170610, 236061 169829, 236112 169590, 235998 169206) (203458 167700, 203481 167968, 203501 168683, 203572 169057, 203674 169725, 203676 169945, 203781 170386, 203785 169063, 203909 168389, 203845 168001, 203763 167879, 203731 167696, 203546 167351) (230683 167098, 230778 167914, 230760 168585, 230882 169752, 230904 169394, 230928 168593, 230966 168195, 230925 167920, 231063 167254, 231089 166580, 231060 166387, 230817 166263) (218495 160812, 218265 161492, 218154 162217, 218059 162440, 217706 163556, 217593 164302, 217443 164995, 217396 166403, 217422 167185, 217394 167740, 217425 168705, 217527 169030, 217617 168835, 217714 168819, 217824 166297, 217870 165604, 217937 165075, 218096 164236, 218163 163806, 218338 162981, 218439 162273, 218624 161575, 218833 160879, 218765 160110) (236086 168476, 236223 169027, 236253 168386, 236305 168094, 236154 167736) (236264 166544, 236291 167308, 236367 167670, 236429 166934, 236298 166513, 236294 166388) (223076 162100, 223021 162782, 223037 163429, 223197 164063, 223257 164516, 223436 164774, 223415 166053, 223502 166137, 223517 166305, 223539 166070, 223464 163658, 223421 163480, 223440 163398, 223336 162171, 223262 161484) (232541 165988, 232596 166130, 232622 166057, 232564 165363) (220949 164694, 220789 164670, 220612 164790, 220521 165025, 220539 165374, 220937 165327, 221176 165443, 221356 165234, 221330 164566) (226865 164644, 226900 164841, 226953 164611, 226930 163888) (187346 162874, 187285 163687, 187311 163860, 187404 163878, 187417 163694, 187544 163114, 187474 162776) (230212 158456, 230241 158757, 230346 159318, 230338 159844, 230372 160030, 230438 160750, 230636 161195, 230681 161668, 230750 161914, 230710 162529, 230738 162738, 230789 163301, 230865 163423, 230889 163195, 230823 163077, 230900 162525, 230781 161858, 230771 161283, 230721 160870, 230547 160522, 230606 160310, 230481 159816, 230414 158991, 230414 158446, 230348 157875, 230114 157761) (228120 161635, 228100 161942, 228153 162740, 228201 162848, 228270 162606, 228271 162450, 228319 161932, 228233 161435) (223104 155174, 223034 155481, 222955 155977, 222908 156554, 222903 156791, 222756 157603, 222817 158173, 222864 158406, 222806 158803, 222702 159970, 222766 160712, 222894 161423, 222914 161681, 222986 161888, 223247 161352, 223199 160674, 223104 159936, 222996 159541, 223093 158709, 223108 158408, 223166 157909, 223248 157615, 223225 157050, 223177 156808, 223227 155977, 223187 155358, 223251 154814, 223143 154483) (186137 161181, 186185 161489, 186265 161271, 186212 160434, 186203 160400) (219212 148112, 219056 148171, 219158 148838, 219252 149594, 219421 150333, 219451 150537, 219614 151079, 219667 151837, 219962 152602, 220111 153272, 220143 153369, 220155 153990, 220109 154725, 220126 154915, 220007 155462, 219990 155682, 219883 155920, 219612 157178, 219603 157715, 219429 157685, 219231 158673, 219016 159400, 218965 159988, 218786 160102, 218911 160536, 219005 160168, 219056 159628, 219260 159303, 219659 157982, 219843 157218, 219855 156857, 220004 156550, 220213 155712, 220540 154609, 220637 154132, 220606 153351, 220490 152509, 220318 151816, 220131 150250, 220117 149806, 219986 149559, 219808 149909, 219697 149816, 219614 149818, 219496 150119, 219509 149546, 219295 148816, 219280 148517, 219352 147926) (196058 158301, 196022 158995, 196055 159659, 196253 160095, 196326 159612, 196509 158900, 196426 158246, 196273 157655) (228030 157793, 227963 158221, 227995 158497, 227984 159128, 227992 159503, 228091 158663, 228085 158498, 228116 157879, 228101 157687) (193677 158129, 193789 158467, 193915 158060, 193705 157826) (200929 156442, 200968 157300, 200986 158241, 201019 158442, 201037 158139, 201020 157423, 201055 156501, 200971 156105) (177708 156818, 177792 157399, 177839 158097, 177874 158333, 177971 157741, 177946 157403, 178087 156465) (195386 151562, 195343 152115, 195387 152268, 195499 152813, 195532 153308, 195663 154129, 195671 154648, 195722 155010, 195781 155665, 195880 156264, 196004 156014, 195902 156399, 195979 156975, 196042 157905, 196157 157620, 196246 157505, 196136 156956, 196173 156285, 196209 156006, 196191 155619, 196066 155206, 196130 154957, 196085 154499, 196007 154348, 195735 154968, 195952 154295, 195905 153904, 195973 153598, 196009 152885, 195905 152259, 195860 152303, 195889 152185, 195712 151694, 195558 151952, 195677 151509, 195568 150836) (229914 156253, 230112 157752, 230305 157636, 230283 157048, 230314 156980, 230190 156078, 230207 155189, 229881 154868) (221501 156486, 221473 156776, 221533 157258, 221633 156637, 221573 156277) (213110 156703, 213168 157031, 213154 156629, 213098 156060, 213104 155937, 213022 155323) (193971 153598, 193901 153875, 193909 154041, 193898 154576, 193909 155438, 194030 155754, 194108 155741, 194081 155931, 194319 156763, 194456 156542, 194501 155854, 194475 155364, 194421 155188, 194274 154511, 194115 153850, 194133 153465) (218434 155483, 218444 155599, 218351 156207, 218353 156510, 218397 156333, 218487 155433) (228164 155664, 228272 155927, 228389 155674, 228365 155114, 228144 155044) (190963 154745, 190977 154955, 191154 155612, 191153 154950, 191125 154659, 191017 154600) (184597 154183, 184649 154817, 184733 155088, 184763 154938, 184676 154051, 184598 153689) (192213 153409, 192307 154141, 192561 154792, 192624 154390, 192560 153772, 192436 153133, 192282 152921) (228154 154701, 228263 154148, 228431 153416, 228296 153280) (218220 153687, 218304 154615, 218424 154134, 218369 153474) (223373 152823, 223288 153557, 223168 154280, 223381 154023, 223432 153565, 223615 152702) (218111 152662, 218167 153135, 218269 152674, 218273 152443, 218206 152352) (204852 149584, 204828 150158, 204792 150655, 204774 151383, 204817 151740, 204799 151992, 204882 152395, 204987 150616, 204937 149875, 204959 149705, 204879 149236) (191697 151159, 191764 151476, 191807 151160, 191734 150929) (197142 150685, 197357 151127, 197295 150551) (194175 147495, 194379 148265, 194486 148948, 194589 149698, 194628 150295, 194656 150463, 194678 150289, 194906 149978, 195050 149985, 195158 149890, 195272 150176, 195332 150974, 195511 150834, 195372 150787, 195465 150139, 195444 149915, 195270 149470, 194921 147859, 194646 147410, 194613 147224) (212526 145417, 212571 146128, 212608 147073, 212644 147679, 212664 148225, 212692 148634, 212714 149494, 212881 150757, 212848 149731, 212864 149196, 212797 148564, 212744 146917, 212719 146481, 212709 145928, 212683 145245, 212645 144610, 212548 144488) (201959 148238, 201992 148884, 202045 149539, 202038 149687, 202093 149797, 202148 149544, 202135 149405, 202146 148890, 202111 148101, 202040 147922) (222829 148562, 222880 149026, 222953 148750, 222946 147929, 222849 147832) (204982 147994, 205001 148370, 204927 148890, 205114 148848, 205171 148118, 205145 147716, 205045 147259) (196470 147739, 196661 147870, 196600 147355, 196517 146912, 196292 146736) (205188 146384, 205271 146845, 205310 146191, 205229 145880) (196238 146293, 196287 146689, 196369 146225) (192471 134099, 192609 134100, 192605 133602, 192463 133570)), ((232817 218826, 233139 219181, 233371 219924, 233416 220288, 233455 222188, 233456 225888, 233502 227922, 233535 228825, 233520 233026, 233428 233816, 233046 234687, 233131 235107, 233475 235496, 233552 235786, 233549 237992, 233501 242055, 233437 242926, 233389 244145, 233298 245783, 233276 246329, 233283 247071, 233345 247679, 233451 248346, 233518 249069, 233535 250867, 233395 251242, 233273 251074, 233042 251250, 232937 251060, 232647 251116, 232249 251009, 232054 250893, 231996 250937, 231693 250809, 231593 250502, 231410 250251, 231339 249977, 231320 249556, 231122 248714, 231031 248215, 230936 247996, 230779 248503, 230821 249002, 230808 249195, 230957 249907, 230956 250481, 231411 251029, 231886 251268, 232314 251606, 232706 251763, 233163 252081, 233170 251960, 233322 251816, 233360 252215, 233395 252991, 233347 253727, 233311 254887, 233345 256308, 233446 258234, 233437 258520, 233452 259029, 233296 259250, 233197 259486, 232848 259009, 233004 258275, 232957 257933, 232604 258279, 233074 259783, 233208 260525, 233435 261285, 233589 262069, 233667 264259, 233676 264803, 233628 266354, 233593 268692, 233595 269622, 233560 271792, 233506 272493, 233039 272885, 232826 273129, 233270 274506, 233410 275178, 229905 275178, 229821 274224, 229865 273956, 229817 273447, 229724 273659, 229575 274158, 229486 274661, 229468 275178, 227934 275179, 227853 274481, 227814 273920, 227866 273247, 227956 272498, 228056 272166, 228228 271178, 228542 268132, 228575 267889, 228603 267135, 228585 266954, 228681 265721, 228696 265097, 228688 264413, 228713 263710, 228703 262828, 228668 262243, 228701 261471, 228514 260883, 228318 260758, 228241 260751, 227873 260275, 227871 260872, 228010 261395, 228131 261924, 228264 262287, 228318 262646, 228301 263010, 228364 263354, 228359 263716, 228430 264410, 228409 265781, 228327 266721, 228279 267137, 228284 268482, 228212 268993, 228255 269494, 228152 269535, 227976 270480, 227783 271144, 227679 271877, 227606 272181, 227543 272738, 227456 273897, 227385 274300, 227329 274036, 226907 274485, 226839 274473, 226738 274668, 227002 275179, 225500 275178, 225519 274434, 225535 273132, 225587 273084, 225654 273140, 225810 273451, 225928 273303, 226094 273400, 226190 273374, 226317 273208, 226058 272518, 225759 271853, 225517 271187, 225514 270509, 225619 269863, 225701 269181, 225730 267969, 225714 267185, 225648 265978, 225626 264736, 225569 263776, 225501 263269, 225445 262699, 225410 261740, 225376 258908, 225450 258807, 225493 258805, 226059 258351, 226108 258264, 225505 257579, 225348 256863, 225345 255899, 225401 255018, 225462 253677, 225456 253404, 225466 252880, 225387 250932, 225364 249687, 225405 248567, 225402 247755, 225412 247300, 225413 246017, 225548 244959, 225622 244532, 225668 243034, 225706 242324, 225674 241601, 225574 240421, 225539 239714, 225526 237480, 225540 235601, 225569 234484, 225586 231076, 225630 230187, 225648 229191, 225632 228370, 225524 227709, 225577 226444, 225587 225603, 225618 224573, 225583 222646, 225665 219987, 225757 219288, 226080 218851, 226338 218814, 226596 218886, 226731 219534, 226769 219987, 226828 220115, 226867 220117, 227008 221389, 227036 222057, 227178 223189, 227268 224203, 227393 224129, 227338 224409, 227416 224736, 227416 225032, 227486 225420, 227618 225645, 227568 225952, 227626 226462, 227648 226960, 227730 226926, 227653 226925, 227750 226272, 227758 225592, 227571 224760, 227617 224380, 227419 222355, 227355 221360, 227303 220356, 227299 219544, 227327 219139, 227436 218922, 227731 218793, 228634 218752, 228978 218862, 229209 219079, 229505 220272, 229539 221000, 229679 221884, 229802 222080, 229842 222644, 229910 223111, 229890 223372, 230003 223455, 229909 221616, 229970 221015, 229903 220332, 229800 219512, 229896 219029, 230086 218874, 230383 218785, 230794 218801, 231003 218944, 231191 219186, 231357 220109, 231416 220665, 231392 220844, 231381 221588, 231410 222110, 231474 222708, 231517 223615, 231540 224468, 231852 225087, 231917 225719, 231948 226289, 232047 227671, 232064 228375, 232064 228772, 232085 229410, 232077 230183, 232042 230549, 232081 231193, 232272 230592, 232275 230416, 232399 229858, 232522 228610, 232531 227708, 232492 227022, 232412 226357, 232346 225701, 232236 225103, 232235 225045, 232082 223856, 232081 223700, 232029 222711, 231885 221734, 231862 221146, 231839 221024, 231789 220425, 231775 220094, 231724 219559, 231765 219010, 231900 218767, 232384 218732) (226451 273927, 226495 274125, 226569 274181, 226670 274074, 226708 274327, 226726 273878, 226529 273679) (230388 271245, 230180 271850, 230101 272572, 230010 272876, 230103 273021, 230171 272576, 230191 271929, 230419 271253, 230405 270628) (232522 272275, 232336 272421, 232321 272389, 232289 272458, 232538 272737, 232668 272451, 232616 272272) (231017 266466, 231052 266978, 231008 267125, 231003 267799, 230882 268419, 230908 268579, 230933 268510, 231264 269109, 231348 269545, 231496 269405, 231415 269817, 231521 270525, 231720 271473, 231875 271964, 232010 272176, 232139 272255, 232304 271767, 232134 271409, 231968 270657, 231856 270049, 231814 269742, 231699 269233, 231593 268565, 231405 267639, 231334 266950, 231204 266047) (230576 263565, 230632 263844, 230699 263777, 230583 263204) (228655 246251, 228464 246498, 228317 246904, 228197 247690, 228178 248473, 228338 249247, 228379 249660, 228510 250750, 228726 252137, 228864 252903, 228914 253079, 229096 254080, 229137 254216, 229230 254752, 229316 255069, 229290 255365, 229321 255892, 229372 256413, 229574 257719, 229656 258372, 229741 259269, 229855 259977, 230032 260718, 230205 261962, 230181 261464, 230138 260907, 230128 260370, 230077 259750, 230174 258402, 229971 257332, 229802 256214, 229687 255789, 229538 255085, 229416 254246, 229348 253906, 229202 252902, 229179 252673, 229077 251925, 229000 251441, 228911 250705, 228701 248477, 228661 247706, 228743 246585, 228697 246247) (227542 260216, 227714 260569, 227770 260149, 227523 259902) (227034 259737, 227239 259578, 226970 259439, 226737 259018) (226468 258972, 226589 259109, 226640 259118, 226709 258972, 226291 258493) (226809 252179, 226885 252960, 227096 254419, 227113 254758, 227234 255526, 227248 255865, 227487 256365, 227493 255991, 227365 255303, 227181 253943, 226961 252178, 226798 251410) (228511 236117, 228364 236482, 228176 237761, 228165 238185, 228067 238876, 227944 239248, 227836 239818, 227736 240476, 227626 240945, 227617 241359, 227494 241219, 227363 241435, 227069 242288, 226919 243022, 226924 243596, 226945 243781, 226876 244299, 226832 244534, 226757 246063, 226723 247423, 226651 248412, 226733 249175, 226744 249467, 226858 250332, 226857 250685, 227027 251188, 227032 250686, 226988 249936, 226929 249476, 226935 248418, 227001 247913, 227129 245992, 227160 245117, 227193 244556, 227207 243794, 227233 243654, 227286 243052, 227438 242449, 227449 242346, 227709 241664, 228055 240997, 228076 240831, 228487 238703, 228462 238398, 228268 238578, 228329 238200, 228229 238112, 228469 237100, 228571 236213, 228732 235220) (230238 246301, 230302 246602, 230324 247076, 230371 247190, 230418 247084, 230391 247006, 230441 246325, 230451 245912) (228722 245362, 228718 245885, 228825 245370, 228806 244950) (230646 245563, 230741 245734, 230764 245708, 230839 245159) (232467 244884, 232335 245097, 232408 245256, 232484 245235, 232708 245328, 232759 245082, 232654 244843, 232557 244821) (231631 243119, 231275 244124, 231139 244441, 231028 244850, 231143 245016, 231316 244661, 231392 244156, 231871 243726, 231955 243684, 232039 243531, 232000 243373, 231778 243064) (229219 243151, 229059 243886, 228909 244479, 229037 244950, 229185 244374, 229282 243907, 229446 243322, 229425 243203, 229366 242598) (232139 235723, 231865 235925, 231630 236627, 231625 236621, 231355 237212, 231310 237391, 231187 237571, 230217 239848, 229994 240505, 230007 240936, 229886 240766, 229583 241823, 229571 242113, 229413 242495, 229529 243046, 229661 242524, 229814 241849, 229833 241391, 230008 241321, 230122 240810, 230485 239936, 230529 239379, 230608 239578, 231359 237894, 231397 237664, 231471 237645, 231742 237021, 231870 236621, 232270 236104, 232558 235785, 232436 235590) (230293 234819, 230098 235541, 230014 236276, 230024 236744, 230140 236712, 230204 236082, 230293 235585, 230355 235309, 230426 234440) (228385 230190, 228509 230912, 228457 231660, 228509 232188, 228516 232738, 228550 233000, 228636 232999, 228571 233378, 228594 233968, 228577 234500, 228804 234624, 228863 233966, 228904 233849, 228973 233207, 228979 232431, 229065 231720, 228991 230904, 228995 230692, 228790 230172, 228815 230084, 228778 230150, 228738 229627, 228559 229543) (231749 231256, 231765 231988, 231594 231636, 231473 231973, 231432 232570, 231227 232570, 231179 232685, 231080 233233, 230845 233404, 230714 233922, 230588 234113, 230679 234367, 231120 233532, 231204 232801, 231419 232912, 231782 232046, 232035 231318, 231897 230841) (228192 229508, 228223 229756, 228293 229915, 228526 229469, 228299 229232) (227781 227569, 227853 228090, 227903 228205, 227900 228379, 228031 228963, 228065 229041, 228113 228838, 228167 228331, 228105 228003, 227912 227409, 227906 226944) (229352 227481, 229362 227548, 229375 227441, 229336 226899) (229482 225584, 229531 226170, 229345 226794, 229562 226265, 229547 225686, 229578 225594, 229515 225444) (229716 224385, 229730 224886, 229712 224990, 229768 225160, 229815 225000, 229798 224512, 229840 224395, 229743 224039)), ((243534 247038, 243728 247088, 243928 247574, 243972 248247, 244083 248768, 244150 249474, 244406 251339, 244507 251868, 244626 252391, 244691 253008, 244797 253629, 244943 254251, 245323 255509, 245507 256153, 245543 256829, 245573 257033, 245736 258848, 245706 259554, 245512 260760, 245373 261510, 245319 262049, 245209 262797, 245071 263295, 244884 264122, 244643 264859, 244613 264885, 244280 265497, 244062 266225, 244015 266557, 244016 266996, 243901 267835, 243868 269340, 243785 270130, 243781 270920, 243904 271715, 243935 272494, 243923 273235, 243975 274018, 244140 275179, 242720 275178, 242727 274009, 242706 273666, 242668 272475, 242675 269896, 242685 269105, 242713 268523, 242961 267758, 243011 267025, 243049 265554, 242938 264621, 242880 264289, 242798 263496, 242791 260424, 242826 259424, 242837 256983, 242888 255870, 242900 255074, 242877 254443, 242785 253822, 242829 253173, 242868 251382, 242835 249885, 242874 249446, 242953 247590, 243067 247248, 243244 247016, 243467 246980)), ((219205 273608, 219435 274056, 219485 274352, 219523 275179, 216079 275179, 216090 274536, 216146 274112, 216289 273858, 216694 273676, 217260 273641, 217782 273636, 218098 273798, 218243 273715, 218510 273685, 218711 273604)), ((221224 273778, 221474 273743, 221736 273614, 222292 273669, 222515 273776, 222598 274492, 222718 274665, 222662 275160, 222763 274613, 222975 273875, 223103 273782, 223863 273770, 224105 273975, 224196 274366, 224248 275179, 219540 275179, 219545 274352, 219580 273738, 219719 273635, 220015 273586, 220948 273567)), ((186759 229470, 187003 229341, 187705 229408, 187886 229956, 187924 229931, 188071 230030, 188199 229652, 188152 229507, 188223 229535, 188511 229460, 188875 229484, 189474 229752, 189556 230481, 189603 233084, 189607 233812, 189573 235252, 189576 236023, 189612 237273, 189694 241318, 189699 242606, 189668 243182, 189587 244233, 189541 245303, 189548 246294, 189535 248692, 189545 250615, 189498 252916, 189530 255852, 189547 256397, 189560 257485, 189555 258491, 189578 259584, 189576 260596, 189616 261494, 189685 262512, 189710 263957, 189774 266052, 189788 267626, 189777 268318, 189697 269740, 189576 270941, 189554 271637, 189587 272179, 189709 275179, 186479 275178, 186448 274612, 186414 273373, 186388 272937, 186378 272384, 186352 271700, 186305 270854, 186264 270507, 186182 270998, 186209 271320, 186194 271869, 186240 272584, 186278 273528, 186314 274135, 186359 275178, 184126 275179, 184070 274230, 184055 273650, 183997 273381, 184066 272911, 184064 272378, 184038 271875, 184080 271023, 184182 270347, 184151 269626, 184007 268961, 183693 268627, 183669 268915, 183538 269627, 183577 270331, 183765 271299, 183744 272954, 183768 273653, 183807 273904, 183820 274751, 183853 275179, 181348 275178, 181388 274821, 181497 274319, 181702 273570, 181784 272960, 181772 272282, 181772 270999, 181651 270321, 181402 269648, 181322 268954, 181316 268195, 181328 266698, 181387 263251, 181384 262483, 181329 261546, 181309 261013, 181322 260134, 181319 258948, 181286 257600, 181281 255959, 181291 254939, 181340 252286, 181309 250470, 181325 247731, 181355 246041, 181398 245239, 181588 244218, 181600 243285, 181514 242401, 181463 241601, 181419 240601, 181386 239424, 181389 238835, 181319 237202, 181361 235525, 181376 235301, 181369 234753, 181377 234601, 181348 233917, 181304 233342, 181349 230410, 181369 229731, 181593 229518, 181964 229391, 183081 229359, 183329 229452, 183539 229478, 183889 229355, 184372 229339, 184933 229403, 185284 229319, 186249 229313) (186061 268122, 186061 268817, 186106 268234, 186111 267884) (183755 267542, 183878 268023, 183819 267456, 183773 267390) (185993 264715, 186014 264930, 185937 265438, 185948 265797, 185951 266521, 186035 266137, 186018 266015, 186113 265421, 186148 264704, 186184 264491, 186139 264173) (185923 262511, 185925 263176, 186029 262699, 185978 262343)), ((238842 264205, 239031 264578, 239288 264231, 239497 264187, 240082 264288, 240254 264523, 240356 265714, 240400 265276, 240490 265013, 240572 265024, 240649 264965, 240737 264542, 240847 264403, 241445 264368, 241689 264472, 241836 264686, 241928 265219, 241966 266371, 242011 269933, 242015 271093, 241985 272862, 241977 274109, 241996 275179, 233818 275179, 233857 272843, 233846 271805, 233794 270824, 233765 269892, 233797 267565, 233798 266394, 233826 264831, 233883 264684, 234181 264376, 234483 264251, 235508 264202, 235741 264355, 235922 264402, 236318 264189, 236849 264162, 237005 264209, 237141 264388, 237130 264435, 237182 265012, 237153 266235, 237241 266583, 237206 266754, 237254 266661, 237259 265988, 237240 265592, 237296 264422, 237384 264273, 237552 264158, 238579 264135) (239951 274986, 240034 274958, 240041 274731, 239984 274504) (240039 273025, 240025 273326, 240137 273813, 240142 273337, 240190 272832) (237089 268690, 237093 270943, 237115 272093, 237135 272499, 237111 273209, 237138 273477, 237256 273609, 237265 272203, 237313 271866, 237324 271145, 237291 269924, 237274 269708, 237265 268925, 237242 268372, 237181 267827, 237186 267593, 237114 267195) (240112 272144, 240194 272351, 240183 271984, 240137 271853)), ((224447 183282, 224550 184231, 224586 186140, 224582 187233, 224602 188770, 224600 189673, 224638 191102, 224678 194053, 224665 195018, 224646 195492, 224702 199777, 224690 200709, 224627 201380, 224573 202108, 224561 202831, 224561 204184, 224541 205337, 224539 206018, 224466 207994, 224472 209041, 224584 210794, 224583 211790, 224333 213790, 224298 214546, 224291 216029, 224355 217381, 224391 219130, 224434 220129, 224503 220751, 224555 221338, 224593 222485, 224609 224755, 224635 225855, 224663 228667, 224652 229796, 224569 231563, 224543 232473, 224558 233421, 224612 234970, 224611 235659, 224622 236106, 224611 237860, 224600 238177, 224604 238709, 224595 239177, 224594 240598, 224574 241157, 224327 242499, 224314 243379, 224275 244317, 224277 244673, 224248 245429, 224295 246103, 224350 246679, 224372 247029, 224450 247840, 224473 248571, 224486 250859, 224478 252935, 224446 254211, 224429 256271, 224430 258269, 224383 259372, 224366 260651, 224376 261481, 224486 262201, 224470 262917, 224441 263643, 224422 265046, 224395 265865, 224431 268094, 224410 268862, 224374 269624, 224323 271783, 224147 272412, 223970 272565, 223148 272604, 222848 272234, 222350 272406, 222044 272370, 221731 272554, 221361 272617, 220686 272589, 220552 272530, 220351 272282, 220189 272391, 219628 272669, 218880 272651, 218609 272478, 218584 272049, 218610 271507, 218570 271310, 218539 270793, 218384 271287, 218189 271750, 217954 272537, 217516 272545, 217084 272427, 216830 271939, 216613 271147, 216565 268553, 216558 264186, 216522 262228, 216486 261099, 216477 260491, 216493 257562, 216503 257117, 216499 256031, 216472 253963, 216486 251430, 216464 249965, 216516 245719, 216586 244422, 216654 242519, 216743 240815, 216752 240116, 216723 239502, 216661 238873, 216568 238219, 216524 237584, 216490 236230, 216506 235135, 216568 233863, 216651 232616, 216687 231722, 216707 230869, 216701 229923, 216679 229135, 216531 225559, 216331 219356, 216374 217420, 216408 214498, 216409 213576, 216427 212681, 216454 210147, 216605 209413, 216714 208774, 216729 208105, 216679 207420, 216546 206738, 216514 206144, 216492 205236, 216466 204618, 216463 203492, 216426 202227, 216430 201491, 216465 200211, 216520 197089, 216634 194859, 216636 194149, 216507 192973, 216453 192264, 216456 190971, 216443 190252, 216488 186887, 216507 184549, 216543 184025, 216615 183617, 216971 183471, 217830 183442, 219051 183340, 219314 183418, 219459 183886, 219487 184467, 219442 185849, 219410 187433, 219382 187999, 219367 188611, 219390 188863, 219284 189428, 219203 190396, 219174 191021, 219319 191652, 219356 191025, 219331 190622, 219458 189873, 219412 189792, 219488 189706, 219576 188603, 219571 188408, 219669 188060, 219768 187204, 219942 185532, 219983 184466, 219930 183976, 219962 183478, 220082 183209, 220292 183151, 221175 183144, 221267 183262, 221380 183688, 221332 183877, 221359 184134, 221485 184092, 221329 184479, 221303 185014, 221321 185341, 221246 185564, 221236 185815, 221355 185766, 221214 186121, 221097 187364, 221059 187981, 221057 188307, 221009 188807, 220895 189404, 220815 190144, 220750 191391, 220740 192209, 220778 195101, 220949 196160, 220956 196402, 221026 197159, 221033 197692, 221110 198562, 221163 198774, 221140 198845, 221220 199434, 221348 200987, 221411 201257, 221566 201406, 221504 201601, 221601 202069, 221581 202313, 221611 203094, 221744 204087, 221750 204272, 221815 204912, 221875 204073, 221881 203400, 221835 202777, 221653 201372, 221626 200756, 221565 200147, 221440 199675, 221438 199420, 221364 198766, 221369 198261, 221310 197173, 221206 197061, 221220 195958, 221141 194961, 221122 194825, 221100 194168, 221079 192852, 221070 190963, 221162 189736, 221171 189147, 221164 188859, 221180 188304, 221304 187820, 221413 186984, 221422 186472, 221527 185273, 221504 185228, 221537 185165, 221600 184499, 221642 183187, 221868 183031, 222621 182969, 222896 183411, 223205 183100, 223623 182886, 224146 182886) (221579 271452, 221677 271624, 221791 271589, 221676 271035, 221598 270763) (218301 267048, 218320 267226, 218239 267686, 218228 268304, 218275 269127, 218442 268452, 218452 268292, 218554 267794, 218601 266861, 218502 266661) (222871 266324, 222708 267065, 222680 267782, 222880 268273, 222951 267758, 222782 267285, 222876 267147, 222924 266966, 222905 266309) (221401 262111, 221440 263168, 221492 264009, 221553 264201, 221594 263782, 221578 263025, 221515 262262, 221418 261760) (223248 259991, 223192 260544, 223336 260606, 223354 259998, 223259 259490) (223354 258416, 223427 259152, 223375 258378) (220045 253121, 220169 253585, 220165 253125, 220020 252587) (218447 244665, 218498 244992, 218554 244391, 218442 244221) (218581 243353, 218488 243838, 218620 243690, 218639 243444, 218549 242983) (221494 242384, 221525 242967, 221576 243399, 221606 243109, 221558 242496, 221488 242053) (218647 241972, 218647 242211, 218709 242491, 218759 241863) (218661 241275, 218784 241414, 218797 240995, 218702 240782) (218844 238922, 218842 239048, 218741 239701, 218854 240368, 218756 239732, 218882 239251, 218892 238832) (222535 230596, 222651 231465, 222673 230706, 222568 230176) (219891 221588, 219824 222165, 219831 222537, 219905 222767, 219967 223238, 220069 222526, 220022 222241, 220006 221740, 219954 221128, 219887 220566) (217920 215876, 217954 216771, 218169 216804, 218156 217736, 218237 218085, 218305 218874, 218355 218808, 218396 218375, 218333 218080, 218292 217494, 218262 217290, 218215 216522, 217981 216554, 217957 215920, 217928 215828) (220148 212201, 220146 212837, 220208 212441, 220234 211647) (221676 207556, 221593 208146, 221584 208840, 221630 209360, 221752 209538, 221731 210072, 221753 211026, 221789 211564, 221846 210636, 221969 208162, 221955 207470, 221910 207167) (223382 206906, 223445 207583, 223418 206839, 223380 206415) (217876 206674, 217887 206958, 217906 206790, 217899 206047) (217700 203481, 217666 204005, 217697 204636, 217775 204393, 217753 204127, 217762 203627, 217741 203195) (218966 201405, 218984 202172, 219048 202451, 219012 202834, 219063 203166, 219177 202826, 219234 202158, 219187 201799, 219024 201502, 219045 200889) (218852 198320, 218858 199204, 218891 200056, 219085 199208, 219019 198112) (218879 196159, 218803 196403, 218811 197084, 218831 197750, 218895 197490, 218874 197385, 218961 196821, 218977 196029, 218887 195908) (219100 191706, 219047 192287, 219023 192916, 218959 193569, 218971 194193, 218951 194539, 219045 194532, 219223 194217, 219286 193573, 219165 192923, 219164 192286, 219314 191674)), ((238343 189074, 238466 189951, 238541 189602, 238613 189493, 238645 189311, 238794 189391, 239047 188956, 239074 188676, 239423 188828, 239546 188950, 239750 189388, 239803 189758, 239767 190009, 239782 191249, 239710 191843, 239742 192441, 239723 193700, 239974 194816, 240044 195031, 240147 195546, 240242 195710, 240447 196382, 240504 196527, 240652 197054, 240686 197287, 240889 197730, 240974 198611, 241107 199123, 241073 199371, 241136 199823, 241106 200524, 241183 201703, 241255 201911, 241271 202166, 241222 202618, 241128 204066, 241045 205657, 240961 206288, 240589 208316, 240467 209198, 240312 209647, 240069 210479, 240062 210743, 239680 211869, 239256 213328, 239121 213885, 238955 214403, 238854 214909, 238649 215754, 238499 216236, 238370 216732, 238274 217295, 238325 218051, 238453 218891, 238611 219601, 238806 221174, 238815 222674, 238869 222780, 238905 222760, 238853 221963, 239061 221662, 239142 221664, 239370 221558, 239385 221871, 239529 222317, 239665 222596, 239619 222820, 239635 223341, 239596 224068, 239628 224771, 239727 225452, 239774 226138, 239897 226768, 239890 226818, 239907 227507, 239945 228187, 240037 228864, 240042 228961, 240130 229456, 240131 229573, 240230 230959, 240251 231684, 240239 232431, 240265 233174, 240469 233887, 240808 234681, 240962 234927, 241100 235036, 241178 234559, 240855 233840, 240653 233116, 240818 232362, 240756 231638, 240483 230936, 240483 230707, 240393 229747, 240486 228828, 240475 228728, 240472 228132, 240361 227431, 240251 226855, 240260 226793, 240246 226029, 240318 225458, 240252 224699, 240111 224001, 239940 223418, 239741 221825, 239598 221203, 239589 221071, 239508 220570, 239397 220322, 239370 219606, 239095 218908, 238951 218216, 238871 218027, 238863 217305, 238898 216514, 239024 215712, 239032 215506, 239114 215386, 239265 214624, 239396 214130, 239408 213996, 239780 212643, 239914 212107, 239929 211922, 240012 211769, 240202 211235, 240472 210557, 240714 209875, 240820 209163, 241093 208411, 241299 207799, 241416 207071, 241454 206940, 241562 206309, 241567 205790, 241599 204818, 241570 204094, 241591 203532, 241549 202618, 241389 201907, 241440 201704, 241461 201204, 241390 200508, 241333 200139, 241261 199255, 241190 198524, 241113 198413, 241166 198342, 241064 197706, 241083 197452, 241034 197000, 240765 195656, 240585 194949, 240469 194319, 240329 193050, 240303 192285, 240291 191408, 240329 190524, 240440 189673, 240692 189167, 241035 188977, 241165 188990, 241466 189159, 241919 189372, 241927 189425, 242107 189544, 242166 189839, 242219 190574, 242260 193582, 242220 196581, 242263 198318, 242349 203539, 242361 205152, 242306 206488, 242251 207307, 242211 207755, 242175 208744, 242169 209889, 242176 211654, 242160 213534, 242176 216292, 242132 218077, 242085 218699, 242105 219587, 242110 221679, 241993 222464, 241946 222538, 241924 222462, 241620 222140, 241356 222442, 241463 222779, 241603 223055, 241936 223864, 242097 224582, 242130 225301, 242135 225920, 242120 226887, 242136 227340, 242096 228115, 242091 228860, 242144 230395, 242184 231981, 242283 234070, 242297 234594, 242206 235307, 241952 235986, 242136 236674, 242281 237408, 242277 237847, 242302 239597, 242266 241099, 242183 242292, 242164 243079, 242190 243842, 242231 244484, 242285 246326, 242352 248044, 242356 249246, 242317 249939, 242300 250644, 242291 252041, 242350 254884, 242347 255935, 242261 259208, 242141 260772, 242087 262831, 242022 263442, 241963 263614, 241691 263748, 241304 263770, 241260 263720, 241007 263670, 240762 262918, 240688 262185, 240679 261955, 240620 261823, 240542 260977, 240417 260160, 240429 260017, 240372 259463, 240241 258383, 240116 257068, 239992 256314, 239824 255078, 239768 254380, 239655 253672, 239502 252946, 239415 251429, 239443 251175, 239537 250000, 239680 248866, 239774 248252, 240064 246754, 240020 246522, 240084 246654, 240239 245997, 240318 245234, 240482 244703, 240527 244496, 240726 243772, 240732 243678, 240833 243049, 240789 242535, 240792 242329, 240719 242095, 240679 242217, 240625 242790, 240550 243028, 240310 243290, 240227 243721, 240286 244023, 240239 244463, 240166 244579, 240043 245198, 239836 245937, 239711 246705, 239746 247201, 239609 246970, 239508 247049, 239375 248117, 239383 248263, 239320 248369, 239115 249194, 239001 248246, 238908 247708, 238953 247232, 238961 246669, 238985 246421, 239019 245721, 239137 243961, 239182 242980, 239442 241678, 239476 240987, 239531 239192, 239535 238642, 239570 238158, 239446 237173, 239215 235484, 239176 234866, 238828 233217, 238629 232674, 238413 231982, 238225 231428, 237949 230810, 237870 231367, 237951 231862, 238238 232738, 238237 232822, 238305 233443, 238364 234147, 238486 234863, 238640 235447, 238761 236166, 238846 236819, 238892 237562, 238850 238192, 238971 238925, 239025 239170, 239061 239838, 238986 241568, 238937 242014, 238870 242815, 238767 244690, 238684 245975, 238608 247781, 238519 248276, 238502 249076, 238525 249851, 238629 250654, 239073 253179, 239171 253674, 239356 254378, 239509 255348, 239682 256303, 239682 256420, 239781 257305, 239802 257577, 239908 258471, 239975 258916, 240060 259767, 240072 260070, 240188 260790, 240332 262146, 240387 263258, 240336 263386, 240039 263760, 239860 263772, 239265 263643, 239241 262821, 239208 262648, 239083 261652, 238621 259224, 238256 257179, 238231 256993, 237988 255951, 237805 255011, 237614 254279, 237251 253547, 237065 252835, 236933 251926, 236830 251346, 236734 250572, 236723 249668, 236758 248330, 236855 247633, 236792 246570, 236740 245897, 236624 241292, 236577 240327, 236600 239805, 236627 239686, 236716 238760, 236702 238342, 236617 237739, 236475 236970, 236460 236839, 236356 236263, 236286 235725, 236326 235113, 236148 234799, 235820 234077, 235582 233219, 235479 232408, 235520 230968, 235484 230196, 235510 229820, 235460 229420, 235400 228643, 235479 227943, 235461 227347, 235471 227082, 235346 226735, 235276 226779, 235167 227039, 235163 227668, 235180 227868, 235182 228648, 235134 229426, 235076 229804, 235164 230572, 235028 230745, 235109 231770, 235018 232533, 235401 233237, 235459 233937, 235404 234531, 235069 233961, 234723 233171, 234400 232559, 234250 231839, 234232 230792, 234198 229856, 234181 227180, 234193 225615, 234171 225243, 234162 224313, 234147 224039, 234180 221495, 234379 220757, 234802 220123, 234983 219747, 235171 219528, 235356 219129, 235619 218639, 235742 217885, 235722 217610, 235831 217309, 235903 216323, 236055 215526, 236096 214985, 236133 214717, 236195 214065, 236227 213910, 236204 213692, 236176 213113, 236219 212329, 236311 211552, 236281 210794, 236151 210056, 236006 209465, 235946 209334, 235969 209208, 235991 208624, 236009 208509, 235995 207937, 235949 207551, 235818 207365, 235753 207444, 235780 207284, 235690 206929, 235694 206623, 235670 205673, 235617 204800, 235405 205220, 235402 205075, 235392 205251, 235441 205947, 235431 206112, 235452 206628, 235444 206868, 235481 207715, 235462 208249, 235540 208649, 235649 210076, 235812 211576, 235793 212347, 235657 213908, 235685 214506, 235642 215429, 235471 217868, 235519 218413, 235389 218183, 235315 218343, 235281 218619, 235187 219194, 235078 219117, 234858 219348, 234785 219854, 234721 219595, 234552 219687, 234223 219379, 234203 218779, 234209 218235, 234198 217128, 234206 216894, 234186 214805, 234199 213486, 234198 212325, 234207 211648, 234266 209342, 234354 208618, 234455 207962, 234510 207323, 234497 206593, 234388 205145, 234347 204230, 234311 203025, 234394 202314, 234409 201601, 234566 200894, 234862 200182, 235136 199476, 235290 199235, 235493 198758, 235503 197947, 235564 197188, 235594 196688, 235759 195934, 235918 195386, 236095 194694, 236298 194088, 236409 193551, 236468 193030, 236464 192850, 236560 192099, 236614 191279, 236582 190696, 236498 190197, 236455 189602, 236476 188896, 236527 188773, 236873 188592, 238132 188572) (240900 240252, 240969 240744, 240992 240253, 240950 239972) (241520 235027, 241285 235269, 241617 235624, 241769 235280, 241657 234982) (237279 229235, 237401 229619, 237637 229919, 237611 230403, 237752 230909, 237780 230640, 237654 229936, 237348 229022) (238179 225876, 238102 226234, 238120 226825, 238117 227685, 238157 228361, 238354 229240, 238507 229512, 238607 229992, 238674 230084, 238783 229732, 238742 229296, 238780 228311, 238647 227301, 238574 226928, 238487 226236, 238422 225928, 238489 225531, 238275 225271) (236384 225592, 236462 225985, 236458 226334, 236582 226826, 236602 227068, 236736 227566, 236858 227429, 236768 227058, 236836 226776, 236738 225966, 236723 225586, 236503 224927) (238493 224488, 238422 224821, 238520 225431, 238559 224823, 238719 224109, 238705 224038) (236045 222573, 235943 222839, 235941 223324, 236131 224095, 236194 224927, 236292 224850, 236222 224267, 236154 224096, 236291 223704, 236162 222717, 236142 222130) (240959 220227, 241188 220935, 241072 220064, 241032 220035) (240535 214767, 240447 215722, 240411 216476, 240424 217236, 240533 217769, 240643 217990, 240599 218166, 240824 219535, 240908 218741, 240835 217983, 240600 217035, 240615 215719, 240656 214977, 240634 214446) (236852 217712, 236725 218297, 236746 218799, 236758 218846, 236939 217702) (237578 212775, 237514 213156, 237517 213600, 237440 213973, 237341 214670, 237466 214805, 237456 214990, 237515 214855, 237675 213995, 237715 213679, 237796 213185, 237676 212609) (237984 210681, 237912 211600, 237839 211949, 237924 212134, 238181 211046, 238175 210874, 238046 210467) (238366 209385, 238272 209921, 238178 210120, 238257 210712, 238359 210159, 238381 209486, 238542 209077) (237656 200927, 237545 200973, 237285 201343, 236755 202641, 236720 203315, 236728 203978, 236716 204626, 236675 205208, 236577 205916, 236611 206182, 236740 206256, 236816 206421, 237059 206467, 237328 205881, 237085 205249, 236992 204625, 236982 204196, 237053 203998, 237141 203374, 237104 203076, 237174 202730, 237363 202110, 237657 201876, 238116 201740, 238179 201673, 238155 201753, 238562 202288, 238851 202825, 238995 203426, 239238 204036, 239304 204499, 239374 204692, 239344 205365, 239169 205939, 238988 206297, 238940 206705, 238875 206858, 238812 207360, 238783 207670, 238671 208063, 238562 208568, 238691 208756, 239018 208248, 239047 208230, 239313 207492, 239422 206798, 239756 205949, 240007 205437, 239979 204723, 239744 203362, 239613 203002, 239440 202706, 239212 202080, 239176 201409, 239064 201032, 238707 200491, 238594 200497, 238459 200367, 237831 200289) (238123 204104, 238329 205275, 238273 205912, 238015 206509, 237794 206376, 237700 206363, 237398 206516, 237377 206374, 237350 206541, 237761 206705, 238028 206609, 238334 206237, 238507 205942, 238398 205282, 238324 204102, 238174 203773) (238362 191738, 238144 191680, 238002 192028, 237973 192393, 237977 193015, 237930 193581, 237932 193658, 237844 194985, 237787 195553, 237776 195751, 237637 196768, 237427 197672, 236960 199011, 236496 200253, 236303 201098, 236196 201820, 236350 201218, 236411 201121, 236528 200667, 236621 200902, 236739 200747, 236914 200206, 237315 199390, 237430 199122, 237506 199057, 237662 198391, 237829 198164, 237902 197766, 238030 197217, 238250 196405, 238417 195740, 238531 194978, 238611 193732, 238574 192958, 238514 192403, 238411 191889, 238445 191249, 238431 190864)), ((234450 234457, 234980 235087, 235013 235067, 235417 235572, 235537 235674, 235765 236292, 235840 236935, 235913 237772, 236006 238386, 236063 239040, 236101 239706, 236120 239872, 236161 240578, 236234 242552, 236310 245043, 236308 245456, 236402 246188, 236368 246932, 236413 247684, 236426 248456, 236384 249655, 236322 250581, 236371 251307, 236501 252056, 236651 252800, 237214 255047, 237404 255666, 237654 257041, 238061 258853, 238359 260389, 238399 260660, 238546 261313, 238694 262037, 238755 262893, 238711 263384, 238623 263575, 238328 263743, 237416 263693, 236907 263631, 236745 263514, 236657 263377, 236512 261806, 236512 261601, 236238 259282, 236228 259124, 236080 258254, 236091 257824, 236021 257143, 236068 256445, 235973 255593, 235882 254304, 235870 253770, 235874 253548, 235733 252837, 235469 251848, 235112 251144, 235027 251002, 234518 250051, 234298 249355, 234218 248630, 234243 247856, 234332 247086, 234523 246264, 234670 245502, 234713 244736, 234701 243942, 234705 242584, 234637 241828, 234474 241189, 234291 240557, 234221 239969, 234190 239053, 234198 237815, 234188 237079, 234200 235539, 234241 234423, 234421 234310)), ((234699 252115, 235042 252659, 235132 252732, 235154 252689, 235443 253585, 235573 254291, 235586 254258, 235605 255049, 235484 255572, 235502 256537, 235604 257557, 235628 257895, 235804 259166, 235995 260094, 236000 260318, 236037 260874, 236070 261140, 236070 261699, 236218 262676, 236157 263318, 236050 263345, 235909 263450, 235590 263411, 235073 263302, 234599 263133, 234411 262951, 234482 259797, 234427 259070, 234357 257393, 234308 256474, 234309 255777, 234402 254403, 234407 253623, 234385 252908, 234428 252102, 234694 251969)), ((212440 161411, 212695 161715, 212968 161451, 213288 161437, 213687 161481, 213762 161557, 213985 162190, 214154 161762, 214444 161585, 215057 161587, 215443 161680, 215612 162197, 215664 163053, 215677 164716, 215704 166271, 215695 167747, 215661 169361, 215735 172914, 215805 177782, 215784 178881, 215700 180264, 215657 181141, 215642 181986, 215646 184473, 215628 186095, 215649 188704, 215595 191835, 215635 195825, 215646 196163, 215659 197615, 215653 198779, 215673 199975, 215671 200992, 215690 202183, 215771 203627, 215794 204455, 215810 205979, 215867 207776, 215880 208674, 215891 211173, 215784 213394, 215679 214490, 215650 215501, 215721 217192, 215741 218264, 215800 219676, 215813 221360, 215786 222596, 215771 223960, 215823 226624, 215819 227927, 215717 231715, 215642 232784, 215567 235278, 215512 235597, 215257 235788, 214940 235867, 214709 235657, 214712 235290, 214616 234833, 214425 234517, 214406 234841, 214420 235587, 214264 235823, 214080 235894, 213238 235899, 213109 235747, 213059 235249, 213020 235044, 213116 234818, 213171 233598, 212910 233213, 212908 233570, 213053 233822, 212878 233711, 212810 234280, 212906 234917, 212696 235789, 212448 235895, 211421 235864, 211005 235727, 210953 235676, 210826 235294, 210729 232555, 210692 232520, 210735 231063, 210650 230072, 210668 229274, 210643 228245, 210600 227702, 210539 227151, 210496 226539, 210472 225830, 210517 225452, 210515 224876, 210447 223841, 210343 222516, 210246 220602, 210208 219192, 210176 218361, 210156 215819, 210146 215442, 210175 214814, 210302 213689, 210283 213185, 210147 212584, 210060 211653, 209784 211565, 209773 212224, 209623 213193, 209638 213698, 209853 215052, 209850 217707, 209879 218985, 209976 221518, 210059 223109, 210082 224343, 210160 225372, 210261 226027, 210285 226635, 210288 227146, 210312 227498, 210315 228229, 210368 228750, 210377 229280, 210428 229721, 210406 229915, 210417 230514, 210408 230639, 210411 231342, 210437 232023, 210430 232777, 210378 232955, 210394 234232, 210421 234678, 210417 235345, 210324 235602, 210104 235684, 209793 235698, 209200 235614, 208295 235447, 207762 235262, 207538 235090, 207566 234057, 207602 231983, 207592 231454, 207544 230472, 207539 230101, 207459 228215, 207526 227284, 207588 226165, 207544 225077, 207473 224320, 207422 223319, 207405 221222, 207414 220620, 207470 219790, 207575 219098, 207670 218709, 207786 218152, 207865 217637, 207886 217135, 207866 215940, 207875 214846, 207831 214345, 207733 213837, 207571 213314, 207451 212734, 207418 211861, 207417 209814, 207487 204769, 207486 203965, 207418 202465, 207402 201902, 207432 200397, 207389 197813, 207394 197304, 207381 196974, 207377 196415, 207403 192751, 207437 191270, 207408 188057, 207422 185090, 207466 182056, 207645 180758, 207707 180234, 207699 179314, 207618 178259, 207545 176541, 207496 175108, 207483 173204, 207418 171732, 207468 169113, 207482 168798, 207469 167819, 207403 166529, 207427 164953, 207434 163576, 207467 162005, 207641 161687, 207894 161553, 208174 161476, 209149 161445, 209497 161594, 209774 161542, 209986 161431, 210544 161419, 210712 161464, 210847 161629, 210878 162280, 210906 161921, 211036 161499, 211230 161398, 212120 161382) (212912 233140, 213125 233207, 213039 232607, 212925 232540) (212806 228865, 212855 229397, 212968 229728, 212950 228843, 212811 228159, 212767 228030) (212747 225751, 212825 226366, 212765 225625, 212652 224658) (212550 222099, 212551 222374, 212645 222578, 212628 222208, 212570 221663, 212482 221328) (212261 214313, 212236 214855, 212368 217723, 212397 218735, 212496 219954, 212504 220320, 212571 220623, 212532 220903, 212644 220804, 212574 219703, 212553 219034, 212548 218233, 212491 216876, 212440 216129, 212423 215247, 212346 214252, 212315 213624) (212142 211547, 212145 211643, 212214 211075, 212195 210932) (212058 205702, 212067 205984, 211995 206315, 212012 207264, 212240 207285, 212049 207835, 212044 208551, 212138 208884, 212060 209057, 212086 209876, 212241 209402, 212266 208559, 212118 208215, 212242 207809, 212242 207283, 212182 206755, 212227 206591, 212220 206220, 212250 205491, 212222 205159) (211999 204427, 212018 205052, 212221 205149, 212139 204623, 212162 204273, 212124 203930) (209374 193203, 209357 193802, 209467 193918, 209510 193142) (213678 169320, 213752 169432, 213706 168918) (210828 164479, 210793 166386, 210909 167076, 210912 167278, 210978 167382, 210925 165323, 210884 164169, 210855 163677)), ((185297 167110, 185407 167451, 185338 167598, 185329 167852, 185381 168350, 185440 168634, 185651 168170, 185703 167967, 185970 167346, 185951 167256, 186126 167059, 186995 167057, 187112 167225, 187126 167396, 187297 167851, 187511 167580, 187718 167194, 187870 167100, 188330 167079, 188764 167155, 188994 167415, 189208 168124, 189259 170043, 189265 172829, 189303 174099, 189352 175290, 189338 177095, 189317 178365, 189324 178591, 189317 179552, 189335 180080, 189336 181778, 189365 182574, 189307 185446, 189234 186526, 189151 188026, 189098 188685, 189071 189372, 189129 190059, 189263 190768, 189309 191406, 189325 192154, 189286 193042, 189214 194103, 189187 194381, 189130 195334, 189118 196181, 189172 197770, 189250 199065, 189299 199563, 189498 203737, 189430 206912, 189389 209907, 189222 210588, 189108 211235, 189156 211949, 189317 212617, 189341 213367, 189375 214059, 189384 214777, 189416 215539, 189407 216229, 189356 217642, 189328 219067, 189215 220574, 189234 221297, 189335 221977, 189374 222713, 189388 223874, 189324 227914, 189109 228395, 188719 228449, 188023 228456, 186631 228549, 186472 228294, 186408 227996, 186415 227471, 186472 226226, 186490 224835, 186572 224305, 186831 221683, 186915 221369, 186945 220871, 186783 220779, 186532 221354, 186601 222053, 186534 222688, 186516 222971, 186301 224576, 186158 225468, 186101 225766, 185988 226490, 185888 227052, 185879 227574, 185884 228095, 185903 228345, 185800 228622, 185648 228661, 184705 228665, 184580 228544, 184505 228065, 184589 227785, 184592 227338, 184713 226475, 184776 225868, 184855 225273, 184967 224652, 185050 223973, 185108 223369, 185147 222391, 185115 221420, 185102 220614, 185028 219962, 184895 219037, 184863 218607, 184664 217295, 184543 216617, 184519 216385, 184402 215871, 184301 216015, 184314 215632, 184248 215280, 184263 214892, 184154 214176, 183924 214098, 183955 214899, 184062 215474, 184143 215982, 184290 217116, 184437 217790, 184485 218576, 184610 219345, 184622 219973, 184659 220157, 184721 220668, 184758 221351, 184776 222025, 184770 223359, 184705 224019, 184708 224132, 184682 224654, 184580 225282, 184460 225890, 184397 226657, 184348 226954, 184281 227490, 184203 228319, 184198 228589, 184131 228705, 183472 228795, 183168 228715, 183084 228646, 182878 228161, 182621 228725, 182522 228823, 181707 228851, 181435 228417, 181350 227690, 181327 226798, 181332 226001, 181306 225040, 181307 223943, 181234 221768, 181239 220209, 181254 220012, 181188 216954, 181248 216258, 181333 215500, 181336 214207, 181369 212866, 181422 212207, 181449 211242, 181418 210532, 181344 209805, 181330 209094, 181393 208494, 181534 207740, 181587 207109, 181606 206295, 181572 205427, 181536 204928, 181513 204025, 181460 203209, 181407 202874, 181346 202316, 181309 201374, 181297 200232, 181281 199875, 181240 197166, 181250 196634, 181339 195182, 181353 194246, 181298 192862, 181286 191907, 181303 190654, 181308 188838, 181532 188195, 181627 187585, 181656 186499, 181699 185835, 181613 185045, 181541 184647, 181431 183748, 181409 182317, 181416 180616, 181454 179562, 181469 177082, 181521 175854, 181525 174698, 181410 173973, 181453 173234, 181473 172197, 181501 171633, 181456 170072, 181527 169120, 181574 167732, 181674 167318, 182006 167041, 182733 167028, 182932 167135, 183128 167348, 183253 167247, 183784 167190, 184405 167022, 184888 167021) (182601 220573, 182601 220833, 182575 221391, 182589 221549, 182558 222068, 182557 222276, 182513 222984, 182619 223110, 182774 222721, 182727 221382, 182712 220690, 182653 220062) (186874 218523, 186899 218720, 186834 219235, 186874 219794, 187068 219231, 187034 218959, 187056 218340, 187039 217808) (186807 215685, 186788 216242, 186814 216403, 186714 217267, 186752 217528, 187037 217808, 186850 217109, 186886 216506, 186880 216399, 186968 215570, 186736 215251) (188015 213703, 188055 214135, 188100 215107, 188192 215141, 188177 214751, 188239 214003, 188173 213331, 188153 213301) (182346 211844, 182288 211830, 182377 212784, 182461 213044, 182533 212958, 182502 212708, 182479 212001, 182439 211663) (185267 212010, 185261 212745, 185405 212303, 185449 211755, 185350 211748) (187888 211959, 187918 212466, 187950 211958, 187923 211687) (184110 208365, 184085 209894, 183979 210471, 184007 210590, 183928 210733, 183874 211295, 183917 212207, 184178 212008, 184328 211284, 184328 210906, 184243 210539, 184282 209889, 184284 209201, 184240 208653, 184164 208194) (187824 206319, 187819 206833, 187922 206254, 187903 205990) (187613 204764, 187640 204905, 187597 205679, 187634 205715, 187779 205556, 187696 205446, 187760 204747, 187708 204580) (187325 203943, 187332 204158, 187409 204261, 187509 203922, 187510 203680, 187417 203655) (185723 201112, 185803 201361, 185782 202147, 185822 202381, 185871 203134, 185947 203520, 185999 203290, 185993 202138, 185999 201841, 185953 200921, 185896 200713) (183111 196097, 183111 196338, 183220 196571, 183346 196089, 183357 195861, 183244 195515) (187168 187332, 187096 188140, 187055 188812, 186932 189816, 186947 190690, 187033 190305, 186975 189832, 187148 189628, 187219 188881, 187258 188142, 187230 187867, 187370 187292) (184359 187722, 184404 188292, 184387 187689, 184349 187311) (187365 185986, 187363 186393, 187203 187147, 187394 187204, 187461 186611, 187503 185973, 187455 185491) (185911 183458, 185982 184152, 186008 184285, 186031 184115, 186101 183340, 186009 182935) (187495 180554, 187553 181290, 187625 180551, 187535 179884) (182489 175139, 182515 175803, 182391 176384, 182360 176383, 182395 176941, 182579 176594, 182646 175985, 182711 175237, 182687 174648) (184155 172903, 184186 173891, 184245 174426, 184331 174780, 184395 174585, 184412 173770, 184378 173140, 184238 172626) (187354 169144, 187305 169545, 187269 170271, 187255 170954, 187324 171368, 187399 171508, 187539 171257, 187533 171111, 187641 170750, 187724 169433, 187631 169027, 187644 168917, 187597 168883) (182772 170156, 182859 170644, 182923 171233, 183103 171365, 183165 170881, 183182 170371, 182928 170047) (184144 167291, 184024 167660, 184063 167803, 184162 168395, 184189 168798, 184297 169405, 184296 169102, 184244 168395, 184283 168102, 184311 167596, 184411 167274) (182898 167926, 182844 168051, 182954 168592, 183074 169096, 183100 169155, 183098 168673, 183052 167999, 183066 167740)), ((235459 188654, 235687 188917, 235822 189324, 236001 190191, 235918 191121, 235928 191635, 236013 192207, 235998 192273, 236012 192789, 235902 193397, 235786 193668, 235569 194393, 235505 194555, 235319 195235, 235090 196611, 235041 197310, 234999 197624, 235055 198027, 234832 198748, 234866 199199, 234741 199466, 234758 200007, 234621 199769, 234389 199579, 234325 199670, 234281 199476, 234248 198732, 234254 197148, 234286 195536, 234204 193095, 234226 191243, 234221 190495, 234237 189605, 234266 189452, 234274 188928, 234657 188619, 235149 188598)), ((190945 175323, 191056 175591, 191143 175634, 191279 175359, 191317 176094, 191367 176309, 191424 176930, 191362 177653, 191320 178375, 191372 178726, 191437 179275, 191479 179855, 191543 180389, 191708 180544, 191648 180897, 191717 181145, 191724 181439, 191798 181801, 191987 181569, 191896 181948, 191968 182137, 191889 182525, 191944 183472, 191990 183616, 192074 183655, 191952 184189, 191699 184362, 191201 184289, 190347 184111, 190098 183979, 190087 183430, 190096 183346, 190105 182806, 190150 181489, 190128 180812, 190090 180358, 190042 179446, 190034 179080, 189985 178259, 190101 176873, 190082 175434, 190129 175036, 190276 174786, 190571 175021, 190665 174877, 190781 174873, 190924 174583))) \ No newline at end of file diff --git a/stress_benchmark/resources/033.settings b/stress_benchmark/resources/033.settings new file mode 100644 index 0000000000..5783e17291 --- /dev/null +++ b/stress_benchmark/resources/033.settings @@ -0,0 +1,629 @@ +experimental=0 +infill_pattern=zigzag +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=20 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=185 +machine_max_feedrate_x=299792458000 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=66.66666666666667 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.7 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.1 +support_offset=0.8 +acceleration_layer_0=3000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=all +support_zag_skip_count=8 +retraction_speed=25 +acceleration_roofing=3000 +raft_interface_jerk=20 +support_roof_height=1 +acceleration_travel=5000 +acceleration_wall_x_roofing=3000 +support_roof_enable=False +acceleration_travel_layer_0=5000.0 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=1 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=20 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=20 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=20 +material_flow=100 +material_is_support_material=False +raft_interface_speed=37.5 +skirt_brim_speed=50.0 +retraction_amount=6.5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.04 +acceleration_wall_x=3000 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=60.0 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=25.0 +cross_infill_pocket_size=4.0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=20 +acceleration_print_layer_0=3000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.3 +meshfix_union_all_remove_holes=False +retraction_min_travel=0.8 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=False +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=3000 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=10 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=299792458000 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=50.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=3000 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=255 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_inner +travel_speed=120 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=10 +jerk_travel=30 +speed_travel=120 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=125.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=25 +speed_support_bottom=66.66666666666667 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.1 +speed_slowdown_layers=2 +optimize_wall_printing_order=False +machine_max_acceleration_y=9000 +resolution=0 +support_angle=0 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=20 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=3000 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.1 +minimum_bottom_area=1.0 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=1 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=4 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=3000 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=20.0 +support_bottom_distance=0.1 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=1 +jerk_prime_tower=20 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=100 +bridge_wall_speed=25.0 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=50.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=66.66666666666667 +support_bottom_wall_count=0 +speed_print_layer_0=50.0 +jerk_support_interface=20 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=20 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.02 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +quality_name=Draft +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=3000 +meshfix=0 +machine_max_feedrate_y=299792458000 +bridge_skin_speed=25.0 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=13.333333333333334 +bridge_fan_speed_3=0 +raft_speed=50.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0.3 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=50.0 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=50.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=20 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=3000 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=4 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_depth=255 +acceleration_skirt_brim=3000 +skin_overlap=5 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=250 +raft_smoothing=5 +acceleration_support_interface=3000 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=20 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=3000 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=20 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=200 +wipe_hop_amount=1 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=100.0 +support_interface_enable=False +raft_base_acceleration=3000 +wall_line_width_x=0.4 +machine_acceleration=4000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.3 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=3000 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=30.0 +raft_base_speed=37.5 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=20 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.6 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=3000 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=4.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=6.5 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=50.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=25.0 +infill=0 +prime_tower_position_y=233.575 +jerk_support=20 +speed_wall_x_roofing=100.0 +speed_layer_0=50.0 +wall_line_width_0=0.4 +jerk_support_infill=20 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +acceleration_prime_tower=3000 +material_print_temperature=200 +jerk_print_layer_0=20 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=100.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=none +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=248.575 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=3000 +support_roof_wall_count=0 +raft_jerk=20 +support_z_distance=0.1 +machine_height=265 +speed_infill=100.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=50.0 +speed_support=100.0 +speed_prime_tower=100.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=3000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.6666666666666665 +infill_line_width=0.4 +speed_wall_x=100.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.36 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=3000 +infill_sparse_density=10.0 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=90 +jerk_infill=20 +speed_ironing=33.333333333333336 +gantry_height=0 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=190 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=200 diff --git a/stress_benchmark/resources/033.wkt b/stress_benchmark/resources/033.wkt new file mode 100644 index 0000000000..85a019b685 --- /dev/null +++ b/stress_benchmark/resources/033.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((99345 45800, 99640 46892, 99895 48430, 99533 48811, 99754 50319, 99482 50643, 99467 50724, 99719 50808, 99843 50755, 99865 50639, 99705 49954, 99827 49570, 100002 49260, 99911 48847, 99897 48429, 100280 48073, 100663 47826, 101099 47951, 101445 48274, 101834 48333, 102216 47947, 102603 47911, 102995 48278, 103387 48397, 103796 48170, 104154 47911, 104588 47964, 104933 48205, 105322 48264, 105706 48005, 106093 47968, 106484 48242, 106878 48388, 107643 47912, 108031 47909, 108422 48169, 108811 48307, 109581 47879, 109973 48193, 110364 48430, 110770 48202, 111132 47899, 111520 47915, 112300 48366, 112685 48089, 113071 47880, 113855 48400, 114256 48236, 114621 47912, 115058 47917, 115790 48310, 116202 48153, 116560 47912, 116983 48089, 117341 48362, 117739 48302, 118111 47966, 118542 47991, 118880 47387, 119256 46484, 119637 46480, 119663 46673, 120031 46476, 120222 47192, 127010 47210, 129336 47204, 130302 47216, 130502 47358, 130647 47521, 130909 48432, 130325 49083, 130401 49194, 104681 49194, 104681 66303, 104485 66253, 104426 67081, 104497 67968, 104434 68318, 104504 68792, 104426 68928, 104406 69103, 104448 69444, 104445 69999, 104681 70128, 104681 72342, 104459 72248, 104438 72651, 104526 73040, 104323 73868, 104359 73974, 104618 74190, 104681 74196, 104681 87981, 104494 88321, 104285 89144, 103946 89111, 103678 89708, 103449 90150, 103398 90172, 103313 90560, 103010 90493, 102825 91098, 102781 91116, 102720 91849, 102350 91412, 102210 91621, 101960 92117, 101741 92951, 101384 92965, 100900 93958, 100806 94311, 101018 94313, 100884 94504, 100741 94527, 100768 94381, 100388 94450, 100156 95315, 100225 95351, 100144 95357, 100147 95327, 99763 95409, 99643 95846, 99195 96743, 98881 96739, 98816 96833, 98559 97699, 98166 97777, 97947 98256, 97708 98709, 97606 99122, 97204 99188, 97085 99634, 96893 100072, 96952 100132, 96789 100511, 96838 100788, 96609 100706, 96614 100559, 96302 100615, 96042 101411, 96254 101435, 96114 101720, 95839 102043, 95736 102071, 95784 101950, 95452 101927, 95167 102507, 95081 102881, 95444 103057, 94988 103170, 94921 103335, 94572 103370, 94198 104191, 94316 104291, 94256 104523, 94052 104859, 93943 104904, 93975 104772, 93590 104840, 93469 105293, 93027 106147, 92786 106056, 92652 106298, 92543 106685, 92681 106678, 92624 106847, 92458 106942, 92389 107142, 92204 107196, 92125 107475, 91996 107289, 91596 108138, 91452 108563, 91123 108541, 91052 108627, 90813 109456, 90910 109489, 90746 109656, 90775 109525, 90399 109599, 90056 110462, 90314 110606, 89936 110770, 89853 110933, 89548 110901, 89469 111015, 89186 111896, 89172 111903, 89150 112679, 88728 112186, 88562 112458, 88357 113023, 88624 113454, 88095 113737, 87821 113564, 87326 114734, 87313 114739, 87236 115250, 86938 114880, 86750 115280, 86644 115685, 86237 115789, 85860 116688, 85772 116981, 86087 117014, 85876 117336, 85621 117407, 85563 117529, 85260 117468, 85171 117606, 84920 118267, 85317 118388, 85105 118977, 84717 118772, 84627 118925, 84352 118849, 84236 119070, 84133 119451, 84337 119432, 84111 119945, 84060 120251, 83449 120266, 83327 120483, 83037 121329, 82708 121331, 82639 121395, 82309 122264, 82434 122279, 82307 122622, 82241 122330, 81905 122408, 81704 122866, 81600 123264, 81953 123186, 81745 123519, 81460 123639, 81430 123715, 81100 123704, 81036 123786, 80887 124239, 80486 125072, 80212 125075, 80068 125253, 79996 125626, 80230 125365, 80553 125184, 80879 125062, 81135 125121, 81609 124906, 81593 125429, 81437 125368, 81233 125554, 81115 125740, 81191 125983, 81567 126136, 81545 126011, 81891 125207, 82592 124977, 82816 125275, 82611 125719, 82799 126055, 82483 126916, 82664 127255, 82480 127692, 82685 128025, 82519 128457, 82711 128793, 82518 129233, 82736 129562, 82580 129991, 82763 130329, 82583 130766, 82787 131098, 82628 131528, 82813 131866, 82453 132739, 82675 133067, 82479 133507, 82663 133845, 82517 134272, 82723 134604, 82554 135037, 82764 135369, 82758 135415, 83117 136047, 82776 136915, 82461 137772, 82805 138458, 82472 139236, 82451 139480, 82728 140030, 82517 140763, 82185 140567, 82130 140968, 82152 141058, 82206 140971, 82566 140854, 82968 141507, 82253 141654, 82135 141566, 82085 141756, 82148 141913, 82260 141772, 82967 141522, 82616 142376, 82279 142410, 82156 142331, 82103 142526, 82159 142713, 82283 142546, 82616 142396, 83019 143044, 82309 143180, 82178 143087, 82145 143290, 82193 143468, 82612 143895, 82622 144054, 83001 144607, 82515 145824, 82340 145951, 82553 145900, 82751 146226, 82581 146652, 82425 146702, 82582 146665, 82783 146993, 82609 147422, 82273 147441, 82141 147370, 82095 147568, 82145 147763, 82276 147594, 82610 147431, 82807 147762, 82632 148186, 82297 148216, 82161 148124, 82128 148334, 82178 148514, 82433 148639, 82494 149400, 82862 150072, 82521 150880, 82448 150960, 82528 150991, 82864 151566, 82733 151657, 82476 152253, 82202 151921, 82100 152606, 82155 152767, 82274 152635, 82605 152477, 82983 153130, 82283 153254, 82160 153190, 82120 153376, 82165 153554, 82279 153393, 82986 153145, 82661 153997, 82315 154041, 82194 153951, 82159 154140, 82202 154317, 82441 154451, 82200 154708, 82155 154916, 82214 155096, 82498 155228, 82702 155543, 82696 155587, 83041 156225, 82713 156988, 82038 157237, 82010 157260, 81299 157423, 81227 157409, 80553 157625, 80509 157656, 79948 157437, 79934 157458, 78822 157751, 78600 157441, 78691 157223, 78718 156971, 78622 156661, 78841 156505, 78811 156297, 78597 155892, 78769 155515, 78778 155384, 78344 155517, 78344 155625, 78491 155922, 78283 156171, 78191 156391, 78187 156780, 77836 157609, 77309 157380, 76917 157506, 76183 157699, 76018 157374, 76028 157309, 76000 157372, 75286 157565, 74872 156913, 75041 156505, 74820 156190, 74756 156170, 74667 155807, 74793 155450, 74795 155307, 74477 154696, 74674 154325, 74777 154226, 74834 154033, 74793 153834, 74812 153633, 74664 153481, 74476 153383, 74507 153524, 74469 153671, 74511 153911, 74436 154101, 74472 154309, 74373 154724, 74405 155012, 74589 155441, 74515 155688, 74563 155835, 74326 156288, 74238 156699, 74555 156755, 74766 156943, 75236 157573, 74520 157770, 74284 157454, 73165 157755, 72939 157443, 72971 157348, 72919 157439, 72554 157539, 72507 157460, 72513 157534, 71808 157737, 71687 157389, 70900 157607, 70751 157241, 70693 157205, 70018 157408, 69984 157456, 69370 157241, 69251 157677, 68886 157760, 68644 157457, 67888 157662, 67637 157346, 67275 157426, 67241 157393, 67256 157445, 66147 157742, 66036 157396, 65608 157514, 65751 157863, 65619 158286, 65886 158601, 65651 159053, 65796 159402, 65556 160266, 65831 160943, 65529 161792, 65597 161798, 65843 162102, 65737 162505, 65858 162873, 65692 163221, 65876 163256, 65720 163421, 65885 163640, 65774 164075, 65910 164410, 65658 164866, 65544 165258, 65473 165304, 65561 165285, 65819 165598, 65578 166046, 65531 166063, 65577 166056, 65703 166405, 65593 166815, 65559 166832, 65847 167140, 65606 167593, 65738 167946, 65614 168367, 65876 168683, 65637 169136, 65772 169487, 65557 170316, 65533 170292, 65781 171067, 65583 171871, 65818 172575, 65625 173403, 65880 173721, 65782 174148, 65898 174492, 65656 174945, 65903 175266, 65820 175675, 65558 176151, 65668 176493, 65546 176914, 65843 177220, 65592 177680, 65716 178031, 65617 178436, 65570 178457, 65620 178454, 65882 178761, 65632 179194, 65533 179243, 65626 179237, 65745 179574, 65649 179978, 65615 179996, 65653 179994, 65925 180299, 65659 180761, 65776 181115, 65577 181932, 65808 182657, 65603 183467, 65545 183504, 65605 183508, 65838 184200, 65639 185035, 65915 185341, 65827 185752, 65480 186343, 65632 186582, 65501 186891, 65545 186992, 66202 187201, 65560 187763, 65701 188114, 65576 188534, 66234 188743, 65566 189323, 65614 189322, 65730 189656, 65620 190069, 66264 190285, 65652 190835, 65758 191199, 65666 191602, 65608 191627, 65530 191968, 65565 192027, 65534 192103, 65621 192400, 65685 192385, 65787 192742, 65594 193569, 65824 194283, 66195 194191, 66470 194493, 67598 194194, 67871 194496, 68992 194200, 69102 194547, 70603 194146, 70717 194491, 71479 194286, 71490 194293, 72225 194092, 72736 193165, 72767 193153, 72621 192486, 73196 192721, 73327 192226, 73576 191776, 73682 191740, 73842 191370, 74184 191229, 74218 191123, 74147 190836, 74194 190661, 74369 190553, 74419 190378, 74790 190279, 75282 189363, 75397 188951, 75761 188857, 75873 188403, 76160 187895, 76325 187333, 76389 187509, 76729 187442, 76911 186779, 76572 186683, 76823 186204, 77093 186336, 77080 186545, 77348 186477, 77812 185569, 77935 185151, 78187 185078, 78087 184767, 78356 184872, 78431 184624, 78661 184180, 78730 184154, 78821 183852, 78590 183804, 78689 183468, 78936 183555, 79069 183375, 79373 183238, 79520 182788, 79650 182739, 79645 182111, 80076 182291, 80335 181780, 80465 181356, 80622 181310, 80708 181083, 80909 181009, 81245 179994, 81607 179878, 81695 179369, 81893 178777, 82087 178846, 82185 178562, 82544 178484, 82695 178028, 82910 177587, 83278 177484, 83494 177034, 83785 176194, 84063 176102, 83996 175759, 84215 175940, 84568 175193, 84711 174763, 84994 174530, 85148 174474, 85437 173794, 85802 173699, 86008 173243, 86315 172396, 86681 172288, 87080 171399, 87230 170971, 87600 170873, 87762 170437, 88141 169559, 88510 169460, 88809 168650, 88644 168644, 88738 168425, 88866 168506, 89018 168160, 89386 168058, 89504 167778, 89434 167652, 89734 167183, 90101 167096, 90305 166561, 90238 166135, 90861 165988, 91458 164535, 91312 164423, 91392 164176, 91601 164140, 91696 164319, 91882 164273, 91989 164003, 91899 163875, 91888 163551, 92118 163678, 92232 163401, 92607 163297, 93132 161992, 93502 161888, 94024 160582, 94396 160480, 94749 159613, 95102 159509, 95655 158201, 95921 158121, 95957 157983, 96052 158024, 96359 157230, 96733 157124, 97204 156023, 96890 155669, 97362 155556, 97431 155387, 97801 155285, 98183 154406, 98552 154303, 99041 153014, 99407 152906, 99573 152468, 99955 151598, 100324 151489, 100642 150633, 101006 150534, 101391 149663, 101355 149653, 101531 149174, 101630 149192, 101928 149112, 102082 148679, 102482 147800, 102850 147701, 103158 146838, 103528 146736, 103645 146479, 103526 146201, 103886 145859, 104011 145391, 104094 145381, 104235 144994, 104605 144886, 105015 144003, 105131 143658, 105068 143597, 105135 143534, 105066 143210, 105331 142639, 105595 143065, 105437 143330, 105195 143562, 105533 143476, 105682 143043, 106054 142941, 106418 142161, 106377 142075, 106509 141472, 106681 141424, 106788 141575, 106990 141522, 107138 141092, 107557 140201, 107703 139785, 108067 139684, 108363 138833, 108624 138746, 108604 138547, 108801 138492, 108870 138291, 109320 137398, 109669 137308, 109947 136450, 110315 136349, 110754 135449, 110890 135030, 111240 134928, 111397 134497, 111616 134054, 111811 133996, 111889 133726, 112140 133638, 112331 133108, 112303 133062, 112349 133049, 112476 132653, 112848 132550, 113294 131655, 113426 131231, 113800 131128, 113932 130701, 114382 129802, 114512 129385, 114877 129295, 115015 128858, 115241 128410, 115371 128374, 117026 129315, 120530 130977, 124387 132501, 128548 133870, 132944 135062, 137562 136077, 142293 136898, 147340 137558, 147017 138014, 146860 138296, 146399 138935, 146209 139365, 145835 139873, 145634 140056, 145550 140254, 145315 140588, 145226 140647, 144845 141272, 144597 141521, 144407 141978, 144121 142347, 143642 143102, 143386 143392, 142990 144083, 142651 144537, 142428 144986, 142059 145352, 141994 145492, 141721 145955, 141311 146521, 141075 146907, 140678 147411, 140490 147843, 140135 148328, 139911 148545, 139761 148914, 139515 149171, 139144 149762, 139048 150044, 138623 150624, 138349 150927, 138250 151170, 137886 151689, 137650 152136, 137393 152379, 137061 153047, 136777 153304, 136609 153660, 136240 153932, 135775 154562, 135501 154829, 135137 155319, 134997 155429, 134778 155726, 134378 156427, 133836 157068, 133657 157533, 133391 157773, 133165 158121, 132928 158563, 132646 158891, 132022 159869, 131754 160196, 131521 160639, 131028 161226, 130851 161583, 130351 162280, 130135 162698, 129687 163327, 129220 164012, 128902 164587, 128519 165061, 128177 165672, 127820 166088, 127596 166517, 127367 166811, 127179 167163, 126719 167757, 126403 168372, 126040 168766, 125987 168874, 125644 169463, 125337 169779, 125055 170292, 124774 170757, 124682 170931, 124187 171560, 123859 172171, 123488 172539, 123205 173126, 122847 173669, 122552 174080, 122246 174551, 121896 175064, 121654 175352, 121245 176061, 120966 176353, 120722 176718, 120526 177123, 120106 177823, 119830 178086, 119298 178849, 119016 179313, 118723 179871, 118439 180145, 118189 180487, 118083 180732, 117733 181289, 117481 181536, 116854 182505, 116636 182878, 116374 183188, 116151 183588, 115853 184057, 115588 184517, 115290 184957, 115012 185295, 114915 185477, 114580 186012, 114182 186802, 113908 187085, 113509 187800, 113229 188112, 112787 188840, 112515 189119, 112184 189714, 111859 190184, 111625 190643, 111163 191217, 111025 191583, 110743 191957, 110373 192537, 110032 192950, 109726 193489, 109084 194440, 108694 194935, 108850 195238, 109218 195146, 109428 195465, 110149 195306, 110529 195194, 110745 195487, 111481 195312, 111862 195193, 112074 195501, 112807 195337, 113201 195189, 113405 195509, 114112 195371, 114466 195233, 114667 194866, 115018 194821, 115639 195010, 116361 194787, 116547 195136, 116970 195062, 117650 194877, 117704 194835, 118410 194642, 118461 194642, 119127 194520, 119481 194861, 119751 194647, 119954 194228, 120650 194038, 121050 194650, 121085 194674, 121408 195328, 121356 195424, 121124 196188, 121233 196325, 121164 196169, 121505 195364, 121527 195295, 121884 194489, 122577 194279, 122642 194299, 123322 194086, 123666 194814, 123722 194710, 124078 194613, 124114 194635, 124461 194491, 125020 194725, 124593 195229, 124697 195603, 125075 195480, 125074 194722, 126165 194440, 126390 194752, 126496 195248, 126693 195429, 126677 195618, 126805 195495, 126762 195021, 126465 194763, 127116 194599, 127324 194481, 127405 194254, 127602 194199, 127675 193999, 127793 193964, 127896 193673, 128166 193552, 128403 193026, 128776 192924, 128981 192475, 129276 191623, 129643 191528, 130063 190633, 130212 190210, 130575 190114, 130869 189248, 131242 189143, 131351 188809, 131289 188741, 131301 188545, 131434 188605, 131809 187835, 132160 187793, 132459 186874, 132549 186846, 132580 186231, 132970 186475, 133266 185874, 133396 185452, 133772 185348, 133867 185042, 133812 184949, 133850 184801, 133952 184827, 134345 184038, 134387 184017, 134280 183270, 134309 183134, 134013 182568, 134468 182109, 134446 182062, 134579 181638, 134425 181292, 134650 180843, 134175 180218, 134633 179297, 134144 178656, 134589 177753, 134357 177434, 134478 177065, 134457 177019, 134594 176541, 134362 176270, 134577 175877, 134414 175480, 134678 174633, 134543 174282, 134551 174219, 134074 174023, 134527 173562, 134631 173107, 134505 172693, 134035 172483, 134493 172027, 134596 171555, 134449 171206, 134682 170755, 134187 170128, 134672 169197, 134172 168569, 134640 167665, 134141 167027, 134569 166177, 134564 166102, 134351 165806, 134468 165449, 134444 165394, 134563 164934, 134362 164659, 134867 163332, 135646 163086, 135707 163109, 135778 163310, 135718 163493, 135858 163702, 136156 163548, 136383 163651, 136396 163308, 137035 163054, 137190 163091, 137266 163266, 137467 163402, 137643 163798, 137828 164079, 137672 164909, 138121 164879, 138130 164514, 137984 164423, 138085 164266, 138162 163987, 138262 163918, 138350 163548, 138117 163475, 137942 163271, 138390 162955, 138609 162989, 138712 162949, 138722 163058, 138859 163281, 139115 163228, 139527 163223, 139950 163026, 140269 163023, 140264 163053, 140277 163022, 140733 163024, 141114 162848, 141589 162660, 141565 162512, 141693 162413, 142172 161725, 142240 161686, 142238 161626, 142276 161616, 142650 161074, 142786 160969, 143119 160373, 143649 159728, 143688 159715, 143999 158920, 144034 158888, 144644 157689, 144747 157285, 145292 156911, 145368 156880, 145451 156620, 145683 156111, 145758 155884, 145973 155762, 146056 155650, 146134 155212, 146344 154766, 146736 154271, 147174 153872, 147391 153316, 147528 152892, 147758 152580, 148061 152317, 148203 151882, 148503 151759, 148952 151037, 149189 150370, 149415 150048, 149616 149930, 149685 149587, 149864 149120, 150203 149018, 150570 148569, 150653 148508, 150751 148258, 151041 147664, 151147 147523, 151239 147222, 151382 146938, 151520 146900, 151598 146737, 152092 146340, 152213 145792, 152277 145711, 152425 145305, 152677 145122, 152803 144856, 153029 144581, 153303 144453, 153504 143888, 153888 143618, 154069 143597, 154054 143275, 154158 142934, 154405 142478, 154714 142006, 154837 141897, 154994 141479, 155364 141452, 155548 141002, 155749 140685, 155985 140036, 156219 139845, 156321 139627, 156471 139499, 156725 139380, 156869 139089, 156956 138794, 157276 138354, 157269 138228, 158822 138256, 158803 138559, 158509 138773, 158437 139047, 158278 139309, 158133 139373, 158081 139532, 157956 139640, 157922 139800, 157784 139854, 157812 139993, 157672 140101, 157645 140263, 157504 140316, 157522 140461, 157373 140582, 157247 140835, 157171 140869, 157155 140949, 156957 141143, 156869 141414, 156786 141517, 156502 141945, 156178 142559, 156007 142646, 155956 142828, 155832 142965, 155698 143287, 155364 143645, 155286 143787, 154975 144260, 154836 144414, 154642 144822, 154469 145036, 154411 145190, 154227 145357, 153632 146289, 153443 146448, 153380 146635, 153269 146771, 153126 147093, 152870 147551, 152540 148028, 152295 148235, 152229 148502, 152150 148593, 152019 148893, 151724 149156, 151545 149427, 151238 149657, 151139 149963, 151216 150269, 151188 150725, 151286 151087, 151798 151949, 151977 152406, 152177 152684, 151938 152577, 151804 152789, 151386 152843, 151134 153113, 150919 153512, 150751 153719, 150559 153866, 150334 154215, 150073 154721, 149949 154834, 149909 154952, 149504 155451, 149250 155908, 149015 156359, 148745 156557, 148636 156891, 148230 157457, 148004 157667, 147776 157703, 147659 157507, 147610 157133, 147496 156922, 147217 156646, 146882 156598, 146558 156703, 146394 157151, 146174 157335, 146098 157547, 145961 157677, 145503 158443, 145191 158768, 145094 158985, 144976 159057, 144861 159437, 144746 159618, 144550 159779, 144466 159933, 144261 160123, 144004 160497, 143866 160852, 143789 160851, 143846 160878, 143580 161088, 143494 161362, 143202 161830, 143146 161894, 142880 162327, 142645 162568, 142502 162797, 142739 162854, 142774 163111, 142876 163400, 142749 163505, 142888 163588, 143012 163821, 143247 164091, 143247 164253, 143372 164280, 143349 164116, 143672 163640, 143547 163286, 144051 163134, 144338 163366, 144653 163371, 144674 163450, 144958 163448, 144923 163849, 145284 163879, 145409 163551, 145462 163220, 145589 163461, 145909 163323, 145973 163342, 146541 163241, 146366 163676, 146705 163960, 147074 163864, 147176 163455, 147527 163256, 147600 163276, 147971 163180, 148189 163177, 148142 163577, 148177 163661, 148667 163821, 148655 163942, 148315 164708, 148425 164786, 148359 164681, 148889 163898, 148954 163354, 149282 163201, 149602 163177, 149640 163396, 149971 163469, 150107 163789, 150241 163916, 150565 164014, 150688 163655, 150611 163457, 150601 163290, 151114 163083, 151224 163121, 151312 163338, 151600 163388, 151825 163343, 151825 163551, 151744 163753, 151915 164093, 151905 164382, 152242 164377, 152234 164006, 152326 163941, 152501 163545, 152761 163246, 152947 163246, 153209 163339, 153973 163107, 154022 163129, 154087 163303, 153625 163307, 153670 163762, 154075 163890, 154055 164003, 154145 163930, 154331 163431, 154495 163238, 154620 163271, 155363 163094, 155512 163108, 155453 163267, 155206 163579, 155380 163919, 155474 164280, 155476 164669, 155431 164754, 155497 165049, 155388 165476, 155862 165664, 155779 164972, 155822 164669, 155801 164385, 155483 164277, 155819 164081, 156041 163483, 156057 163346, 156270 163138, 156810 162905, 157036 162950, 157345 162774, 157308 162616, 156948 161938, 156933 161798, 156734 161570, 156689 161234, 156542 160893, 156609 160765, 156534 160873, 156403 160578, 156205 160042, 156378 159924, 156484 160128, 156525 160366, 156799 160404, 157141 161038, 157137 161111, 157440 161467, 157756 162105, 158218 162805, 158271 162806, 158743 162985, 158919 163222, 159178 163134, 159330 162836, 159400 162509, 159484 162406, 159393 162364, 159315 162064, 159452 161640, 159317 161288, 159376 160977, 159489 160854, 159372 160796, 159306 160516, 159391 160106, 159280 159748, 159358 159461, 159488 159305, 159352 159223, 159283 158972, 159411 158424, 159602 157723, 159342 157017, 159577 156179, 159298 155498, 159503 154623, 159426 154422, 159284 153932, 159493 153101, 159403 152872, 159272 152385, 159491 151551, 159368 151196, 159421 150983, 159624 150739, 159415 150599, 159360 150422, 159443 150013, 159344 149652, 159395 149440, 159598 149195, 159387 149066, 159329 148881, 159405 148473, 159316 148109, 159368 147889, 159631 147890, 159542 147661, 159357 147547, 159285 147342, 159390 146926, 159495 146399, 159583 146099, 159421 145638, 159510 145515, 159782 145529, 159710 145288, 159507 145155, 159459 144969, 159562 144553, 159398 144096, 159489 143988, 159782 143999, 159700 143741, 159482 143611, 159413 143431, 159499 143020, 159370 142551, 159464 142448, 159762 142458, 159678 142196, 159457 142064, 159387 141887, 159467 141479, 159344 141007, 159439 140901, 159718 140905, 159639 140656, 159431 140525, 159360 140344, 159439 139936, 159406 139820, 159506 139707, 159797 139727, 159713 139472, 159761 139399, 159631 138962, 159700 138701, 159487 138579, 159183 138262, 161310 138300, 165974 138218, 170748 137963, 175585 137525, 180428 136898, 181209 136764, 181125 137713, 181203 138621, 181160 138921, 181173 139792, 181227 140165, 181128 140875, 181127 141502, 181372 141424, 181550 141273, 181579 140839, 181439 140495, 181455 140273, 181386 139854, 181458 139715, 181195 139399, 181407 138953, 181439 138728, 181314 138274, 181332 138198, 181214 137843, 181386 137408, 181415 137012, 181279 136751, 185219 136077, 186357 135831, 186193 136213, 186214 136472, 186370 137063, 186097 137658, 186215 138023, 186369 138599, 186248 138789, 186139 139229, 186210 139575, 185932 139933, 185942 140917, 186255 141114, 185947 141479, 185977 142434, 186325 142645, 185876 142945, 185797 143177, 185968 143518, 186406 143598, 186679 143711, 186878 143719, 187223 143562, 187209 143252, 187255 143165, 187167 142862, 186746 142528, 186854 142168, 187134 141800, 187160 141685, 187129 141502, 186830 140955, 186793 140767, 186845 140625, 187119 140249, 187144 140136, 187111 139985, 186797 139413, 186799 138944, 186750 138651, 186761 138172, 186863 137846, 186800 137412, 186710 137112, 186717 136607, 186848 136299, 186660 135765, 189894 135066, 194392 133870, 198657 132499, 201412 131440, 201451 131614, 201484 131541, 201469 131417, 202618 130977, 205127 129826, 205173 130479, 205126 131289, 205178 131708, 205158 131280, 205206 130492, 205157 129812, 206243 129315, 209488 127541, 212324 125679, 214742 123750, 216717 121794, 217547 120809, 218272 119823, 218893 118840, 219414 117863, 219414 83293, 219920 83818, 220188 83799, 220136 83469, 220008 83405, 220138 83209, 220266 83335, 220548 83294, 220522 82885, 220601 82855, 220568 82536, 220674 82339, 220674 81843, 220766 81259, 220885 80785, 220977 80621, 220969 80532, 221533 80172, 221578 79395, 221753 78663, 222157 78320, 222262 78074, 222494 77800, 222527 77676, 222756 77313, 222839 77618, 222890 78396, 223018 79157, 223040 79544, 223166 79577, 222757 79792, 222589 79812, 222631 79973, 222756 79963, 224897 80276, 224891 82016, 224702 82266, 224697 91951, 224889 92293, 224374 92482, 224375 92680, 224313 92870, 224313 93068, 224373 93258, 224374 93456, 224300 93645, 224274 94231, 224355 94421, 224374 95006, 224286 95196, 224259 95782, 224321 95971, 224322 96169, 224380 96359, 224381 96557, 224318 96746, 224318 96944, 224248 97134, 224281 97720, 224362 97909, 224331 98495, 224245 98685, 224269 99270, 224359 99460, 224341 100046, 224235 100235, 224246 100821, 224276 101011, 224305 101596, 224354 101786, 224350 102371, 224279 102561, 224264 103147, 224343 103337, 224387 103922, 224308 104112, 224290 104697, 224311 104887, 224330 105473, 224348 105662, 224346 106248, 224270 106438, 224259 107023, 224328 107213, 224329 107411, 224387 107600, 224388 107798, 224319 107988, 224278 108574, 224323 108764, 224336 109349, 224353 109539, 224362 110125, 224284 110314, 224294 110900, 224337 111089, 224302 111477, 224317 112063, 224384 112252, 224385 112450, 224328 112640, 224329 112838, 224263 113028, 224279 113613, 224363 113803, 224362 114389, 224267 114578, 224268 114776, 224360 114966, 224361 115164, 224305 115353, 224268 115939, 224347 116129, 224381 116714, 224317 116904, 224318 117102, 224257 117292, 224291 117877, 224374 118067, 224350 118653, 224255 118842, 224269 119428, 224356 119618, 224344 120203, 224254 120393, 224263 120978, 224349 121168, 224348 121754, 224263 121944, 224226 122529, 224277 122719, 224286 123304, 224343 123494, 224352 124080, 224283 124269, 224264 124855, 224330 125045, 224331 125243, 224387 125432, 224388 125630, 224314 125820, 224284 126405, 224317 126595, 224337 127181, 224355 127370, 224352 127956, 224290 128146, 224259 128731, 224315 128921, 224316 129119, 224389 129309, 224389 129507, 224325 129696, 224277 130084, 224327 130543, 224365 131832, 224307 132022, 224279 132608, 224330 132798, 224310 133771, 224386 133961, 224344 134546, 224263 134736, 224273 135321, 224357 135511, 224351 136097, 224162 136285, 224170 136484, 223690 136646, 223677 137033, 222752 137306, 222753 137695, 222378 137797, 222381 138123, 222459 138167, 222501 138666, 222383 138698, 222007 138337, 222005 138676, 221632 138779, 221619 139543, 221259 139656, 221260 139861, 221416 140004, 221418 140330, 221042 140105, 220883 140149, 220882 140532, 220510 140636, 220517 141024, 220144 141127, 220128 141898, 219763 141991, 219750 142390, 219379 142496, 219375 142886, 218996 142986, 219000 143371, 218632 143478, 218638 143862, 218265 143966, 218253 144350, 218162 144384, 218206 144710, 217879 144846, 217882 145231, 217506 145334, 217517 145720, 217146 145825, 217133 146210, 216766 146315, 216764 147092, 216390 147188, 216399 147578, 216029 147682, 216022 147975, 216060 148062, 215820 148315, 215638 148403, 215631 148565, 215251 148663, 215280 149433, 214910 149523, 214902 149844, 215267 150022, 214894 150125, 214829 149949, 214525 150014, 214508 150420, 214353 150468, 214581 150847, 214143 150671, 214146 150905, 213775 151011, 213789 151393, 213412 151492, 213388 152277, 213012 152385, 213027 152604, 213214 152718, 213161 153366, 212934 153182, 212999 153112, 212944 152792, 212652 152863, 212675 153249, 212297 153349, 212287 153744, 211913 153846, 211896 154238, 211522 154341, 211536 154720, 211182 154826, 211189 155210, 210817 155310, 210813 155433, 210943 155667, 210953 155830, 210793 155880, 210773 156091, 210402 156196, 210382 156588, 210011 156692, 210013 157468, 209642 157565, 209664 157939, 209709 157991, 209649 157959, 209286 158054, 209268 158448, 208888 158547, 208866 158939, 208497 159050, 208521 159429, 208146 159529, 208171 159910, 207794 160011, 207767 160621, 207930 160757, 207954 161109, 207614 160843, 207378 160904, 207404 161226, 207571 161323, 207411 161327, 207383 161294, 207023 161382, 207057 161766, 206682 161867, 206657 162260, 206290 162369, 206260 162760, 205886 162863, 205915 163243, 205541 163347, 205574 163728, 205537 164111, 205169 164220, 205154 164539, 205414 164426, 205703 164468, 205732 164833, 205158 164751, 205033 164651, 204770 164720, 204795 165095, 204512 165182, 204584 165308, 204436 165272, 204453 165576, 204081 165678, 204059 166078, 203685 166180, 203655 166580, 203679 166810, 203940 167012, 203703 167077, 203574 166989, 203313 167061, 203344 167431, 203043 167523, 203152 167686, 202956 167869, 202950 167936, 202576 168039, 202520 168442, 202565 168803, 202187 168719, 202204 168913, 201830 169016, 201868 169392, 201495 169494, 201429 170288, 201058 170393, 201021 170788, 200712 170876, 200875 171089, 200644 170958, 200612 171289, 200239 171393, 200319 172145, 199946 172245, 199905 172642, 199531 172744, 199512 173004, 199646 173106, 199728 173470, 199291 173203, 199122 173247, 199164 173623, 198825 173749, 198984 174062, 198985 174449, 198847 174544, 198443 174414, 198421 174601, 198047 174704, 198002 175107, 198049 175476, 197670 175586, 197722 175954, 197352 176052, 197311 176456, 196940 176558, 196894 176957, 196518 177059, 196567 177435, 196190 177535, 196243 177915, 196199 178309, 195823 178409, 195783 178812, 195408 178914, 195457 179288, 195082 179389, 195137 179765, 194761 179866, 194720 180268, 194347 180370, 194297 180774, 194349 181142, 194257 181173, 194297 181447, 194021 181522, 194031 181618, 193663 181718, 193611 182120, 193234 182219, 193190 182624, 192819 182730, 192867 183096, 192497 183200, 192557 183573, 192185 183676, 192083 184478, 191710 184582, 191658 184983, 191286 185088, 191230 185491, 191288 185858, 190918 185953, 190974 186296, 191059 186314, 191116 186460, 190971 186419, 190903 186356, 190606 186433, 190549 186836, 190258 186921, 190299 187297, 190530 187593, 189800 187434, 189749 187448, 189809 187815, 189613 187873, 189642 188044, 189874 188640, 189471 188525, 189259 188357, 189128 188393, 189072 188794, 188692 188893, 188648 189257, 188785 189263, 188860 189435, 188657 189394, 188704 189670, 188332 189774, 188393 190139, 188020 190242, 187964 190646, 187596 190749, 187527 191158, 187597 191521, 187229 191623, 187293 191992, 186924 192092, 186862 192499, 186486 192601, 186424 193005, 186055 193112, 186121 193477, 185748 193580, 185821 193947, 185450 194051, 185386 194454, 185009 194553, 184943 194968, 185021 195330, 184650 195435, 184721 195797, 184537 195854, 184682 196226, 184321 196119, 184287 196308, 183909 196405, 183869 196697, 184047 196765, 184088 196958, 183889 197012, 183921 197182, 183546 197289, 183623 197647, 183256 197743, 183185 198155, 182813 198251, 182671 199072, 182305 199172, 182228 199583, 181845 199678, 181934 200052, 181562 200157, 181644 200520, 181260 200617, 181122 201435, 180750 201544, 180789 201697, 181025 201857, 181067 202038, 180880 202089, 180652 201958, 180460 202008, 180544 202370, 180176 202475, 180095 202878, 179729 202981, 179633 203401, 179730 203753, 178989 203963, 179076 204324, 178998 204731, 178755 204804, 178703 204915, 178611 204941, 178547 205244, 178380 205295, 178682 205634, 178217 205517, 178263 205710, 177883 205810, 177982 206175, 177598 206272, 177445 207094, 177074 207203, 177165 207560, 176996 207612, 177046 207804, 176849 207858, 176889 208025, 176520 208123, 176430 208532, 176068 208625, 175976 209051, 175428 209973, 175072 210060, 174998 210370, 175169 210440, 175123 210657, 174925 210711, 174880 210901, 174505 211003, 174235 211454, 173964 211932, 173784 212750, 173418 212850, 173344 213184, 173402 213250, 173419 213632, 173152 214093, 173044 213735, 173270 213286, 172945 213370, 172852 213788, 172323 214698, 155836 214698, 155808 214583, 155857 214296, 155679 214476, 155661 214698, 154486 214698, 154447 214569, 154466 214349, 154309 214698, 150462 214698, 150557 214639, 150571 214234, 150345 214296, 150390 214518, 150365 214698, 148599 214698, 148466 214404, 147917 214662, 147923 214698, 146434 214698, 146753 213964, 146735 213889, 146374 213526, 146641 213980, 146244 214698, 145085 214698, 145088 214639, 144986 214698, 127633 214698, 127633 200302, 53651 200302, 53784 199534, 54142 199451, 54217 199016, 54592 198913, 54515 198547, 54895 198447, 54810 198079, 55181 197977, 55254 197572, 55406 197525, 55447 197288, 55676 197166, 55704 197056, 55627 196700, 55995 196588, 55928 196239, 56281 196134, 56360 195726, 56721 195634, 56806 195213, 57169 195121, 57093 194741, 57132 194726, 57075 194683, 57057 194720, 56709 194825, 55928 194677, 55640 193971, 55196 193707, 55164 194005, 55069 194128, 55229 194351, 55739 194638, 55157 194768, 55124 194873, 54408 195069, 54470 194680, 54416 194640, 54096 194727, 53981 194426, 54036 194311, 53971 194042, 53732 193720, 53734 193331, 53823 193001, 53809 192535, 53737 192285, 53790 191446, 53685 190724, 53733 190342, 53849 189981, 53706 189523, 53742 189453, 53658 189177, 53592 189107, 53643 189014, 53700 188689, 53806 188417, 53783 187794, 53594 188203, 53584 188721, 53521 189084, 53600 189779, 53565 190276, 53500 190585, 53565 191051, 53675 191409, 53499 192105, 53528 192612, 53654 192966, 53637 193327, 53485 193787, 53346 194046, 53566 194357, 53564 194440, 53021 194647, 52283 194890, 52309 193865, 52247 193430, 52104 193390, 52219 193142, 52181 192594, 52204 192030, 52106 191839, 52182 191518, 52155 190656, 52007 190338, 52077 189574, 52041 188755, 51827 188040, 51893 187815, 51945 187232, 51866 186478, 51914 186278, 51851 186085, 51960 185677, 51711 185181, 51635 184991, 51545 184955, 51124 185544, 51028 185921, 51033 186424, 51342 186623, 51029 186976, 51011 187428, 51026 188012, 51409 188155, 51041 188494, 51040 189264, 51064 189412, 50959 190121, 51076 190571, 51032 190968, 51097 191449, 51044 191735, 51054 192520, 51116 192887, 51183 193033, 51130 193269, 51293 193613, 50941 193930, 50907 194106, 51296 194388, 51436 194716, 50336 195029, 49906 194767, 49915 194635, 49759 194640, 49209 194959, 49252 195038, 49164 195062, 49044 194946, 48408 194737, 48444 194781, 48385 195162, 48035 195258, 47713 194981, 47679 194991, 47701 195373, 47760 195446, 47667 195443, 47317 195245, 47191 195124, 46967 195180, 46855 195082, 46612 195148, 46418 194948, 45896 195087, 45823 195046, 45509 195117, 45110 194919, 44344 195124, 43916 194859, 43177 195009, 42985 194896, 42879 194983, 42444 195101, 42280 194901, 41351 195168, 41250 195087, 40961 195437, 40494 195022, 40259 195000, 39805 194781, 39909 195007, 39500 195117, 39322 194955, 38729 195106, 38515 194975, 38341 195063, 38351 195215, 38222 195257, 38246 195495, 37995 195433, 37994 195679, 37649 195800, 37613 196196, 37240 196298, 37205 196691, 36989 196758, 37213 197050, 36859 197019, 36873 197175, 36501 197279, 36718 197608, 36867 197940, 36526 197815, 36489 198038, 36134 198134, 36096 198546, 35791 198637, 35989 198829, 35734 198708, 35755 199026, 35390 199134, 35442 199555, 35409 199516, 35044 199613, 35028 199922, 35249 200071, 35013 200138, 34981 200302, 20742 200302, 20744 197971, 20553 197628, 20546 197240, 20759 197051, 20949 196801, 20930 196420, 20932 195645, 20744 195302, 20737 195112, 20857 194911, 21062 194748, 22089 194491, 22169 194439, 22687 194173, 23062 194242, 23232 194116, 23298 193921, 23060 193221, 22685 193510, 22590 193316, 22602 192927, 22595 192144, 22536 190992, 22569 190593, 22558 189427, 22518 189054, 22529 188263, 22574 187778, 22532 186712, 22494 186341, 22491 185568, 22510 184772, 22486 184403, 22466 183309, 22549 182850, 22596 182074, 22575 181298, 22570 179360, 22545 178974, 22551 177819, 22593 177801, 22537 177425, 22684 177294, 23019 177290, 22990 176949, 23224 176670, 23224 176497, 23359 176384, 23363 176072, 23187 175868, 23431 175976, 23712 175883, 23685 175596, 23595 175407, 24103 175411, 24113 175028, 24175 174928, 24543 174969, 24568 174191, 24498 173435, 24575 173026, 24557 172597, 24620 172167, 24627 171073, 24581 170311, 24667 169208, 24612 168364, 24689 167180, 24689 166553, 24711 165023, 24650 164090, 24954 163619, 24698 163300, 25193 163063, 25633 163045, 25657 163241, 25767 163121, 26023 163291, 26250 163264, 26539 163464, 26455 163207, 26690 163062, 27138 162950, 27520 163186, 27771 163107, 27896 163124, 28216 163058, 28637 162871, 29392 162872, 29764 162750, 29954 163024, 30027 163271, 29648 163368, 29388 163566, 29719 163864, 29748 163953, 29847 163930, 30131 163999, 30306 163504, 30271 163324, 30372 163145, 30637 162954, 30886 163056, 31159 163081, 31198 163424, 31167 163465, 31250 163740, 31454 163604, 31888 163783, 32056 163304, 31975 163178, 31916 163200, 31613 163151, 31409 163012, 31631 162856, 31918 162783, 32022 162505, 32083 162137, 32399 161966, 32450 161676, 32717 161625, 32832 161459, 32736 161100, 33092 161157, 33190 161070, 33206 160969, 33096 160572, 33555 160537, 33485 160236, 33424 160134, 33469 160073, 33905 160057, 33753 159656, 33812 159557, 33918 159612, 34237 159580, 34262 159188, 34336 159109, 34298 158792, 34600 158834, 34703 158718, 34623 158254, 34656 158212, 35091 158198, 35028 157720, 35298 157549, 35431 157288, 35542 157228, 35743 156938, 35873 156488, 36210 156355, 36178 155889, 36630 155855, 36633 155765, 36513 155418, 36978 155373, 36798 154945, 36831 154900, 37301 154898, 37220 154441, 37409 154144, 37703 153922, 37776 153663, 38009 153472, 38029 153147, 38382 153034, 38406 152635, 38799 152550, 38815 152117, 39196 152020, 39165 151652, 39548 151556, 39487 151186, 39856 151082, 39842 151010, 39941 150739, 40108 150549, 39917 150261, 40208 150437, 40377 150241, 40393 150083, 40199 149760, 40585 149785, 40728 149752, 40695 149613, 40505 149288, 40890 149314, 41032 149281, 41006 148856, 41390 148767, 41455 148366, 41522 148223, 41288 147910, 41252 147909, 41279 147862, 41295 147898, 41688 147964, 41811 147891, 41812 147756, 41589 147451, 41507 147451, 41612 147245, 41604 147425, 41987 147486, 42320 147229, 42254 147156, 42326 147222, 42506 146937, 42535 146497, 42838 146326, 42849 146006, 43283 145940, 43054 145486, 43539 145451, 43457 145118, 43264 145227, 43048 145457, 42962 145398, 42680 145550, 42693 145188, 42769 144734, 42677 144417, 42524 144312, 42273 144244, 42204 144648, 41881 144798, 41865 145028, 41781 145170, 41734 145588, 41604 145624, 41264 145594, 41383 146102, 41220 146127, 40890 146070, 40957 145758, 41232 145563, 41396 145157, 41265 144417, 41259 144031, 41189 143894, 41270 143611, 41707 143270, 41753 143147, 41503 142801, 41481 142535, 41423 142436, 41372 142148, 41293 141961, 41130 141740, 41052 141406, 40816 141051, 40755 140524, 40923 140221, 41306 140198, 41678 140428, 41920 140749, 41974 140970, 42118 141267, 42297 141421, 42410 141650, 42540 141742, 42588 141899, 42733 142077, 42901 142524, 43088 142581, 43276 142419, 43318 142692, 43565 142805, 43645 143089, 43548 143115, 43286 143088, 43200 142862, 43047 143017, 43091 143141, 43376 143451, 43414 143592, 43194 143784, 43277 144085, 43378 144226, 43539 144633, 43582 144598, 43887 144674, 44002 144544, 44035 144434, 44026 144089, 44438 144027, 44420 143535, 44644 143346, 44711 143070, 44971 142901, 44968 142627, 45029 142540, 45428 142297, 46089 142293, 45516 141839, 45500 141670, 45751 141497, 45670 141272, 45665 141137, 45773 141013, 46200 141131, 46088 140768, 45780 140628, 45731 140479, 45515 140168, 45091 140033, 44753 140032, 45077 140607, 45058 140711, 44746 140816, 44439 140988, 44447 141219, 44337 141325, 44296 141479, 43892 141371, 44138 140679, 44330 140420, 44588 139939, 44694 139684, 44801 139571, 45065 139143, 45481 138553, 46203 138369, 46174 138033, 46015 137687, 45721 137570, 45651 137400, 45687 137293, 45607 136830, 45758 136630, 46151 136821, 46043 136518, 46111 136493, 45929 136161, 46098 135727, 45786 135563, 45678 135454, 45620 135309, 46175 135318, 46146 135527, 46249 135379, 46260 135193, 46144 134939, 46088 134941, 45909 134615, 46072 134203, 46116 134194, 46256 133609, 46109 133397, 46206 133163, 46060 133409, 45872 133204, 45851 133081, 45993 132655, 45970 132557, 46118 132296, 46329 132443, 46280 131801, 46313 131408, 46279 131025, 46185 130664, 46352 130231, 46361 129727, 46325 129462, 46163 129120, 46366 128676, 46354 128292, 46426 128021, 46394 127892, 46128 127891, 46238 128324, 46139 128703, 45825 128677, 45691 128726, 45639 128875, 45368 129174, 45201 129207, 45197 129383, 45015 129656, 44744 130123, 44516 130124, 44637 130313, 44552 130526, 44338 130731, 44266 130722, 44272 130801, 44081 131022, 43977 131269, 44010 131373, 43660 131488, 43780 131865, 43389 131959, 43346 132264, 43057 132455, 43001 132886, 42811 132998, 42630 132990, 42652 133183, 42553 133395, 42350 133593, 42201 133516, 42273 133674, 42097 133892, 42070 134117, 42112 134290, 41934 134331, 41594 134306, 41795 134581, 41844 134768, 41648 134814, 41363 134806, 41455 135061, 41430 135212, 41286 135284, 41044 135301, 41094 135548, 40922 135983, 40951 136094, 40596 136206, 40643 136554, 40284 136665, 40192 136817, 39909 136765, 40025 137004, 39907 137111, 39954 137411, 40303 138091, 40431 138443, 40521 139194, 40548 139239, 40521 139370, 40374 139458, 40131 139385, 39856 139474, 39678 139425, 39674 139039, 39459 138930, 39338 139012, 39194 139557, 39496 139909, 39046 139841, 38913 139883, 38918 140021, 39153 140362, 38737 140298, 38610 140357, 38430 140542, 38740 140626, 38845 140817, 38835 140976, 38684 141034, 38549 140897, 38386 140579, 38170 140801, 38164 141003, 38440 141316, 38455 141466, 38305 141504, 37913 141464, 38131 141787, 38161 141948, 37996 141984, 37574 141777, 37251 141717, 37439 141977, 37812 142263, 37623 142577, 37478 142353, 37260 142252, 36934 142187, 37128 142450, 37189 142820, 37229 142849, 37399 143344, 37209 143381, 36991 143262, 36837 143099, 36582 143099, 36657 143354, 37036 143639, 37079 143814, 36893 143843, 36471 143622, 36110 143543, 36302 143839, 36712 144115, 36709 144305, 36528 144350, 36359 144210, 35906 143947, 35709 143708, 35453 143802, 35420 144120, 35041 144221, 35079 144595, 34707 144699, 34704 145134, 34616 145264, 34361 145262, 34397 145524, 34243 145745, 33932 145728, 34084 145997, 33916 146228, 33600 146204, 33721 146485, 33626 146582, 33546 146943, 33213 147082, 33225 147396, 33103 147585, 32812 147587, 32875 147880, 32791 147995, 32683 148324, 32391 148479, 32344 148776, 32263 148744, 32306 148811, 32023 148935, 32001 149191, 31873 149187, 31925 149303, 31684 149423, 31667 149831, 31599 149887, 31272 149912, 31338 150239, 31302 150340, 31218 150409, 30875 150404, 31000 150719, 30962 150819, 30879 150881, 30531 150882, 30649 151203, 30513 151452, 30221 151396, 30293 151688, 30180 151778, 30125 152142, 29770 152255, 29855 152676, 29431 152741, 29485 153152, 29063 153215, 29095 153652, 28668 153710, 28718 154148, 28635 154233, 28302 154218, 28397 154534, 28283 154694, 27951 154702, 28007 155029, 27914 155256, 27651 155237, 27720 155494, 27570 155576, 27582 155984, 27165 156054, 27252 156486, 26809 156539, 26902 156882, 26886 156974, 26801 157037, 26438 157017, 26530 157372, 26413 157583, 26079 157533, 26157 157862, 26083 157931, 26092 158312, 25724 158418, 25701 158778, 25336 158889, 25372 159315, 24939 159372, 25022 159723, 25010 159817, 24923 159913, 24604 159896, 24689 160202, 24625 160290, 24561 160566, 24392 160497, 24501 160642, 24249 160776, 24184 160994, 23963 160947, 23923 161187, 23823 161230, 23864 161656, 23453 161727, 23512 162166, 23426 162246, 23083 162193, 23104 161848, 23396 161683, 23395 161293, 23769 161189, 23760 160791, 23981 160574, 24148 160316, 24213 159984, 24501 159818, 24609 159507, 24906 159347, 24911 158979, 24868 158922, 24935 158950, 25263 158834, 25271 158492, 25241 158441, 25300 158448, 25582 158314, 25624 157967, 25941 157822, 26022 157487, 26254 157272, 26417 157015, 26533 156711, 26762 156505, 26908 156238, 27118 156017, 27235 155628, 27445 155475, 27498 155117, 27821 154979, 27860 154637, 28074 154423, 28170 154208, 28436 153927, 28754 153371, 28990 153161, 28971 152783, 29302 152651, 29356 152327, 29665 152173, 29720 151806, 29922 151562, 30246 151043, 30458 150832, 30606 150574, 30799 150346, 30883 150000, 31181 149834, 31203 149443, 31522 149304, 31523 148950, 31866 148829, 31899 148492, 32132 148270, 32304 147997, 32428 147678, 32688 147479, 32744 147141, 32716 147076, 32782 147087, 33060 146949, 33104 146655, 33049 146539, 33180 146542, 33402 146421, 33445 146102, 33515 146092, 33715 145931, 33803 145633, 34062 145229, 34195 145115, 34298 144806, 34610 144629, 34523 144459, 34768 144387, 34974 144464, 34925 144146, 34959 143859, 35017 143862, 34971 143816, 35190 143598, 35384 143163, 35590 143080, 35676 142848, 35922 142563, 35952 142385, 36088 142201, 36247 142093, 36270 141910, 36364 141813, 36464 141527, 36760 141288, 36797 140990, 36741 140867, 36881 140870, 37144 140783, 37124 140513, 37068 140402, 37196 140409, 37462 140312, 37442 139943, 37791 139822, 37916 139485, 37949 139124, 37808 138992, 37991 139062, 38306 138967, 38125 138692, 38288 138625, 38662 138798, 38602 138489, 38631 138267, 38707 138224, 38687 138147, 38898 137983, 38953 137685, 38938 137562, 39067 137477, 39368 137515, 39389 137178, 39636 136926, 39665 136715, 39639 136603, 39759 136596, 40037 136182, 40115 135817, 40083 135759, 40139 135790, 40485 135689, 40495 135325, 40313 135151, 40556 135225, 40758 135091, 40804 134852, 40653 134709, 40854 134774, 41039 134616, 41134 134375, 41116 134326, 41160 134344, 41448 134187, 41751 133540, 41896 133390, 42097 132930, 42435 132467, 42397 132340, 42539 132343, 42669 132180, 42742 131995, 42616 131835, 42823 131864, 42973 131724, 43019 131387, 43281 131168, 43304 131066, 43568 130606, 43388 130428, 43636 130481, 43801 130347, 43795 130156, 43605 129929, 43904 129974, 44094 129892, 44147 129672, 44107 129536, 44231 129574, 44446 129400, 44464 128917, 44736 128646, 45001 128164, 45079 128181, 45337 127936, 45449 127764, 45583 127340, 45514 127020, 45601 126559, 45710 126404, 45990 125678, 45845 125361, 46150 125435, 46524 125322, 46735 125318, 46891 125248, 46994 125088, 47200 124959, 47051 124833, 47012 124622, 47332 123974, 47551 123712, 47636 124064, 47612 124395, 47862 124128, 47948 123978, 47899 123704, 47588 123688, 47848 123507, 47809 123241, 48226 122573, 48401 122692, 48180 123139, 48348 123290, 48552 123258, 48582 123030, 49060 122106, 48949 121956, 48769 121814, 48842 121560, 49093 121400, 49357 121705, 49400 121685, 49526 121284, 49597 121201, 49511 121126, 49365 120875, 49462 120651, 49683 120493, 49754 120770, 49897 120977, 50075 120840, 50111 120672, 50092 120298, 50293 119758, 50309 119455, 50552 118804, 50523 118620, 50712 118324, 50902 117773, 51108 117446, 51379 117246, 51510 117575, 51517 117961, 51449 118367, 51490 118548, 51632 118705, 51703 119073, 51913 119241, 52174 119720, 52266 119918, 52518 120220, 52747 120204, 52902 120084, 53122 120235, 52899 120400, 52921 120677, 52607 121083, 52419 120554, 52090 120510, 52030 120145, 51884 120043, 51747 120083, 51541 120042, 51332 120133, 51295 120347, 51204 120546, 51014 120678, 50859 120682, 50848 120857, 50589 121474, 50352 121769, 50063 122035, 49944 122268, 49676 122729, 49629 122904, 49445 123056, 49316 123078, 49294 123221, 49148 123421, 48978 123837, 48379 124456, 48045 125115, 48247 125384, 48522 125372, 48465 125595, 48696 125636, 48722 125699, 49504 125424, 49740 125426, 49729 125598, 49922 125637, 49973 125734, 50683 125475, 51119 125379, 51328 125378, 51370 125669, 51685 125623, 51716 125654, 52431 125418, 52730 125382, 52774 125564, 52916 125456, 53103 125610, 53852 125381, 54198 125365, 54361 125677, 55145 125393, 55431 125345, 55889 125188, 56038 125250, 56065 125485, 56292 125407, 56410 125441, 56650 125267, 56842 124761, 57158 124609, 57469 123748, 57586 123662, 57714 123400, 57990 123218, 58250 122759, 58316 122687, 58422 122362, 58563 122232, 58646 122048, 58806 121989, 59114 121369, 59204 121281, 59334 120967, 59561 120795, 59610 120702, 59690 120667, 60008 119990, 60333 119818, 60553 119361, 60834 118896, 60938 118614, 61094 118437, 61163 118287, 61281 118270, 61465 118078, 61716 117491, 61734 117122, 61801 117080, 61683 116724, 61502 116386, 61243 115807, 61128 115713, 61060 115437, 61066 115267, 61160 115194, 61444 115178, 61523 114830, 61592 114694, 61497 114342, 61378 113623, 61571 113222, 61856 113438, 62189 113437, 62461 113595, 62773 114101, 63065 114408, 63100 114495, 63338 114735, 63280 114348, 63292 113958, 63198 113596, 63208 113205, 63248 113111, 63610 113484, 63790 113605, 63881 113797, 63865 114139, 63828 114198, 63879 114212, 64146 113724, 64300 113404, 64437 113257, 64451 112935, 64662 112807, 64460 112758, 64399 112491, 64248 112144, 64176 111813, 64013 111417, 64362 110612, 64355 110177, 64265 109919, 64286 109761, 64205 109229, 63927 108435, 64121 108622, 64333 108918, 64580 109126, 64683 109313, 64955 109626, 65204 110078, 65439 110315, 65767 110778, 65887 110856, 66091 110595, 66354 110516, 66426 110428, 66971 109142, 67304 108987, 67666 108123, 67868 107716, 68206 107630, 68557 106719, 68909 106627, 69127 106156, 69469 105309, 69830 105183, 70092 104527, 70164 104281, 70381 103893, 70736 103755, 71007 102927, 71354 102671, 71631 102297, 71957 101514, 72324 101447, 72552 100953, 72626 100668, 72538 100569, 72817 100144, 73198 100022, 73597 99116, 73792 98745, 74099 98656, 74284 98158, 74484 97723, 74863 97584, 75067 97162, 75204 96738, 75442 96435, 75710 96262, 75960 95755, 76329 94963, 76621 94885, 77005 93991, 77388 93827, 77781 93010, 77992 92872, 78050 92754, 78153 92712, 78589 91933, 78720 91630, 78839 91477, 78859 91160, 79028 91037, 78871 90928, 78732 90731, 78677 90577, 78338 90063, 78274 89693, 78140 89295, 78212 89205, 78439 89084, 78466 88866, 78608 88688, 78536 88071, 78526 87750, 78617 87662, 78655 87448, 79177 87641, 79385 87768, 79521 87602, 79581 87785, 79745 87824, 79979 87811, 80102 87329, 80218 87223, 80250 87099, 80362 87095, 80620 87347, 80928 87386, 81115 87683, 81346 87440, 81668 87230, 81710 87111, 81678 86822, 81393 86505, 81274 86145, 81099 85911, 80908 85434, 80970 85125, 81171 84913, 81591 84843, 81481 84518, 81505 84440, 81349 84159, 81323 83774, 81224 83555, 81373 83369, 81378 83311, 81434 83307, 82465 84233, 82768 84665, 82979 84878, 83214 84851, 83185 84481, 83518 84355, 83507 83999, 83839 83873, 83798 83497, 84160 83392, 84115 83014, 84272 82955, 84410 82842, 84433 82505, 84806 82375, 84729 81997, 84752 81962, 85137 81900, 85085 81512, 85355 81348, 85364 81048, 85448 80712, 85726 80466, 85886 80135, 86019 79713, 86265 79534, 86409 79231, 86689 78877, 86768 78830, 86771 78741, 86890 78545, 86992 78247, 87334 77847, 87457 77806, 87441 77677, 87514 77495, 87660 77360, 87829 77021, 87985 76863, 88001 76795, 88069 76754, 88623 75779, 88818 75637, 88927 75371, 89228 75239, 89363 74974, 89285 74879, 89251 74910, 88898 74902, 88554 74696, 88473 74597, 88369 74625, 88086 74603, 87944 74666, 87694 74578, 87315 74644, 87168 74800, 86954 74854, 86860 74954, 86226 75230, 85738 75348, 85795 75735, 85515 75736, 85002 75861, 84746 76025, 84658 76311, 84429 76344, 83935 76519, 83754 76737, 83754 76822, 83658 76781, 83200 76830, 83112 76977, 83115 77116, 82793 77233, 82233 77373, 81764 77567, 81492 77647, 81129 77849, 81018 77870, 80828 78024, 80817 78072, 80482 78183, 80526 78479, 80461 78693, 80221 78693, 80333 78912, 80198 79023, 80132 79155, 79888 79153, 79959 79385, 79856 79479, 79868 79835, 79501 79926, 79601 80252, 79713 80425, 79614 80642, 79630 80715, 79849 80983, 79881 81240, 79640 81402, 79591 81388, 79777 81867, 79700 81868, 79284 81638, 79048 81744, 79016 82012, 79380 82280, 79298 82308, 78969 82216, 78734 82518, 78978 82764, 78639 82679, 78453 82990, 78596 83232, 78304 83093, 78065 83218, 78022 83487, 78174 83640, 77974 83553, 77737 83690, 77790 83937, 78029 84238, 77659 84124, 77416 84170, 77488 84407, 77662 84688, 77336 84639, 77098 84654, 77290 85135, 77005 85085, 76756 85122, 76815 85368, 77156 85679, 77180 85762, 77092 85776, 76679 85565, 76428 85621, 76485 85864, 76822 86162, 76841 86236, 76764 86247, 76361 86118, 76114 86127, 76175 86360, 76422 86601, 76479 86707, 76436 86716, 75849 86452, 75607 86288, 75351 86318, 75420 86713, 75271 86695, 74943 86742, 75027 87150, 74616 87225, 74722 87647, 74267 87692, 74382 88122, 73941 88179, 74052 88606, 73966 88648, 73629 88681, 73733 89000, 73422 89482, 73091 89649, 73000 89976, 72898 90081, 72741 90505, 72573 90809, 72488 90785, 72483 90893, 72217 91040, 72113 91382, 71898 91897, 71810 91966, 71541 92034, 71236 92785, 71002 93089, 70815 93064, 70735 93310, 70609 93419, 70534 93753, 70455 93871, 70048 94745, 69688 94832, 69606 95170, 69377 95717, 69238 95848, 69014 95841, 68757 96566, 68628 96701, 68391 97113, 68112 97263, 68024 97542, 67922 97661, 67789 97994, 67543 98530, 67442 98615, 67182 98652, 67103 98958, 67012 99070, 66845 99506, 66645 99795, 66561 99772, 66526 99891, 66290 100061, 66188 100372, 65929 100903, 65793 101098, 65624 101113, 65568 101316, 65395 101455, 65280 101783, 65037 102340, 64885 102508, 64681 102470, 64627 102738, 64482 102852, 64369 103196, 64108 103683, 63749 103812, 63422 104716, 63297 104824, 63023 104777, 62908 105147, 62852 105207, 62722 105705, 62630 105998, 62894 106702, 63153 106862, 63219 107001, 63235 107280, 62987 107287, 62854 107100, 62865 106744, 62561 107180, 62508 107523, 62020 107442, 61972 107730, 61728 108413, 61608 108604, 61740 108724, 61768 108949, 61516 109505, 61379 109632, 61269 109050, 60951 109294, 60873 109581, 60942 109889, 61018 109930, 60938 109999, 60790 110379, 60585 110863, 60535 110905, 60473 110854, 60536 110780, 60665 110413, 60487 110190, 60232 110275, 60113 110803, 59939 111236, 59695 111343, 59551 111309, 59516 111504, 59345 111690, 59201 112158, 58978 112343, 58766 112023, 58674 112009, 58653 112127, 58406 112277, 58212 112613, 58152 112560, 58157 112651, 57871 112813, 57759 113148, 57671 113232, 57494 113681, 57315 114009, 57114 113773, 56985 114136, 56928 114153, 56840 114563, 56597 115057, 56490 115219, 56382 115076, 56599 114316, 56925 114149, 57218 113297, 57425 112785, 57539 112629, 57704 112544, 57842 112350, 57972 112277, 58099 111784, 58333 111438, 58675 111287, 58757 110937, 58969 110491, 58976 110351, 59328 110217, 59541 109851, 59711 109411, 59969 109115, 60184 108608, 60437 108439, 60779 107669, 60765 107536, 60870 107565, 61137 107430, 61237 107156, 61469 106704, 61488 106555, 61669 106414, 61809 106362, 61884 106204, 62048 106030, 62168 105738, 62416 105282, 62420 105217, 62726 105004, 62866 104771, 62757 104641, 62751 104132, 63120 104224, 63333 103841, 63647 103635, 64018 102810, 64222 102487, 64545 102243, 64658 101954, 64951 101486, 64936 101414, 65027 101347, 65264 101013, 65460 100856, 65863 100067, 66203 99592, 66377 99453, 66513 99120, 66178 98940, 66334 98782, 66363 98505, 66688 98552, 66779 98600, 67066 98457, 67196 98157, 67442 97702, 67448 97599, 67754 97391, 68092 96749, 68380 96282, 68607 95832, 68903 95654, 69201 94894, 69212 94759, 69582 94650, 69800 94251, 69976 93799, 70484 93230, 70587 92964, 70873 92498, 71078 92053, 71066 91968, 71134 91991, 71410 91818, 71605 91448, 71722 91102, 71727 90972, 71839 90970, 72095 90860, 72434 90132, 72661 89682, 72648 89619, 72703 89621, 72977 89426, 73095 89175, 73363 88855, 73498 88595, 73700 88374, 73823 88102, 73848 87772, 73776 87718, 73855 87757, 74112 87588, 74158 87269, 74366 87056, 74509 86800, 74751 86614, 74842 86321, 75052 86118, 75172 85910, 75414 85663, 75586 85342, 75753 85195, 75831 84986, 75890 84935, 75892 84867, 76051 84683, 76151 84452, 76400 84186, 76416 83886, 76045 83614, 76455 83800, 76693 83674, 76742 83404, 76493 83186, 76788 83356, 77054 83222, 77088 82926, 76818 82710, 77116 82887, 77368 82740, 77440 82448, 77383 82402, 77447 82439, 77697 82269, 77769 81978, 77711 81932, 77775 81971, 78020 81796, 78084 81513, 77892 81361, 78102 81489, 78338 81321, 78351 81060, 78077 80795, 78424 80965, 78699 80838, 78675 80543, 78386 80310, 78744 80431, 79000 80292, 79000 80005, 78699 79770, 79064 79897, 79354 79822, 79306 79528, 78978 79218, 78848 79262, 78973 79173, 79389 79407, 79628 79318, 79632 79063, 79392 78802, 79719 78942, 79941 78842, 79980 78596, 79874 78447, 80051 78504, 80310 78408, 80284 78140, 79913 78126, 79601 78254, 79207 78320, 78862 78307, 78495 78475, 78090 78328, 77955 78416, 77909 78599, 77741 78644, 77503 78511, 77333 78476, 76820 78521, 76577 78635, 76490 78634, 76402 78919, 76238 79022, 76065 79028, 76124 79193, 76079 79388, 75729 79527, 75782 79695, 75741 79889, 75589 80020, 75403 80067, 75460 80241, 75425 80432, 75263 80507, 75018 80523, 75115 80938, 74695 80991, 74795 81409, 74623 81581, 74533 81575, 74570 81658, 74462 81873, 74295 82050, 74210 82046, 74238 82126, 73966 82515, 73882 82516, 73911 82597, 73638 82987, 73553 82987, 73587 83066, 73309 83445, 73196 83456, 73245 83555, 73134 83775, 72983 83943, 72837 83958, 72892 84090, 72809 84293, 72663 84467, 72532 84469, 72576 84591, 72411 85023, 72437 85100, 72355 85103, 72163 85263, 72097 85495, 72123 85584, 72029 85591, 71839 85740, 71752 85974, 71774 86045, 71699 86048, 71486 86200, 71424 86509, 71162 86681, 71059 86962, 70845 87169, 70713 87431, 70505 87654, 70422 87957, 70178 88152, 70088 88445, 69853 88639, 69913 89027, 69752 89045, 69542 89131, 69584 89509, 69425 89528, 69216 89616, 69204 89844, 69239 89981, 68860 90081, 68869 90333, 68811 90469, 68467 90626, 68208 91289, 67924 91755, 67889 91859, 67614 92110, 67586 92235, 67399 92455, 67230 92871, 67048 93012, 66897 93037, 66861 93210, 66695 93431, 66593 93670, 66371 94119, 66317 94292, 66134 94416, 65977 94447, 65926 94628, 65786 94834, 65618 95279, 65360 95558, 65142 96006, 64885 96268, 64693 96653, 64456 96973, 64179 97250, 64108 97453, 63799 98093, 63580 98287, 63484 98289, 63457 98407, 63274 98651, 63205 98864, 62769 99521, 62560 99662, 62509 99829, 62285 100278, 61994 100746, 61964 100827, 61669 101067, 61619 101236, 61463 101463, 61284 101891, 61057 102231, 60771 102476, 60726 102644, 60564 102859, 60370 103268, 60131 103601, 59835 103829, 59471 104666, 59279 104871, 59183 104915, 59165 105010, 58967 105284, 58896 105471, 58612 105937, 58574 106077, 58277 106306, 58237 106427, 58040 106637, 57870 107078, 57662 107450, 57339 107630, 57289 107850, 57002 108493, 56792 108641, 56660 108643, 56618 108809, 56446 109020, 56283 109471, 55796 110063, 55763 110206, 55149 111046, 55057 111046, 55093 111165, 54918 111601, 54739 111901, 54466 112068, 54283 111621, 53961 111087, 53952 110845, 53872 110725, 53693 110678, 53332 110313, 53381 110472, 53115 110638, 53065 110946, 52785 111411, 52561 111950, 52215 112089, 52082 112517, 51884 112870, 51572 113104, 51511 113310, 51346 113528, 51151 113945, 50940 114261, 50649 114467, 50578 114729, 50290 115196, 50066 115645, 50042 115752, 49679 115868, 49567 116299, 49390 116681, 49047 116850, 48923 117121, 48671 117578, 48439 118029, 48434 118074, 48128 118259, 48069 118518, 47780 118984, 47433 119476, 47132 119666, 47044 120102, 46553 120871, 46272 121137, 45929 121818, 45924 121913, 45580 122047, 45551 122309, 45488 122467, 45325 122635, 45169 122626, 45168 122802, 45016 122973, 44947 123250, 44577 123772, 44408 124172, 44399 124309, 44020 124404, 43929 124811, 43764 125153, 43440 125428, 43152 125835, 42871 125863, 42992 126112, 42948 126271, 42757 126560, 42488 126775, 42464 127032, 42514 127191, 42050 127241, 42166 127617, 41770 127708, 41824 128091, 41467 128209, 41470 128467, 41302 128901, 41348 128996, 41239 129002, 40994 129108, 40901 129250, 40695 129252, 40792 129428, 40610 129707, 40394 129713, 40495 129897, 40365 130056, 40330 130495, 39925 130565, 39967 130994, 39797 131046, 39517 131051, 39642 131294, 39669 131462, 39206 131510, 39327 131768, 39284 131926, 39129 132056, 38922 132043, 38941 132262, 38837 132424, 38777 132694, 38829 132820, 38416 132897, 38471 133255, 38132 133381, 38142 133744, 37792 133869, 37741 134279, 37605 134345, 37360 134374, 37358 134634, 37301 134773, 37169 134912, 36983 134925, 37001 135119, 36884 135285, 36838 135551, 36879 135680, 36473 135759, 36491 136105, 36156 136227, 36149 136575, 35821 136719, 35844 136987, 35800 137143, 35652 137268, 35446 137262, 35471 137477, 35410 137628, 35292 137742, 35065 137746, 35152 137952, 35090 138101, 34972 138208, 34739 138216, 34824 138429, 34734 138584, 34658 138955, 34318 139085, 34333 139491, 33904 139557, 34003 139964, 33585 140038, 33654 140300, 33636 140444, 33491 140611, 33338 140613, 33362 140768, 33220 140941, 33107 141226, 33122 141272, 32815 141416, 32815 141764, 32486 141894, 32439 142220, 32147 142395, 32109 142786, 31985 142882, 31768 142917, 31804 143134, 31751 143295, 31617 143402, 31401 143411, 31469 143613, 31406 143768, 31278 143877, 31056 143886, 31124 144095, 30896 144489, 30815 144482, 30829 144564, 30624 144738, 30573 145021, 30600 145117, 30221 145216, 30305 145630, 29882 145700, 29932 146114, 29517 146182, 29530 146608, 29397 146674, 29140 146695, 29136 147087, 29026 147227, 28847 147248, 28868 147427, 28676 147675, 28486 147724, 28501 147916, 28403 148041, 28319 148382, 28012 148539, 28002 148939, 27892 149048, 27675 149078, 27736 149288, 27643 149457, 27503 149570, 27271 149560, 27325 149789, 27141 150187, 27073 150175, 27098 150238, 26888 150412, 26785 150663, 26720 150662, 26746 150722, 26538 150912, 26492 151278, 26131 151389, 26171 151808, 26024 151878, 25775 151892, 25836 152135, 25803 152287, 25665 152359, 25419 152381, 25474 152622, 25430 152774, 25294 152920, 25105 152914, 25146 153099, 25038 153258, 24951 153583, 24649 153736, 24677 154136, 24304 154238, 24300 154620, 23915 154714, 23960 154975, 23940 155126, 23800 155238, 23583 155241, 23631 155453, 23438 155900, 23166 156080, 23172 156471, 22797 156572, 22780 156964, 22089 156891, 22096 156834, 21811 156510, 22079 156115, 21751 156033, 22130 155726, 22312 155687, 21437 155357, 21606 155241, 21213 154979, 21671 154823, 22703 154562, 22683 153811, 23054 153981, 23059 153675, 23426 153602, 23674 153763, 23456 153563, 23432 153199, 23284 153222, 23281 152914, 23442 153180, 23805 153124, 24028 153254, 23850 153067, 23800 152701, 23563 152635, 23799 152586, 23879 152284, 23876 151586, 24112 151606, 24545 151548, 24558 151331, 24995 151279, 24947 151216, 24917 150840, 25287 150782, 25398 150818, 25333 150722, 25279 150355, 25647 150303, 25844 150397, 25685 150239, 25652 149897, 25393 149930, 25400 149656, 25662 149540, 25692 149849, 26025 149796, 26267 149952, 26071 149745, 26036 149417, 25722 149452, 25494 148935, 26045 149108, 26063 148985, 26442 148888, 26442 148485, 26901 148450, 26854 148367, 26796 147997, 27173 147930, 27344 148016, 27206 147884, 27151 147529, 26950 147565, 26986 147182, 27164 147508, 27525 147452, 27840 147633, 27570 147396, 27538 147056, 27012 146882, 27555 146653, 27930 146541, 27916 146142, 28287 146083, 28407 146123, 28333 146024, 28270 145663, 28636 145603, 28756 145641, 28661 145546, 28655 145163, 29024 145104, 29153 145164, 29070 145046, 29051 144666, 29420 144609, 29605 144714, 29484 144546, 29399 144206, 29168 144244, 29151 144011, 29369 143803, 29265 143303, 29756 143432, 29770 143309, 29868 143277, 29887 142993, 30150 142990, 30175 142817, 30586 142747, 30557 142701, 30881 142238, 31068 142353, 30890 142222, 30848 141850, 31220 141800, 31588 141996, 31257 141733, 31247 141351, 31614 141269, 31818 141422, 31636 141242, 31647 140871, 31525 140884, 31547 140782, 31636 140709, 31622 140479, 31716 140445, 31688 140173, 31962 140162, 31972 140013, 32323 139962, 32378 139876, 32360 139507, 32708 139537, 32775 139441, 32760 138998, 33124 138960, 33252 139002, 33174 138882, 33091 138520, 33466 138474, 33793 138634, 33511 138403, 33417 138082, 33126 138120, 32896 137582, 33438 137777, 33451 138032, 33789 137993, 34081 138135, 33834 137926, 33823 137543, 33887 137163, 34207 137313, 34277 137077, 34190 136668, 34563 136590, 34651 136623, 34584 136557, 34508 136193, 34880 136119, 34967 136149, 34904 136082, 34923 135692, 35283 135648, 35400 135689, 35338 135575, 35337 135198, 35182 135229, 35191 135051, 35353 135066, 35394 134794, 35759 134695, 35813 134285, 36178 134236, 36376 134356, 36238 134166, 36135 133813, 36509 133762, 36808 133896, 36544 133694, 36441 133337, 36816 133267, 37067 133392, 36842 133226, 36862 132834, 36820 132842, 36874 132751, 36864 132831, 37231 132779, 37502 132981, 37327 132705, 37306 132337, 37342 132313, 37249 131969, 37609 131881, 37547 131493, 37760 131423, 37706 131192, 37939 131148, 37966 130980, 38327 130933, 38457 130994, 38369 130868, 38401 130474, 38764 130423, 39004 130597, 38821 130357, 38702 130004, 39083 129945, 39387 130085, 39117 129888, 38999 129543, 38849 129573, 38875 129413, 39011 129440, 39004 129532, 39378 129483, 39623 129581, 39442 129411, 39431 129040, 39313 129059, 39276 128870, 39495 128645, 39681 128959, 39815 128934, 39900 128543, 39803 128155, 40170 128066, 40330 128144, 40183 128045, 40088 127686, 40509 127614, 40523 127184, 40452 127196, 40533 127129, 40527 127176, 40881 127171, 41059 127240, 40935 127064, 40963 126708, 40711 126737, 40333 126299, 40933 126503, 40911 126317, 41090 126246, 40977 126040, 41196 125947, 41178 125843, 41341 125789, 41225 125410, 41623 125279, 41555 125730, 41920 125681, 42177 125785, 41957 125621, 42070 124820, 42488 124766, 42344 124353, 42726 124285, 42986 124400, 42748 124241, 42622 123892, 42997 123825, 43043 123772, 43057 123444, 42546 123213, 43137 123050, 43128 123362, 43427 123341, 43561 123407, 43481 123265, 43610 122474, 43585 122460, 43621 122422, 43618 122452, 43980 122396, 44076 122444, 44017 122342, 44084 121941, 44189 121908, 44171 121782, 43937 121257, 44505 121202, 44726 121367, 45035 120900, 45071 120537, 44717 120612, 44687 120698, 44447 120520, 44503 120271, 44715 119904, 44906 120006, 44904 120162, 45131 120285, 45185 120094, 45647 120091, 45595 119951, 46071 119082, 46196 119135, 46288 119006, 46681 118717, 46569 118542, 46655 118144, 46803 117844, 46678 117736, 46786 117368, 46872 117295, 47051 116795, 47168 117215, 47434 117265, 47536 117186, 47737 116287, 47977 115840, 48224 115960, 48363 115769, 48591 115299, 48935 115180, 48699 114858, 48989 115044, 49282 114846, 49249 114409, 49697 114510, 49883 114317, 49947 114127, 49883 113997, 49654 113909, 49752 113684, 49871 113624, 50022 113344, 50274 112493, 50638 112399, 50867 112712, 50862 112779, 50929 112695, 50886 112700, 50648 112383, 51075 111498, 51098 111541, 51583 110951, 51720 110540, 51962 110086, 52146 109687, 52456 109639, 52502 109561, 52638 109614, 52567 109532, 52503 109544, 52787 108702, 53157 108600, 53458 107738, 53660 107306, 54016 107213, 54218 106754, 54542 105900, 54906 105798, 55275 104920, 55645 104819, 56148 103523, 56524 103420, 56639 103132, 56554 103011, 56782 102774, 57061 102110, 57386 102009, 57383 101920, 57439 101973, 57773 101129, 58149 101028, 58685 99735, 59046 99619, 59376 98796, 59332 98717, 59419 98693, 59584 98316, 59946 98241, 60279 97362, 60246 97348, 60267 97298, 60303 97303, 60479 96912, 60848 96794, 61385 95497, 61728 95408, 61908 94984, 61879 94962, 61943 94900, 62284 94098, 62637 94003, 62811 93545, 63183 93446, 63510 92581, 63891 91709, 64251 91616, 64220 91221, 64595 91117, 64541 90734, 64914 90634, 64871 90254, 65112 90180, 64828 89959, 64518 89948, 64479 89645, 64779 89567, 64966 89826, 65213 89938, 65193 89759, 65565 89645, 65551 89544, 65132 89188, 65379 88903, 65369 88814, 65456 88785, 65680 89216, 65894 89163, 65845 88779, 66222 88683, 66173 88300, 66551 88205, 66499 87820, 66873 87724, 66625 87293, 66817 87278, 66940 87312, 67201 87247, 67154 86869, 67327 86823, 67077 86468, 67510 86636, 67483 86396, 67780 86289, 67704 86178, 67835 86144, 67804 85882, 68179 85752, 68128 85366, 68503 85274, 68455 84891, 68831 84801, 68789 84423, 69160 84330, 69072 83571, 69236 83523, 69211 83321, 69268 83124, 69118 82908, 69358 82854, 69688 83379, 69807 83333, 69761 82950, 70131 82801, 70079 82413, 70384 82277, 70435 82173, 70368 81565, 70737 81491, 70692 81095, 71064 81009, 71023 80630, 71397 80543, 71353 80169, 71722 80085, 71677 79703, 72072 79612, 72007 79244, 72372 79093, 72346 78703, 72690 78542, 72652 78139, 73397 77980, 73301 77214, 73681 77141, 73630 76756, 74010 76685, 73960 76302, 74290 76236, 74326 76151, 74289 75847, 74667 75784, 74620 75398, 75345 75012, 75329 74888, 74936 74629, 75270 74416, 75250 74241, 75507 74193, 75520 74093, 75619 74109, 75581 73790, 75904 73731, 75636 73136, 75893 73218, 76287 73273, 76246 72895, 76622 72829, 76576 72451, 76954 72386, 76903 72002, 77287 71942, 77237 71563, 77610 71335, 77549 70989, 77504 70990, 77498 70581, 77575 70947, 77907 70756, 77863 70363, 78241 70302, 78192 69917, 78570 69860, 78523 69479, 78903 69421, 78808 68675, 78761 68663, 78750 68574, 78849 68651, 79195 68601, 79150 68231, 79521 68175, 79494 67807, 79853 67743, 80071 67589, 80108 67462, 80198 67402, 80163 67118, 80404 66950, 80330 66807, 80505 66764, 80472 66489, 80852 66439, 80805 66056, 81041 66024, 81148 65720, 81136 65624, 81335 65368, 81419 65158, 81502 65155, 81806 64771, 82158 64512, 82113 64131, 82464 63868, 83473 62574, 83432 62202, 83753 61793, 83753 61782, 84441 60932, 84391 60574, 85077 59989, 85376 59613, 85405 59527, 85372 59187, 85913 58509, 85793 58165, 86115 58231, 86710 57583, 87085 57139, 86994 56761, 87344 56466, 87701 56111, 87653 55739, 88314 54933, 89017 54108, 88945 53799, 88710 53884, 88924 53632, 89046 53628, 89457 53147, 89436 52970, 89592 52789, 89773 52806, 89962 52619, 89914 52239, 90259 51889, 90909 51129, 90882 51104, 90928 51081, 90892 50722, 91559 49947, 92249 49196, 92201 48820, 92534 48456, 92896 46537, 93135 45885, 93274 45832, 93915 45830, 94437 45851, 94824 45830, 95063 46013, 95473 45629, 99087 45628) (143176 214170, 143101 214582, 143307 214236, 143295 214045, 143080 213805) (148068 213383, 148076 213601, 147968 214050, 148426 214061, 148793 213405, 148359 213075) (144676 213608, 144677 213926, 144905 213970, 144846 213711, 144909 213384) (148802 210301, 148740 210555, 148923 210390, 148917 210148, 148762 210131) (145180 209356, 145037 209868, 145189 210129, 145253 210139, 145114 209760, 145239 209287) (155600 209489, 155731 209728, 155803 209579, 155857 209278) (155588 208940, 155851 209008, 155784 208741, 155703 208627) (148541 207104, 148535 207485, 148713 207395, 148676 207235, 148724 207017) (155679 204372, 155689 204701, 155825 204500, 155860 204252) (155601 201072, 155748 201322, 155870 200999, 155646 200780) (155572 200305, 155641 200567, 155853 200228, 155699 199919) (128324 199634, 128234 200049, 128475 199744, 128437 199603, 128511 199343, 128245 199340) (155529 199377, 155697 199845, 155833 199458, 155866 199216) (121190 199160, 121198 199362, 121436 199587, 121345 199219, 121411 198810) (155517 198935, 155860 198910, 155805 198653, 155699 198472) (130227 198243, 130242 198409, 130405 198566, 130318 198312, 130362 198087) (128414 197670, 128231 197868, 128283 198240, 128524 198349, 128418 198057, 128557 197596) (131709 195216, 131716 195481, 131855 195564, 131764 195780, 131802 195966, 131728 196386, 132070 197055, 131745 197863, 131753 197969, 131941 198237, 131828 197898, 132074 197051, 131747 196364, 132039 195901, 132112 195640, 132089 195500, 132255 195067) (155499 197838, 155693 198192, 155789 197957, 155825 197697) (121129 197605, 121123 197886, 121334 197957, 121288 197685, 121411 197139) (124642 196588, 124760 196734, 124666 196965, 124706 197227, 124824 197155, 125005 196794, 125033 196438, 124959 196291, 124666 196263) (128170 196186, 128158 196281, 128234 196557, 128189 196833, 128480 196816, 128462 196495, 128599 196309, 128576 195912) (130113 195267, 130122 195398, 130394 195651, 130395 195189) (104353 195349, 104482 195523, 104782 195376, 104876 195268, 104845 195211) (128199 195015, 128201 195125, 128329 195368, 128545 195442, 128546 195309, 128471 195322, 128246 194998) (177330 188306, 177371 188515, 177312 188772, 177326 189690, 177391 189949, 177317 190298, 177351 190459, 177305 190772, 177375 191156, 177307 191246, 177357 191460, 177250 191750, 177263 192250, 177324 192791, 177423 193028, 177380 193164, 177386 193409, 177437 193537, 177149 194091, 177090 194406, 177495 194684, 177589 194691, 177813 194597, 177858 194196, 177818 194155, 177785 193828, 177558 193504, 177654 193197, 177634 192707, 177559 192478, 177658 192167, 177610 191939, 177634 191657, 177557 191259, 177578 191172, 177500 190914, 177596 190583, 177557 190402, 177608 190110, 177532 189634, 177394 189284, 177568 188549, 177564 188124) (174621 193971, 174571 194413, 174731 194665, 175180 194542, 175146 193934) (170728 193079, 170795 193419, 170733 193823, 170528 194267, 170606 194305, 170689 194641, 171295 194445, 171256 194067, 171121 193717, 171127 193635, 170946 193377, 171137 193097, 171151 192856, 170913 192849) (172355 194245, 172312 194553, 172708 194480, 172790 194522, 172996 194366, 172519 194228) (166988 186294, 166942 186721, 167149 187441, 167015 187837, 166934 188274, 166994 188695, 167130 188997, 166916 189715, 166913 189957, 166978 190201, 167140 190544, 167057 190918, 166948 190985, 166868 191174, 166947 191372, 166866 191687, 166790 192190, 166867 192558, 166840 192724, 166909 192934, 166910 193398, 166645 194169, 166698 194542, 167076 194474, 167159 194518, 167370 194358, 167371 193944, 167193 193705, 167030 193674, 167051 193282, 167166 193014, 167201 192644, 167161 192476, 166907 192159, 167038 191796, 167119 191713, 167157 191491, 167125 191324, 167248 190566, 167199 190005, 167126 189772, 167213 189017, 167152 188602, 167208 188398, 167082 188233, 167165 187965, 167124 187835, 167155 187443, 166950 186719, 167110 186391, 167115 185868) (57360 192252, 57298 192742, 57323 192770, 57448 193411, 57316 193900, 57196 194090, 57149 194333, 57420 194466, 57847 194530, 57979 194301, 57805 193855, 57691 193797, 57682 193617, 57558 193160, 57819 192977, 57420 192708, 57829 192249, 57846 191965, 57805 191827, 57420 191575) (165290 184073, 164827 184880, 164791 184986, 164453 185556, 164463 185850, 164402 186257, 164651 186575, 164403 187010, 164390 187662, 164391 188197, 164361 188592, 164432 188961, 164385 189473, 164730 189655, 164410 190039, 164378 190523, 164434 190983, 164810 191183, 164441 191582, 164457 192900, 164564 193377, 164521 193588, 164263 194046, 164563 194352, 164963 194288, 165032 194350, 165261 194321, 165402 194510, 165581 194460, 165670 193944, 165418 192540, 165588 191822, 165614 191397, 165185 191080, 165466 190228, 165299 189498, 165299 188978, 165345 188635, 165326 188512, 165298 187948, 165362 187278, 165334 187009, 165315 186393, 165409 186049, 165425 185587, 165517 185141, 165136 184891, 165506 184436, 165447 184030, 165488 183604) (39449 193702, 39335 194021, 39332 194178, 39436 194509, 39867 194249, 39744 193950, 39694 193691, 39453 193262) (35693 185464, 35733 186248, 35666 187042, 35756 187792, 35653 188210, 35631 188488, 35687 188898, 35661 188982, 35742 189347, 35639 189763, 35652 190416, 35606 190547, 35663 190919, 35641 191313, 35587 191530, 35649 191955, 35577 192106, 35616 192482, 35585 192878, 35606 193648, 35284 194124, 35480 194459, 35906 194503, 36146 194276, 36080 193913, 35815 193591, 35848 193194, 35951 192536, 35903 192126, 35934 192008, 35882 191360, 35917 190967, 35908 190465, 35865 190205, 35901 189691, 35851 189009, 35882 188922, 35843 188545, 35866 188268, 35782 187132, 35849 186714, 35851 186216, 35736 185496, 35745 185055) (59075 193980, 58921 194085, 58863 194252, 58964 194256, 59421 194497, 59576 194444, 59631 194291, 59505 193836) (37069 194022, 37140 194391, 37419 194490, 37620 194472, 37792 194386, 37872 194190, 37206 193720) (31530 193835, 31455 194011, 31480 194203, 31555 194371, 31802 194469, 32013 194460, 32166 194359, 32179 194200, 32055 193706, 31906 193659) (168521 193823, 168458 194059, 168478 194442, 168857 194366, 168983 194466, 168968 194221, 168737 193757) (156902 193996, 156853 194139, 157080 194465, 157260 194415, 157354 194076, 157660 193918, 157338 193881) (161631 193182, 161248 193226, 161085 193754, 161097 194139, 161346 194459, 161479 194465, 161701 194361, 161801 194259, 161885 193923, 161752 193571, 161717 193089) (64030 185814, 63951 186243, 64014 186638, 64160 186984, 63967 187769, 64008 188189, 64129 188544, 64032 188905, 63932 188985, 63905 189209, 63961 189365, 63901 189565, 64059 189967, 64188 190078, 64069 190450, 63997 190518, 63915 190732, 63923 191121, 64197 191626, 64057 191981, 63978 192074, 63917 192246, 63995 192845, 63914 193286, 64070 193600, 63797 193826, 63666 194098, 63812 194446, 64198 194369, 64551 194243, 64244 193552, 64273 193256, 64037 193221, 64287 193117, 64296 192612, 64226 192393, 64266 192116, 64299 191553, 64238 191227, 64270 191064, 64231 190841, 64288 190116, 64202 189589, 64123 189320, 64271 188586, 64184 188140, 64212 187977, 64079 187781, 64168 187476, 64139 187378, 64213 186928, 64175 186447, 64027 186245, 64118 185912, 64094 185840, 64156 185428) (47874 193775, 47671 193857, 47796 194184, 48137 194440, 48343 194267, 48413 193787, 48708 193830, 48407 193482, 48184 193444) (62442 194433, 62734 194353, 62667 194173, 62344 194085) (29773 193309, 29541 193874, 29214 193807, 29232 194232, 29582 194288, 29814 194159, 30093 194385, 30249 194423, 30335 194160, 30128 193987, 29784 193307, 29789 193047) (42266 193592, 42239 193769, 41916 194086, 41853 194262, 42114 194375, 42438 194420, 42539 193803, 42450 193365) (175714 194126, 175722 194394, 176015 194394, 175964 194107) (61163 194009, 61203 194385, 61626 194321, 61848 194208, 61777 193840, 61553 193739, 61230 193722) (33350 193879, 33328 194273, 33488 194346, 33761 194297, 33782 193761, 33543 193469) (46073 193881, 46125 194254, 46556 194344, 46730 194273, 46924 194034, 46246 193516) (158081 192731, 158197 192995, 158095 193411, 157684 193911, 157875 194247, 158021 194319, 158262 194344, 158405 194226, 158489 194078, 158465 193697, 158185 193386, 158294 192918, 158209 192604, 158227 192466, 158045 192345) (159606 193665, 159488 194192, 159785 194343, 160152 194217, 160277 193976, 160165 193721, 159756 193643) (44271 193392, 44004 193379, 44254 193874, 44231 193998, 44374 194038, 44517 194307, 44804 194341, 45072 194232, 45162 194130, 45040 193776, 44842 193569, 44649 193138) (163144 192776, 163068 192823, 162975 193075, 163009 193227, 162828 193660, 162720 194082, 162877 194300, 163205 194316, 163455 194073, 163470 193876, 163243 193550, 163162 193185, 163253 192518) (26004 193508, 25922 193589, 25951 193694, 26057 193801, 26238 194279, 26420 194296, 26551 194193, 26223 193678, 26053 193185) (27439 193844, 27542 194044, 27814 194235, 27961 194228, 28203 194030, 28218 193736, 27697 193402) (24493 185403, 24479 185887, 24541 186990, 24509 187727, 24430 188269, 24481 189333, 24422 189740, 24452 190503, 24451 191171, 24397 192123, 24503 193203, 24449 193496, 24284 193754, 24185 194065, 24558 194220, 24865 194198, 25045 193943, 25055 193827, 24932 193545, 24839 193498, 24653 193162, 24771 192577, 24764 191969, 24714 191595, 24707 190978, 24727 190816, 24710 189658, 24642 189289, 24678 188174, 24608 187420, 24547 186989, 24636 186277, 24621 185500, 24544 185238) (49842 193859, 49657 194061, 49978 194217, 50100 194045, 50131 193931, 49879 193245) (23018 191672, 22943 192080, 22932 192471, 23060 193128, 23090 192459, 23060 191118) (26043 190067, 26015 191212, 26035 192008, 26017 192761, 26051 193120, 26093 192818, 26110 191988, 26089 191219, 26102 190439, 26058 190069, 26041 189459) (44476 192139, 44668 192327, 44655 193023, 44756 192765, 44727 192699, 44817 192375, 44694 191992) (159598 192107, 159671 192592, 159647 192999, 160017 192873, 159961 192512, 160066 192284, 160052 192033, 159805 192007) (31991 191129, 32052 191898, 32005 192683, 32022 192755, 32068 191910, 32011 191004) (37262 192419, 37268 192670, 37351 192428, 37316 192090) (42281 192071, 42458 192623, 42447 191718) (29579 185477, 29703 186302, 29524 186923, 29515 187178, 29676 187884, 29510 188456, 29500 188733, 29632 189398, 29528 190016, 29530 190275, 29803 190975, 29583 191605, 29576 191813, 29812 192500, 30042 191949, 30027 191690, 29812 190973, 30065 190421, 29989 189374, 30059 188755, 29916 187933, 30011 187200, 29884 186404, 29918 185683, 29772 185070) (161196 192009, 161202 192336, 161456 192401, 161350 192131, 161450 191795) (170763 191756, 170736 192146, 170891 191972, 170854 191852, 170887 191712) (159881 190521, 159635 190771, 159644 191339, 159781 191399, 160016 191369, 160066 190841, 160005 190520) (163143 190705, 163179 190854, 163092 191124, 163299 190965, 163299 190653) (161589 189739, 161154 190610, 161192 190706, 161380 190809, 161290 190597, 161773 189833, 161836 189672, 161765 189552, 161495 189434) (44755 189912, 44788 189969, 44725 190777, 44855 189982, 44735 189364) (49935 189333, 49487 189800, 49438 190214, 49462 190717, 49815 190775, 49941 190680, 49938 190108, 49971 189300, 49926 189296) (22994 187415, 23006 188131, 23047 188563, 23038 189319, 22984 190130, 23058 190731, 23080 190104, 23061 188559, 23075 188184, 23073 187005, 23058 186673) (57410 190727, 57778 190678, 57745 190293, 57421 190132) (170864 189523, 170735 190290, 170744 190441, 170865 190429, 170833 190307, 171216 189818, 171101 189459, 170853 189190) (46273 189561, 46219 190366, 46652 189848, 46339 189220, 46418 189135, 46253 189085) (158089 190319, 158129 190356, 158093 190311, 158228 189934, 158225 189841, 158160 189790) (31985 189581, 32045 190194, 32004 189439) (142628 185723, 142888 186338, 142558 186796, 142628 187184, 142576 187611, 142845 187901, 142621 188368, 142669 188724, 142641 189099, 142921 189430, 142968 189968, 143357 189637, 143359 188953, 143292 188552, 143367 188157, 143405 187249, 143350 186986, 143385 186202, 143309 185469) (159607 189243, 159635 189500, 159611 189802, 159699 189871, 159995 189839, 159993 189661, 159842 189443, 159946 189026) (163150 188821, 163029 189067, 163085 189330, 163041 189619, 163187 189782, 163372 189755, 163312 189267, 163371 188864, 163354 188747) (44706 188030, 44801 188414, 44776 188712, 44823 188420, 44709 187756) (46278 187978, 46223 188368, 46238 188565, 46328 188422, 46374 187984, 46267 187725) (163224 187312, 162843 187350, 162868 187451, 162822 187849, 162846 188366, 163129 188309, 163330 188171, 163275 187726, 163318 187231) (170841 188301, 171059 188117, 171000 187936, 170864 187788) (44701 187254, 44704 187604, 44799 187315, 44794 186900) (177618 186130, 177419 186565, 177371 186827, 177566 187314, 177526 186963, 177626 186122, 177455 185383) (57537 186474, 57428 187289, 57676 186550, 57495 186090) (53693 186336, 53653 186763, 53757 187140, 53688 186768, 53783 186392, 53780 186140) (161523 186449, 161546 186650, 161453 187000, 161722 186778, 161714 186432) (155590 186345, 155567 186630, 155615 186726, 155593 186809, 155684 186836, 155665 186712, 155779 186336, 155774 186202) (163174 185763, 162816 185810, 162768 186315, 162835 186685, 162819 186817, 163186 186813, 163329 186722, 163305 186168, 163319 185558) (170825 186705, 170949 186486, 170819 186173) (49677 186003, 49801 186269, 49965 186474, 50089 186338, 50017 186210, 49967 185923) (141011 185896, 140982 186084, 141020 186255, 141238 186264, 141191 186028, 141363 185497) (35720 183697, 35761 183560, 35763 183112) (165480 180095, 165380 180532, 165318 180577, 165198 180808, 165227 181148, 165304 181357, 165532 181681, 165380 182066, 165300 182433, 165303 182607, 165411 182912, 165499 182967, 165419 182487, 165551 181684, 165408 180939, 165535 180053) (44586 182124, 44668 182248, 44714 182500, 44812 182284, 44698 181912) (136162 182001, 136254 182342, 136394 182479, 136409 182156, 136226 181961, 136340 181596, 136348 181416) (23017 180389, 23035 181174, 23015 182369, 23070 182439, 23062 179954) (158220 181360, 158095 181758, 158081 181996, 158182 181825, 158244 181340, 158206 181265) (48339 180080, 48302 180423, 48367 180847, 48454 181017, 48369 180480, 48442 180094, 48437 179871) (44645 180626, 44710 180854, 44769 180714, 44678 180351) (143611 179937, 143294 180644, 143707 180012, 143708 179790, 143545 179764) (136215 179946, 136222 180155, 136352 180125, 136330 179995, 136389 179572) (52087 176988, 52120 177105, 51989 177457, 51913 177837, 52195 178625, 52114 179032, 51970 179350, 51985 179468, 52125 179712, 52147 179036, 52215 178630, 52125 177951, 52177 177477, 52212 176932) (165350 178440, 165421 178611, 165360 178814, 165555 178822, 165564 178245) (143527 178410, 143446 178743, 143709 178566, 143708 178123, 143426 178119) (143314 176484, 143312 176919, 143273 177065, 143271 177467, 143779 177295, 143732 176802, 143779 176492, 143759 176275) (165449 176605, 165350 176927, 165362 177137, 165295 177335, 165552 177366, 165540 177028, 165598 176688, 165582 176489) (39530 176961, 39587 176664, 39471 176107) (165360 175423, 165367 175621, 165475 175920, 165561 175952, 165480 175493, 165484 175278) (143396 175088, 143461 175327, 143437 175544, 143607 175733, 143733 175731, 143643 175022) (44687 174858, 44791 175237, 44731 175686, 44795 175239, 44679 174577) (136370 174556, 136280 174976, 136417 174503) (44657 173310, 44753 173697, 44665 174078, 44676 174456, 44760 174133, 44795 173709, 44677 173137) (137774 171960, 137979 172178, 137837 172568, 137847 172646, 137987 172170, 137969 171792, 137756 171616) (152083 171801, 152018 172261, 152160 171813, 152171 171648) (141575 171563, 141422 171621, 141312 171780, 141426 172007, 141398 172155, 141553 172174, 141529 171980, 141624 171488) (155577 171618, 155554 172044, 155607 172103, 155601 171999, 155724 171646, 155737 171334) (38656 163287, 38350 163400, 38268 163378, 38214 163473, 38392 163932, 38651 164128, 38559 164541, 38566 164927, 38634 165150, 38481 165411, 38551 165706, 38548 166094, 38680 166718, 38544 167003, 38484 167388, 38614 167872, 38472 168053, 38819 168346, 38509 168819, 38496 168933, 38586 169185, 38545 169708, 38744 170692, 38624 171113, 38591 171428, 38632 171886, 38737 172072, 38766 171850, 38716 171476, 38768 170981, 38695 169976, 38805 169650, 38777 169521, 38836 168729, 38818 168003, 38798 167650, 38885 167178, 38793 166109, 38883 165774, 38851 165624, 38867 164959, 38783 164565, 38791 164089, 39089 163621, 39201 163292, 39142 163218) (148457 170801, 148364 171277, 148515 170778) (152025 170266, 151961 170613, 152022 171043, 152183 171199, 152165 170935, 152035 170650, 152141 170287, 152143 170086) (137890 170651, 137818 171074, 138018 170727, 138007 170518, 137831 170353) (44670 170557, 44701 170611, 44697 170908, 44764 170622, 44682 170280) (141487 170053, 141433 170435, 141540 170814, 141610 170872, 141604 170762, 141460 170448, 141599 170075, 141666 169670) (33504 166659, 33479 167051, 33489 167836, 33542 168227, 33477 169012, 33526 169757, 33500 170191, 33495 170754, 33586 170222, 33601 169777, 33520 169045, 33573 168234, 33496 167488, 33579 166681, 33488 166037) (158069 170132, 158053 170419, 158163 170200, 158202 169766) (146912 169728, 146797 170091, 146799 170278, 146914 170230, 146897 170121, 146972 169674, 146846 169438) (34994 168973, 35034 169350, 35021 169930, 35200 169338, 35160 168962, 34994 168630) (151900 164557, 151889 164875, 151832 165136, 151878 165267, 151840 165422, 151898 165649, 151844 166148, 151902 166423, 151893 166626, 151959 166795, 151903 167001, 151923 167192, 151860 167486, 151857 167722, 151925 167968, 152116 168302, 151883 169017, 151897 169249, 151986 169502, 152159 169681, 152198 169278, 152137 169072, 152189 168836, 152144 168682, 152225 168196, 152184 167895, 152219 167640, 152165 167513, 152215 167360, 152180 167122, 152241 166857, 152226 166595, 152157 166352, 151986 166013, 152185 165570, 152240 165350, 152232 164988, 152174 164797, 152246 164401) (148361 169084, 148388 169514, 148645 169642, 148717 169636, 148573 169273, 148715 168922, 148718 168805, 148587 168802) (137804 169125, 137756 169617, 137891 169488, 138019 169237, 138014 169067, 138114 168698, 137718 168623) (159637 169617, 159909 169552, 159834 169288, 159859 169054, 159583 168898) (141864 163286, 141587 163273, 141434 163320, 141183 163482, 141105 163479, 141070 163577, 141299 163903, 141303 164299, 141335 164839, 141380 165044, 141319 165238, 141260 165727, 141271 165965, 141362 166212, 141303 166506, 141355 166601, 141294 166706, 141364 166985, 141325 167469, 141382 167757, 141643 168071, 141443 168461, 141354 168539, 141326 168805, 141359 168925, 141328 169071, 141403 169301, 141671 169583, 141600 169161, 141488 168890, 141609 168589, 141647 168073, 141601 167696, 141664 167433, 141559 167319, 141672 167169, 141607 166919, 141692 166375, 141623 166139, 141639 165873, 141597 165758, 141654 165647, 141649 165357, 141702 165146, 141665 164965, 141685 164782, 141587 164599, 141675 164200, 141560 164218, 141680 164179, 141986 163434, 141962 163164) (41997 168589, 42010 168852, 42379 169053, 42396 168635, 42281 168339) (158040 167732, 158030 167869, 158156 168198, 158071 168666, 158192 168204, 158104 167823, 158172 167658) (155746 167656, 155427 167766, 155425 167837, 155563 168133, 155407 168406, 155414 168621, 155551 168601, 155830 168452, 155754 168080, 155849 167520) (34980 167460, 35015 167798, 34994 168232, 34994 168611, 35142 168191, 35199 167788, 35199 167400, 34983 167077) (136341 167976, 136235 168440, 136272 168415, 136395 167926, 136266 167607, 136301 167483, 136176 167478) (159559 167397, 159593 167804, 159563 168277, 159600 168201, 159869 167997, 159856 167732, 159988 167479, 159988 167239, 159787 167238) (148451 167369, 148331 167555, 148338 168036, 148680 168091, 148758 167600, 148699 167237) (150453 167595, 150416 168031, 150465 168061, 150562 167498) (137720 167181, 137781 167581, 137737 168015, 138125 167876, 138017 167515, 138132 167168, 138130 167057, 137970 167038) (44641 167525, 44666 167766, 44751 167554, 44809 166797) (28173 167388, 28287 167762, 28321 167400, 28282 167017) (158109 166659, 158019 167050, 158033 167165, 158151 167168, 158097 167051, 158179 166598, 158107 166505) (35302 164207, 34992 164324, 34994 164743, 34941 165145, 34961 165914, 35013 166288, 34986 166683, 34983 167070, 35406 166592, 35402 166398, 35253 166222, 35265 166072, 35404 165996, 35409 165759, 34978 165522, 35423 165069, 35405 164691, 35124 164440, 35391 164441, 35401 164207) (155697 166108, 155402 166229, 155496 166601, 155441 166978, 155844 167054, 155765 166527, 155854 165827) (144789 165936, 144779 166343, 144934 166395, 144789 166546, 144820 166813, 144787 166972, 145021 166867, 145160 166432, 145226 165927) (136333 166426, 136208 166864, 136338 166428, 136316 166375) (159548 166669, 159763 166369, 159765 166032, 159568 165981) (148343 166141, 148319 166439, 148470 166341, 148442 166208, 148595 165826) (137689 165654, 137733 166043, 137717 166418, 138113 166365, 138130 166183, 138084 165946, 138126 165705, 138104 165498) (28148 163377, 27772 163478, 27736 163631, 27901 163928, 27982 163952, 28206 164278, 28179 164623, 28275 165014, 28153 165815, 28286 166291, 28326 165859, 28307 165026, 28340 164693, 28289 164255, 28359 163943, 28637 163384, 28281 163301) (43965 163427, 43888 163397, 43474 163474, 43530 163651, 43845 163698, 44003 163622, 44369 163910, 44580 164441, 44569 164752, 44663 165069, 44734 165175, 44678 165539, 44694 165901, 44795 165607, 44844 165192, 44700 164408, 44808 164093, 45024 163839, 45089 163526, 45067 163450, 44834 163209, 44710 163208) (33087 163294, 32745 163421, 33417 164013, 33459 164776, 33449 165486, 33483 165873, 33623 165213, 33504 164376, 33571 164052, 33754 163787, 33831 163511, 33515 163431, 33269 163277) (158037 165129, 158015 165573, 158077 165575, 158054 165512, 158188 165180, 158176 165011, 158006 164722) (136197 164757, 136230 164904, 136135 165253, 136135 165451, 136290 165449, 136287 165276, 136383 164990, 136343 164873, 136358 164680) (150327 164843, 150418 165280, 150545 165402, 150531 165197, 150416 164891, 150467 164544) (146780 165346, 146957 165229, 146918 165076, 146936 164930, 146755 164841) (144826 164480, 144816 164877, 144768 165037, 144806 165332, 145245 165214, 145176 164777, 145201 164398) (42363 164969, 42468 165261, 42485 164622) (139739 164614, 139691 164920, 139786 165092, 139974 165134, 139974 164989, 139873 164681, 139916 164309) (159605 164663, 159603 164750, 160160 163772, 160159 163756) (156939 163901, 156948 163967, 157246 164184, 157084 164515, 157077 164732, 157596 164475, 157252 164174, 157138 163824, 157327 163709, 157466 163347, 157352 163210, 157172 163198) (178576 164017, 178620 164138, 178577 164538, 178633 164718, 178756 164101, 178677 163848) (157727 163649, 157700 163603, 157569 163707, 157943 164225, 158183 164179, 158234 163912, 158345 163842, 158458 163463, 158168 163433) (177401 163625, 177538 164063, 177557 163655, 177477 163564) (42039 163918, 42055 164030, 42506 164026, 42621 163613, 42777 163385, 42417 163441, 42277 163359, 42060 163432, 41705 163291) (37140 163326, 36819 163429, 36717 163382, 36506 163553, 36811 163918, 37250 163858, 37493 163283) (163316 163542, 163302 163913, 163474 163639, 163504 163416) (35027 163889, 35602 163689, 35673 163394, 35366 163435, 35212 163348) (40231 163266, 39875 163405, 40214 163806, 40379 163857, 40774 163756, 40911 163509, 40621 163420, 40445 163248) (134976 163447, 135128 163749, 135237 163626, 135248 163274) (165497 159946, 165290 160753, 165485 161496, 165299 162341, 165570 162971, 165549 162368, 165688 161587, 165497 160857, 165598 159977, 165429 159537) (46189 156962, 46282 156684, 46058 156363) (72014 149212, 72042 149548, 71951 149946, 72015 150332, 71963 150596, 72017 151106, 72010 151507, 72055 151871, 72011 152423, 72025 152655, 72007 153158, 72061 153420, 72028 153629, 72081 154190, 72062 154662, 72106 154959, 72076 155555, 72143 155847, 71960 156492, 72029 156586, 72339 156530, 72632 156752, 72952 156710, 73070 156856, 73230 156588, 73084 155852, 73085 155443, 73012 155097, 73221 154265, 72875 153570, 73079 152753, 72829 152043, 72976 151231, 72700 150590, 72578 150564, 72713 150401, 72916 149697, 72679 149054) (76012 156600, 76214 156766, 76451 156744, 76631 156432, 76435 156222, 76129 156180) (68803 155863, 68667 156289, 68825 156633, 69051 156741, 69393 156562, 69487 156451, 69353 155672, 68812 155616) (65655 154692, 65621 155020, 65858 155120, 65665 155322, 65766 155532, 65413 156017, 65296 156279, 65306 156434, 65628 156668, 65991 156651, 66143 156205, 65918 155949, 65805 155909, 65861 155621, 65843 155512, 65945 155084, 65741 154764, 65916 154326) (67526 154954, 67624 155030, 67182 155806, 67014 156354, 67071 156431, 67696 156584, 67789 156521, 67358 155888, 67706 155072, 67701 154936, 67288 154501) (51234 147818, 51198 148021, 51427 148610, 51053 149132, 51090 149476, 51062 149845, 51514 150136, 50897 150476, 50854 151092, 50903 151466, 50837 151815, 51378 151724, 50837 151926, 50862 152455, 50889 152633, 50891 153313, 51468 153250, 51067 153688, 51213 154095, 50916 154527, 51032 155061, 50908 155143, 50873 155279, 50889 155444, 51349 155609, 51137 156416, 51305 156573, 52008 156222, 52010 156167, 51603 155538, 52019 154821, 52012 154481, 51731 153953, 51623 153275, 51602 153213, 51841 152372, 51578 151653, 51734 150851, 51524 150133, 51750 149296, 51541 148569, 51717 148205, 51724 147752, 51324 147690) (70457 155407, 70600 155759, 70395 155991, 70310 156225, 70362 156418, 70992 156476, 71069 156406, 70945 155889, 70787 155707, 70863 155211) (63732 155747, 63840 156256, 64085 156353, 64012 156014, 64054 155690) (53588 153375, 53471 153818, 53398 153884, 53329 154115, 53343 154451, 53592 154993, 53452 155344, 53375 155440, 53345 155641, 53380 155982, 53496 156183, 53629 156286, 53612 155762, 53683 155501, 53651 155365, 53705 154908, 53575 154222, 53624 153929, 53685 153219) (57235 153680, 57329 153970, 57197 154780, 57257 155153, 57237 155276, 57278 155534, 57257 156222, 57476 156070, 57492 155863, 57576 155657, 57606 155178, 57202 154779, 57396 154397, 57487 154314, 57538 154109, 57502 153922, 57657 153484, 57225 153423) (46263 151562, 46125 152377, 46288 153109, 46147 153921, 46303 154650, 46095 155971, 46482 155780, 46388 155417, 46447 155267, 46401 155026, 46427 154768, 46338 154268, 46234 153909, 46333 153728, 46410 153228, 46357 152713, 46288 152475, 46206 152366, 46272 152227, 46384 151679, 46277 151255, 46307 151176, 46141 150982) (63743 152778, 63749 153373, 63718 154237, 63777 154527, 63678 154929, 63717 155662, 64025 155544, 63882 155274, 64000 154947, 63737 154926, 64026 154757, 63961 154477, 64124 154045, 63807 153743, 64102 153275, 63910 152940, 63997 152536) (68831 154157, 68853 154511, 68935 154665, 68861 154859, 68823 155294, 69159 155148, 69341 154998, 69319 154108) (47717 154277, 47674 155049, 48183 154621, 48172 154277, 48081 154081, 48170 154031, 48167 153688, 47653 153550) (78490 153983, 78372 154126, 78395 154397, 78360 154795, 78784 154793, 78803 154464, 78711 154310, 78765 154059, 78730 153918, 78751 153796) (70710 153740, 70602 153819, 70493 153977, 70538 154225, 70496 154517, 70606 154594, 70854 154635, 70789 154155, 70896 153432) (69037 152560, 68793 152624, 68804 152991, 68882 153129, 68813 153309, 68817 153682, 69123 153612, 69302 153465, 69308 153011, 69360 152780, 69360 152303) (47856 152110, 47679 152215, 47697 152733, 47653 153508, 48209 153128, 48231 152586, 48180 152082) (70408 148868, 70473 149204, 70433 149748, 70471 149979, 70403 150238, 70412 150532, 70473 150754, 70432 150939, 70447 151357, 70512 151519, 70815 151823, 70537 152287, 70444 152994, 70475 153080, 70909 153309, 70908 152701, 70850 152588, 70914 152464, 70888 152191, 70919 151856, 70862 151422, 70886 151112, 70848 151038, 70888 150955, 70941 150187, 70841 149877, 70613 149552, 70820 149217, 70902 148698, 70884 148315, 70408 148189) (78545 152349, 78390 152715, 78335 153158, 78454 153219, 78723 153239, 78716 153033, 78637 152780, 78737 152562, 78736 152177) (57275 149332, 57541 150035, 57325 150858, 57466 151606, 57321 152420, 57232 152783, 57228 152979, 57338 152847, 57646 152732, 57454 152384, 57644 151656, 57633 151471, 57341 150865, 57547 150037, 57329 149297, 57376 149023) (74479 151949, 74536 152354, 74462 152912, 74790 152499, 74761 152292, 74869 151866) (67528 151948, 67377 152363, 67632 152025, 67622 151831, 67466 151766) (68878 149395, 68985 149612, 68912 149828, 68855 150348, 68892 150412, 69342 150676, 69067 151048, 68869 151245, 68918 151567, 68853 151982, 69357 152144, 69325 151675, 69263 151473, 69298 151219, 69347 150675, 69278 150305, 69288 150120, 69216 149935, 69282 149722, 69302 149134, 68856 148700) (53629 151451, 53544 151818, 53547 151994, 53674 152109, 53650 151877, 53734 151510, 53724 151378) (63741 151287, 63764 151429, 63720 151637, 63961 151716, 63874 151426, 63940 151381, 63929 151093) (47904 150608, 47847 150753, 48053 151003, 47733 150994, 47731 151398, 47881 151684, 48153 151552, 48163 151071, 48120 150596) (74517 150581, 74548 150799, 74523 151057, 74841 151108, 74731 150749, 74739 150511) (46255 150027, 46169 150509, 46259 150031, 46203 149654, 46151 149581) (63739 149111, 63881 149848, 63832 150253, 63972 149852, 63811 149478, 64105 149010, 63819 148746) (136812 149201, 136658 149819, 136793 149767, 136888 149605, 137001 149187) (65792 149323, 65714 149689, 65857 149351, 65852 149265, 65771 149181) (74569 149249, 74581 149258, 74769 148808) (72802 146626, 72577 147464, 72045 147978, 72063 148380, 72019 148575, 72012 149123, 72648 148921, 73014 148120, 72586 147462, 73053 146715, 73118 146142) (46124 149076, 46217 148908, 46230 148472) (67273 148777, 67294 149013, 67454 149069, 67414 148879, 67549 148451) (69177 147490, 69198 147615, 69009 148116, 69292 147675, 69294 147483) (70644 147044, 70626 147223, 70455 147463, 70407 147915, 70809 147754, 70848 147162, 70807 147009) (63912 147513, 63860 147762, 64010 147516, 64033 147374, 63872 147325) (179641 143901, 179269 144018, 178732 144497, 178796 144708, 178685 145126, 178868 145464, 178579 145612, 178731 146391, 178677 146679, 178925 146788, 179068 146714, 179193 146150, 179120 145937, 179508 145842, 179438 145472, 179811 145368, 180208 144892, 180234 144458, 180520 144273, 180440 143870, 180023 143838) (72854 144925, 72847 145230, 73096 145356, 73002 145022, 73091 144594) (29369 143801, 29414 144177, 29775 144161, 30074 144289, 29846 144059, 29741 143724) (72836 143128, 72748 143306, 72761 143536, 72673 143972, 73103 143923, 73102 143746, 73004 143469, 73096 143165, 73109 142870) (214087 143097, 213856 143626, 214142 143746, 214285 143897, 214509 143890, 214833 143746, 214531 143156, 214400 143089, 214172 142774) (215788 143249, 215606 143533, 215825 143862, 216001 143875, 216421 143745, 216392 142954) (196122 143060, 196145 143128, 196033 143726, 196105 143863, 196783 143655, 196187 142712) (210363 137606, 210295 138013, 210362 138859, 210273 139830, 210325 140248, 210287 140340, 210324 140717, 210219 141522, 210334 142654, 210280 142925, 210070 143158, 209988 143524, 210048 143550, 210253 143839, 210439 143846, 210806 143687, 210743 143317, 210486 142999, 210474 142615, 210568 141965, 210541 141434, 210531 140661, 210501 139895, 210556 139360, 210468 138353, 210511 138072, 210500 137657, 210380 136798) (208834 133733, 208849 134125, 208130 134105, 207982 134235, 207983 134382, 207914 134623, 207881 135185, 207785 135986, 207808 136755, 207765 137542, 207813 138305, 207766 139099, 207830 139509, 207762 139869, 207857 140231, 207873 141083, 207789 141388, 207860 141782, 207900 142282, 207957 142686, 207938 142922, 207678 143247, 207641 143391, 207955 143694, 208155 143668, 208252 143708, 208532 143593, 208830 143841, 208926 143843, 209133 143756, 208946 142640, 208963 141932, 208922 141491, 208943 141097, 208939 140097, 208805 139584, 208817 139525, 208806 138809, 208814 138770, 208741 137874, 208725 137280, 208732 137201, 208712 136508, 208673 136281, 208810 135706, 208841 134922, 208786 134815, 208878 134320, 208902 133760, 208906 133321) (211852 143319, 211732 143619, 211818 143797, 211917 143805, 212291 143684, 212355 143717, 212455 143459, 212051 143027, 211912 142911) (197247 143463, 197159 143551, 197275 143538, 197655 143804, 197723 143784, 197651 143379) (199039 143036, 198644 143375, 198594 143545, 199089 143798, 199253 143787, 199404 143711, 199403 143324, 199201 142992, 199195 142416) (192401 135137, 192451 135538, 192409 136552, 192478 137081, 192380 137496, 192344 138668, 192357 139440, 192301 140158, 192347 140994, 192303 141696, 192314 142165, 192368 142443, 192337 142935, 192016 143412, 192058 143782, 192445 143739, 192606 143792, 192880 143561, 192771 143139, 192529 142881, 192590 142478, 192582 142237, 192680 142065, 192627 141923, 192722 141196, 192568 140689, 192620 140531, 192578 140352, 192453 140190, 192619 139907, 192677 139620, 192505 139110, 192620 138981, 192362 138664, 192648 138058, 192569 137832, 192596 137577, 192519 136683, 192424 136321, 192569 135506, 192522 135131, 192415 134726) (204464 143160, 204482 143482, 204792 143784, 205070 143709, 205147 143630, 205151 142910) (190046 143400, 189933 143593, 190176 143603, 190456 143770, 190518 143433, 190470 143059, 190180 142766) (193816 143304, 193791 143699, 193977 143679, 194089 143743, 194339 143692, 194615 143473, 193921 143077) (188625 138913, 188485 139340, 188433 139740, 188487 140114, 188696 140444, 188479 140891, 188419 141295, 188461 141671, 188655 142005, 188595 142797, 188421 143108, 188396 143322, 188194 143417, 188161 143692, 188356 143669, 188466 143734, 188716 143686, 188952 143733, 188920 143484, 188806 143127, 188646 142802, 188751 142017, 188688 141291, 188746 140921, 188725 140824, 188717 140110, 188662 139736, 188732 139373, 188717 139275, 188747 138408) (202785 143172, 202878 143534, 203301 143711, 203536 143601, 203671 143310, 202949 142873) (201195 142717, 200890 142760, 201032 143162, 200957 143285, 201088 143286, 201240 143596, 201428 143619, 201616 143697, 201801 143542, 201869 143424, 201795 143055, 201410 142548) (206282 142731, 206250 142949, 206137 143232, 206122 143420, 206313 143632, 206542 143694, 206752 143636, 206870 143402, 206891 143210, 206662 142685) (181212 142495, 181065 142923, 180983 143333, 181147 143519, 181380 143612, 181584 143589, 181727 143345, 181749 143124, 181475 142985, 181236 142489, 181151 142092) (182863 143594, 183201 143612, 183286 143478, 182775 143100) (200234 143484, 200516 143602, 200647 143370, 200257 143328) (184893 142960, 184222 143169, 184102 143139, 184470 143541, 184630 143589, 184988 143082, 185158 143063, 184932 142716) (179573 143332, 179653 143398, 179928 143235, 179932 143101, 179675 142630) (51816 142917, 51852 143065, 51828 143222, 52000 143273, 51971 143033, 52026 142632) (214134 138896, 214126 140401, 214118 140477, 214138 141223, 214090 142012, 214172 142736, 214298 142482, 214369 142160, 214246 141969, 214230 141198, 214185 140435, 214229 139648, 214140 138897, 214165 138119, 214157 138007) (69390 142136, 69233 142635, 69412 142115, 69226 141773) (72913 139495, 72959 139583, 72733 140370, 72739 140512, 73116 141101, 72723 141810, 72733 142185, 73017 142321, 72922 141942, 72970 141825, 73161 141097, 72849 140402, 73175 139699, 73208 139294, 72753 138960) (201355 141206, 201321 141508, 201399 141613, 201362 141977, 201412 142168, 201498 142056, 201536 141667, 201467 141207, 201416 141161) (198788 141158, 198757 141556, 198796 141945, 199199 142075, 199227 141871, 199169 141480, 199205 141092, 199184 140881) (202921 141605, 202964 141185, 202941 141081) (199074 138325, 199190 139117, 199082 139872, 199125 140279, 199179 140431, 199152 139928, 199194 139119, 199156 138740, 199142 138062) (206426 134601, 206427 134809, 206586 135462, 206571 135892, 206431 136168, 206605 137019, 206563 137800, 206576 137868, 206576 138544, 206552 139334, 206683 140304, 206697 140150, 206673 139430, 206723 138652, 206771 138591, 206722 138558, 206655 137873, 206700 137089, 206730 137051, 206698 137032, 206700 136285, 206668 135906, 206697 135544, 206736 135499, 206705 135464, 206729 134764, 206636 134371) (182757 140117, 182978 139890, 182970 139688, 182756 139415) (46050 139560, 46244 139854, 46241 139565, 46121 139382) (72777 137718, 72692 138174, 72813 138483, 72738 138845, 72970 138501, 73088 138408, 73181 138255, 73130 137816, 72994 137658, 72760 137538) (182758 138438, 182931 138316, 182897 138157, 182758 137977) (188636 137310, 188685 137711, 188752 137882, 188755 137737, 188698 137158) (46121 137256, 46077 137283, 46084 137516, 46224 137243, 46194 136964) (210344 135647, 210405 136230, 210462 135641, 210385 135274, 210391 134870) (72906 134969, 72941 134937, 72764 134691) (74361 134456, 74384 134644, 74477 134648, 74470 134540, 74596 134115) (81455 133200, 81485 133392, 81339 133738, 81316 133962, 81478 133782, 81614 133460, 81630 133195) (70938 133183, 70805 133615, 71002 133220, 71022 133051, 70779 132835) (77847 131676, 77788 131955, 77850 132063, 77837 132269, 77906 132435, 77887 132550, 78169 132097, 78162 131851, 78033 131625, 77812 131490) (81292 131487, 81392 131868, 81389 132130, 81624 132031, 81603 131810, 81657 131454) (70718 131287, 70767 131679, 70750 132085, 71085 131900, 71044 131602, 71079 131244) (74386 131074, 74260 131394, 74268 131595, 74367 131855, 74604 131960, 74588 131629, 74422 131452, 74550 131149, 74551 130893) (77804 130253, 77939 130489, 77817 130784, 77812 131076, 78037 130849, 78132 130586, 78105 130443, 78157 130204, 78076 130062, 77802 130024) (81410 129924, 81311 130059, 81347 130329, 81269 130759, 81676 130674, 81578 130265, 81695 129686) (67444 130264, 67351 130615, 67542 130306, 67569 130084, 67344 129992) (70929 129619, 70760 129920, 70776 130126, 70693 130553, 71090 130462, 71066 130046, 71137 129825, 71099 129649, 71138 129420) (72724 130290, 72720 130466, 72864 130522, 72802 130346, 72915 129980) (74571 129085, 74220 129878, 74223 130039, 74422 130211, 74330 129927, 74637 129110, 74642 129003, 74406 128733) (79869 129183, 79730 129613, 79936 129208, 79941 129100, 79831 129039) (77774 128527, 77877 128955, 77793 129458, 78176 129201, 78123 128887, 78203 128434) (67151 128626, 67245 128768, 67173 128978, 67212 129164, 67177 129363, 67386 129198, 67560 128903, 67538 128483, 67444 128325, 67161 128256) (69288 128983, 69201 129289, 69346 129014, 69360 128877, 69243 128841) (81431 126754, 81150 126887, 81276 127434, 81376 127608, 81664 127916, 81464 128283, 81297 128404, 81253 128508, 81311 128788, 81309 129010, 81413 129149, 81700 129270, 81685 128903, 81604 128707, 81682 128490, 81662 128305, 81768 127937, 81656 127530, 81721 127167, 81598 126772, 81607 126582) (208804 128730, 208921 129178, 208937 128306, 208923 127968) (63990 128884, 63952 129150, 64113 128851, 63954 128684) (71047 127649, 71106 127709, 70819 128176, 70735 128764, 70831 128948, 71126 129085, 71096 128690, 70982 128518, 71111 128334, 71107 128097, 71183 127640, 70808 127105) (74255 125580, 73924 125774, 74301 126447, 74409 126804, 74283 127081, 74184 127651, 74255 128010, 74242 128326, 74529 128031, 74643 127670, 74630 127369, 74527 127158, 74609 126900, 74590 126715, 74858 125845, 74824 125528) (76402 127808, 76269 128267, 76330 128302, 76303 128223, 76481 127840, 76480 127726, 76330 127582) (65665 127994, 65663 128172, 65795 128146, 65782 128006, 65853 127725) (79797 127653, 79770 127860, 79953 127790, 79910 127516, 79752 127456) (77925 127003, 77798 127121, 77819 127420, 77781 127821, 78208 127795, 78237 127505, 78174 127322, 78198 127060, 78158 126885) (67259 125562, 66855 125773, 67081 126243, 67294 126429, 67179 126862, 67244 127218, 67169 127718, 67609 127555, 67622 127420, 67558 127130, 67552 126756, 67434 126777, 67547 126728, 67479 126378, 67675 126237, 67811 125899, 67704 125541) (69195 127624, 69365 127599, 69335 127262, 69160 127259) (63943 127346, 63911 127582, 64034 127383, 64190 127279, 64022 127265, 63912 127201) (72779 126862, 72701 127179, 72871 126906, 72865 126775, 72686 126594) (75992 125549, 75668 125683, 75799 126035, 76147 126328, 76186 126813, 76344 127049, 76463 127062, 76465 126956, 76298 126673, 76510 126432, 76690 125791, 76598 125786, 76470 125622, 76345 125596, 76310 125507) (46081 126428, 46176 126790, 46166 127047, 46379 126947, 46496 126702, 46439 126403, 46153 126355) (70541 125538, 70628 125685, 70609 126055, 70678 126401, 70863 126613, 70776 126992, 70805 127017, 71162 126966, 71169 126845, 71030 126566, 71233 126363, 71390 125689, 70936 125751, 70707 125486) (49675 126499, 49703 126669, 49842 126852, 49872 126552, 49820 126308) (68981 125524, 68651 125668, 68769 126024, 69026 126341, 69205 126680, 69170 126850, 69299 126767, 69277 126660, 69475 126343, 69661 125780, 69593 125776, 69369 125472) (65589 125667, 65253 125812, 65212 125765, 65142 125855, 65215 125900, 65405 126242, 65608 126503, 65578 126680, 65836 126784, 65735 126468, 65953 126284, 66138 125876, 66124 125586) (72563 125677, 72242 125847, 72643 126501, 72945 126299, 73144 125912, 73113 125609, 72943 125584) (77678 125907, 77647 126146, 77696 126374, 77872 126335, 78283 125907, 78337 125728, 77918 125800, 77792 125661) (64671 125560, 64367 125680, 64504 126021, 64818 125824, 64900 125534) (61578 125669, 61661 125862, 61853 126013, 62126 125713, 62132 125518) (57307 125677, 57331 125713, 57818 125704, 57827 125535) (50780 119092, 50641 119591, 50387 119820, 50572 119976, 50753 119874, 51023 119515, 51061 119248, 51035 118923) (52440 110342, 52318 110762, 52658 110283, 52481 110291, 52381 110176) (90492 73880, 90508 74097, 90745 74443, 90898 74412, 91006 74251, 91250 74080, 91317 73938, 90648 73370) (95409 74279, 95803 74309, 96000 74157, 95493 73769) (89095 73380, 89036 73436, 89041 73726, 88737 73881, 88840 74250, 89211 74302, 89346 74254, 89588 74015, 89348 73541, 89359 73292) (101213 71532, 101237 72214, 101296 72603, 101323 73291, 101161 73606, 101101 73936, 101134 74004, 101499 74244, 101612 74263, 101733 74170, 101926 73735, 101714 73229, 101616 72809, 101711 72599, 101678 72155, 101756 72135, 101745 71291, 101226 71130) (92948 73383, 92727 73994, 92893 74248, 93180 74242, 93302 74116, 93081 73553, 93314 73641, 93055 73379, 92931 73057) (96900 73796, 96690 73802, 96952 74201, 97020 74037, 97505 74035, 97612 73826, 97137 73654) (98362 73445, 97755 73851, 97925 74101, 98106 74134, 98210 74086, 98432 73470, 98397 73368) (99658 71587, 99664 72041, 99726 72328, 99707 72423, 99859 73116, 99716 73360, 99566 73417, 99467 73644, 99544 74021, 99650 74082, 100045 74129, 100243 73875, 100126 73509, 99968 73194, 99934 72477, 100006 72364, 100018 72192, 99907 71767, 99985 71590, 99917 71429, 100081 71347, 100079 71161, 99631 70867) (93951 73986, 94226 74112, 94284 73920, 94076 73750) (102889 72361, 102983 73121, 102920 73391, 102831 73543, 102790 73943, 103141 74099, 103377 74057, 103545 73782, 103350 73432, 103069 73103, 102980 72343, 102892 72123) (98110 71878, 98302 72616, 98266 71965, 98116 71143) (90761 71701, 90857 72063, 90827 72078, 90900 72333, 90888 72068, 90955 71667, 90812 71636) (95501 69458, 95481 69538, 95570 70204, 95530 70315, 95579 70560, 95545 70704, 95624 70940, 95723 71065, 95824 71437, 95810 71834, 95894 71964, 95828 71439, 95789 70716, 95801 70659, 95728 69976, 95753 69884, 95722 69623, 95746 69494, 95652 69119, 95502 68753, 95470 68554) (102856 66392, 102874 66939, 102964 67569, 102958 67907, 102886 68094, 102956 68591, 102847 68705, 102839 68908, 103170 69206, 103375 69813, 103364 69213, 103331 68484, 103270 67742, 103310 67551, 103243 67012, 103320 66728, 103311 66326, 103019 66098, 102850 65661) (101279 66021, 101325 66687, 101328 67182, 101446 67817, 101369 67957, 101441 68505, 101282 68592, 101267 69247, 101725 69460, 101797 69595, 101872 69518, 101820 69431, 101714 68364, 101664 67981, 101624 67258, 101656 67131, 101556 66517, 101681 66350, 101653 66245, 101750 66153, 101748 65922, 101289 65615) (99721 65930, 99940 67172, 99889 66588, 99841 65848, 99720 65436) (98163 65632, 98248 66055, 98212 65657, 98113 64989) (98218 59856, 98262 60034, 98199 59533) (97930 57562, 97989 57883, 98264 57538, 98224 57226) (98274 57069, 98352 56767, 98340 56650, 98212 56572)), ((225644 179887, 225630 181166, 225501 181198, 225501 201627, 225491 202402, 225469 202910, 225469 214698, 189190 214698, 189122 214369, 189502 214263, 189441 213910, 189797 213801, 189863 213394, 190234 213290, 190305 212881, 190232 212521, 190597 212416, 190527 212045, 190904 211955, 190968 211543, 191333 211450, 191398 211033, 191769 210929, 191702 210561, 192075 210458, 192010 210090, 192387 209987, 192509 209189, 192779 209101, 192659 208948, 192840 208898, 192807 208707, 193184 208605, 193131 208320, 192997 208265, 192914 208042, 193133 208105, 193491 208130, 193607 207330, 193975 207223, 194033 206825, 194399 206727, 194460 206322, 194830 206217, 194769 205845, 195094 205753, 195088 205710, 195137 205727, 195088 205374, 195460 205270, 195555 204465, 195925 204377, 195870 203991, 196248 203890, 196189 203517, 196562 203414, 196571 202978, 196982 202909, 197032 202509, 196980 202140, 197349 202039, 197301 201665, 197550 201591, 197462 201369, 197687 201403, 197718 201161, 198088 201065, 198164 200648, 198098 200293, 198459 200201, 198419 199815, 198786 199740, 198819 199692, 198820 199339, 198731 199328, 198742 199230, 199210 199075, 199243 198805, 199612 198706, 199570 198329, 199940 198226, 199894 197850, 200267 197748, 200313 197351, 200344 197336, 200361 196961, 200721 196845, 200705 196490, 201051 196387, 201007 195994, 201379 195890, 201419 195494, 201681 195420, 201733 195337, 201797 195323, 201850 195374, 202914 195085, 203286 195013, 203608 195279, 204380 195071, 204758 194997, 205145 195245, 205915 195038, 206292 194965, 206675 195213, 207472 195028, 207513 194984, 207433 194326, 208139 194763, 208187 194751, 208198 194796, 209310 194493, 209652 194785, 210783 194487, 211127 194769, 211887 194564, 211904 194572, 212647 194363, 212663 193969, 213028 193869, 213040 193607, 212897 193507, 212880 193203, 213194 193427, 213421 193365, 213402 192984, 213778 192883, 213784 192115, 214174 191995, 214180 191626, 214532 191562, 214522 191129, 214893 191026, 214877 190640, 215252 190538, 215271 190150, 215642 190045, 215655 189653, 215771 189619, 215781 189353, 216031 189376, 216044 189162, 216112 189138, 216050 188786, 216008 188778, 216004 188689, 216072 188762, 216421 188730, 216428 188669, 216798 188563, 216789 188184, 217163 188081, 217146 187723, 217067 187713, 217038 187607, 217146 187610, 217311 187424, 217524 187367, 217531 187200, 217904 187096, 217905 186326, 218274 186231, 218267 185837, 218640 185733, 218649 185345, 219023 185239, 219029 184851, 219401 184748, 219396 183984, 219761 183882, 219768 183486, 220141 183382, 220142 183149, 220015 183028, 219880 182796, 220142 182801, 220210 182976, 220523 182895, 220515 182507, 220895 182408, 220888 182020, 221261 181916, 221267 181139, 221642 181032, 221644 180654, 222008 180546, 222009 180160, 222387 180058, 222385 179669, 222756 179566)), ((188743 194702, 188639 195415, 187979 195596, 187463 195051, 187300 194412, 187962 194231)), ((191618 194689, 191729 195343, 191069 195524, 190334 195040, 190395 194339, 191054 194158)), ((185622 194782, 185772 195404, 185067 194934, 185117 194659, 185378 194526)), ((202513 194804, 202501 195148, 202174 195210, 201897 194972, 201465 194406, 202129 194224)), ((205441 194777, 205470 195090, 205161 195195, 204822 194945, 204525 194343, 205184 194161)), ((115949 193379, 115652 193181, 115715 193005, 116038 192923)), ((116700 192741, 116596 193015, 116359 193081, 116203 192877, 116394 192683, 116521 192667)), ((77515 185401, 77725 185593, 77537 185918, 77288 185961, 76960 185801, 77113 185262)), ((222757 179018, 222796 179176, 222834 179180, 222757 179400, 222524 179239, 222523 178999)), ((126075 177767, 125917 178099, 125649 178316, 125278 178528, 125164 178494, 125215 178384, 125585 178287, 125820 177765)), ((22835 173891, 22683 174001, 22336 173940, 22684 173657)), ((23062 172597, 23098 172656, 23435 172783, 23506 173007, 23433 173045, 23083 173072, 23138 173420, 23058 173608, 22788 173515, 22816 173257, 22943 173086, 22915 172943, 22945 172697, 22921 172558)), ((24493 172273, 23903 172529, 23686 172494, 23808 172066)), ((24475 170728, 24357 171043, 24352 171329, 23809 171154, 23712 170835, 23808 170583)), ((131176 170166, 130997 170524, 130804 170766, 130591 170824, 130405 170764, 130636 170654, 130806 170268, 130873 170243, 130909 170143)), ((87703 170065, 87660 170256, 87487 170304, 87320 169991, 87664 169896)), ((131726 168823, 131426 168980, 131353 168974, 131586 168499, 131745 168460)), ((91043 165273, 90853 165457, 90718 165509, 90523 165236, 90869 165141)), ((22740 165058, 22708 165423, 22614 165405, 22458 165000, 22685 164907)), ((152546 163146, 152437 163506, 152211 163429, 152010 163292, 152388 163115)), ((23180 162555, 23054 162803, 22692 162698, 22885 163023, 22753 163130, 22685 163270, 22142 163084, 22674 162691, 22697 162314, 23054 162234)), ((206641 162618, 206796 162618, 206808 162777, 206650 162820, 206360 162428)), ((30210 162566, 30322 162719, 29848 162664, 29897 162422, 30111 162273)), ((30545 162087, 30625 162207, 30181 162185, 30267 161930, 30497 161755)), ((31148 161146, 30929 161241, 30951 161675, 30542 161699, 30589 161371, 30882 160992)), ((31592 160378, 31742 160596, 31624 160760, 31258 160726, 31138 160372, 31214 160276)), ((32017 159366, 31997 159750, 32042 159807, 31822 159797, 31884 159673, 31940 159378, 32014 159263, 32380 159258)), ((32534 158827, 32462 158906, 32382 159256, 32162 158929, 32434 158544)), ((152430 153099, 152546 153564, 152446 153974, 152343 154012, 152176 154193, 151922 154317, 151807 154302, 151802 154433, 151495 154905, 151309 155116, 150914 155802, 150871 155804, 150870 155851, 150646 156077, 150562 156324, 150073 157020, 149641 157496, 149567 157759, 149356 158130, 149274 158138, 149254 158232, 149011 158461, 148837 158735, 148458 159215, 148556 158811, 148724 158379, 148883 158222, 148958 157926, 149103 157735, 149316 157655, 149359 157429, 149737 156738, 150003 156403, 150135 156024, 150417 155818, 150505 155564, 150599 155434, 150859 154975, 151128 154586, 151413 154383, 151556 154020, 151815 153788, 151902 153242, 151911 152990, 152256 152794)), ((209437 158793, 209460 159173, 209128 158877, 209263 158588)), ((83131 157752, 82774 158528, 82105 158742, 81770 158123, 82047 157317, 82720 157208)), ((32851 158392, 32811 158440, 32565 158430, 32715 158295, 32793 158110)), ((33547 157387, 33627 157494, 33315 157450, 33355 157287, 33511 157131)), ((39116 145521, 39364 145607, 39465 145590, 39635 145639, 39593 145824, 39925 146523, 40177 146819, 40363 146603, 40306 146231, 40480 145992, 40628 146143, 40835 146156, 41032 146419, 41083 146572, 40564 146585, 40726 146890, 40702 147036, 40562 147117, 40287 147099, 40358 147379, 40157 147822, 40193 147892, 40111 147893, 39957 148076, 39861 148291, 39896 148368, 39807 148367, 39593 148514, 39544 148835, 39480 148838, 39246 149007, 39189 149406, 39031 149520, 38731 149427, 38695 149473, 38370 148754, 38200 147828, 38271 147564, 38208 147453, 38235 147390, 38584 147478, 38709 147555, 38773 147426, 38757 147127, 38603 146698, 38544 146326, 38576 145772, 38732 145464)), ((43859 142156, 43963 142503, 43646 142341, 43370 142289, 43457 141959)), ((44171 141682, 44007 141948, 43683 141581, 43880 141391)), ((24416 45497, 24693 45678, 25200 45679, 25466 45668, 25974 45669, 26239 45658, 26747 45659, 27020 45680, 27527 45681, 27792 45669, 28300 45670, 28566 45658, 29073 45659, 29338 45646, 29845 45647, 30119 45671, 30626 45672, 30892 45658, 31399 45659, 31664 45644, 32172 45645, 32446 45673, 32953 45674, 33218 45658, 33725 45659, 33989 45642, 34497 45643, 34773 45678, 35280 45679, 35544 45658, 36051 45659, 36315 45638, 36822 45639, 37086 45618, 37593 45619, 37870 45658, 38377 45659, 38639 45631, 39147 45632, 39409 45604, 39917 45605, 40196 45658, 40703 45658, 40963 45619, 41730 45617, 42226 45683, 42524 45767, 42787 45684, 43283 45687, 43545 45602, 44533 45603, 44832 45795, 59563 45794, 59688 45676, 60180 45673, 60322 45630, 60554 45847, 60716 46268, 60907 46296, 61682 46292, 61904 46485, 62076 46292, 63233 46292, 63455 46488, 67332 46486, 67504 46292, 68660 46292, 68883 46489, 69658 46488, 70039 46678, 78962 46675, 79133 46472, 79903 46483, 80127 48386, 80383 48432, 80159 48711, 80166 48815, 79153 49961, 79190 50343, 78293 51384, 78522 51502, 78206 51657, 78225 51863, 77930 52172, 78046 52480, 78186 52613, 77967 52832, 77830 52716, 77559 52668, 77515 52628, 76871 53397, 76911 53776, 76580 54130, 76297 54514, 76422 54717, 76353 54952, 75925 55085, 75942 55355, 75261 56022, 75284 56139, 75631 56439, 75354 56695, 75182 56552, 74638 57171, 74637 57198, 74304 57591, 73293 58838, 73343 59217, 73068 59463, 73003 59568, 73039 59902, 72696 60203, 72359 60608, 71013 62293, 71062 62667, 70726 63087, 70378 63374, 70424 63748, 70078 64026, 69343 64944, 69460 65598, 69208 65831, 68818 66330, 68532 66440, 68117 66973, 68167 67352, 67460 67858, 67504 68234, 67291 68267, 67356 68464, 67153 68491, 67216 69045, 66837 69105, 66881 69479, 66510 69535, 66538 69906, 66176 69964, 65816 70214, 65862 70591, 65510 70828, 65553 71203, 65254 71251, 65281 71726, 65668 72320, 64891 72061, 64935 72458, 64607 72515, 64612 72559, 64564 72547, 64598 72895, 64228 72956, 64272 73342, 63897 73399, 63944 73789, 63565 73847, 63609 74236, 63165 74504, 63485 74913, 62921 74883, 62936 75038, 62560 75104, 62624 75596, 62911 75825, 62944 76077, 62690 76122, 62461 76069, 62300 76096, 62320 76311, 61948 76379, 61984 76755, 61615 76819, 61663 77214, 61464 77254, 61486 77432, 61304 77417, 61330 77666, 60940 77749, 60997 78122, 60812 78228, 60856 78585, 61066 78879, 60326 78884, 60370 79264, 59992 79337, 60033 79627, 60176 79697, 60192 79828, 60061 79854, 59948 79740, 59662 79792, 59710 80174, 59417 80237, 59426 80317, 59344 80316, 59380 80631, 59006 80706, 59051 81093, 58935 81120, 58967 81381, 58707 81408, 58722 81553, 58336 81640, 58391 82016, 58246 82090, 58251 82304, 58053 82367, 58069 82570, 57710 82723, 57757 83119, 57543 83168, 57563 83329, 57396 83309, 57426 83580, 57212 83632, 57509 84009, 57085 83905, 57100 84046, 56906 84091, 56905 84257, 56745 84291, 56771 84511, 56557 84561, 56757 84851, 56409 84700, 56434 84976, 56076 85132, 56109 85511, 55749 85672, 55804 86049, 55424 86133, 55470 86511, 55094 86599, 55145 86982, 54763 87067, 54814 87449, 54438 87539, 54486 87922, 54111 88013, 54155 88392, 53782 88487, 53829 88871, 53459 89006, 53510 89393, 53137 89521, 53187 89903, 52802 89990, 52859 90376, 52703 90419, 52710 90624, 52515 90692, 52533 90854, 52151 90944, 52201 91272, 52306 91308, 52250 91667, 52034 91376, 51831 91427, 51879 91810, 51495 91900, 51551 92263, 51626 92274, 51566 92388, 51440 92321, 51177 92389, 51224 92772, 50962 92858, 50975 92967, 51310 93535, 50936 93537, 50649 93353, 50528 93387, 50577 93769, 50267 93859, 50165 94288, 50128 94307, 49991 94714, 49647 94794, 49270 95699, 48904 95815, 48694 96638, 48743 97052, 48853 97371, 48734 97692, 48458 97769, 48332 97513, 48248 97434, 48196 97549, 47810 97630, 47535 98478, 47611 98487, 47576 98586, 47522 98510, 47124 98568, 46867 99452, 46666 99899, 46336 99929, 46100 100429, 46451 100333, 46537 100189, 46563 100324, 46492 100589, 46239 100659, 46047 100588, 45956 100874, 45560 100944, 45274 101782, 45602 101736, 45688 101585, 45774 101826, 45571 101825, 45016 102298, 44728 102233, 44593 102414, 44398 103233, 44170 103691, 43893 103620, 43786 103749, 43552 104250, 43393 104889, 43475 105047, 43290 105457, 43260 105105, 42999 105123, 42516 105998, 42898 105981, 42778 106445, 42451 106217, 42462 106099, 42175 106075, 42048 106213, 41901 107029, 41647 107479, 41328 107496, 41263 107547, 40991 108053, 40938 108396, 41320 108589, 40870 108695, 40821 108864, 40461 108966, 40166 109442, 39916 109898, 39829 110305, 39431 110378, 39382 110798, 39549 110775, 39417 110972, 39457 111172, 39104 111284, 39169 111630, 38792 111757, 38588 111998, 38485 112383, 38346 112377, 38285 112664, 37909 112761, 37845 113179, 37734 113547, 37423 113581, 37397 113690, 37482 114047, 37105 114157, 37190 114514, 37029 114567, 37004 114799, 36791 114846, 36754 115023, 36402 115058, 36360 115100, 36322 115532, 35926 115607, 36030 116002, 35610 116075, 35729 116457, 35880 116433, 35978 116715, 35708 116634, 35719 116476, 35304 116542, 35299 116972, 35376 116958, 35363 117042, 35287 117063, 35230 117373, 34881 117419, 34856 117488, 34934 117850, 34546 117940, 34628 118322, 34232 118411, 34196 118820, 33802 118904, 33785 119312, 33929 119293, 33978 119588, 34239 119951, 33966 119909, 33504 120034, 33504 120164, 33090 120298, 33318 120877, 32753 120620, 32685 121180, 32362 121273, 32332 121391, 32369 121657, 31958 121737, 32041 122132, 31617 122202, 31633 122600, 31865 122572, 31839 122824, 31605 122889, 31559 123007, 31223 123099, 31217 123135, 30926 123216, 31072 123565, 31093 123746, 30912 123795, 30926 123985, 30558 124091, 30513 124480, 30154 124540, 30114 124986, 29712 125062, 29777 125465, 29366 125541, 29439 125946, 29018 126018, 29002 126835, 28643 126893, 28609 127338, 28206 127410, 28214 127831, 27819 127911, 27875 128275, 28093 128258, 28109 128478, 27946 128686, 27937 129141, 27518 129029, 27487 129175, 27139 129261, 27110 129681, 26752 129730, 26720 129765, 26763 130166, 26373 130253, 26413 130652, 26000 130726, 26028 131148, 25959 131496, 25646 131601, 25652 132019, 25406 132095, 25410 132217, 25290 132235, 25292 132505, 24925 132562, 24912 133001, 24503 133074, 24535 133496, 24127 133567, 24169 133977, 23759 134053, 23800 134466, 23409 134555, 23407 135337, 23055 135414, 23048 135448, 21448 135412, 21466 134830, 21477 133090, 21471 132505, 21483 127274, 21477 126689, 20543 126499, 20554 125724, 20740 125475, 20742 123147, 20552 123002, 20549 121848, 20739 121598, 20551 121452, 20549 120297, 20739 120048, 20551 119901, 20549 118747, 20739 118497, 20551 118351, 20549 117196, 20738 116947, 20742 113068, 20552 112923, 20549 111769, 20741 111519, 20551 111373, 20549 110219, 20739 109969, 20551 109823, 20549 108668, 20739 108419, 20551 108272, 20546 106531, 20263 106323, 20289 105938, 19975 105771, 19971 105529, 19902 105384, 19903 104888, 20107 104860, 20043 104711, 20055 104570, 20058 103937, 20048 103797, 20057 103019, 20053 101752, 19921 101506, 19914 101119, 20734 100873, 20732 80715, 20725 78390, 20733 77861, 20683 77391, 20673 74375, 20791 74122, 20766 73599, 20920 73346, 20888 72825, 20780 72572, 20826 72049, 20943 71796, 21012 71314, 21026 70499, 21067 69857, 21108 68560, 21174 68195, 21159 67397, 20693 67144, 20633 66757, 20627 65980, 20612 65460, 20611 64297, 20643 63656, 20651 62880, 20644 62747, 20643 61329, 20626 60556, 20633 60033, 20616 59647, 20612 59006, 20626 58617, 20635 57452, 20621 56933, 20637 56543, 20635 55902, 20623 55771, 20605 55130, 20613 54993, 20488 53580, 20498 53443, 20502 52802, 20483 52673, 20484 52032, 20495 51895, 20488 51253, 20464 51125, 20462 50484, 20438 50222, 20439 49193, 20980 48996, 20972 48796, 21054 48617, 22249 48387, 22365 48176, 22528 47991, 22803 46284, 23023 45522, 23179 45567, 23686 45577, 23908 45496) (27459 128386, 27528 128768, 27898 128695, 27847 128326)), ((46309 131406, 46100 132193, 45817 132066, 45755 131944, 45798 131545, 45735 131174, 46083 130719)), ((46265 129867, 46083 130664, 45720 130403, 45769 130003, 45853 129772, 46158 129536)), ((54828 117709, 54891 117423, 55016 117220)), ((56066 115552, 56016 115584, 55910 115981, 55820 116114, 55765 116020, 55985 115528, 56047 115473)), ((59963 111769, 59714 112290, 59647 112321, 59601 112256, 59642 112169, 59706 111568, 59949 111540)), ((62416 108104, 62244 108298, 62197 108054, 62278 107868, 62506 107656)), ((57993 100763, 57795 101073, 57770 100618, 58007 100553)), ((49407 98770, 49043 99607, 48336 99801, 48010 99151, 48287 98338, 48992 98144)), ((53524 90588, 53555 90831, 53318 90908, 53153 90576, 53273 90546)), ((56329 85838, 56370 86162, 55836 86037, 56054 85835)), ((222336 47944, 222395 48012, 222777 48153, 222736 48544, 222779 49314, 222736 49687, 222806 51559, 222701 52375, 222699 53594, 222734 53973, 222663 54767, 222651 55437, 222681 55925, 222655 56215, 222654 57483, 222627 58132, 222624 58654, 222568 59144, 222623 59817, 222677 60190, 222569 60413, 222370 60649, 222312 61066, 222756 61068, 223426 61317, 223377 61372, 222756 61414, 222007 61657, 221730 61613, 221633 61475, 221483 61525, 221260 61479, 221073 61600, 220593 61536, 220524 61179, 220568 61156, 220425 61014, 220480 61180, 220318 61410, 220141 61322, 219901 61479, 219414 61586, 219414 49194, 217175 49194, 217219 49066, 217149 48897, 217135 48627, 217222 48422, 217177 48323, 217350 48304, 218065 47960, 218125 47964, 218516 48221, 218898 48295, 219284 48120, 219664 47874, 220022 48066, 220456 48162, 220840 48174, 221181 48040, 221560 47983, 221979 47772)), ((86963 56778, 86303 57198, 86321 57587, 85769 57802, 85799 57221, 86214 56722, 86685 56693)), ((174552 46418, 188121 46412, 188256 46418, 191222 46411, 191357 46418, 194323 46409, 194458 46417, 197425 46407, 197560 46416, 199751 46409, 199886 46418, 201049 46413, 201302 46688, 201824 46740, 202094 46910, 202987 46913, 204017 46885, 204149 46822, 206044 46809, 206360 46660, 206474 46659, 206748 46390, 206861 46384, 207135 46236, 207249 46235, 207522 46465, 207636 46459, 207910 46560, 208023 46555, 208243 46722, 208436 48071, 208472 48065, 208520 48292, 209213 47870, 209605 48229, 209954 48401, 209935 48462, 210024 48635, 210019 48398, 210342 48113, 210415 48115, 210759 47945, 211151 48229, 211538 48432, 211577 48654, 211555 48434, 212313 47984, 212701 48021, 213120 48192, 213452 48383, 213454 48696, 213563 48746, 213515 48380, 213863 48181, 214304 47874, 214692 48624, 214728 48633, 215442 48174, 215865 47811, 216185 47831, 216603 48152, 216919 48328, 216984 48875, 216970 49194, 167425 49194, 168129 48436, 168490 46070, 168738 45582, 168888 45717, 170945 45706, 171214 45716, 174047 45702, 174299 45581))) \ No newline at end of file diff --git a/stress_benchmark/resources/034.settings b/stress_benchmark/resources/034.settings new file mode 100644 index 0000000000..0ed9af0382 --- /dev/null +++ b/stress_benchmark/resources/034.settings @@ -0,0 +1,626 @@ +experimental=0 +infill_pattern=cubic +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=200 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=25.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.8 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=off +support_zag_skip_count=10 +retraction_speed=45 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=0.8 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=45 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=18.75 +skirt_brim_speed=20.0 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=12.5 +cross_infill_pocket_size=12.0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=25.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=45 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=235 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=150.0 +machine_shape=rectangular +ironing_enabled=True +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=117.5 +support_interface_material_flow=100 +wipe_retraction_retract_speed=45 +speed_support_bottom=25.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=1 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=45 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=50 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.8 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.5 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=45 +material_brand=empty_brand +initial_bottom_layers=4 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.5 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=12.5 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=25.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=45 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=12.5 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.1 +support_tree_angle_slow=30.0 +bridge_fan_speed_3=0 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=25.0 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=45 +bottom_layers=4 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=235 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=True +support_interface_height=0.8 +wall_extruder_nr=-1 +machine_width=235 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=0 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=200 +wipe_hop_amount=0.5 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=25.0 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=5 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=18.75 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=50 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=12.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=True +jerk_enabled=False +speed_wall_0_roofing=25.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=50 +bridge_skin_speed_3=12.5 +infill=0 +prime_tower_position_y=208.575 +jerk_support=8 +speed_wall_x_roofing=25.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=0 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=200 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=raft +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=228.575 +wipe_pause=0 +material_standby_temperature=180 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=5 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=250 +speed_infill=50.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=25.0 +speed_support=25.0 +speed_prime_tower=25.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=25.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=10 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=16.666666666666668 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=200 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=0.8 +material_bed_temperature=50 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=200 diff --git a/stress_benchmark/resources/034.wkt b/stress_benchmark/resources/034.wkt new file mode 100644 index 0000000000..1fd9aae3aa --- /dev/null +++ b/stress_benchmark/resources/034.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((147289 101492, 147197 101776, 147218 102093, 147259 102076, 147389 102138, 147398 102467, 147648 102288, 147623 102181, 148137 102295, 148172 102346, 148465 102254, 148577 102197, 148901 102061, 149036 102086, 149463 102125, 149272 102163, 148937 102366, 148938 102449, 149117 102596, 149219 102465, 149345 102594, 149476 102549, 149777 102548, 149863 102511, 150134 102496, 150233 102538, 150557 102570, 150547 102600, 150750 102934, 150801 102912, 151257 103199, 151451 103115, 151457 102826, 151757 102643, 152047 102912, 152261 103054, 152386 103243, 152530 103190, 152880 103207, 153247 103211, 154056 103406, 154393 103447, 154973 103599, 155060 103545, 155100 103604, 155982 103648, 156531 103905, 156918 103881, 157384 103888, 157677 103949, 157902 103873, 158295 103870, 158377 103782, 158054 103621, 158326 103620, 158921 103328, 158926 103578, 159080 103506, 159208 103335, 159407 103114, 159605 103018, 160226 102526, 160454 102824, 160833 102936, 161042 102897, 161218 103011, 161202 103295, 161303 103361, 162081 103119, 162153 102960, 162231 103020, 162468 102787, 162676 102742, 162742 102646, 162776 102466, 162854 102390, 162962 102559, 163249 102661, 163345 102847, 163504 102878, 163575 102980, 163720 102792, 164156 102649, 164176 102627, 164599 102346, 165092 102152, 165205 102150, 165383 102040, 165411 101809, 165746 101644, 165778 101795, 165696 102013, 165720 102318, 165786 102277, 166045 102366, 166018 102482, 166117 102372, 166544 102347, 166785 102276, 167055 102137, 167095 102097, 167417 101900, 167985 101878, 167815 101926, 167483 102191, 167483 102296, 167637 102372, 167713 102283, 167818 102353, 167973 102293, 168276 102247, 168355 102202, 168634 102137, 168729 102164, 169044 102134, 169038 102172, 169224 102475, 169279 102434, 169730 102645, 169936 102500, 169916 102187, 170186 101926, 170336 101993, 170532 102185, 170689 102264, 170892 102592, 170596 102599, 170492 102690, 170436 102843, 170787 103124, 170795 103080, 171025 103006, 171096 103077, 171105 103274, 171006 103584, 171207 103683, 171275 103662, 171241 103706, 171403 103852, 171735 103762, 171903 103865, 171927 103976, 171705 104095, 171743 104184, 172213 104283, 172262 104237, 172156 103914, 172619 103682, 172830 103639, 172900 103529, 173094 103391, 173509 103035, 173525 103033, 173757 102815, 173949 102709, 174009 102739, 173927 103058, 173943 103287, 173660 103472, 173661 103525, 173920 103551, 174155 103396, 174209 103301, 174318 103340, 174376 103452, 174456 103374, 174621 103431, 174679 103247, 174853 103089, 175105 103011, 175263 102982, 175356 102906, 175714 102690, 175405 102553, 175611 102412, 176108 102435, 176166 102572, 176510 102732, 176632 102730, 176986 102606, 177088 102927, 177133 102959, 177479 102784, 177730 102912, 178167 103227, 178270 103212, 178415 103103, 178539 103533, 178699 103628, 178735 103533, 178909 103540, 179152 103666, 179293 103595, 179307 103474, 179240 103402, 179321 103154, 179015 102954, 179038 102804, 179405 102930, 179596 103044, 179720 103036, 179802 103097, 180130 102994, 180399 102953, 180492 102849, 180553 102866, 180918 103314, 181124 103658, 181476 103909, 181365 103996, 181444 104116, 181416 104349, 181196 104523, 181401 104621, 181087 104844, 181307 105052, 181639 105108, 181766 104929, 181781 104659, 181904 104457, 182004 104371, 181932 104386, 181860 104168, 181689 104083, 181716 104147, 181611 104066, 181633 104042, 181561 103645, 181772 103522, 182052 103455, 182231 103334, 182687 103358, 182810 103445, 182509 103884, 182265 104017, 182458 104020, 182604 104079, 182724 103953, 182909 103883, 183029 103627, 183041 103537, 182807 103418, 183104 103015, 183072 102882, 183095 102773, 183434 102398, 183774 102329, 184013 102268, 184150 102313, 183900 102554, 183714 102959, 184390 102785, 184555 102987, 184729 103061, 184795 103005, 184985 103022, 185172 102952, 185044 102843, 185017 102948, 184776 102837, 184878 102638, 184946 102590, 185175 102594, 185526 102578, 185595 102639, 185644 102816, 185402 102978, 185495 103165, 185364 103320, 185415 103356, 185993 103497, 186163 103449, 186612 103530, 186680 103465, 186766 103478, 186777 103584, 187095 103697, 187163 103665, 187066 103457, 186900 103293, 186898 102946, 187172 103041, 187449 103056, 187568 103029, 187841 103144, 187874 103185, 188271 103377, 188289 103270, 188431 103097, 188494 103281, 188577 103346, 188718 103324, 188798 103355, 188824 103659, 188957 104299, 188699 104528, 188627 104557, 188605 104774, 188682 104938, 188386 105092, 188546 105183, 188772 105026, 188991 104966, 188852 105161, 188506 105245, 188520 105468, 188639 105778, 188726 105719, 188976 105697, 188978 105558, 189162 105369, 189126 105211, 189352 105060, 189442 105105, 189423 105158, 189636 105486, 189980 105363, 190089 105603, 190257 105596, 190431 105473, 190635 105410, 190804 105487, 190925 105394, 191167 105346, 191407 105385, 191426 105475, 191362 105505, 191270 105644, 191419 105725, 191378 106026, 191441 106239, 191247 106397, 191280 106566, 191357 106635, 191712 106619, 191707 106824, 191589 107117, 191591 107166, 191438 107518, 191486 107489, 191842 107548, 191945 107386, 192289 107018, 192412 106980, 192617 107052, 192768 107194, 192617 107366, 192273 107654, 192528 107597, 192618 107650, 192457 108077, 192327 108078, 192227 108154, 192315 108527, 192460 108725, 192530 108695, 192654 108509, 192824 108653, 192991 108649, 193128 108723, 193342 109074, 193377 109066, 193385 108738, 193412 108477, 193256 108025, 193338 107868, 193523 107742, 193774 108134, 193856 108785, 193928 109098, 193921 109623, 194041 109726, 194014 109968, 194186 109989, 194145 110534, 193970 110609, 193981 111037, 194090 111179, 194208 111406, 194186 111772, 194114 112237, 194141 112431, 193957 112520, 193762 112515, 193785 112803, 193721 112792, 193983 113062, 194376 113386, 194193 113681, 193803 114209, 193782 114331, 193977 114716, 194075 114877, 194258 115254, 194301 115516, 194336 115853, 194190 116248, 193808 116627, 193635 116898, 193616 117188, 193733 117256, 193797 117473, 193881 118035, 194031 118525, 194060 118432, 194108 118157, 194177 118380, 194186 118880, 194156 119052, 194084 119101, 194031 119307, 194017 119558, 194088 120051, 193901 120195, 193881 120255, 193983 120694, 193859 121226, 193808 121271, 193746 121535, 193908 121772, 193921 121907, 194002 121948, 194003 122292, 193919 122553, 193960 122713, 193902 123111, 193803 123527, 193912 124308, 193949 124428, 193696 124892, 193504 125134, 193367 125613, 193270 125520, 193126 125503, 193027 125235, 192970 125483, 192847 125120, 192753 125333, 192676 125797, 192772 125873, 193218 125870, 193261 125628, 193254 125811, 193502 125640, 193600 125861, 193876 125817, 193818 126110, 193718 126306, 193601 126318, 193680 126631, 193663 126855, 193715 126921, 193657 126955, 193649 127144, 193583 127153, 193513 127044, 193313 127280, 193067 127163, 193090 127406, 193269 127607, 193200 127699, 193042 127467, 192830 127658, 192849 127794, 192802 127831, 192756 127762, 192702 127763, 192870 128032, 192668 128408, 192444 128240, 192358 128149, 192245 128156, 192101 128238, 192095 128495, 192108 128781, 192122 128882, 192138 129206, 192122 129242, 192129 129802, 192277 130104, 191858 130546, 191556 130801, 191602 130860, 191494 131002, 191565 131169, 191466 131164, 191423 131224, 191143 131156, 191069 131173, 190979 131391, 191008 131524, 190728 131683, 190703 131723, 191109 131900, 190786 132216, 190699 132356, 190197 132439, 190033 132391, 189869 132499, 189476 132278, 189146 132444, 188863 132755, 188988 132913, 188790 133104, 188982 133184, 189187 133074, 189508 133076, 189871 133116, 190198 133123, 190478 133381, 190250 133530, 190102 133558, 189825 133438, 189535 133412, 189184 133729, 189013 133705, 188688 133186, 188417 133400, 188466 133800, 188343 133827, 188191 134088, 188443 133966, 188634 134119, 188473 134253, 188554 134441, 188748 134657, 188561 134858, 188196 134878, 188048 134714, 187913 134768, 187564 134617, 187037 134670, 186970 134843, 186426 134944, 186325 135023, 185814 134980, 185359 135030, 184937 135137, 184614 135285, 184509 135270, 184229 135295, 184054 135332, 183574 135274, 183031 135044, 182917 135076, 182745 135040, 182557 135142, 182388 135164, 182322 135235, 182611 135504, 182447 135467, 182050 135620, 182111 135323, 182091 135263, 181968 135321, 181618 135392, 181390 135620, 181116 135809, 180936 135876, 180546 136059, 180255 135599, 180163 135526, 179859 135421, 179759 135446, 179567 135417, 179486 135360, 179526 134997, 179438 134867, 179239 134691, 179081 134606, 178876 134648, 178566 134828, 178248 135146, 178103 135168, 178055 135464, 177807 135658, 177624 135329, 177652 135295, 177531 135243, 177372 135070, 177298 134846, 177067 134512, 176768 134856, 176657 134825, 176729 134889, 176593 134881, 176206 135111, 175924 135211, 175953 135492, 175788 135834, 175713 135442, 175715 135305, 175387 135299, 175289 135344, 175387 135388, 175293 135727, 175146 135656, 175151 135572, 175059 135428, 174951 135453, 174890 135224, 174820 135317, 174654 135173, 174554 135176, 174526 135533, 174328 135628, 174253 135554, 174341 135231, 174315 135183, 174377 135009, 174262 135070, 174318 135010, 174226 135030, 173986 134985, 173626 135116, 173525 135006, 173212 135289, 173185 135293, 173246 135038, 173338 134960, 173105 134747, 172823 134798, 172466 134944, 172110 135050, 172058 135122, 171899 135165, 171707 135114, 171739 134916, 171597 134656, 171452 134782, 171125 134705, 171063 134585, 170889 134653, 171053 134748, 170891 134901, 170633 134936, 170627 134984, 170357 135357, 170243 135310, 169999 135031, 170160 134980, 170330 134756, 170245 134710, 169763 134820, 169567 134677, 169650 134401, 169619 134343, 169695 134147, 169843 133896, 169706 133812, 169600 133874, 169504 133838, 169485 133732, 169348 133673, 169205 133740, 169071 133988, 169041 133807, 169099 133767, 169055 133580, 168495 133612, 168605 134014, 168099 134245, 167911 134560, 167522 134827, 167355 134991, 167175 135008, 166950 135205, 167010 134953, 166956 134754, 167304 134541, 167310 134511, 166920 134471, 166584 134722, 166503 134544, 166459 134577, 166188 134555, 166033 134684, 165978 134858, 165644 134971, 165513 134969, 165457 135112, 165298 135211, 165549 135401, 165275 135495, 164789 135472, 164656 135327, 164463 135262, 164191 135369, 163909 135388, 163842 135067, 163510 135313, 163449 135268, 163371 135354, 162878 135311, 162672 135246, 162452 135360, 162432 135304, 162561 135111, 162011 135115, 161929 135004, 161647 135029, 161618 135049, 161277 135037, 161390 135170, 161367 135272, 161047 135108, 160951 135204, 160784 135006, 160680 134934, 160618 135007, 160677 135147, 160984 135287, 161300 135544, 161713 135737, 161331 135585, 161067 135607, 160888 135453, 160693 135449, 160366 135346, 160138 135548, 160013 135259, 159835 134959, 159454 135107, 159302 135156, 158877 135405, 158833 135403, 158563 135456, 158353 135531, 157772 135541, 157337 135409, 157176 135474, 156947 135451, 156609 135642, 156715 135774, 156893 135886, 156671 135870, 156198 136100, 156259 135837, 156229 135744, 156127 135803, 155829 135893, 155574 136163, 155349 136334, 154918 136528, 154714 136680, 154542 136500, 154353 136231, 153984 136113, 153652 136120, 153552 136060, 153593 135690, 153306 135419, 153053 135341, 152580 135581, 152424 135744, 152010 136078, 151973 136256, 151750 136416, 151665 136297, 151649 136165, 151319 135935, 151244 135715, 150941 135293, 150655 135636, 150553 135647, 150201 135755, 150161 135787, 149841 135908, 149141 135992, 148757 136104, 148867 136170, 148843 136326, 148639 136420, 148607 136196, 148634 136111, 148587 135746, 148415 135444, 148211 135379, 148050 135457, 148114 135730, 147652 135706, 147599 135643, 147195 135813, 146749 136022, 146448 136017, 146441 135964, 146753 135735, 146754 135594, 146534 135468, 146203 135523, 146003 135606, 145554 135726, 145105 135802, 144993 135772, 145004 135675, 144940 135517, 144856 135457, 144819 135353, 144738 135411, 144258 135273, 144244 135247, 144182 135276, 144239 135309, 144026 135482, 143898 135483, 143882 135641, 143572 135967, 143240 135766, 143044 135494, 143258 135460, 143461 135255, 143530 134972, 142808 135181, 142614 135003, 142703 134579, 142911 134207, 142805 134129, 142630 134203, 142475 134117, 142442 133928, 142364 133881, 142278 133907, 142160 134105, 142168 134201, 142008 134222, 141982 133986, 142086 133926, 142018 133734, 141547 133613, 141440 133711, 141550 134115, 140958 134288, 140799 134562, 140406 134762, 140183 134934, 140023 134920, 139718 135114, 139790 134861, 139755 134588, 140088 134453, 140094 134400, 139750 134286, 139351 134492, 139248 134284, 138934 134214, 138818 134290, 138777 134473, 138691 134549, 138319 134615, 138165 134492, 138144 134732, 137948 134822, 138223 135040, 137946 135112, 137552 135086, 137343 135004, 137322 134941, 137022 134843, 136645 134999, 136493 135002, 136348 134700, 135940 134954, 135577 135006, 135229 134925, 135039 134916, 134877 135044, 134792 134959, 135057 134672, 134591 134852, 134455 134932, 134172 134918, 133779 135004, 133556 135085, 133748 135061, 133804 135177, 133694 135392, 133421 135386, 133726 135424, 134098 135563, 134086 135641, 133686 135616, 133556 135571, 133360 135662, 133229 135581, 132893 135712, 132594 135774, 132456 135925, 132364 135912, 132064 135512, 131960 135530, 131449 135373, 131078 135348, 130574 135691, 130880 135933, 130811 135921, 130474 136087, 130566 135694, 130433 135488, 130058 135503, 130241 135641, 130311 135805, 129948 135956, 129770 136171, 129365 136500, 128949 136741, 128626 136251, 128497 136199, 128446 136104, 128148 136173, 127886 136127, 127908 135993, 127839 135960, 127716 135989, 127651 136138, 127575 136144, 127158 135990, 126750 136006, 126603 136045, 126590 136114, 126404 136287, 126174 136390, 126088 136272, 126079 136077, 125907 135956, 125420 136013, 125204 136108, 125018 135838, 124939 135792, 124563 135511, 124353 135466, 124189 135599, 124265 135634, 124639 135626, 124729 135776, 124430 135901, 123754 135988, 123703 136011, 123347 136074, 123273 136052, 123213 135680, 123096 135477, 122819 135391, 122756 135337, 122691 135437, 122643 135651, 122510 135631, 121999 135800, 121844 135668, 121573 135898, 121568 135811, 121622 135769, 121623 135583, 121842 135658, 121902 135401, 121762 135410, 121620 135574, 121417 135449, 121133 135476, 121049 135569, 120658 135651, 120447 135748, 120258 135904, 120154 135874, 120086 136053, 119789 136279, 119473 136548, 119452 136500, 119534 136164, 119652 135882, 119635 135791, 119395 135980, 119227 135779, 118829 135851, 118509 136127, 118507 136190, 118428 136136, 118318 136180, 118197 136376, 118305 136615, 118228 136767, 117982 137027, 117776 137191, 117740 136950, 117886 136638, 118130 136633, 118132 136389, 117856 136399, 117602 136628, 117223 136550, 117160 136572, 117126 136516, 117339 136288, 117514 136185, 117251 136082, 117149 136004, 116952 136134, 116884 136454, 116808 136303, 116687 136216, 116557 136220, 116387 136459, 116383 136518, 116338 136531, 116224 136732, 116048 136740, 115806 136673, 115623 136472, 115752 136469, 115765 136210, 115875 136046, 115726 135924, 115616 135998, 115573 136442, 115313 136656, 115197 136803, 114946 136606, 114421 136372, 114395 136106, 114671 135974, 114756 135965, 114950 135593, 114637 135496, 114495 135317, 114420 135283, 114264 135411, 114337 135508, 114237 135738, 114010 135683, 114047 135454, 113922 135387, 114084 135177, 113709 135347, 113585 135286, 113801 134932, 113474 135105, 113328 135292, 113311 135076, 113061 135023, 112988 134932, 112800 135031, 112663 135274, 112815 135369, 112848 135467, 112723 135575, 112282 135653, 112477 135987, 112468 136249, 112200 136411, 112030 136397, 111744 136605, 111606 136329, 111528 136219, 111495 135947, 111474 135955, 111198 135736, 111206 135609, 111344 135288, 111483 135126, 111378 135091, 111296 135276, 110948 135073, 110853 135147, 110801 135336, 110750 135379, 110126 135364, 109900 135563, 109826 135582, 109902 135675, 109930 135813, 109898 135977, 109361 136059, 109070 135973, 108982 135753, 109018 135678, 108572 135701, 108359 135989, 108183 135787, 108007 135903, 108134 135651, 107993 135488, 107824 135440, 107510 135317, 107500 135251, 107380 135207, 107222 135217, 107036 135399, 106858 135430, 106661 135198, 106441 135242, 106302 135206, 106211 135075, 106038 135009, 106034 135111, 105955 135137, 105923 135311, 105951 135404, 106093 135454, 106136 135385, 106276 135341, 106506 135358, 106737 135520, 106855 135713, 106749 135924, 106291 135738, 106290 135663, 106137 135531, 106056 135633, 106235 135744, 106183 136032, 105943 136048, 105739 135953, 105482 136067, 105360 136075, 105289 136216, 105312 136288, 105166 136376, 104952 136050, 104665 136071, 104604 135981, 104366 135871, 104515 135755, 104145 135234, 104041 135248, 104085 135307, 103970 135500, 103984 135672, 103676 135965, 103449 135625, 103475 135258, 103084 135277, 102423 135413, 102316 135482, 101926 135658, 101223 136046, 101049 136013, 100672 136006, 100404 135965, 100242 135976, 100191 136146, 99730 135992, 99269 136011, 99195 136002, 98823 136033, 98693 135957, 98012 135998, 97790 136098, 97612 135850, 97310 135619, 96993 135447, 96728 135226, 96725 134880, 96456 134773, 96152 134807, 95843 134931, 95367 135283, 95072 135605, 94874 135414, 94584 135321, 94485 135118, 94285 134980, 93918 135156, 93644 135203, 93621 135244, 93579 135231, 93264 135493, 93001 135580, 92834 135678, 92670 136057, 92054 136536, 92030 136488, 92073 136227, 92244 135948, 92190 135752, 91918 136007, 91900 135879, 91802 135771, 91661 135828, 91347 135880, 91131 136093, 91116 136159, 91047 136117, 90919 136159, 90759 136374, 90872 136615, 90797 136764, 90339 137184, 90307 136950, 90453 136639, 90695 136634, 90694 136388, 90423 136398, 90176 136632, 89794 136550, 89727 136573, 89681 136498, 89972 136246, 90064 136244, 90142 136168, 90077 136100, 89848 135965, 89492 136145, 89455 136416, 89371 136306, 89125 136172, 89029 136302, 88890 136646, 88616 136740, 88374 136672, 88233 136483, 88321 136465, 88333 136214, 88462 136053, 88219 135897, 88161 136116, 88126 136435, 87745 136787, 87523 136611, 86989 136371, 86963 136104, 87240 135974, 87326 135965, 87517 135593, 87207 135496, 86971 135254, 86904 135507, 86806 135738, 86609 135713, 86527 135539, 86543 135406, 86505 135345, 86587 135239, 86398 135331, 86209 135346, 86166 135299, 86313 135035, 86129 134966, 86072 134981, 86005 134907, 85524 134979, 85431 135193, 85222 135242, 85375 135344, 85363 135419, 85430 135509, 85349 135505, 85235 135590, 84944 135622, 84874 135666, 85110 136117, 84884 136377, 84590 136411, 84297 136563, 84146 136283, 84165 136654, 84073 136578, 84008 136352, 83879 136374, 83968 136325, 83982 136146, 83780 136341, 83944 136147, 84002 136108, 84028 135950, 83831 135806, 83748 135631, 83148 135941, 82702 136044, 82544 136113, 82485 136088, 82156 136110, 81742 136005, 81304 136319, 81199 136183, 81247 136069, 81111 136096, 81017 136168, 81122 136274, 81174 136215, 81398 136618, 80878 136583, 80988 136446, 80919 136464, 80688 136602, 80607 136305, 80260 136390, 79838 136780, 79352 136963, 79204 137074, 78889 136647, 78575 136452, 78214 136412, 78091 136286, 78104 136094, 77898 136077, 77858 136221, 77880 136293, 77736 136379, 77573 136136, 77356 136219, 77570 136404, 77218 136500, 77255 136280, 77348 136219, 76993 136083, 76834 136041, 76765 135943, 76670 135934, 76675 136033, 76453 136336, 76225 136116, 76069 135927, 75919 135837, 75731 135667, 75605 135619, 75565 135543, 75543 135288, 75369 135409, 75321 135349, 75126 135313, 75060 135146, 74935 135097, 74810 135110, 74619 135231, 74763 135254, 75062 135388, 74744 135552, 73980 135632, 73536 135753, 73480 135413, 73331 135175, 73090 135141, 72995 135227, 72949 135405, 72736 135400, 72236 135639, 72169 135593, 71848 135917, 71689 135933, 71673 135823, 71862 135663, 71864 135511, 71654 135425, 71367 135493, 71288 135568, 71040 135604, 70993 135634, 70360 135763, 70193 135696, 70220 135539, 70079 135246, 69950 135326, 69544 135136, 69495 135038, 69386 135073, 69489 135154, 69314 135263, 69145 135215, 69111 135345, 69305 135639, 69276 135684, 68888 135662, 68444 135761, 68640 135448, 68572 135408, 68355 135051, 68640 134987, 68769 134819, 68580 134663, 68374 134979, 68064 135234, 67989 135225, 67971 135087, 68120 134737, 67881 134421, 67639 134362, 67512 134397, 67456 134334, 67372 134362, 67111 134592, 67228 134742, 67182 134910, 66807 135079, 66690 135304, 66570 135323, 66126 135241, 66073 135302, 66004 135591, 65754 135734, 65537 135657, 65272 135853, 65027 135919, 65005 135988, 65058 136145, 64870 136361, 64656 136047, 64453 136137, 64643 136213, 64809 136374, 64490 136586, 64183 136707, 64278 136212, 63953 136111, 63861 136118, 63817 136044, 63870 135938, 64210 135619, 63866 135287, 63785 135135, 63681 135233, 63617 135505, 63636 135779, 63183 136382, 62995 135952, 62927 135832, 62946 135473, 62925 135342, 62808 135451, 62588 135515, 62483 135489, 62333 135146, 62578 134986, 62457 134920, 62208 134847, 61895 134946, 61753 134798, 61578 134975, 61937 135253, 62069 135289, 61697 135292, 61571 135314, 61428 135229, 61397 135335, 61004 135622, 60241 135442, 60653 135209, 60659 135133, 60604 135054, 60260 134980, 60168 134994, 59960 135125, 59926 135360, 60026 135769, 60016 135836, 59667 135644, 59627 135507, 59680 135450, 59386 135416, 59179 135363, 59074 135411, 58765 135445, 58517 135731, 58152 135190, 58085 135149, 57916 134851, 57712 134842, 57447 135170, 57427 135213, 57215 135379, 57082 135597, 57001 135535, 56963 135331, 56899 135248, 56720 135236, 56064 134715, 55605 134667, 55515 134762, 55853 134970, 55757 135450, 55717 135488, 55293 135441, 55267 135392, 54937 135422, 54608 135618, 54543 135725, 54338 136007, 54046 135793, 53530 135623, 53191 135328, 53035 135288, 52979 135480, 53018 135612, 52670 135470, 52383 135414, 52152 135464, 52475 135204, 52428 135144, 52295 135118, 51984 135181, 51773 135125, 51500 135243, 50834 135326, 50687 135287, 50434 135276, 50007 135088, 49585 134979, 49066 134911, 48468 134977, 48441 134957, 47881 134850, 47829 134737, 47239 134728, 47050 134814, 46849 134739, 46622 134986, 46413 134986, 46104 134687, 46275 134378, 46224 134151, 46139 134047, 46249 133899, 46238 133784, 45899 133657, 45626 133769, 45444 133622, 45475 133565, 45347 133384, 44976 133405, 44788 133508, 44529 133467, 44104 133693, 44000 133560, 44091 133436, 44206 133376, 44307 133392, 44335 133296, 44590 133071, 45463 133039, 46008 133156, 45961 133109, 45997 132799, 46025 132770, 45976 132712, 45725 132659, 45581 132482, 45236 132696, 45414 133008, 44857 132757, 44977 132539, 44958 132473, 44826 132404, 44601 132411, 44171 132353, 43769 131871, 43981 131810, 44119 131716, 43838 131518, 43861 131195, 43582 131142, 43466 131189, 43302 131170, 43324 131094, 43161 130950, 43196 130752, 43155 130663, 43383 130419, 43398 130353, 43323 130074, 43239 130062, 43301 129994, 43359 129445, 43225 129258, 43140 128928, 43217 128724, 43144 128657, 42940 128748, 42735 128567, 42877 128329, 42755 128222, 42669 128220, 42706 128570, 42589 128595, 42378 128809, 42407 128597, 42614 128199, 42483 128185, 42245 128300, 42148 128040, 42073 127995, 42155 127678, 42024 127417, 41939 127445, 41801 127704, 41694 127430, 41860 127106, 41683 126831, 41577 126917, 41452 127192, 41401 127192, 41263 126609, 41298 126498, 41365 125897, 41421 125628, 41539 125708, 41655 125570, 41501 125574, 41381 125345, 41326 125721, 41338 125846, 41251 125989, 41168 125910, 41230 125788, 41146 125605, 41042 125635, 40885 125517, 41079 125226, 41275 125115, 41340 125126, 41344 125038, 40969 124437, 40961 124074, 40972 123976, 40753 123596, 40812 123528, 40853 123552, 40876 123274, 40961 123455, 41052 123377, 40945 122880, 40909 122549, 41037 122550, 41096 122750, 41233 122723, 41310 122893, 41447 122850, 41470 122764, 41329 122150, 41112 121736, 41210 121353, 41117 121282, 40935 120693, 41055 120283, 40984 120078, 40891 120080, 40927 119761, 40902 119326, 40808 118962, 40775 118936, 40690 119317, 40642 119292, 40617 119136, 40666 118864, 40733 118575, 40747 118274, 40765 118204, 40822 118479, 40855 118554, 40940 118159, 41015 117994, 41038 117660, 41078 117340, 41284 116909, 41231 116854, 41170 116552, 41279 116484, 41140 116433, 40929 116541, 40868 116284, 40897 116124, 40745 116071, 40634 115906, 40632 115767, 40705 115521, 40730 115062, 40927 115022, 40990 115139, 40968 115320, 41035 115494, 41054 115226, 41119 115118, 41169 114738, 41259 114825, 41472 114524, 41525 114208, 41451 114180, 40917 113420, 40937 113343, 41219 113156, 41362 112973, 41270 112849, 41254 112554, 41194 112394, 41062 112384, 40975 112475, 40838 112528, 40816 112401, 40718 112361, 40745 112192, 40690 111957, 40598 111447, 40890 110922, 40889 110737, 40836 110775, 40757 110641, 40757 110459, 40731 110070, 40799 109881, 40874 109845, 40904 109699, 40875 109313, 40974 109296, 40990 109049, 41118 108830, 41130 108710, 41238 108243, 41150 107885, 41279 107595, 41556 107763, 41693 107879, 41557 108359, 41595 108818, 41673 108695, 41919 108567, 42073 108574, 42132 108654, 42286 108579, 42330 108646, 42440 108693, 42350 108523, 42438 108401, 42579 108519, 42637 108229, 42424 108110, 42221 107667, 42411 107536, 42181 107261, 42537 106908, 42767 107048, 42936 107335, 43055 107368, 43097 107513, 43366 107437, 43306 107073, 43182 106849, 43123 106812, 43063 106560, 43083 106441, 43331 106232, 43509 105528, 43637 105160, 43807 105021, 44351 104509, 44803 104559, 45345 104667, 45660 104709, 45785 104635, 46197 104955, 46251 104962, 46215 104945, 46234 104628, 46193 104483, 46273 104392, 46445 104532, 46628 104818, 46807 104657, 46802 104408, 46536 104297, 46374 104104, 46424 104051, 46462 103793, 46414 103721, 46151 103924, 46246 104365, 46082 104371, 46014 104302, 46079 103798, 46092 103325, 46245 103267, 46320 103282, 46370 103240, 46466 102961, 46654 103216, 46984 103089, 47079 103117, 47153 102995, 47334 102916, 47398 102930, 47791 102908, 47842 102889, 48162 102825, 48214 102889, 48058 102998, 48060 103341, 47898 103671, 48048 103640, 48074 103360, 48304 103328, 48459 103485, 48675 103443, 48921 103487, 48971 103424, 49012 103489, 49517 103390, 49313 103137, 49322 103118, 49073 102855, 49329 102621, 49495 102572, 49800 102575, 50067 102637, 50227 102894, 50528 102716, 50971 102866, 51195 102861, 51121 102672, 50655 102231, 51226 102367, 51573 102497, 51601 102525, 51897 102661, 51821 103018, 51929 103206, 52348 103245, 52419 103082, 52872 103051, 53058 103002, 53396 103083, 53372 102914, 53495 102723, 53679 102970, 53652 103076, 54044 103042, 54297 103001, 54488 102914, 54460 102886, 54772 102835, 54989 102481, 55098 102519, 55176 102722, 55297 102770, 55169 102855, 55529 102907, 55885 102741, 55913 102928, 55881 103089, 56057 103132, 56097 103022, 56248 102854, 56401 102766, 56440 102841, 56715 102836, 57049 102691, 57122 102419, 57278 102597, 57290 102727, 57353 102766, 57302 102812, 57354 102803, 57439 102630, 57593 102515, 57585 102421, 57664 102434, 57617 102266, 57786 101936, 57868 102121, 57971 102427, 58260 102239, 58317 101953, 58389 101991, 58462 102115, 58439 102199, 58521 102252, 58907 102200, 58954 102445, 59046 102440, 59109 102376, 59151 102163, 59105 102169, 59146 102062, 59356 102113, 59338 102205, 59260 102274, 59335 102416, 59345 102374, 59505 102441, 59446 102506, 59439 102771, 59465 102798, 59508 102742, 59616 102722, 59677 102788, 59543 102874, 59665 102972, 59914 102988, 60241 102811, 60840 102283, 61082 102235, 61133 101982, 61256 101889, 61397 102096, 61731 102268, 61738 102342, 61969 102451, 62118 102641, 62319 102503, 62687 102504, 63194 102340, 63358 102348, 63760 102288, 63878 102311, 64214 102268, 64083 102141, 64090 102040, 64390 101954, 64426 102126, 64367 102265, 64389 102596, 64543 102642, 64489 102807, 64596 102940, 64810 102777, 64823 102707, 65313 102750, 65707 102604, 66086 102383, 66205 102382, 66480 102342, 66088 102710, 66230 102849, 66332 102750, 66499 102802, 66889 102649, 66991 102574, 67293 102447, 67360 102447, 67701 102324, 67773 102544, 67887 102633, 67922 102597, 68384 102610, 68597 102382, 68614 102129, 68909 101754, 69031 101768, 69191 101854, 69327 101871, 69537 102127, 69233 102238, 69011 102701, 69384 102672, 69683 102467, 69779 102550, 69782 102799, 69655 103141, 69818 103191, 69618 103248, 69591 103373, 69858 103211, 70062 103377, 70373 103214, 70474 103282, 70555 103452, 70344 103586, 70391 103728, 70782 103798, 70905 103793, 70806 103354, 71297 103174, 71380 103089, 71462 103114, 71547 102957, 71793 102809, 72140 102520, 72186 102525, 72389 102362, 72580 102289, 72611 102315, 72535 102670, 72544 102884, 72236 103047, 72237 103073, 72525 103168, 72779 103052, 72823 102984, 72898 103039, 72928 103153, 73222 103288, 73295 103018, 73450 103029, 73644 102977, 73847 103010, 73875 102978, 74186 102898, 73915 102651, 74090 102604, 74571 102715, 74661 102889, 75004 103075, 75258 102974, 75439 102956, 75574 103240, 75956 103031, 76299 103060, 76515 103140, 76538 103184, 76809 103118, 76849 103084, 77240 102993, 77126 102706, 77356 102978, 77510 102976, 77507 102741, 77545 102710, 77663 102759, 77668 102946, 77858 102996, 77952 102741, 77609 102635, 77617 102522, 78023 102499, 78169 102538, 78325 102498, 78414 102540, 78762 102372, 79051 102271, 79150 102138, 79262 102170, 79478 102422, 79801 102043, 79885 102001, 80155 101803, 80254 101746, 80463 101586, 80611 101435, 80893 101793, 81238 101890, 81507 101843, 81662 101912, 81631 102200, 81719 102293, 81773 102114, 82047 101849, 82564 101937, 82706 102044, 82503 102174, 82391 102373, 82538 102309, 82913 101946, 83139 101911, 83193 101633, 83349 101514, 83440 101736, 83685 101935, 83760 101964, 83767 102077, 84077 102548, 84232 102322, 84631 102230, 84758 102536, 84960 102557, 85068 102451, 84941 102429, 84633 102228, 85126 102036, 85398 102015, 85573 101974, 85741 102024, 85931 101954, 86115 101955, 86016 101867, 86041 101723, 86244 101661, 86275 101877, 86245 101972, 86283 102339, 86450 102662, 86643 102768, 86769 102683, 86710 102436, 87155 102575, 87202 102648, 87595 102571, 87633 102615, 87740 102547, 87998 102474, 88271 102533, 88261 102606, 87960 102785, 88128 103007, 88202 102956, 88359 103045, 88680 102998, 89222 102938, 89243 102945, 89515 102924, 89615 102963, 89597 103055, 89690 103240, 89800 103320, 90333 103420, 90539 103256, 90597 103254, 90617 103077, 90900 102750, 91275 102945, 91463 103176, 91227 103240, 91092 103378, 91052 103481, 91291 103610, 91450 103581, 91650 103467, 91780 103562, 91783 103738, 91573 104311, 91611 104328, 91828 104210, 92044 104293, 92381 104155, 92471 104306, 92325 104416, 92377 104554, 92824 104574, 92899 104492, 92802 104159, 93307 103878, 93406 103844, 93510 103666, 93781 103441, 94089 103147, 94193 103134, 94364 102956, 94571 102807, 94470 103223, 94514 103381, 94248 103537, 94233 103632, 94499 103667, 94804 103460, 94827 103413, 94875 103437, 94915 103557, 95238 103695, 95351 103341, 95871 103225, 95882 103192, 96179 103030, 95913 102815, 96138 102733, 96544 102770, 96659 102821, 96700 102937, 97014 103062, 97223 102945, 97520 102892, 97608 103156, 97855 103060, 97955 102968, 98727 102806, 99483 102970, 99748 103059, 100038 102960, 99956 102800, 100051 102566, 100266 102601, 100058 102551, 100064 102492, 100030 102541, 99694 102416, 99708 102322, 100109 102392, 100361 102334, 100532 102386, 100784 102279, 101072 102229, 101240 102046, 101637 102556, 101816 102918, 102184 103285, 102019 103454, 102085 103588, 102066 103736, 101839 103973, 102074 104144, 101846 104344, 101760 104385, 101864 104564, 101945 104543, 102014 104450, 102275 104489, 102405 104459, 102376 104629, 102411 104678, 102451 104256, 102680 103942, 102346 103467, 102341 103247, 102250 102982, 102397 102895, 102731 102853, 102740 102888, 102996 102768, 103387 102987, 103486 103101, 103596 102948, 103455 102870, 103467 102836, 103736 102747, 103805 102415, 104035 102223, 104464 102286, 104663 102434, 104518 102525, 104297 102945, 104345 102967, 104680 102838, 105340 102801, 106125 102719, 106282 102724, 106681 102516, 106957 102500, 107141 102447, 107720 102513, 108053 102656, 108224 102608, 108469 102660, 108685 102551, 108635 102442, 108419 102265, 108640 102325, 108840 102275, 109154 102140, 109114 102339, 109152 102472, 109410 102392, 109797 102037, 110142 101906, 110458 101691, 110661 101924, 110765 102084, 111114 102197, 111396 102219, 111501 102275, 111484 102645, 111727 102914, 112139 102810, 112410 102597, 112739 102249, 112982 102181, 113035 101905, 113178 101773, 113348 102030, 113410 102047, 113648 102337, 113692 102355, 113916 102639, 114059 102420, 114483 102266, 114973 102008, 115149 101988, 115499 101861, 115628 101866, 116006 101756, 115861 101625, 115867 101540, 116101 101437, 116138 101639, 116099 101740, 116127 102098, 116295 102422, 116429 102475, 116596 102410, 116547 102246, 116621 102164, 117011 102215, 117057 102284, 117824 102077, 118150 102196, 118156 102230, 117818 102363, 117817 102486, 118028 102702, 118051 102670, 118271 102766, 118416 102736, 119023 102833, 119058 102857, 119321 102918, 119410 102985, 119393 103074, 119563 103446, 119649 103408, 120081 103746, 120339 103633, 120339 103450, 120649 103177, 121048 103536, 121230 103840, 120986 103834, 120856 103931, 120813 104036, 121072 104265, 121171 104277, 121402 104204, 121525 104322, 121508 104565, 121326 105001, 121363 105024, 121595 104957, 121781 105075, 122112 104983, 122173 105016, 122181 105173, 122280 105173, 122155 105241, 122165 105339, 122595 105444, 122672 105409, 122547 105080, 122838 105009, 123056 104896, 123159 104884, 123260 104743, 123520 104572, 123827 104332, 123913 104329, 124291 104057, 124200 104427, 124245 104553, 124007 104664, 123989 104751, 124252 104784, 124514 104627, 124538 104582, 124626 104611, 124694 104710, 124941 104777, 124983 104567, 125106 104449, 125553 104351, 125575 104284, 125845 104127, 125573 103988, 125783 103882, 126295 103875, 126431 103973, 126632 104017, 126860 103899, 127125 103831, 127269 104068, 127597 103827, 127626 103849, 127675 103799, 128244 103837, 128406 103915, 128605 103677, 128716 103854, 128759 104020, 128874 103995, 128916 104046, 128974 104043, 129029 103893, 129275 103787, 129447 103791, 129671 103577, 129602 103440, 129713 103206, 129320 103146, 129335 103050, 129719 103003, 129862 103020, 130041 102895, 130164 102932, 130487 102739, 130799 102594, 130951 102403, 131045 102444, 131276 102732, 131415 102812, 131561 103097, 131815 103267, 131982 103425, 131825 103585, 131872 103711, 131816 103924, 131616 104110, 131841 104234, 131829 104315, 131938 104364, 132261 104347, 132445 104089, 132609 104040, 132419 104033, 132330 103782, 132117 103600, 132132 103546, 132005 103154, 132245 103050, 132452 103073, 132708 102981, 133070 103149, 133247 103344, 133509 103064, 133475 102915, 133554 102723, 133791 102553, 134312 102774, 134819 103028, 134408 102897, 134285 102945, 134096 103200, 134206 103391, 134413 103369, 134601 103463, 135139 103493, 135192 103373, 135744 103302, 135773 103279, 136353 103379, 136882 103330, 137201 103288, 137623 103123, 137969 103106, 138563 103213, 138786 103317, 138974 103260, 139246 103310, 139402 103231, 139102 102993, 139340 103043, 139565 102966, 139877 102792, 139845 102935, 139898 103096, 140036 103041, 140375 102674, 140862 102398, 141105 102152, 141382 102472, 141741 102568, 142001 102545, 142150 102604, 142135 102943, 142396 103154, 142942 102885, 143193 102610, 143529 102283, 143763 102185, 143838 102080, 143878 101879, 143969 101790, 144119 101959, 144311 102032, 144524 102223, 144678 102262, 144829 102401, 144974 102233, 145163 102159, 145511 102099, 145541 102073, 145998 101872, 146354 101835, 146500 101798, 146645 101832, 146867 101744, 146901 101517, 147271 101389) (143581 135001, 143976 135192, 143940 135078, 144043 134952, 144013 134901, 143594 134807) (68879 134758, 69248 134988, 69214 134862, 69298 134787, 69215 134663, 68774 134519) (65782 134382, 65714 134660, 65735 134790, 65796 134809, 66043 134707, 66253 134741, 66493 134669, 66828 134926, 67017 134614, 66814 134713, 66601 134499, 66540 134559, 66487 134521, 66270 134667, 66058 134661, 65904 134347, 65827 134312) (164793 134568, 164770 134690, 164905 134902, 164993 134817, 165283 134808, 165433 134869, 165622 134594, 165601 134517, 165139 134610, 164916 134441) (143356 134540, 143449 134773, 143588 134782, 143708 134502, 143559 134451) (170249 134097, 170241 134167, 170413 134497, 170597 134585, 170823 134629, 170854 134376, 170475 134334, 170593 134042, 170406 134003) (137415 134174, 137526 134449, 137609 134353, 138162 134483, 138362 134150, 137891 134139, 137765 134170, 137577 134038) (45978 133615, 46251 133757, 46366 133686, 46383 133467, 46213 133333) (189640 132105, 190033 132258, 190139 132148, 189973 132090) (193713 118969, 193757 118982, 193790 118915, 193726 118073, 193676 118023) (191372 108040, 191400 108103, 191304 108436, 191327 108481, 191556 108335, 191594 108247, 191510 107981, 191407 107912) (188119 105974, 188080 106056, 188126 106140, 188400 105920, 188318 105909) (188652 105805, 188679 106125, 189087 106087, 188973 105793) (189497 105786, 189534 105812, 189535 105925, 189583 105823, 189784 105774, 189926 105683, 189733 105606) (131571 104488, 131787 104761, 131925 104881, 132137 104879, 132179 104738, 132085 104738, 131680 104507, 131686 104442) (188398 103912, 188405 103992, 188567 104111, 188360 104298, 188335 104303, 188064 104441, 188048 104640, 188235 104846, 188465 104447, 188408 104330, 188567 104256, 188638 104158, 188640 104046, 188713 103903, 188484 103780) (126133 104488, 125891 104479, 125575 104527, 125512 104660, 125931 104638, 126033 104613, 126166 104672, 126253 104598, 126251 104514, 126186 104425) (187466 104348, 187379 104462, 187442 104536, 187763 104398, 187558 104297, 187570 104259, 187375 104173) (120287 104169, 120666 104304, 120664 104164, 120395 103967) (133346 103832, 133312 103838, 133367 104088, 133469 104201, 133668 104192, 133560 104017, 133663 103708, 133512 103644) (182922 103927, 182951 104078, 183087 104160, 183256 104093, 183573 103898, 183598 103833, 183459 103611, 183514 103412) (133024 103609, 132839 103701, 132613 103652, 132648 103884, 132899 103876, 133002 103960, 133310 103833, 133476 103591, 133254 103347) (90511 103764, 90906 103803, 90904 103660, 90610 103549) (95768 103681, 96057 103732, 96358 103662, 96506 103784, 96595 103702, 96614 103587, 96533 103461, 96475 103535, 96214 103469, 95938 103429) (183989 103559, 184007 103692, 183892 103752, 184037 103736, 184199 103460, 184055 103448) (73775 103408, 73759 103427, 74218 103505, 74486 103509, 74513 103446, 74456 103334, 74390 103386, 74146 103310) (103243 103402, 103363 103347, 103697 103417, 103838 103273, 103639 103293, 103500 103088) (175394 103184, 175246 103409, 175829 103298, 175863 103262, 176009 103310, 176077 103263, 176079 103189, 176037 103148) (59468 102800, 59496 102829, 59618 102772) (114617 102545, 114800 102539, 114898 102432, 114783 102428, 114493 102288)), ((108850 136644, 108348 136570, 108610 136156)), ((104897 136284, 104997 136403, 104652 136500, 104722 136201)), ((174305 135194, 174168 135529, 174037 135603, 174086 135371, 174158 135328, 174135 135113)), ((136146 135168, 135649 135133, 135649 135090, 135940 134969)), ((41043 121936, 41186 122120, 41202 122554, 40944 122100, 40904 121929, 40928 121890)), ((123856 103788, 123975 104015, 123854 104135, 123736 103997, 123463 103841, 123678 103718)), ((181388 103391, 181538 103439, 181342 103486, 181240 103467, 181357 103063)), ((119724 102830, 119639 103036, 119662 103128, 119569 103134, 119480 102926, 119554 102702)), ((173519 102386, 173602 102512, 173609 102599, 173728 102771, 173514 102996, 173313 102755, 172941 102588, 173164 102419, 173266 102414, 173364 102332)), ((94131 102562, 94237 102760, 94123 102883, 94024 102765, 93841 102777, 93907 102672, 93790 102609, 93947 102512)), ((150965 102382, 150913 102507, 150983 102711, 150743 102752, 150574 102561, 150694 102218)), ((68054 101957, 67990 102150, 68030 102280, 67838 102396, 67733 102292, 67830 101952)), ((72160 101873, 72322 102233, 72151 102379, 71998 102153, 71724 102100, 71823 101958, 71736 101883, 71999 101784)), ((169448 101850, 169401 101987, 169460 102194, 169226 102286, 169062 102121, 169154 101882, 169174 101745))) \ No newline at end of file diff --git a/stress_benchmark/resources/035.settings b/stress_benchmark/resources/035.settings new file mode 100644 index 0000000000..0106e70349 --- /dev/null +++ b/stress_benchmark/resources/035.settings @@ -0,0 +1,628 @@ +experimental=0 +infill_pattern=lightning +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=98 +skirt_brim_line_width=0.4 +minimum_support_area=0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=200.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=1.0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=30.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.0 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=10 +retraction_speed=35 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=1.2000000000000002 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=35 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=98 +material_is_support_material=False +raft_interface_speed=22.5 +skirt_brim_speed=20.0 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=98 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=15.0 +cross_infill_pocket_size=6.4 +support_bottom_material_flow=98 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=2 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=True +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.36 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=98 +raft_surface_speed=30.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=35 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=300 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=150.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=98 +anti_overhang_mesh=False +z_seam_x=150.0 +support_interface_material_flow=98 +wipe_retraction_retract_speed=35 +speed_support_bottom=30.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=98 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=80.0 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=50 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=2 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1.2000000000000002 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=35 +material_brand=empty_brand +initial_bottom_layers=5 +support_material_flow=98 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=Cura5-0_Terrain_04mmNozzle_v3 +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1.0 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=98 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=15.0 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=30.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=45.0 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.05 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=15.0 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=30.0 +bridge_fan_speed_3=0 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=tree +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=30.0 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=98 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=35 +bottom_layers=5 +material_print_temperature_layer_0=205.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=300 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1.2000000000000002 +wall_extruder_nr=-1 +machine_width=300 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=200.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=30.0 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=5 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=98 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=22.5 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=61.0 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=6.4 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=1.0 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=30.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=65.0 +bridge_skin_speed_3=15.0 +infill=0 +prime_tower_position_y=271.0 +jerk_support=8 +speed_wall_x_roofing=30.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=200.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=98 +prime_tower_position_x=291.0 +wipe_pause=0 +material_standby_temperature=180 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=400 +speed_infill=60.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=30.0 +speed_support=30.0 +speed_prime_tower=30.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=30.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=10 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=20.0 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=200.0 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=6.123233995736766e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=0.8 +material_bed_temperature=61.0 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=200.0 diff --git a/stress_benchmark/resources/035.wkt b/stress_benchmark/resources/035.wkt new file mode 100644 index 0000000000..2437697235 --- /dev/null +++ b/stress_benchmark/resources/035.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((105538 100642, 105460 100865, 105332 100671, 105324 100395))) \ No newline at end of file diff --git a/stress_benchmark/resources/036.settings b/stress_benchmark/resources/036.settings new file mode 100644 index 0000000000..496ddb57a3 --- /dev/null +++ b/stress_benchmark/resources/036.settings @@ -0,0 +1,627 @@ +experimental=0 +infill_pattern=cubic +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=95.0 +skirt_brim_line_width=0.42 +minimum_support_area=0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=12.0 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=205.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.42 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.12 +top_bottom_thickness=0.84 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=25.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.84 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.42 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.0 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=0 +retraction_speed=45 +acceleration_roofing=500 +raft_interface_jerk=12.0 +support_roof_height=0.96 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=45 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=2 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=12.0 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=12.0 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=12.0 +material_flow=95.0 +material_is_support_material=False +raft_interface_speed=18.75 +skirt_brim_speed=30 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.126 +acceleration_wall_x=500 +prime_tower_flow=95.0 +machine_steps_per_mm_x=50 +speed_travel_layer_0=35 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=12.5 +cross_infill_pocket_size=5.04 +support_bottom_material_flow=95.0 +skin_material_flow=95.0 +roofing_material_flow=95.0 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.5200252002520025 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=12.0 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.36 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=3 +support_initial_layer_line_distance=0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.04 +ironing_inset=0.381 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.38 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=95.0 +raft_surface_speed=25.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=45 +acceleration_ironing=500 +line_width=0.42 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=0 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_inner +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=12.0 +speed_travel=150.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.76 +infill_material_flow=95.0 +anti_overhang_mesh=False +z_seam_x=0.0 +support_interface_material_flow=95.0 +wipe_retraction_retract_speed=45 +speed_support_bottom=25.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=95.0 +bridge_wall_min_length=2.24 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=40 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=12.0 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=50 +support_xy_distance_overhang=0.42 +acceleration_support_roof=500 +retract_at_layer_change=False +support_roof_line_width=0.42 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.42 +support_top_distance=0.24 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.18 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.96 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=1.26 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=45 +material_brand=empty_brand +initial_bottom_layers=7 +support_material_flow=95.0 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=12.0 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=12.0 +top_skin_preshrink=0.84 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.12 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=2.5200252002520025 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=GG_Best_Dragon_1 +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.84 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=12.0 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=95.0 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=12.5 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=25.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=12.0 +raft_surface_line_width=0.42 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=50 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.12 +sub_div_rad_add=0.42 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.12 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=buildplate +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=True +top_skin_expand_distance=0.84 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=12.5 +bridge_fan_speed=100 +interlocking_beam_width=0.84 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.38 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=33.333333333333336 +bridge_fan_speed_3=0 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=tree +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=25.0 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.12 +raft_base_line_width=0.8 +prime_tower_line_width=0.42 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=12.0 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=outside_in +wall_x_material_flow_roofing=95.0 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=concentric +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.42 +retraction_retract_speed=45 +bottom_layers=7 +material_print_temperature_layer_0=205.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.84 +jerk_ironing=12.0 +machine_depth=235 +acceleration_skirt_brim=500 +skin_overlap=30.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=True +adaptive_layer_height_enabled=False +support_interface_height=0.96 +wall_extruder_nr=-1 +machine_width=235 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=12.0 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=12.0 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=205.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=25.0 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.42 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=7 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.84 +layer_height_0=0.12 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=95.0 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=1 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=12.0 +raft_base_speed=18.75 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=12.0 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=5.04 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.84 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=25.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=65 +bridge_skin_speed_3=12.5 +infill=0 +prime_tower_position_y=203.535 +jerk_support=12.0 +speed_wall_x_roofing=30 +speed_layer_0=20.0 +wall_line_width_0=0.42 +jerk_support_infill=12.0 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.12 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=205.0 +jerk_print_layer_0=12.0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=95.0 +prime_tower_position_x=223.535 +wipe_pause=0 +material_standby_temperature=180 +jerk_wall=12.0 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=12.0 +support_z_distance=0.24 +machine_height=250 +speed_infill=60 +raft_surface_thickness=0.12 +infill_randomize_start_location=False +speed_roofing=25.0 +speed_support=25.0 +speed_prime_tower=25.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.42 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.42 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=0 +infill_line_width=0.42 +speed_wall_x=30 +ooze_shield_dist=2 +raft_interface_line_width=0.84 +support_type=buildplate +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.144 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=25.0 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.84 +retraction_count_max=100 +jerk_infill=12.0 +speed_ironing=16.666666666666668 +gantry_height=25 +bottom_skin_expand_distance=0.84 +min_feature_size=0.105 +layer_0_z_overlap=0.15 +material_initial_print_temperature=215.0 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=5.143516556418883e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=0 +expand_skins_expand_distance=0.84 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=12.0 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=205.0 diff --git a/stress_benchmark/resources/036.wkt b/stress_benchmark/resources/036.wkt new file mode 100644 index 0000000000..b446df5126 --- /dev/null +++ b/stress_benchmark/resources/036.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((121388 114032, 121864 114082, 122072 114095, 122751 114286, 123176 114526, 123628 115013, 123660 115052, 123686 115064, 124108 115321, 124414 115470, 125223 116018, 125499 116259, 125729 116424, 126182 116776, 126279 116928, 126493 117177, 126607 117388, 126679 117838, 126648 118351, 126483 118764, 126431 118936, 126176 119342, 126107 119410, 125957 119769, 125849 120186, 125789 120699, 125629 120953, 125359 121178, 125203 121271, 124971 121431, 124460 121712, 124334 121817, 123797 121962, 123166 122179, 122754 122238, 122089 122409, 121296 122573, 121147 122612, 120003 122710, 118982 122698, 118634 122712, 118143 122674, 117670 122751, 117333 122786, 116462 122746, 115663 122601, 115265 122396, 114854 122220, 114347 121911, 113956 121494, 113812 121290, 113687 120672, 113765 120296, 113322 119208, 113269 118000, 113483 117108, 113604 116860, 113909 116508, 114406 115892, 114825 115607, 115154 115399, 115949 115145, 116618 115084, 117232 114925, 118095 114619, 118395 114533, 119157 114269, 119722 114149, 120298 114060, 120912 114029) (121263 114638, 120566 114766, 119835 114963, 119063 115234, 118193 115571, 117603 115895, 117303 116186, 117605 116222, 117921 116412, 118252 116777, 118419 117050, 118566 117498, 118948 118551, 118965 118880, 118812 119617, 118364 119738, 117904 119832, 116763 120138, 116484 120172, 115931 120196, 115199 120569, 114801 120598, 114879 120686, 115473 121094, 116247 121402, 117043 121434, 117516 121274, 117778 121152, 118062 120974, 118426 120523, 118677 120173, 118771 119812, 118812 119617, 118887 119597, 119360 119454, 120054 119224, 120519 119045, 121009 118829, 120921 118129, 121443 116921, 121675 116410, 122014 116103, 122426 115920, 123157 115934, 124016 116102, 123930 116424, 123816 116745, 123690 116914, 123553 117161, 123230 117517, 122857 117830, 122367 118159, 121933 118398, 121517 118604, 121009 118829, 121095 119514, 121241 119796, 121469 120081, 121754 120588, 122072 120846, 122598 121111, 122735 121130, 123182 121220, 123860 121105, 124594 120695, 124751 120557, 125112 120027, 125361 119552, 125531 118873, 125454 117597, 125355 116997, 125170 116591, 124654 116227, 124016 116102, 124034 115771, 123922 115376, 123660 115052, 123015 114765, 122542 114637, 121940 114594) (115382 116201, 114771 116440, 114478 116880, 114275 117562, 114204 117858, 114059 118691, 114152 119452, 114214 119608, 113835 119958, 113765 120296, 113869 120552, 114085 120649, 114801 120598, 114736 120524, 114581 120250, 114351 119951, 114214 119608, 114290 119538, 114389 119466, 114703 119029, 114876 118930, 115043 118770, 115316 118297, 115622 117898, 116337 117236, 116671 116799, 117303 116186, 116865 116134)), ((112971 116946, 112971 116987, 113166 117294, 113249 117705, 113208 118014, 113124 118151, 113003 118233, 112971 118240, 112971 118261, 112876 118284, 112876 116900, 112901 116893))) \ No newline at end of file diff --git a/stress_benchmark/resources/037.settings b/stress_benchmark/resources/037.settings new file mode 100644 index 0000000000..4a40bf459b --- /dev/null +++ b/stress_benchmark/resources/037.settings @@ -0,0 +1,627 @@ +experimental=0 +infill_pattern=lines +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=2 +wall_x_material_flow_layer_0=101 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=190 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +top_bottom_thickness=1.2 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=20 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=101 +support_xy_distance=0.8 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.8 +acceleration_layer_0=350 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=10 +retraction_speed=25 +acceleration_roofing=350 +raft_interface_jerk=8 +support_roof_height=0.8 +acceleration_travel=500 +acceleration_wall_x_roofing=350 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=8 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=16.875 +skirt_brim_speed=20.0 +retraction_amount=6.5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0 +acceleration_wall_x=350 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=90 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=12 +cross_infill_pocket_size=0.40404040404040403 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=350 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=350 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.4 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=350 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=101 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=22.5 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=350 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=225 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=10 +speed_travel=100 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=112.5 +support_interface_material_flow=100 +wipe_retraction_retract_speed=25 +speed_support_bottom=20 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.2 +speed_slowdown_layers=1 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=55 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.4 +acceleration_support_roof=350 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.638 +cool_min_speed=12 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.15000000000000002 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.8 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=1.2000000000000002 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=8 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=False +acceleration_wall_0=350 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=8 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=2.4 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.1 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1.2 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=15.0 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=22.5 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=20 +support_bottom_wall_count=0 +speed_print_layer_0=20 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=55 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.1 +cool_fan_full_layer=3 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=2.4 +min_wall_line_width=0.34 +acceleration_support_infill=350 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=12 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=36.666666666666664 +bridge_fan_speed_3=0 +raft_speed=22.5 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=20 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=30 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.1 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=350 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=350 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=15 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=8 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=225 +acceleration_skirt_brim=350 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.8 +wall_extruder_nr=-1 +machine_width=225 +raft_smoothing=5 +acceleration_support_interface=350 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=350 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=190 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=30 +support_interface_enable=True +raft_base_acceleration=350 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=8 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=2.4 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=350 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=6 +jerk_travel_layer_0=10 +raft_base_speed=16.875 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=55 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=60 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=350 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=0.40404040404040403 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=101 +top_thickness=1.2 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=30 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=70 +bridge_skin_speed_3=12 +infill=0 +prime_tower_position_y=195.562 +jerk_support=8 +speed_wall_x_roofing=35 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=350 +material_print_temperature=190 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=45 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=215.562 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=350 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=250 +speed_infill=40 +raft_surface_thickness=0.1 +infill_randomize_start_location=False +speed_roofing=20 +speed_support=30 +speed_prime_tower=20 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=120 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=350 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=35 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=350 +infill_sparse_density=99 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=2.4 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=13.333333333333334 +gantry_height=25 +bottom_skin_expand_distance=2.4 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=190 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=2.4 +material_bed_temperature=55 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=190 diff --git a/stress_benchmark/resources/037.wkt b/stress_benchmark/resources/037.wkt new file mode 100644 index 0000000000..81e2c480a0 --- /dev/null +++ b/stress_benchmark/resources/037.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((107638 61798, 107744 62158, 108015 62180, 108062 62230, 108158 62595, 108629 62124, 108298 62134, 108653 62014, 109074 62244, 109253 61956, 109398 62376, 109778 62263, 110656 62109, 110664 62166, 111427 62029, 111455 62046, 111909 62070, 111589 62212, 111811 62557, 112026 62552, 112468 62660, 112801 62720, 113487 62365, 113536 62295, 113672 62301, 113685 62442, 113789 62647, 113875 62653, 114231 62320, 114654 62279, 115076 62173, 115173 62437, 115478 62555, 115710 62416, 115765 62591, 116266 62673, 116360 62845, 116641 62839, 116922 62956, 117235 62822, 117458 63223, 117459 62791, 117998 62730, 117546 62587, 117967 62033, 118261 61840, 118748 61934, 119096 62353, 119359 62691, 119801 62728, 120175 62684, 120280 62944, 120774 62898, 120901 62842, 121043 63014, 121518 63116, 121805 63356, 122041 63450, 122526 63294, 122632 63225, 123064 63424, 123244 63527, 123317 63515, 124068 63678, 124174 63956, 124422 63794, 124995 63832, 125404 64201, 126132 64693, 126089 64441, 126457 64147, 126777 64239, 127418 64478, 128049 64082, 128275 64819, 128762 64965, 128929 64780, 128811 65015, 129252 65023, 130043 64726, 130423 64443, 130492 64314, 130544 64398, 130731 64407, 131153 64554, 131278 64749, 131377 65183, 131928 65221, 132241 65138, 132370 65393, 132667 65433, 132789 65394, 133284 65774, 133424 65732, 133566 65611, 134116 65771, 134053 66534, 134180 66604, 134271 66552, 134167 65762, 134697 65797, 134853 65990, 134596 66599, 134863 66665, 135169 66580, 135312 66469, 135630 66611, 135871 66841, 136072 66764, 136384 66966, 136641 67299, 136703 67429, 136850 67448, 137216 67207, 137434 67416, 137720 67474, 137803 67771, 137931 67972, 138182 67790, 138010 67383, 138471 67543, 138462 67769, 138718 68077, 139093 67699, 139253 67684, 139313 67819, 139270 68249, 139653 68632, 139943 68770, 140305 68715, 140118 68196, 140039 68075, 140343 68073, 140824 68399, 140847 68453, 140689 68774, 141071 69419, 141379 69254, 141750 69433, 141961 69711, 142034 69702, 143056 70297, 143079 70701, 143137 70925, 143207 70998, 143671 70858, 144069 70888, 144063 70756, 144170 70669, 144256 70867, 144197 71122, 143918 71390, 143754 71388, 143741 71894, 143973 71983, 144178 71866, 144287 71644, 144585 71807, 145227 72064, 145344 72079, 145422 72196, 145734 72514, 146087 72750, 146266 73205, 146504 73286, 146903 72997, 147138 73558, 147258 73710, 147374 73949, 147816 74245, 148300 74404, 148262 73694, 148482 73644, 148546 74002, 148808 73791, 148947 73748, 149399 74308, 149320 74843, 149861 75048, 150004 75194, 150297 75228, 150697 75742, 150898 76141, 151018 76209, 151055 76307, 151091 76961, 151179 77070, 151126 77332, 151570 77909, 151580 78020, 151677 78055, 152478 78580, 152696 78890, 153246 78969, 153380 79090, 153611 79598, 153792 79860, 153905 79874, 153936 79591, 154122 79201, 154206 79214, 154328 79854, 154605 79798, 154504 80124, 154638 80595, 154936 80806, 155128 80869, 155269 81264, 155431 81461, 155986 81903, 156258 82619, 156519 82902, 156556 83165, 157009 83410, 157167 83650, 157544 83967, 157864 84528, 158004 84588, 158073 85144, 158021 85262, 158066 85649, 158272 85891, 158599 86346, 158557 86503, 158724 86951, 158727 86979, 158994 87451, 158791 87519, 158896 87858, 159613 88094, 159336 88273, 159649 88589, 159739 88888, 160231 89076, 160204 89377, 160601 89355, 160838 89733, 161221 90494, 161383 90683, 161672 91308, 161571 91396, 161971 91966, 162496 92318, 162462 92594, 162351 92817, 162180 92856, 161919 93082, 162058 93324, 162016 93586, 162077 93918, 161818 93768, 161505 94100, 161903 94483, 162130 94357, 162118 94570, 162029 94651, 161900 95118, 162044 95320, 162237 95693, 162398 96260, 162247 96429, 162428 97079, 162416 97087, 162649 97642, 162676 97681, 162746 98177, 162913 98358, 162884 98734, 162808 98875, 163144 99515, 163166 99796, 163123 100064, 163535 100638, 163830 100958, 163875 101096, 164441 101577, 164657 102608, 164595 102645, 164362 103065, 164983 103275, 165146 103843, 164874 103985, 165021 104245, 165545 104603, 165903 105016, 165782 105809, 165812 105910, 165682 106040, 165320 106161, 165251 107010, 165111 107456, 165237 108118, 165064 108353, 165277 108600, 165182 108913, 165174 109503, 165333 109641, 165308 109854, 165320 110236, 165568 110298, 165474 110446, 165754 111299, 165547 111687, 165981 111636, 165974 111657, 165481 111804, 165584 111929, 165889 112497, 165964 112767, 165945 113418, 166046 114684, 165503 115419, 165817 116075, 165383 116036, 165285 116518, 165742 116536, 165617 116819, 165673 117116, 165822 117431, 165683 117658, 165526 117986, 165568 118331, 165417 118612, 165467 118745, 165151 118758, 164957 118933, 164905 119163, 165368 119289, 165490 119256, 165516 119450, 165484 119467, 165217 120121, 165067 120571, 165157 121003, 165172 121288, 165011 121820, 164765 121800, 164445 121913, 164355 122565, 164523 122609, 164201 122923, 164910 123207, 164748 123566, 165050 124082, 164563 125083, 164392 125386, 164152 125996, 163871 126297, 163547 126535, 163469 126722, 163349 126839, 163017 127240, 162763 127834, 162564 127878, 162590 127731, 162175 127658, 162065 127927, 162342 128096, 162190 128472, 162603 128759, 162611 128912, 162760 129315, 162472 129764, 162485 130421, 162416 130697, 162248 130937, 162311 131118, 162261 132151, 162371 132801, 162325 132903, 162382 133095, 162566 133491, 162586 133703, 162446 133854, 162530 133985, 162238 134286, 161767 134062, 161670 134133, 161712 134452, 160591 134891, 160035 135235, 159899 135389, 159790 135615, 159612 135650, 159146 136137, 158963 136445, 158739 136611, 158161 136703, 157900 137055, 157994 137249, 157778 137593, 158521 137562, 158398 137737, 158264 137783, 157781 138194, 157602 138122, 157415 138501, 157068 138911, 156974 139057, 156760 139345, 156410 139507, 156292 139768, 155917 139738, 155750 139652, 155490 139865, 155149 140040, 155280 140188, 155685 140146, 155753 140218, 155589 140305, 155221 140427, 155160 140620, 155287 141386, 155238 141436, 155052 142258, 154966 142371, 154495 143275, 154456 143369, 154201 143734, 154049 144255, 153871 144409, 153698 144744, 153645 145119, 153283 144989, 152823 145452, 152842 145920, 152754 146154, 152301 146979, 152110 147120, 152044 147501, 151917 147924, 151659 148182, 151360 148687, 151430 149144, 151420 149256, 151372 149220, 150907 149175, 150656 149553, 150614 149805, 150902 150066, 151046 150526, 150329 151460, 150202 151491, 149753 151374, 149417 151668, 149174 152094, 148972 151942, 148562 152188, 148517 152674, 148526 152895, 148418 152955, 148350 153100, 148103 153019, 147353 153203, 147243 153213, 147088 153415, 147014 153879, 146967 153867, 146071 154506, 145993 154466, 145495 154367, 145205 154083, 145100 154068, 144872 153638, 144729 153643, 144741 154034, 144882 154200, 144749 154383, 144397 154504, 144154 154600, 143646 154758, 143366 154743, 143275 155263, 143228 155261, 143174 155353, 142516 155406, 142285 156030, 142168 156078, 142060 156390, 142113 156052, 141577 156346, 141933 156689, 141829 157065, 141794 157330, 141700 157397, 141716 157431, 140903 157507, 140293 157893, 140034 158441, 140068 157709, 140640 157507, 140116 157450, 139847 157552, 139436 158276, 139837 158458, 139336 158461, 138686 158872, 137909 158995, 137861 158740, 137635 158791, 137532 158912, 137450 159332, 137196 159858, 135972 160278, 135835 160233, 135518 160665, 135594 160729, 135517 160742, 135391 160690, 135007 160607, 134864 160622, 134745 160899, 134671 161326, 134448 161485, 134359 161330, 134092 161332, 133701 161441, 133695 161585, 133506 161665, 133254 161563, 132782 161658, 132173 162159, 132000 162484, 131789 162307, 131500 162273, 131201 162404, 130891 162617, 130781 162604, 130708 162672, 130305 162626, 130092 162964, 129726 162769, 129546 162178, 129065 162143, 129020 162183, 128325 162112, 128244 162139, 128097 162067, 128237 162029, 128235 161603, 128399 161569, 128252 161425, 127574 161299, 127228 161617, 127387 161818, 127212 161733, 127046 162124, 126770 162433, 126418 162319, 126131 162762, 125819 162784, 125715 163046, 125310 163312, 125114 163304, 125127 163483, 124763 163835, 124536 163765, 124474 163510, 124167 163601, 124074 163593, 123247 163771, 122981 163958, 122697 164085, 122335 164007, 121863 164241, 121858 164227, 121137 164199, 121067 164467, 120021 164611, 119693 163971, 119739 163581, 119366 163183, 119105 163154, 119020 163401, 119114 163896, 118883 163770, 118631 163914, 118470 163732, 118453 163882, 118177 163847, 118321 164160, 117915 164427, 118067 164735, 117856 164553, 117582 164442, 117481 164518, 117068 164577, 116939 164916, 116709 165055, 116192 165087, 116027 164799, 116062 164641, 116039 164238, 115539 163917, 115085 163960, 115015 163931, 114539 163932, 114354 164048, 114197 164264, 114091 164522, 114280 165180, 113539 164858, 113371 164716, 113113 164784, 112690 164606, 111994 165075, 111490 165262, 111219 165331, 110298 164515, 110557 165316, 110477 165308, 110032 164930, 109991 164995, 109892 164947, 109392 164932, 109305 165141, 109136 165242, 109037 165177, 108134 165011, 107889 165174, 107890 165207, 107535 165027, 107281 164788, 107097 164792, 106984 164860, 106574 164973, 106296 164837, 105829 164535, 105493 164437, 105167 164174, 104876 164084, 104653 164317, 103974 164179, 103578 163873, 103532 164101, 102784 163889, 102609 163627, 102484 163388, 101939 163456, 101877 163716, 101795 163419, 101351 163304, 101293 163693, 101638 163863, 101453 164071, 101246 163822, 100885 163533, 101153 162796, 101934 163113, 102341 163186, 102017 162680, 101132 162568, 100907 162322, 101047 162652, 100880 163530, 100496 163549, 100135 163399, 99760 163287, 99423 163126, 99214 162951, 98920 163149, 98490 163059, 98142 162563, 97901 162928, 97559 162428, 97072 162026, 96310 161931, 96778 162238, 96736 162288, 96671 162241, 96623 162260, 96193 161924, 95762 161666, 95631 161693, 95338 161385, 94738 161327, 94356 161354, 94035 161322, 94213 161133, 93952 160952, 93626 161035, 93167 160833, 92458 160573, 92483 160542, 91980 160109, 91620 160219, 91635 160057, 91176 159840, 91294 159570, 91504 159403, 91193 159130, 90531 159379, 89536 159374, 89282 159293, 89299 159127, 89111 158789, 89120 158769, 88695 158394, 88407 158566, 88150 158607, 87522 158118, 87379 158052, 86752 157585, 86554 157572, 86219 157667, 85893 157358, 85559 157215, 85735 156690, 85727 156510, 85591 156449, 85593 156521, 85081 156933, 85053 156526, 85152 156226, 84432 156133, 84073 156466, 84088 156721, 83864 156586, 83664 156539, 83838 156454, 84155 156068, 83957 155828, 83676 155305, 83334 155100, 82732 154931, 82745 154765, 82658 154885, 82135 154847, 81814 154578, 81757 154250, 81376 154469, 80767 154183, 80818 153959, 80751 153846, 80146 153555, 79859 153068, 79693 152867, 79265 152780, 78962 152586, 78662 152546, 78113 152225, 78048 152007, 77743 151619, 77425 151154, 77646 150887, 77376 150978, 76961 150958, 76693 150973, 76627 150905, 76689 150795, 76621 150181, 76183 149989, 76111 149562, 75871 149735, 75370 150201, 75322 149778, 75193 149701, 74914 149472, 74486 148900, 74513 148800, 74464 148427, 74190 148322, 74076 148230, 73738 148245, 73618 148397, 73659 148164, 73500 147713, 73666 146997, 73648 146658, 73301 146188, 73129 146033, 72780 145897, 72312 146251, 72276 145911, 72056 145754, 71945 145570, 71284 145039, 70815 144606, 70801 144331, 70597 144262, 70424 144117, 70432 143568, 70647 143304, 70680 142891, 70297 142497, 69982 143003, 69855 143086, 69805 143064, 69791 142923, 70270 142480, 69746 142313, 69407 142467, 69113 141754, 68871 141327, 68720 141118, 68511 140871, 68561 140310, 68669 140001, 68576 139702, 68364 139591, 68332 139947, 67868 139424, 67407 139393, 67186 139323, 66959 138724, 66983 138469, 66424 138353, 66486 137934, 66538 137653, 66020 137484, 65843 136947, 65627 136590, 65374 136286, 65343 135432, 65250 135015, 65159 134751, 64778 134435, 64885 134175, 64196 133775, 64179 133680, 64333 133269, 64195 132998, 63970 132896, 63712 132872, 63225 132438, 63375 131948, 63074 131185, 63119 131037, 63074 130981, 62915 130326, 62777 130148, 62721 129550, 62657 129309, 62584 129210, 62057 128796, 62203 128478, 61955 128412, 61929 128235, 62047 127661, 61699 127364, 61684 127190, 61755 127070, 61773 126640, 62035 126030, 62009 125911, 61436 125556, 61432 125520, 61857 125167, 61540 125052, 61054 124897, 61013 124414, 61229 123732, 61206 123700, 60717 123715, 60734 123292, 60628 123041, 60716 122373, 60480 121823, 60265 121578, 60217 120990, 60468 120094, 60238 119458, 60004 119090, 59981 118793, 59828 118448, 59823 117850, 59701 117599, 59670 117391, 59759 116940, 59654 116786, 59793 116138, 59588 115572, 59575 115355, 59731 114955, 59857 114376, 59599 113591, 59856 112715, 59776 112139, 59887 111652, 60011 111355, 59808 111014, 59734 110646, 59686 110483, 59827 109878, 59940 109779, 59994 109528, 59940 109297, 59649 109152, 59583 108877, 59915 108894, 60079 108737, 60252 108998, 60478 109100, 60548 108936, 60481 108729, 60268 108467, 60596 108248, 60714 108136, 60701 108075, 60857 108020, 61222 107710, 61301 107710, 61218 107408, 60219 106833, 60044 107052, 59763 107001, 60192 106806, 60291 106190, 60565 105774, 60593 105609, 60659 105643, 60655 105497, 60723 105129, 60848 104635, 60874 104340, 61021 104090, 61048 102967, 61091 102932, 61011 102630, 61123 102383, 61004 102171, 60910 101701, 60885 101387, 61199 100818, 61145 100707, 61376 100410, 61494 100173, 61688 100090, 61820 99750, 61972 99564, 61858 99159, 61816 98760, 61950 98612, 62065 98263, 62079 97386, 62111 97085, 62311 96552, 62332 96320, 62505 96335, 62659 95923, 62637 95813, 63041 95281, 63354 95070, 63339 94378, 63390 94042, 63886 93811, 64211 93100, 64312 93017, 64288 92830, 64368 92463, 64531 92378, 64728 91633, 64661 91444, 64750 90969, 64664 90595, 64752 90411, 64803 90087, 64957 90200, 64961 90453, 65257 90882, 65490 90727, 65715 90836, 66168 90639, 66220 90569, 66181 90244, 65966 89980, 65606 89857, 65511 90282, 65388 90350, 65269 89946, 65367 89777, 65311 89403, 65365 89082, 65784 88998, 65968 88879, 65801 88198, 66423 87757, 66470 87783, 66483 87703, 66672 87366, 67092 87078, 67525 86514, 67736 86138, 68038 85312, 68331 85212, 68766 84683, 68658 84425, 69008 84286, 69551 83796, 69773 82646, 69905 82334, 70278 81957, 70394 81760, 70475 81723, 70809 81300, 71241 81463, 71389 81277, 71375 80953, 70861 81223, 71346 80613, 71462 80697, 71682 80604, 71981 80583, 72016 80532, 72447 80372, 72659 80263, 72576 80080, 72447 79614, 72736 79324, 73032 78853, 73318 78735, 73314 78631, 73465 78597, 73725 78275, 73833 78183, 73800 77861, 73687 77683, 73900 77542, 74015 77407, 74281 77286, 74665 77314, 75150 77680, 75233 76974, 75746 76759, 75853 76678, 76135 76806, 76072 76387, 76293 75934, 76542 75750, 76961 75829, 77021 75669, 77140 75787, 77293 75861, 78094 75293, 78260 75090, 78560 74838, 78138 74243, 78580 74003, 79071 73679, 79173 73665, 79896 73332, 80217 73357, 80228 73057, 80593 73050, 80682 72879, 80725 72331, 81188 71782, 81414 71643, 82167 71556, 82415 71469, 82405 71348, 82702 70919, 82725 70678, 83050 70397, 83858 69751, 84248 69190, 84308 69050, 84388 69066, 84411 68405, 84266 68336, 84248 68033, 84547 68005, 84744 67907, 85257 68266, 85370 68279, 86119 68437, 86165 67866, 86320 67645, 86362 67230, 86722 67072, 87027 66667, 87459 66643, 88121 66513, 88125 66307, 88576 66447, 89015 66728, 89248 66285, 89680 65979, 89710 65827, 90025 65647, 90292 65288, 91699 65040, 91843 65174, 91803 65479, 92197 65569, 92568 65917, 92697 65862, 92474 65523, 92616 65436, 92809 65182, 93354 65118, 93778 65542, 93951 65570, 94671 65348, 94694 65251, 94819 65197, 95130 64605, 95165 64605, 95181 64525, 94977 64273, 95382 64182, 95570 64205, 96162 63962, 96461 63772, 96690 63543, 96787 63371, 97676 63653, 97902 63476, 98374 63151, 98461 62855, 98556 62844, 98610 62901, 98658 63205, 99056 63088, 99395 63359, 99804 63559, 100333 63509, 100415 63772, 100805 63361, 101010 62939, 101252 62919, 101611 62855, 102073 62624, 102333 62846, 102565 62800, 103215 62762, 103198 62253, 102993 61820, 102934 61788, 102919 61678, 103019 61612, 103775 61530, 103877 61422, 103926 61511, 104386 61511, 104682 61620, 104751 62166, 105231 62050, 105494 61705, 105716 61970, 105985 62345, 106404 62038, 106632 62045, 107082 62232, 107223 61822, 107320 61394) (107405 163123, 107658 163399, 107872 163671, 108234 163678, 108544 163668, 108569 163577, 108562 163262, 108410 163315, 108084 163236, 107876 163248, 107574 163068, 107392 163009) (104025 163306, 104223 163629, 104453 163662, 104530 163378, 104357 163119) (118332 64249, 117941 64298, 117861 64327, 116702 64337, 116338 64265, 115949 64310, 115152 64290, 114927 64232, 113840 64171, 113565 64190, 113494 64076, 113018 64133, 112030 64137, 111788 64178, 110986 64242, 109716 64235, 109400 64280, 109212 64269, 107898 64604, 106933 64043, 106712 64278, 106557 64475, 106399 64460, 105159 64515, 104534 64856, 103577 64886, 103375 64972, 103091 64974, 102518 65034, 101601 65102, 100399 65081, 100307 65042, 99991 65061, 99430 65219, 99351 65274, 98751 65234, 98501 65229, 97418 65711, 96438 66211, 95855 66285, 95702 66424, 95166 66789, 95003 66784, 93994 67300, 93565 67491, 93450 67561, 93275 67551, 92746 67656, 92677 67642, 92602 67697, 92389 68016, 92034 68146, 91538 68520, 91054 68778, 90543 68507, 90189 68638, 89572 68818, 89431 68894, 89600 69240, 89152 69427, 88704 69395, 88043 69758, 87655 69861, 87129 69892, 86755 69902, 86660 69960, 85555 70291, 85627 70909, 84995 71379, 84372 71916, 84189 72110, 83892 72549, 83540 72778, 83195 72953, 83119 73024, 81636 74220, 81427 74422, 80402 74743, 80336 74845, 80131 75541, 79908 75972, 79451 76296, 79219 76480, 78370 77063, 77598 77965, 77425 78059, 77134 78291, 76996 78386, 76762 78693, 76494 78814, 76366 79273, 75559 80110, 75523 80171, 75071 80725, 74926 80792, 74274 81543, 74046 81739, 73512 82236, 73432 82394, 73287 82441, 73195 83047, 72690 83547, 72675 83599, 72014 84512, 71734 85155, 71464 85491, 71166 85735, 70684 86870, 70468 87225, 69999 87689, 69674 88209, 69360 88868, 69222 89131, 68714 89882, 68209 90916, 67841 91761, 67500 92602, 67136 93381, 66926 93690, 66526 94671, 66412 95158, 66303 95397, 65974 96510, 65766 97083, 65441 97653, 65284 98604, 65214 98882, 65143 99712, 64590 100407, 64500 100809, 64418 101321, 64408 101545, 64072 102139, 63842 102588, 63716 103865, 63684 104077, 63644 104860, 63652 105000, 63568 105413, 63591 105916, 63628 106423, 63570 106622, 63393 107695, 63431 107873, 63516 108445, 63492 108902, 63314 109220, 63445 109770, 63410 110098, 63355 111041, 63337 111208, 63322 111967, 63234 112230, 63222 112796, 63356 113665, 63268 114234, 63233 115222, 63268 115478, 63252 116059, 63179 117013, 63251 117207, 63404 118524, 63430 118819, 63622 119082, 63693 120009, 63900 120454, 63854 120862, 64062 121653, 64175 121995, 64201 122326, 64402 123143, 64545 123670, 64562 123809, 65015 125370, 65101 125609, 65173 126317, 65233 126683, 65422 127154, 65697 127749, 65835 127942, 66039 128414, 65981 128841, 66105 129353, 66362 130142, 66715 130892, 66819 131198, 66966 131728, 67741 133316, 67863 133501, 68490 134853, 68571 135075, 68746 135211, 69075 135718, 69459 136475, 69570 136810, 69745 137069, 69822 137324, 70255 138093, 70518 138490, 70762 138734, 70950 139101, 71035 139601, 72216 140772, 72578 141326, 72855 141789, 73131 142910, 73205 142988, 73201 142906, 73804 142853, 74067 142994, 73804 143344, 74120 143350, 74567 143816, 74944 144274, 75672 145048, 75809 145220, 76382 145873, 76660 146129, 77248 146760, 77838 147367, 77561 147882, 77986 148080, 78110 148405, 78588 148758, 78812 149017, 79004 149291, 79293 149580, 80175 150357, 80996 150861, 81132 150999, 81469 151225, 82383 152190, 82961 152145, 83411 152379, 83602 152383, 83776 152532, 84030 152705, 84332 153022, 84989 153522, 85236 153680, 85811 153977, 86088 154147, 87503 155176, 87941 155484, 88037 155644, 88509 155894, 88649 156026, 88896 156464, 89256 156693, 89976 156860, 90298 156903, 90826 157231, 91428 157487, 92466 157794, 93189 157931, 94452 158517, 94652 158574, 95101 158783, 95323 158911, 96117 159087, 96193 159084, 96735 159292, 97287 159520, 97997 159705, 99238 160198, 99530 160345, 100146 160544, 100454 160282, 100923 160136, 101193 160173, 102820 160613, 103521 161372, 103640 161587, 104564 161534, 105113 161583, 106008 161762, 106274 161772, 106554 161984, 107012 162164, 107372 161803, 107580 161665, 108231 161557, 108698 161681, 109450 162234, 109527 162340, 110191 162230, 110362 162249, 110745 162246, 111519 162512, 111975 162605, 112070 162538, 112267 162685, 112569 162368, 113001 162209, 113297 162148, 113753 162246, 114120 162432, 114284 162624, 115492 162998, 115842 163021, 115936 163094, 115995 163083, 116014 162936, 116562 162232, 116741 162045, 117010 161708, 117549 161399, 117916 161394, 118641 161286, 119454 161150, 120071 161144, 120446 161289, 121097 161718, 122237 161336, 122955 161373, 123198 161502, 123406 161454, 123904 161418, 124372 161282, 124564 161268, 125138 160939, 125848 160412, 127286 160207, 127539 160206, 127987 160160, 128492 160038, 129097 160282, 129479 160041, 129849 159927, 130055 159748, 130325 159620, 130993 159527, 131266 159365, 132113 159153, 132375 159132, 132663 158903, 132893 158953, 133028 158471, 133350 158246, 134054 157389, 134145 157158, 134631 156874, 135563 156265, 135868 156297, 136264 156301, 136527 156485, 136855 156983, 137067 156746, 137396 156838, 137538 156827, 137765 156737, 138488 156186, 138769 156047, 139205 155497, 139329 155768, 139746 155523, 139996 155443, 140685 154981, 140785 154271, 141249 153702, 141374 153163, 141450 153050, 141575 153016, 142406 152562, 142670 152365, 143077 152360, 143404 152460, 144087 152220, 144265 152108, 144932 151865, 145318 151417, 145450 151382, 145672 151218, 146028 151007, 146462 150661, 146538 150476, 146782 150375, 147350 149983, 147657 149637, 148380 148989, 149170 148735, 149406 148492, 149427 148299, 149553 147781, 149546 147627, 149170 147541, 149179 147259, 149621 147344, 149776 147059, 150031 146436, 150062 146160, 150227 145713, 150261 145330, 150362 145027, 150515 144747, 151115 144003, 151850 142957, 152578 141858, 152779 141599, 153416 140855, 153547 140649, 153820 140336, 153833 139718, 153854 139343, 153971 139212, 154216 139230, 154439 139371, 154816 139041, 155069 138562, 155892 137302, 156253 136712, 156316 136456, 156763 135491, 157157 134559, 157716 134034, 158304 133462, 158783 132859, 158935 132748, 159680 132397, 159798 132167, 160053 131875, 160621 131758, 160572 130952, 160533 130837, 160892 130141, 160799 129900, 160781 129657, 160903 129457, 160982 128990, 160987 128625, 161176 128257, 161166 128110, 161557 127571, 161669 127305, 161738 127185, 161887 126263, 161440 125660, 161501 125490, 161901 125130, 161852 124508, 161726 124351, 161996 123695, 161765 122827, 161848 122322, 162041 121681, 162146 120906, 162238 120500, 162328 119792, 162466 119524, 162556 118576, 162558 118218, 162658 118233, 162887 117852, 162861 117560, 162940 117257, 162949 116670, 162815 116087, 162691 115786, 162653 115598, 162949 115117, 162837 114936, 162467 114521, 162421 114072, 162851 113620, 162914 113675, 162895 113588, 163052 113137, 163096 112475, 162816 112337, 162767 111631, 162838 111282, 162788 111154, 162883 110292, 162829 110177, 162773 109418, 162575 108764, 162593 107705, 162642 107502, 162602 106746, 162630 106378, 162654 105255, 162643 104845, 162461 104012, 162598 103620, 162538 103199, 162269 102862, 162168 102299, 161936 102017, 161825 101733, 161994 101331, 161460 100585, 161389 100509, 160987 99974, 160702 99563, 160116 98162, 160078 97301, 160030 97091, 160163 96953, 160030 96835, 160213 96249, 159915 95619, 159709 95519, 159606 95087, 159662 94582, 159780 94567, 159737 94166, 159880 93232, 159554 92811, 159278 92701, 158941 92375, 158735 91583, 158056 90671, 158031 90487, 157694 89655, 157567 89499, 157393 89087, 157390 89026, 157289 88594, 156872 88218, 156632 88097, 156472 87979, 155579 87725, 155415 87548, 155195 86858, 155225 86781, 155151 86730, 154982 85908, 154180 84810, 154167 84709, 153923 84142, 153010 84035, 152679 83755, 152641 83063, 152862 82895, 152628 83030, 152354 82668, 152259 81794, 151577 81214, 151511 81185, 151083 80454, 150987 80241, 150883 80216, 150151 79183, 150120 79110, 149967 78910, 149525 78717, 149453 78432, 149224 78487, 148997 78170, 148806 78022, 148269 77129, 148047 76893, 147812 76854, 147700 76878, 146995 76693, 146742 76644, 146492 76505, 146216 76178, 145992 76002, 145365 75304, 145041 74457, 144978 74075, 144709 74103, 144229 74193, 143949 74147, 143396 74395, 143274 74409, 142661 74114, 142150 73737, 141928 73607, 141257 72838, 141262 72776, 140917 72224, 140786 71965, 140761 71988, 139847 71919, 139375 71573, 139008 71533, 138453 71257, 137972 70699, 137711 70457, 137577 70044, 137637 69671, 137000 68917, 136714 69035, 136514 69048, 136292 68757, 135873 68740, 135567 68510, 135344 68283, 134919 68430, 134676 68453, 134236 68218, 134057 68154, 133281 67841, 132775 67687, 131954 67617, 131716 67520, 131452 67203, 131068 67053, 130761 66919, 130344 66928, 129949 66616, 129054 66515, 128832 66803, 128529 66715, 127661 66437, 126795 66102, 126468 66087, 125917 66030, 125027 65716, 124646 65610, 123784 65289, 123550 65306, 122980 65095, 122571 65075, 121657 64533, 121195 64627, 119556 64070, 119199 64016) (97747 161636, 98038 161957, 98138 161655, 97891 161358) (137167 158299, 137516 158370, 137528 158041, 137367 157993) (164383 121157, 164460 121458, 164643 121522, 164651 121052) (165315 113634, 165369 114218, 165799 114380, 165940 113417) (163783 104411, 164070 104509, 163958 104846, 164043 104979, 164418 104902, 164321 104595, 164220 104404, 163754 104362) (164371 103476, 164497 103574, 164952 103288, 164357 103226) (164030 102190, 164349 102398, 164361 101710) (62343 97288, 62705 97711, 62815 97991, 63011 97994, 62946 97661, 63191 97365, 62735 96934) (63712 97384, 63444 97446, 63704 97768, 63836 97639, 63840 97309) (161996 97262, 161982 97442, 162590 97623, 162361 97115) (62940 96740, 63290 97296, 63423 96919, 63229 96594) (161250 96057, 161332 96219, 161509 96299, 161675 96146, 161399 95965) (161528 92489, 161412 92579, 161881 92672, 161810 92403, 161531 92208) (67036 87741, 67287 87743, 67496 87568, 67116 87236) (157512 86791, 157894 87140, 157806 86746, 157543 86569) (68660 85381, 68873 85485, 68972 85478, 69044 85346, 68962 84984) (157148 84782, 157317 85047, 157841 85054, 157744 84588, 157505 84507) (154475 81612, 154617 81963, 154688 82040, 155046 82077, 155312 81938, 154902 81489, 154793 81079) (148148 74973, 148185 75238, 148290 75288, 148587 75136, 148667 74723, 148333 74586) (84059 69892, 84210 70181, 84431 70204, 84386 70094, 84499 69920, 84353 69654) (139600 69184, 139319 69556, 139738 69340, 139806 69096, 139661 69025) (87096 68038, 87328 67948, 87495 67797, 87062 67638) (88318 67155, 89083 66978, 88634 66696) (96357 64276, 96536 64491, 96761 64482, 96798 64312, 96649 64269) (110797 62370, 110959 62617, 111135 62607, 111268 62228)), ((75815 150408, 75891 150745, 75537 150700, 75397 150390)), ((156372 140873, 156236 141029, 156017 141039, 155807 140986, 155929 140815)), ((71837 79997, 71743 80151, 71603 79971, 71504 80015, 71541 79854, 72177 79688)), ((78017 74627, 77871 74674, 77757 74502, 78127 74251)), ((146743 71850, 146863 71919, 146785 72533, 146546 72150, 146620 71955, 146542 71809)), ((125944 63739, 126212 63938, 125900 64280, 125410 64170, 125556 63785, 125754 63696))) \ No newline at end of file diff --git a/stress_benchmark/resources/038.settings b/stress_benchmark/resources/038.settings new file mode 100644 index 0000000000..853b097d2d --- /dev/null +++ b/stress_benchmark/resources/038.settings @@ -0,0 +1,628 @@ +experimental=0 +infill_pattern=cubic +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=3 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=203.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=False +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=25.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.8 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=10 +retraction_speed=25 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=0.8 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=18.75 +skirt_brim_speed=20.0 +retraction_amount=6.5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=12.5 +cross_infill_pocket_size=17.142857142857142 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=25.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=300 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=150.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=150.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=25 +speed_support_bottom=25.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=65.0 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.8 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=4 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=12.5 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=25.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=65.0 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=buildplate +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=12.5 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=43.333333333333336 +bridge_fan_speed_3=0 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=25.0 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=8 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=4 +material_print_temperature_layer_0=203.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=300 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.8 +wall_extruder_nr=-1 +machine_width=300 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=0 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=203.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=25.0 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=5.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=18.75 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=55 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=17.142857142857142 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=25.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=55 +bridge_skin_speed_3=12.5 +infill=0 +prime_tower_position_y=273.575 +jerk_support=8 +speed_wall_x_roofing=25.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=0 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=203.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=raft +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=293.575 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=5.0 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=340 +speed_infill=50.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=25.0 +speed_support=25.0 +speed_prime_tower=25.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=25.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=buildplate +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=7 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=16.666666666666668 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=203.0 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=0.8 +material_bed_temperature=55 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=203.0 diff --git a/stress_benchmark/resources/038.wkt b/stress_benchmark/resources/038.wkt new file mode 100644 index 0000000000..2749e28665 --- /dev/null +++ b/stress_benchmark/resources/038.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((141255 74687, 140348 76216, 139171 78161, 138898 78604, 139063 78598, 139133 78603, 138844 78788, 138737 78863, 138482 79276, 138535 79320, 139006 79418, 139737 79539, 142371 79929, 142124 79838, 141799 79570, 141613 79217, 141614 78873, 141393 78843, 139719 78644, 139133 78603, 139976 78064, 141025 77414, 141504 77131, 141773 76992, 142142 76883, 142446 76864, 143051 76945, 143921 77095, 145247 77346, 146648 77626, 147378 77787, 147700 77867, 147941 77940, 148197 78069, 148268 78153, 148301 78344, 148178 78783, 148073 79095, 147909 79533, 147854 79665, 147662 79679, 147298 79661, 146845 79611, 143958 79194, 143744 79165, 143769 79105, 143769 78710, 143698 78526, 143436 78212, 143073 78001, 142647 77923, 142440 77947, 142066 78128, 141777 78439, 141614 78822, 141614 78873, 143744 79165, 143606 79489, 143316 79802, 142944 79982, 142758 79984, 144732 80261, 146033 80426, 146499 80474, 146856 80496, 147247 80487, 147447 80393, 147579 80272, 147740 79937, 147854 79665, 148048 79650, 148409 79522, 148759 79307, 150434 78109, 151208 77595, 151926 77158, 152580 76802, 152913 76638, 153249 76486, 153587 76348, 153926 76227, 154262 76121, 154597 76029, 155254 75884, 155919 75780, 156536 75713, 157105 75673, 157555 75654, 158195 75644, 158584 75648, 158864 75665, 159239 75729, 159566 75837, 160017 76042, 160504 76296, 164911 78715, 165647 79108, 166026 79300, 166334 79442, 166712 79583, 167016 79611, 167461 79570, 169882 79086, 170623 78958, 170935 79053, 171175 79330, 171396 79711, 171661 80281, 172002 81101, 172405 82119, 175045 88942, 176915 93676, 178101 96603, 179701 100462, 180886 103236, 182027 105842, 183099 108221, 183763 109655, 184903 112052, 185559 113368, 185901 114015, 186177 114494, 186400 114826, 186576 115023, 186736 115127, 186892 115159, 187263 115119, 188763 114861, 189027 114831, 189250 114861, 189567 115170, 189991 115848, 190208 116233, 191107 117926, 193734 123000, 195736 126814, 198669 132311, 204627 143337, 205859 145646, 207109 148020, 208364 150452, 209617 152941, 210865 155485, 212102 158078, 213324 160716, 214530 163393, 215715 166100, 216876 168832, 218011 171577, 219122 174347, 220188 177073, 221226 179802, 222227 182504, 223188 185167, 224111 187788, 224990 190351, 225826 192845, 226619 195264, 227369 197608, 228076 199879, 228744 202079, 229374 204212, 229968 206280, 230528 208289, 231056 210242, 231556 212143, 232027 213995, 232475 215805, 232899 217576, 233692 221023, 234419 224368, 235100 227642, 235916 231800, 231831 231800, 231174 228481, 230569 225558, 229854 222255, 229078 218851, 228659 217101, 228177 215143, 227755 213481, 227264 211604, 226743 209673, 226190 207686, 225604 205637, 224982 203524, 224321 201342, 223621 199088, 222878 196759, 222092 194353, 221262 191870, 220389 189320, 219474 186714, 218519 184057, 217526 181363, 216476 178581, 215440 175910, 214351 173174, 213235 170442, 212097 167733, 210884 164922, 209767 162400, 208581 159797, 207389 157246, 206193 154752, 204998 152320, 203809 149955, 202634 147655, 196965 136752, 195740 134370, 193277 129494, 191619 126134, 189012 120757, 188522 119789, 188160 119136, 187945 118800, 187774 118611, 187575 118478, 187325 118447, 186920 118476, 185580 118622, 185076 118664, 184809 118620, 184575 118462, 184266 118071, 184116 117849, 183747 117255, 183260 116415, 182369 114817, 181624 113446, 180792 111885, 179901 110175, 178971 108347, 178020 106433, 177071 104469, 176144 102481, 175694 101486, 174792 99429, 174026 97599, 173648 96660, 172936 94828, 172267 93021, 171688 91396, 171149 89822, 170666 88360, 169502 84707, 169126 83587, 168936 83093, 168779 82768, 168642 82582, 168509 82506, 168371 82510, 168121 82600, 166644 83275, 166277 83423, 166039 83472, 165785 83463, 165420 83333, 165167 83223, 164583 82937, 163809 82534, 159471 80221, 158667 79817, 158271 79645, 157807 79511, 157271 79494, 156705 79515, 156178 79579, 155785 79656, 155352 79773, 154882 79937, 154373 80160, 153828 80444, 153545 80607, 152971 80960, 152398 81336, 151841 81718, 150057 82995, 149762 83191, 149499 83333, 149239 83423, 148954 83466, 148620 83466, 147968 83401, 143735 82803, 141376 82503, 140544 82416, 140137 82390, 139745 82395, 139491 82461, 139327 82552, 139116 82770, 138610 83493, 137773 84739, 137486 85146, 137123 85605, 136904 85718, 136788 85723, 136550 85636, 136222 85436, 135865 85191, 135332 84804, 135082 84611, 134322 85767, 133647 86771, 131649 85654, 132483 84438, 133637 82721, 134784 80978, 135925 79207, 137058 77410, 138183 75589, 139198 73913))) \ No newline at end of file diff --git a/stress_benchmark/resources/039.settings b/stress_benchmark/resources/039.settings new file mode 100644 index 0000000000..3810b98181 --- /dev/null +++ b/stress_benchmark/resources/039.settings @@ -0,0 +1,628 @@ +experimental=0 +infill_pattern=cubic +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=225.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.8 +material_guid=a55a7c05-b00d-42fc-953e-95b01860e05c +platform_adhesion=0 +speed_support_interface=40.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.8 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=10 +retraction_speed=45 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=0.8 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=45 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=30.0 +skirt_brim_speed=20.0 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=20.0 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=40.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=45 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=220 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=200.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=200.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=110.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=45 +speed_support_bottom=40.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=45 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.8 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=45 +material_brand=empty_brand +initial_bottom_layers=4 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=20.0 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=40.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=40.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=45 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=20.0 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=30.0 +bridge_fan_speed_3=0 +raft_speed=40.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=40.0 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=40.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=45 +bottom_layers=4 +material_print_temperature_layer_0=225.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=220 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.8 +wall_extruder_nr=-1 +machine_width=220 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=225.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=40.0 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=30.0 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=40.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=20.0 +infill=0 +prime_tower_position_y=187.375 +jerk_support=8 +speed_wall_x_roofing=40.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=225.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=80.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=207.375 +wipe_pause=0 +material_standby_temperature=180.0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=305.0 +speed_infill=80.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=40.0 +speed_support=40.0 +speed_prime_tower=40.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=40.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=20 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=26.666666666666668 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=225.0 +material_adhesion_tendency=0 +default_material_print_temperature=225.0 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=225.0 diff --git a/stress_benchmark/resources/039.wkt b/stress_benchmark/resources/039.wkt new file mode 100644 index 0000000000..752d94d3bd --- /dev/null +++ b/stress_benchmark/resources/039.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((120264 173957, 120384 174108, 110615 174109, 110736 173957, 111261 172596, 119739 172595)), ((109264 173957, 109384 174108, 99615 174109, 99736 173957, 100261 172596, 108739 172595)), ((98264 173957, 98384 174108, 88616 174108, 88736 173957, 89261 172596, 97739 172595)), ((131264 173957, 131384 174108, 121616 174108, 121736 173957, 122261 172596, 130739 172595)), ((174108 131384, 173957 131264, 172596 130739, 172596 122260, 173957 121736, 174108 121616)), ((46043 121736, 47404 122261, 47405 130739, 46043 131264, 45892 131384, 45892 121616)), ((174109 120385, 173957 120264, 172596 119739, 172596 111260, 173957 110736, 174108 110616)), ((46043 110736, 47404 111261, 47405 119739, 46043 120264, 45892 120384, 45891 110615)), ((174109 109385, 173957 109264, 172596 108739, 172596 100260, 173957 99736, 174108 99616)), ((46043 99736, 47404 100261, 47405 108739, 46043 109264, 45892 109384, 45891 99615)), ((46043 88736, 47404 89261, 47405 97739, 46043 98264, 45892 98384, 45892 88616)), ((174108 98384, 173957 98264, 172596 97739, 172596 89260, 173957 88736, 174108 88616)), ((120264 46043, 119739 47404, 111260 47404, 110736 46043, 110616 45892, 120385 45891)), ((109264 46043, 108739 47404, 100260 47404, 99736 46043, 99616 45892, 109385 45891)), ((131264 46043, 130739 47404, 122260 47404, 121736 46043, 121616 45892, 131384 45892)), ((98264 46043, 97739 47404, 89260 47404, 88736 46043, 88616 45892, 98384 45892)), ((165002 41351, 165002 42361, 177640 42360, 177639 55002, 178648 55002, 178655 55358, 178649 77573, 178655 77646, 178649 78002, 177639 78002, 177639 80000, 176630 80000, 176630 81000, 177639 81000, 177640 139000, 176630 139000, 176630 140000, 177639 140000, 177640 142002, 178648 142002, 178655 142358, 178649 164573, 178655 164646, 178649 165002, 177639 165002, 177640 177640, 164998 177639, 164998 178648, 164642 178655, 142427 178649, 142354 178655, 141998 178649, 141998 177639, 140000 177639, 140000 176630, 139000 176630, 139000 177639, 81000 177640, 81000 176630, 80000 176630, 80000 177639, 77998 177640, 77998 178648, 77642 178655, 55427 178649, 55354 178655, 54998 178649, 54998 177639, 42360 177640, 42361 164998, 41352 164998, 41345 164642, 41351 142427, 41345 142354, 41351 141998, 42361 141998, 42361 140000, 43369 140000, 43370 139000, 42361 139000, 42360 81000, 43370 81000, 43370 80000, 42361 80000, 42360 77998, 41352 77998, 41345 77642, 41351 55427, 41345 55354, 41351 54998, 42361 54998, 42360 42360, 55002 42361, 55002 41352, 55358 41345, 77573 41351, 77646 41345, 78002 41351, 78002 42361, 80000 42361, 80000 43370, 81000 43370, 81000 42361, 139000 42360, 139000 43370, 140000 43370, 140000 42361, 142002 42360, 142002 41352, 142358 41345, 164573 41351, 164646 41345) (80000 45891, 87384 45892, 87264 46043, 86739 47404, 47405 47405, 47405 86739, 46043 87264, 45892 87384, 45891 80000, 44379 80000, 44378 140000, 45891 140000, 45892 132616, 46043 132736, 47404 133261, 47404 172596, 86739 172595, 87264 173957, 87384 174108, 80000 174109, 80000 175621, 140000 175622, 140000 174109, 132616 174108, 132736 173957, 133261 172596, 172596 172596, 172595 133261, 173957 132736, 174108 132616, 174109 140000, 175621 140000, 175622 80000, 174109 80000, 174108 87384, 173957 87264, 172596 86739, 172596 47404, 133261 47405, 132736 46043, 132616 45892, 140000 45891, 140000 44379, 80000 44378))) \ No newline at end of file diff --git a/stress_benchmark/resources/040.settings b/stress_benchmark/resources/040.settings new file mode 100644 index 0000000000..9df0af97c1 --- /dev/null +++ b/stress_benchmark/resources/040.settings @@ -0,0 +1,628 @@ +experimental=0 +infill_pattern=grid +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.8 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=20 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=265 +machine_max_feedrate_x=299792458000 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.8 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.3 +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=53.333333333333336 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=3.2 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.4 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.8 +machine_heated_bed=False +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.2 +support_offset=1.2000000000000002 +acceleration_layer_0=3000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=no_outer_surfaces +support_zag_skip_count=4 +retraction_speed=35 +acceleration_roofing=3000 +raft_interface_jerk=20 +support_roof_height=0.75 +acceleration_travel=5000 +acceleration_wall_x_roofing=3000 +support_roof_enable=True +acceleration_travel_layer_0=5000.0 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=35 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=1 +machine_nozzle_size=0.8 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=20 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=20 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=20 +material_flow=100 +material_is_support_material=False +raft_interface_speed=30.0 +skirt_brim_speed=40.0 +retraction_amount=2.0 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.08 +acceleration_wall_x=3000 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=250.0 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=30.0 +cross_infill_pocket_size=0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.8421052631578947 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=20 +acceleration_print_layer_0=3000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.3 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.6 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=2.4000000000000004 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=4.444444444444445 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=3000 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.8 +ironing_inset=0.76 +infill_overlap=10 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=299792458000 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.8 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=40.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=35 +acceleration_ironing=3000 +line_width=0.8 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=-2000 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_inner +travel_speed=120 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.2 +support_tree_top_rate=30 +jerk_travel=30 +speed_travel=500 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=1.6 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=-2000 +support_interface_material_flow=100 +wipe_retraction_retract_speed=35 +speed_support_bottom=53.333333333333336 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=1.8 +speed_slowdown_layers=1 +optimize_wall_printing_order=False +machine_max_acceleration_y=9000 +resolution=0 +support_angle=55 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=20 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.35 +acceleration_support_roof=3000 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.8 +wall_0_wipe_dist=0.4 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=1 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.8 +support_top_distance=0.25 +minimum_bottom_area=1.0 +bridge_skin_density=100 +raft_interface_thickness=0.44999999999999996 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.75 +small_hole_max_size=0 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=1 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=95 +wipe_retraction_prime_speed=35 +material_brand=empty_brand +initial_bottom_layers=4 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=3000 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.3 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=0.8421052631578947 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=20.0 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=1 +jerk_prime_tower=20 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=95 +bridge_wall_speed=30.0 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=60 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=53.333333333333336 +support_bottom_wall_count=0 +speed_print_layer_0=40.0 +jerk_support_interface=20 +raft_surface_line_width=0.8 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=55 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.8 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.3 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=buildplate +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.68 +acceleration_support_infill=3000 +meshfix=0 +machine_max_feedrate_y=299792458000 +bridge_skin_speed=30.0 +bridge_fan_speed=100 +interlocking_beam_width=1.6 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.8 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=36.666666666666664 +bridge_fan_speed_3=0 +raft_speed=40.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0.25 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=60 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=60 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.3 +raft_base_line_width=1.6 +prime_tower_line_width=0.8 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=20 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=3000 +min_bead_width=0.52 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=10 +raft_surface_line_spacing=0.8 +retraction_retract_speed=35 +bottom_layers=4 +material_print_temperature_layer_0=265 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=2.0 +support_tree_tip_diameter=1.6 +jerk_ironing=20 +machine_depth=800.0 +acceleration_skirt_brim=3000 +skin_overlap=5 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.75 +wall_extruder_nr=-1 +machine_width=800.0 +raft_smoothing=5 +acceleration_support_interface=3000 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=20 +support_roof_density=95 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=3000 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=20 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=265 +wipe_hop_amount=1 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=80 +support_interface_enable=True +raft_base_acceleration=3000 +wall_line_width_x=0.8 +machine_acceleration=4000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.3 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=3000 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=3.2 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=1 +jerk_travel_layer_0=30.0 +raft_base_speed=30.0 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=20 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=1.6 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=3000 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=2.0 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=60 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=30.0 +infill=0 +prime_tower_position_y=770.175 +jerk_support=20 +speed_wall_x_roofing=70 +speed_layer_0=40.0 +wall_line_width_0=0.8 +jerk_support_infill=20 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.25 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +machine_name=Unknown +acceleration_prime_tower=3000 +material_print_temperature=265 +jerk_print_layer_0=20 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=80 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.68 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=790.175 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=3000 +support_roof_wall_count=0 +raft_jerk=20 +support_z_distance=0.25 +machine_height=900.0 +speed_infill=80 +raft_surface_thickness=0.3 +infill_randomize_start_location=False +speed_roofing=60 +speed_support=80 +speed_prime_tower=80 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.68 +support_bottom_line_width=0.8 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.8 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=3000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=4.444444444444445 +infill_line_width=0.8 +speed_wall_x=70 +ooze_shield_dist=2 +raft_interface_line_width=1.6 +support_type=buildplate +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.36 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=3000 +infill_sparse_density=0 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=90 +jerk_infill=20 +speed_ironing=40.0 +gantry_height=900.0 +bottom_skin_expand_distance=0.8 +min_feature_size=0.45 +layer_0_z_overlap=0.15 +material_initial_print_temperature=265 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=7.347880794884119e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=18 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=265 diff --git a/stress_benchmark/resources/040.wkt b/stress_benchmark/resources/040.wkt new file mode 100644 index 0000000000..130784e163 --- /dev/null +++ b/stress_benchmark/resources/040.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((402121 100550, 402567 100684, 402759 100844, 402807 101064, 401914 110025, 400645 123031, 400840 125036, 412494 125403, 412515 125536, 412689 125681, 412692 125682, 412697 125681, 412886 125554, 412921 125416, 412494 125403, 412482 125323, 412824 123054, 412443 115525, 411786 101283, 411841 101065, 412038 100914, 412374 100830, 412847 100812, 413937 100844, 415387 100946, 415816 101100, 415997 101269, 416032 101492, 414220 113794, 412824 123054, 412940 125344, 412921 125416, 417267 125553, 426762 126450, 426775 126570, 426932 126714, 427112 126603, 427148 126487, 426762 126450, 426751 126354, 427169 124222, 427138 113717, 427083 102299, 427152 102085, 427359 101944, 427819 101854, 429295 101967, 430768 102138, 431204 102315, 431380 102493, 431406 102716, 429574 111944, 427169 124222, 427175 126397, 427148 126487, 434465 127178, 438949 127888, 438957 128037, 439116 128200, 439121 128202, 439139 128201, 439338 128092, 439387 127958, 438949 127888, 438946 127822, 439526 125509, 439883 118011, 440616 103833, 440691 103621, 440900 103490, 441350 103419, 442776 103601, 444194 103840, 444602 104034, 444763 104219, 444776 104444, 441784 116510, 439526 125509, 439413 127888, 439387 127958, 451528 129881, 453033 130218, 453033 130219, 453037 130437, 453189 130606, 453204 130612, 453217 130612, 453421 130512, 453500 130322, 453033 130218, 453735 127862, 454687 117762, 455749 106320, 455838 106115, 456054 105994, 456514 105947, 457942 106195, 459360 106501, 459772 106719, 459927 106913, 459930 107138, 457215 116176, 453735 127862, 453504 130312, 453500 130322, 465054 132905, 465046 133079, 465187 133256, 465208 133266, 465235 133267, 465444 133176, 465522 133010, 465054 132905, 465056 132863, 465895 130508, 466965 123133, 469045 109151, 469142 108948, 469360 108836, 469816 108811, 471211 109126, 472593 109500, 472981 109732, 473123 109933, 473114 110157, 468964 121890, 465895 130508, 465536 132980, 465522 133010, 468387 133650, 478829 136684, 478819 136820, 478954 137004, 478982 137019, 479010 137021, 479223 136940, 479289 136817, 478829 136684, 478835 136602, 479825 134163, 481707 124432, 483880 113088, 483987 112892, 484212 112791, 484668 112787, 486052 113167, 487422 113606, 487801 113860, 487935 114067, 487915 114291, 484347 123023, 479825 134163, 479325 136749, 479289 136817, 484977 138470, 490555 140478, 490535 140616, 490658 140806, 490677 140817, 490703 140821, 490919 140751, 490989 140635, 490555 140478, 490566 140402, 491622 138152, 493407 130870, 496812 117182, 496927 116988, 497157 116899, 497614 116918, 498978 117368, 500325 117876, 500688 118145, 500811 118358, 500781 118581, 495501 129890, 491622 138152, 491031 140565, 490989 140635, 501231 144322, 503912 145482, 503880 145664, 503996 145860, 504027 145880, 504057 145886, 504276 145826, 504372 145681, 503912 145482, 503918 145450, 505153 143088, 507945 133654, 511214 122536, 511340 122350, 511572 122271, 512024 122311, 513360 122820, 514675 123386, 515028 123675, 515139 123893, 515099 124114, 510728 132424, 505153 143088, 504396 145645, 504372 145681, 515236 150382, 515187 150582, 515293 150782, 515299 150787, 515309 150789, 515531 150741, 515660 150567, 515660 150566, 515236 150382, 515239 150372, 516429 148368, 518954 141146, 523657 127844, 523790 127663, 524030 127597, 524486 127662, 525818 128250, 527119 128887, 527464 129196, 527568 129421, 527518 129640, 521140 140434, 516429 148368, 515660 150566, 517085 151182, 528024 156756, 527986 156893, 528083 157099, 528106 157117, 528123 157122, 528347 157083, 528441 156968, 528024 156756, 528044 156684, 529450 154528, 533167 145343, 537498 134570, 537642 134398, 537881 134342, 538331 134426, 539613 135064, 540873 135757, 541196 136078, 541286 136307, 541225 136523, 536114 144308, 529450 154528, 528484 156915, 528441 156968, 532478 159025, 538810 162770, 538769 162884, 538847 163072, 539049 163048, 539129 162959, 538810 162770, 538842 162681, 540043 161044, 543360 153855, 549332 141033, 549483 140867, 549730 140826, 550192 140942, 551479 141667, 552739 142442, 553059 142786, 553144 143022, 553072 143235, 545636 153423, 540043 161044, 539193 162887, 539129 162959, 547347 167819, 550927 170252, 550876 170385, 550956 170601, 550969 170613, 550983 170619, 551211 170605, 551307 170510, 550927 170252, 550954 170182, 552536 168209, 557140 159389, 562488 149077, 562648 148919, 562893 148889, 563332 149016, 564565 149785, 565763 150605, 566059 150959, 566129 151196, 566048 151406, 560268 158565, 552536 168209, 551365 170452, 551307 170510, 560945 177060, 560942 177064, 560852 177260, 560903 177435, 561088 177430, 561247 177285, 561255 177271, 560945 177060, 562203 175648, 566108 168965, 573440 156507, 573607 156356, 573857 156340, 574300 156495, 575510 157341, 576685 158230, 576970 158601, 577031 158844, 576940 159050, 568764 168284, 562203 175648, 561255 177271, 561635 177529, 572499 185956, 572428 186095, 572486 186318, 572497 186331, 572512 186339, 572741 186349, 572870 186244, 572499 185956, 572526 185902, 574302 184091, 579493 176182, 586095 166048, 586270 165906, 586518 165900, 586941 166069, 588093 166956, 589208 167890, 589465 168269, 589511 168512, 589410 168713, 583298 174914, 574302 184091, 572910 186211, 572870 186244, 575285 188117, 581473 193572, 581414 193674, 581453 193873, 581657 193888, 581751 193818, 581473 193572, 581522 193487, 583026 192096, 587296 186159, 595929 174219, 596110 174084, 596360 174092, 596791 174293, 597915 175252, 599003 176253, 599252 176653, 599290 176900, 599180 177097, 590390 185285, 583026 192096, 581830 193759, 581751 193818, 588244 199542, 592330 203628, 592260 203741, 592292 203967, 592303 203983, 592326 203998, 592553 204028, 592659 203957, 592330 203628, 592375 203557, 594360 201890, 600242 194598, 607827 185134, 608015 185010, 608261 185026, 608666 185235, 609712 186217, 610717 187240, 610936 187642, 610958 187887, 610837 188077, 604107 193705, 594360 201890, 592733 203907, 592659 203957, 600459 211757, 600650 211973, 600621 211995, 600495 212171, 600517 212397, 600521 212404, 600531 212411, 600755 212449, 600939 212336, 600954 212319, 600650 211973, 602485 210576, 607188 205222, 616865 194255, 617056 194138, 617301 194166, 617702 194400, 618713 195443, 619680 196524, 619883 196940, 619895 197188, 619766 197372, 610235 204676, 602485 210576, 600954 212319, 610434 223073, 610312 223232, 610321 223460, 610336 223487, 610366 223511, 610589 223562, 610776 223460, 610434 223073, 610444 223060, 612660 221538, 619121 214942, 627611 206226, 627810 206120, 628052 206159, 628436 206405, 629378 207478, 630277 208591, 630456 209011, 630453 209257, 630314 209433, 623059 214398, 612660 221538, 610780 223458, 610776 223460, 611883 224716, 617790 232330, 617705 232426, 617705 232653, 617715 232674, 617735 232691, 617954 232751, 618072 232694, 617790 232330, 617849 232263, 619975 230946, 625107 226135, 635748 216201, 635950 216102, 636190 216153, 636562 216419, 637459 217543, 638096 218411, 638347 218807, 638467 219129, 638453 219375, 638306 219545, 628109 225907, 619975 230946, 618150 232657, 618072 232694, 622471 238365, 626502 244297, 626412 244391, 626401 244618, 626414 244649, 626436 244670, 626653 244740, 626770 244691, 626502 244297, 626562 244233, 628874 242955, 635949 237000, 645263 229120, 645471 229035, 645709 229097, 646070 229384, 646907 230546, 647699 231746, 647836 232181, 647809 232425, 647654 232588, 639979 236816, 628874 242955, 626853 244656, 626770 244691, 632181 252654, 633039 254105, 632884 254250, 632863 254477, 632873 254503, 632890 254521, 633102 254600, 633291 254530, 633039 254105, 633042 254102, 635301 252988, 640883 248688, 652412 239848, 652621 239770, 652856 239843, 653199 240141, 653981 241341, 654709 242569, 654826 243010, 654788 243252, 654625 243407, 643848 248771, 635301 252988, 633305 254525, 633291 254530, 640590 266871, 640569 266880, 640405 267022, 640374 267248, 640380 267266, 640388 267276, 640597 267367, 640805 267303, 640834 267283, 640590 266871, 642848 265895, 650574 260568, 660621 253605, 660837 253540, 661069 253627, 661401 253948, 662131 255203, 662812 256492, 662909 256940, 662860 257182, 662691 257330, 654711 260765, 642848 265895, 640834 267283, 640976 267523, 645990 277364, 645888 277443, 645846 277666, 645850 277683, 645857 277691, 646060 277790, 646190 277756, 645990 277364, 646059 277310, 648302 276461, 654364 272661, 666704 264972, 666920 264913, 667147 265010, 667382 265258, 667627 265659, 668125 266614, 668735 267912, 668808 268363, 668747 268602, 668570 268740, 657295 273058, 648302 276461, 646270 277735, 646190 277756, 648819 282916, 652252 290851, 652156 290919, 652107 291127, 652292 291232, 652407 291208, 652252 290851, 652332 290794, 654418 290123, 662858 285428, 673543 279448, 673764 279405, 673988 279518, 674293 279879, 674907 281223, 675473 282592, 675530 283060, 675459 283300, 675277 283431, 667120 286039, 654418 290123, 652504 291188, 652407 291208, 655679 298770, 656720 301662, 656581 301751, 656517 301969, 656517 301971, 656521 301977, 656715 302100, 656869 302076, 656720 301662, 656764 301634, 658999 301031, 665426 297816, 678499 291333, 678720 291297, 678937 291417, 679217 291778, 679762 293127, 680248 294490, 680280 294952, 680197 295185, 680008 295308, 668352 298508, 658999 301031, 656928 302067, 656869 302076, 661531 315024, 661657 315456, 661640 315460, 661453 315567, 661390 315749, 661547 315858, 661761 315833, 661765 315831, 661657 315456, 663614 315025, 672997 310933, 683834 306177, 684059 306155, 684270 306288, 684536 306674, 685018 308067, 685448 309478, 685459 309947, 685366 310180, 685172 310293, 676374 312213, 663614 315025, 661765 315831, 665018 327028, 664898 327089, 664813 327299, 664816 327306, 664995 327447, 665137 327438, 665018 327028, 665092 326991, 667355 326615, 674397 323926, 687739 318900, 687963 318886, 688167 319026, 688412 319417, 688822 320810, 689171 322213, 689158 322677, 689052 322901, 688852 323004, 676591 325082, 667355 326615, 665211 327434, 665137 327438, 666350 331614, 668431 340921, 668321 340970, 668234 341163, 668394 341301, 668515 341298, 668431 340921, 668518 340881, 670671 340620, 680657 337344, 691499 333763, 691725 333763, 691923 333915, 692094 334223, 692239 334686, 692498 335764, 692791 337217, 692758 337687, 692643 337909, 692439 338003, 683096 339113, 670671 340620, 668610 341296, 668515 341298, 670119 348473, 670829 352957, 670690 353010, 670585 353210, 670585 353217, 670591 353233, 670756 353389, 670899 353394, 672822 365536, 672967 367070, 672964 367070, 672759 367140, 672645 367338, 672644 367353, 672649 367368, 672807 367531, 673012 367546, 674126 379333, 673957 379380, 673832 379568, 673829 379590, 673837 379618, 673987 379788, 674171 379812, 674447 382734, 674789 393602, 674656 393633, 674523 393819, 674517 393852, 674523 393878, 674666 394055, 674804 394080, 674990 400000, 674804 405926, 674666 405951, 674523 406126, 674518 406147, 674523 406173, 674656 406357, 674789 406388, 674447 417267, 674172 420176, 673988 420202, 673837 420373, 673828 420406, 673832 420438, 673957 420629, 674125 420676, 673011 432459, 672806 432475, 672648 432637, 672645 432645, 672646 432654, 672760 432851, 672966 432920, 672967 432920, 672821 434465, 670901 446591, 670758 446598, 670592 446756, 670583 446781, 670583 446797, 670689 446999, 670828 447053, 670119 451528, 668514 458708, 668608 458710, 670538 459347, 678399 460280, 692438 461998, 692643 462090, 692758 462313, 692792 462786, 692498 464236, 692152 465673, 691923 466085, 691725 466237, 691500 466236, 679513 462311, 670538 459347, 668521 459108, 668433 459069, 668514 458708, 668393 458705, 668239 458836, 668324 459020, 668433 459069, 666350 468387, 665142 472544, 665217 472548, 667582 473443, 677393 475097, 688853 476995, 689052 477099, 689158 477323, 689171 477783, 688822 479190, 688414 480580, 688167 480974, 687963 481114, 687738 481101, 679143 477816, 667582 473443, 665088 473022, 665014 472984, 665142 472544, 665000 472537, 664819 472680, 664811 472697, 664810 472710, 664895 472923, 665014 472984, 661763 484175, 663496 484936, 671060 486585, 685171 489708, 685366 489820, 685460 490053, 685449 490522, 685018 491933, 684535 493328, 684270 493712, 684059 493845, 683835 493822, 672526 488900, 663496 484936, 661658 484535, 661763 484175, 661758 484173, 661544 484149, 661393 484252, 661455 484426, 661643 484532, 661658 484535, 661530 484977, 656873 497913, 656933 497922, 659203 499051, 668330 501545, 680009 504692, 680197 504815, 680280 505048, 680248 505507, 679762 506873, 679219 508220, 678937 508583, 678720 508703, 678498 508668, 670712 504772, 659203 499051, 656757 498382, 656714 498354, 656873 497913, 656718 497890, 656526 498012, 656514 498031, 656512 498044, 656575 498265, 656714 498354, 655678 501231, 652402 508801, 652499 508822, 654288 509823, 661252 512049, 675276 516570, 675459 516700, 675530 516940, 675472 517412, 674907 518777, 674293 520120, 673988 520482, 673764 520595, 673544 520551, 663040 514721, 654288 509823, 652335 509199, 652255 509142, 652402 508801, 652288 508776, 652111 508875, 652159 509075, 652255 509142, 648818 517085, 646194 522235, 646275 522255, 648471 523626, 657227 526969, 668571 531258, 668747 531398, 668808 531637, 668735 532086, 668125 533386, 667463 534656, 667147 534990, 666920 535086, 666703 535029, 659271 530369, 648471 523626, 646053 522703, 645983 522649, 646194 522235, 646064 522202, 645860 522303, 645847 522320, 645840 522345, 645882 522570, 645983 522649, 640975 532478, 640829 532726, 642728 534042, 649269 536858, 662690 542671, 662860 542818, 662909 543060, 662812 543510, 662131 544797, 661399 546053, 661069 546373, 660837 546460, 660622 546394, 650730 539587, 642728 534042, 640594 533123, 640829 532726, 640799 532705, 640593 532639, 640385 532730, 640380 532736, 640376 532748, 640408 532972, 640573 533114, 640594 533123, 633295 545464, 633309 545469, 635428 547096, 643713 551210, 654626 556592, 654788 556748, 654826 556990, 654710 557430, 653981 558659, 653200 559858, 652856 560157, 652621 560230, 652411 560153, 645448 554789, 635428 547096, 633036 545908, 633033 545906, 633295 545464, 633105 545395, 632892 545475, 632869 545499, 632857 545532, 632878 545759, 633033 545906, 632181 547347, 626764 555317, 626846 555353, 628746 556960, 634917 560360, 647653 567413, 647809 567575, 647836 567819, 647698 568255, 646907 569454, 646069 570617, 645709 570903, 645470 570966, 645264 570879, 636062 563148, 628746 556960, 626566 555759, 626506 555697, 626764 555317, 626648 555266, 626432 555336, 626414 555353, 626404 555377, 626415 555604, 626506 555697, 622470 561635, 618075 567301, 618154 567339, 620082 569141, 627935 574031, 638307 580454, 638452 580626, 638467 580871, 638306 581302, 637459 582457, 636564 583580, 636191 583847, 635950 583897, 635747 583799, 629355 577807, 620082 569141, 617842 567746, 617783 567678, 618075 567301, 617958 567245, 617738 567304, 617713 567326, 617700 567353, 617700 567582, 617783 567678, 611883 575285, 610768 576549, 610771 576551, 612524 578350, 618342 582333, 630313 590568, 630453 590743, 630456 590989, 630277 591409, 629378 592522, 628432 593597, 628052 593841, 627810 593880, 627612 593773, 619180 585181, 612524 578350, 610451 576931, 610442 576920, 610768 576549, 610581 576447, 610359 576495, 610339 576511, 610326 576535, 610316 576761, 610442 576920, 600959 587675, 602586 589521, 610039 595223, 619767 602626, 619895 602812, 619883 603060, 619680 603474, 618713 604557, 617701 605601, 617301 605833, 617056 605862, 616864 605746, 611130 599219, 602586 589521, 600642 588035, 600959 587675, 600944 587658, 600758 587547, 600534 587586, 600519 587597, 600512 587608, 600489 587835, 600614 588013, 600642 588035, 600458 588244, 592649 596053, 592722 596103, 594220 597971, 599709 602564, 610836 611924, 610958 612112, 610936 612358, 610717 612760, 609712 613783, 608670 614762, 608261 614974, 608015 614990, 607828 614865, 600237 605475, 594220 597971, 592383 596434, 592338 596364, 592649 596053, 592543 595981, 592318 596009, 592305 596017, 592298 596028, 592265 596253, 592338 596364, 588243 600459, 581757 606177, 581837 606236, 583121 608015, 590192 614589, 599181 622902, 599290 623100, 599252 623347, 599003 623747, 597915 624748, 597070 625469, 596680 625759, 596360 625908, 596110 625915, 595928 625782, 590928 618831, 583121 608015, 581514 606521, 581465 606434, 581757 606177, 581662 606108, 581449 606124, 581407 606332, 581465 606434, 575284 611883, 572856 613767, 572896 613800, 574158 615736, 579203 620856, 589409 631288, 589511 631488, 589465 631731, 589208 632109, 588093 633044, 586942 633930, 586518 634100, 586270 634093, 586096 633952, 579450 623855, 574158 615736, 572536 614090, 572509 614036, 572856 613767, 572729 613662, 572501 613669, 572495 613676, 572438 613896, 572509 614036, 561635 622471, 561262 622724, 562280 624457, 569068 632112, 576941 640949, 577031 641156, 576970 641399, 576685 641771, 575510 642659, 574299 643505, 573857 643660, 573607 643644, 573439 643494, 568895 635719, 562280 624457, 560939 622944, 561262 622724, 561254 622710, 561093 622566, 560901 622562, 560846 622744, 560936 622941, 560939 622944, 551295 629497, 551353 629556, 552411 631595, 557144 637459, 566047 648595, 566129 648804, 566059 649041, 565764 649395, 564564 650215, 563334 650984, 562893 651111, 562648 651080, 562488 650922, 556723 639904, 552411 631595, 550969 629808, 550942 629738, 551295 629497, 551201 629402, 550975 629387, 550972 629388, 550968 629392, 550890 629606, 550942 629738, 547346 632181, 539138 637036, 539203 637107, 540120 639081, 546317 647559, 553073 656764, 553144 656978, 553059 657214, 552819 657472, 552424 657752, 551479 658332, 550190 659059, 549730 659173, 549484 659133, 549331 658968, 545389 650425, 540120 639081, 538835 637323, 538804 637233, 539138 637036, 539056 636948, 538845 636924, 538765 637119, 538804 637233, 532477 640976, 528432 643037, 528475 643090, 529366 645306, 533482 651576, 541224 663478, 541286 663693, 541196 663922, 540874 664241, 539613 664936, 538333 665573, 537881 665658, 537642 665602, 537499 665429, 532828 653909, 529366 645306, 528056 643309, 528036 643239, 528432 643037, 528339 642921, 528115 642883, 528108 642885, 528094 642896, 527997 643101, 528036 643239, 517084 648819, 515671 649430, 516491 651759, 521652 660480, 527518 670359, 527568 670579, 527464 670804, 527118 671114, 525818 671750, 524484 672338, 524030 672403, 523791 672337, 523656 672157, 520540 663247, 516491 651759, 515233 649632, 515230 649621, 515671 649430, 515670 649428, 515539 649255, 515315 649208, 515301 649212, 515289 649220, 515182 649422, 515230 649621, 504365 654323, 504388 654358, 505096 656762, 508563 663353, 515098 675886, 515139 676107, 515028 676325, 514674 676613, 513360 677180, 512026 677689, 511572 677729, 511340 677650, 511215 677463, 507676 665531, 505096 656762, 503929 654545, 503923 654514, 504365 654323, 504269 654177, 504051 654116, 504029 654120, 504005 654136, 503890 654331, 503923 654514, 501230 655679, 491000 659362, 491042 659431, 491675 661988, 495873 670964, 500782 681418, 500811 681642, 500688 681855, 500323 682126, 498978 682632, 497611 683082, 497157 683101, 496927 683012, 496811 682819, 494565 673657, 491675 661988, 490559 659601, 490549 659525, 491000 659362, 490928 659246, 490710 659177, 490675 659182, 490653 659195, 490530 659386, 490549 659525, 484976 661531, 479282 663185, 479318 663253, 479786 665695, 482622 672634, 487914 685710, 487935 685933, 487801 686140, 487423 686393, 486052 686832, 484668 687213, 484212 687209, 483987 687108, 483880 686911, 481505 674658, 479786 665695, 478846 663394, 478839 663314, 479282 663185, 479217 663061, 479006 662980, 478984 662982, 478961 662994, 478828 663178, 478839 663314, 468386 666350, 465535 666987, 465549 667016, 465939 669656, 469225 678927, 473115 689843, 473123 690067, 472981 690268, 472589 690503, 471211 690873, 469814 691189, 469360 691164, 469142 691052, 469044 690850, 467696 681557, 465939 669656, 465047 667140, 465045 667097, 465535 666987, 465453 666821, 465244 666731, 465208 666733, 465180 666746, 465039 666923, 465045 667097, 453494 669679, 453498 669690, 453713 672009, 455915 679337, 459929 692863, 459927 693087, 459772 693281, 459364 693497, 457942 693805, 456869 693992, 456398 694041, 456054 694006, 455838 693885, 455749 693679, 454565 681197, 453713 672009, 453043 669780, 453494 669679, 453416 669489, 453213 669388, 453207 669388, 453197 669392, 453044 669562, 453043 669779, 453043 669780, 451527 670119, 439401 672040, 439427 672108, 439557 674672, 441950 684295, 444777 695555, 444763 695781, 444601 695966, 444191 696162, 442776 696399, 441345 696580, 440899 696510, 440691 696379, 440615 696168, 440173 686864, 439557 674672, 438937 672181, 438941 672113, 439401 672040, 439351 671906, 439150 671797, 439124 671796, 439107 671802, 438949 671964, 438941 672113, 434464 672822, 427141 673514, 427168 673605, 427158 675639, 428700 683400, 431405 697285, 431380 697507, 431204 697685, 430772 697861, 429295 698033, 427824 698147, 427359 698056, 427152 697915, 427084 697700, 427113 685088, 427158 675639, 426762 673644, 426772 673549, 427141 673514, 427106 673397, 426933 673290, 426784 673429, 426772 673549, 417266 674447, 412939 674583, 412958 674654, 412839 677168, 414300 687025, 416033 698507, 415997 698731, 415816 698900, 415383 699056, 413937 699156, 412484 699197, 412038 699086, 411842 698935, 411785 698718, 412253 689528, 412839 677168, 412470 674679, 412482 674597, 412939 674583, 412902 674446, 412711 674318, 412693 674316, 412679 674319, 412502 674465, 412482 674597, 400833 674964, 400646 676836, 401416 684547, 402806 698935, 402759 699156, 402567 699316, 402231 699417, 401750 699458, 400642 699478, 399173 699451, 398719 699315, 398527 699155, 398480 698935, 399665 686658, 400646 676836, 400460 674976, 400833 674964, 400833 674959, 400792 674747, 400647 674635, 400500 674747, 400458 674959, 400460 674976, 400000 674990, 386256 674558, 386232 674403, 386056 674257, 386038 674253, 386022 674255, 385831 674382, 385789 674543, 386256 674558, 386266 674618, 385896 677117, 386344 686577, 386959 698656, 386901 698872, 386705 699023, 386264 699135, 384809 699096, 383363 698995, 382928 698839, 382747 698669, 382711 698447, 384011 689838, 385896 677117, 385776 674592, 385789 674543, 382734 674447, 374522 673671, 374509 673554, 374360 673415, 374185 673523, 374150 673636, 374522 673671, 374532 673768, 374131 675786, 374167 683091, 374201 697825, 374133 698040, 373927 698181, 373463 698272, 371988 698156, 370515 697985, 370082 697809, 369905 697631, 369878 697408, 372178 685618, 374131 675786, 374121 673730, 374150 673636, 365535 672822, 359825 671917, 359817 671783, 359658 671621, 359635 671613, 359611 671614, 359412 671724, 359367 671845, 359825 671917, 359830 672001, 359206 674510, 358733 683872, 358159 695988, 358081 696198, 357872 696329, 357424 696399, 355998 696220, 354585 695983, 354169 695786, 354008 695600, 353995 695376, 356130 686869, 359206 674510, 359336 671927, 359367 671845, 348472 670119, 348190 670056, 348201 670021, 348200 669805, 348050 669636, 348040 669632, 348030 669632, 347827 669733, 347743 669933, 347741 669956, 348190 670056, 347527 672267, 346869 679360, 345487 693921, 345400 694128, 345185 694249, 344720 694296, 343293 694045, 341873 693738, 341466 693523, 341311 693329, 341307 693104, 344726 681593, 347527 672267, 347741 669956, 333749 666827, 333756 666626, 333613 666448, 333583 666434, 333548 666432, 333338 666522, 333246 666715, 333749 666827, 333748 666843, 332854 669367, 331502 678511, 329756 690554, 329658 690755, 329439 690866, 328991 690892, 327591 690579, 326212 690208, 325818 689971, 325675 689771, 325685 689546, 328636 681266, 332854 669367, 333245 666718, 333246 666715, 331613 666350, 322358 663661, 322370 663535, 322238 663351, 322218 663340, 322191 663338, 321978 663418, 321917 663533, 322358 663661, 322350 663750, 321407 666059, 320082 672973, 317310 687265, 317204 687464, 316980 687565, 316521 687568, 315138 687186, 313770 686747, 313390 686495, 313256 686288, 313275 686064, 317785 674924, 321407 666059, 321876 663609, 321917 663533, 315023 661530, 308277 659101, 308293 658972, 308169 658781, 308141 658764, 308110 658760, 307893 658830, 307827 658939, 308277 659101, 308266 659188, 307143 661590, 304921 670558, 302018 682407, 301900 682598, 301672 682687, 301215 682668, 299851 682220, 298508 681716, 298138 681442, 298016 681229, 298046 681006, 301770 673074, 307143 661590, 307780 659016, 307827 658939, 298770 655678, 297222 655008, 297263 654800, 297148 654604, 297127 654590, 297099 654585, 296880 654645, 296769 654812, 297222 655008, 297221 655012, 296050 657240, 294061 664001, 289930 677929, 289806 678116, 289573 678195, 289119 678155, 287783 677644, 286470 677078, 286118 676790, 286006 676572, 286047 676351, 291614 665676, 296050 657240, 296760 654825, 296769 654812, 283610 649118, 283621 649099, 283669 648887, 283563 648687, 283546 648675, 283535 648672, 283312 648720, 283182 648894, 283170 648928, 283610 649118, 282357 651236, 279237 660086, 275202 671626, 275066 671805, 274826 671870, 274367 671804, 273041 671220, 271737 670582, 271391 670272, 271288 670047, 271339 669828, 275774 662359, 282357 651236, 283170 648928, 282916 648818, 273074 643804, 273110 643681, 273014 643476, 273002 643467, 272990 643463, 272766 643500, 272682 643604, 273074 643804, 273050 643888, 271734 645892, 269064 652530, 263600 666005, 263459 666180, 263219 666235, 262769 666151, 261484 665510, 260225 664816, 259904 664498, 259812 664269, 259874 664053, 266458 653932, 271734 645892, 272629 643669, 272682 643604, 267523 640975, 260080 636573, 260118 636462, 260036 636265, 259825 636289, 259746 636375, 260080 636573, 260048 636667, 258756 638435, 254686 647195, 249558 658313, 249403 658478, 249156 658518, 248699 658405, 247410 657679, 246151 656906, 245827 656559, 245743 656323, 245814 656110, 250880 649206, 258756 638435, 259678 636449, 259746 636375, 252654 632181, 250111 630453, 250171 630300, 250094 630086, 250093 630085, 250086 630082, 249858 630096, 249748 630206, 250111 630453, 250092 630501, 248642 632298, 245331 638680, 238563 651610, 238405 651770, 238159 651801, 237719 651673, 236486 650902, 235290 650083, 234994 649730, 234924 649492, 235005 649282, 242555 639842, 248642 632298, 249705 630249, 249748 630206, 238365 622471, 238009 622195, 238020 622183, 238108 621985, 238052 621801, 237862 621805, 237703 621952, 237701 621956, 238009 622195, 236679 623695, 231494 632521, 225521 642738, 225353 642887, 225103 642904, 224661 642750, 223453 641906, 222274 641015, 221990 640643, 221928 640400, 222019 640194, 228009 633470, 236679 623695, 237701 621956, 228488 614809, 228550 614690, 228494 614469, 228487 614465, 228259 614457, 228149 614547, 228488 614809, 228450 614882, 226837 616519, 222723 622831, 214883 634740, 214710 634883, 214463 634890, 214035 634718, 212886 633830, 211776 632901, 211516 632519, 211469 632276, 211571 632075, 220268 623187, 226837 616519, 228092 614594, 228149 614547, 224715 611883, 217561 605576, 217621 605471, 217577 605263, 217367 605247, 217270 605320, 217561 605576, 217514 605660, 215919 607143, 209772 615657, 203105 624926, 202923 625058, 202673 625051, 202245 624852, 201121 623894, 200029 622890, 199781 622490, 199743 622244, 199853 622047, 206759 615659, 215919 607143, 217194 605377, 217270 605320, 211756 600458, 208546 597248, 208627 597124, 208595 596900, 208591 596894, 208576 596884, 208351 596855, 208233 596934, 208546 597248, 208509 597305, 206681 598835, 201985 604690, 193058 615731, 192872 615857, 192627 615842, 192222 615633, 191173 614649, 190169 613625, 189953 613226, 189931 612980, 190052 612791, 199564 604788, 206681 598835, 208171 596976, 208233 596934, 199542 588243, 198522 587087, 198523 587086, 198647 586907, 198624 586680, 198616 586668, 198603 586658, 198379 586619, 198205 586727, 198522 587087, 196563 588585, 189862 596191, 182278 604823, 182085 604938, 181839 604908, 181440 604678, 180430 603636, 179458 602548, 179257 602136, 179246 601889, 179375 601705, 186884 595989, 196563 588585, 198195 586733, 198205 586727, 190375 577846, 190484 577711, 190475 577484, 190465 577466, 190443 577448, 190220 577398, 190057 577486, 190375 577846, 190349 577879, 188282 579294, 183084 584629, 173184 594718, 172987 594825, 172745 594787, 172364 594543, 171417 593465, 170520 592353, 170342 591934, 170345 591689, 170484 591512, 180738 584459, 188282 579294, 190029 577501, 190057 577486, 188117 575285, 181452 566693, 181541 566589, 181540 566360, 181527 566333, 181504 566313, 181285 566254, 181159 566315, 181452 566693, 181400 566754, 179166 568145, 171924 574913, 163499 582812, 163295 582909, 163054 582858, 162682 582593, 161787 581471, 160937 580313, 160778 579884, 160792 579638, 160939 579468, 168957 574502, 179166 568145, 181089 566348, 181159 566315, 177529 561635, 174196 556730, 174293 556630, 174305 556404, 174296 556384, 174278 556366, 174062 556296, 173937 556349, 174196 556730, 174142 556786, 171963 557987, 166241 562827, 155440 571900, 155235 571989, 154996 571926, 154638 571643, 153798 570476, 153009 569280, 152871 568842, 152898 568598, 153053 568435, 163971 562390, 171963 557987, 173862 556380, 173937 556349, 167819 547346, 166332 544831, 166464 544702, 166485 544476, 166471 544439, 166452 544419, 166239 544340, 166076 544399, 166332 544831, 166308 544854, 163917 546041, 156116 552030, 146937 559103, 146726 559180, 146491 559107, 146234 558883, 145952 558509, 145368 557611, 144820 556688, 144608 556270, 144520 555940, 144559 555698, 144721 555542, 153142 551389, 163917 546041, 166036 544414, 166076 544399, 160051 534212, 160207 534079, 160240 533854, 160237 533845, 160232 533839, 160023 533747, 159816 533813, 159815 533813, 160051 534212, 160042 534219, 157898 535143, 151613 539498, 139990 547495, 139776 547563, 139544 547475, 139213 547156, 138480 545897, 137801 544611, 137705 544163, 137753 543920, 137922 543772, 149426 538791, 157898 535143, 159815 533813, 159025 532477, 153451 521537, 153562 521448, 153603 521223, 153596 521197, 153586 521184, 153382 521084, 153239 521122, 153451 521537, 153393 521584, 150990 522501, 142583 527748, 132747 533917, 132529 533972, 132302 533877, 131990 533548, 131326 532276, 130715 530975, 130640 530524, 130701 530286, 130878 530147, 139590 526853, 150990 522501, 153173 521139, 153239 521122, 151182 517084, 148260 510332, 148360 510264, 148408 510067, 148231 509968, 148113 509993, 148260 510332, 148182 510386, 146247 511004, 139339 514871, 126971 521734, 126751 521779, 126527 521667, 126223 521304, 125607 519959, 125044 518595, 124986 518124, 125057 517884, 125240 517753, 137244 513883, 146247 511004, 148019 510013, 148113 509993, 144321 501230, 142855 497157, 142974 497079, 143036 496858, 143033 496841, 143025 496828, 142832 496705, 142699 496725, 142855 497157, 142793 497198, 140351 497865, 131443 502294, 121056 507493, 120834 507526, 120616 507407, 120334 507042, 119793 505699, 119304 504328, 119272 503871, 119356 503638, 119544 503517, 128429 501122, 140351 497865, 142618 496738, 142699 496725, 138751 485761, 138756 485760, 138945 485654, 139007 485482, 138855 485377, 138640 485402, 138624 485409, 138751 485761, 136906 486163, 129817 489276, 116562 495045, 116339 495068, 116127 494935, 115862 494550, 115377 493154, 114949 491742, 114938 491276, 115032 491043, 115226 490930, 127267 488265, 136906 486163, 138624 485409, 138469 484977, 134634 471774, 134773 471701, 134856 471488, 134854 471467, 134848 471454, 134668 471313, 134503 471323, 134634 471774, 134581 471801, 132080 472222, 123230 475569, 111933 479887, 111707 479899, 111503 479759, 111259 479370, 110850 477978, 110586 476922, 110501 476453, 110512 476109, 110617 475885, 110817 475783, 119407 474358, 132080 472222, 134451 471326, 134503 471323, 133650 468387, 131850 460336, 131958 460289, 132043 460106, 131887 459972, 131769 459974, 131850 460336, 131759 460375, 129731 460616, 122782 462911, 108778 467496, 108554 467499, 108356 467346, 108126 466930, 107779 465494, 107560 464405, 107497 463926, 107522 463575, 107636 463351, 107841 463257, 119764 461799, 129731 460616, 131671 459975, 131769 459974, 129881 451528, 128977 445818, 129101 445768, 129206 445567, 129207 445545, 129198 445522, 129032 445365, 128904 445360, 127178 434464, 127151 434178, 127187 434177, 127394 434109, 127508 433914, 127509 433905, 127505 433894, 127347 433732, 127131 433714, 127108 433719, 127151 434178, 124846 434229, 117894 435797, 103619 438982, 103395 438963, 103214 438796, 103028 438375, 102821 436933, 102711 435850, 102696 435375, 102756 435035, 102892 434827, 103105 434754, 115108 434447, 124846 434229, 127108 433719, 125759 419445, 125953 419390, 126078 419199, 126082 419165, 126073 419132, 125922 418961, 125711 418933, 125553 417266, 125250 407635, 125375 407607, 125509 407423, 125513 407400, 125507 407374, 125365 407197, 125236 407174, 125010 400000, 125235 392832, 125364 392809, 125508 392631, 125515 392601, 125509 392569, 125375 392384, 125250 392355, 125553 382733, 125712 381055, 125923 381029, 126074 380858, 126081 380834, 126077 380807, 125952 380617, 125758 380563, 127107 366288, 124707 365751, 115326 365519, 103104 365247, 102892 365173, 102756 364965, 102676 364509, 102821 363066, 103026 361629, 103214 361204, 103395 361037, 103620 361017, 112094 362927, 124707 365751, 127152 365811, 127107 366288, 127129 366293, 127346 366274, 127504 366111, 127510 366093, 127509 366079, 127394 365882, 127189 365812, 127152 365811, 127178 365535, 128906 354625, 129034 354621, 129200 354467, 129205 354453, 129205 354440, 129100 354239, 128975 354191, 129881 348472, 131768 340033, 131669 340032, 129594 339351, 119997 338186, 107840 336744, 107636 336649, 107522 336425, 107489 335956, 107779 334506, 108124 333073, 108356 332654, 108554 332501, 108779 332502, 116910 335187, 129594 339351, 131762 339614, 131852 339654, 131768 340033, 131886 340034, 132047 339894, 131960 339702, 131852 339654, 133650 331613, 134508 328661, 134457 328658, 132296 327833, 125206 326657, 110818 324216, 110617 324114, 110512 323890, 110497 323429, 110850 322022, 111261 320627, 111503 320241, 111707 320101, 111932 320113, 123244 324376, 132296 327833, 134577 328211, 134630 328239, 134508 328661, 134672 328671, 134851 328532, 134852 328529, 134853 328522, 134769 328310, 134630 328239, 138470 315023, 138622 314600, 136783 313797, 126788 311593, 115225 309071, 115032 308957, 114939 308724, 114950 308258, 115377 306846, 115860 305453, 116127 305065, 116339 304932, 116563 304954, 124809 308573, 136783 313797, 138755 314232, 138622 314600, 138637 314606, 138852 314629, 139010 314519, 138947 314339, 138759 314233, 138755 314232, 142704 303262, 142623 303249, 140566 302220, 133293 300258, 119545 296483, 119356 296362, 119272 296129, 119304 295670, 119793 294301, 120336 292956, 120616 292593, 120834 292474, 121055 292508, 132196 298033, 140566 302220, 142786 302819, 142849 302860, 142704 303262, 142836 303284, 143029 303163, 143030 303162, 143031 303155, 142968 302936, 142849 302860, 144322 298770, 148109 290017, 148015 289997, 146115 288940, 136115 285723, 125239 282248, 125057 282116, 124986 281876, 125044 281408, 125607 280041, 126221 278698, 126527 278333, 126751 278221, 126972 278265, 135182 282859, 146115 288940, 148185 289606, 148263 289661, 148109 290017, 148227 290041, 148412 289936, 148362 289731, 148263 289661, 151182 282915, 153243 278870, 153178 278852, 151161 277587, 144139 274931, 130879 269851, 130701 269714, 130640 269475, 130713 269027, 131326 267724, 131990 266453, 132302 266123, 132529 266027, 132746 266083, 143297 272657, 151161 277587, 153386 278429, 153445 278475, 153243 278870, 153386 278908, 153590 278809, 153593 278806, 153598 278786, 153557 278562, 153445 278475, 159025 267523, 159810 266195, 157779 264795, 148478 260773, 137921 256228, 137753 256080, 137705 255836, 137800 255391, 138480 254103, 139212 252845, 139544 252525, 139776 252438, 139991 252504, 147748 257878, 157779 264795, 160046 265775, 160054 265782, 159810 266195, 159811 266196, 160019 266259, 160228 266167, 160237 266156, 160242 266141, 160210 265916, 160054 265782, 166080 255593, 166041 255578, 164061 254053, 157377 250756, 144722 244457, 144559 244302, 144520 244060, 144638 243618, 145368 242389, 146148 241191, 146491 240893, 146726 240820, 146936 240898, 156813 248471, 164061 254053, 166301 255158, 166325 255180, 166080 255593, 166243 255654, 166455 255575, 166470 255559, 166480 255533, 166459 255306, 166325 255180, 167819 252653, 173931 243660, 173855 243629, 171839 241932, 163168 237138, 153052 231566, 152898 231402, 152871 231158, 153008 230722, 153798 229524, 154637 228358, 154996 228074, 155235 228011, 155441 228099, 162643 234191, 171839 241932, 174147 243208, 174200 243264, 173931 243660, 174057 243711, 174274 243640, 174297 243618, 174308 243592, 174296 243365, 174200 243264, 177529 238365, 181163 233680, 181093 233646, 179276 231943, 172907 227998, 160940 220531, 160792 220361, 160778 220116, 160937 219687, 161787 218528, 162681 217408, 163054 217142, 163295 217091, 163498 217188, 172622 225705, 179276 231943, 181393 233254, 181446 233315, 181163 233680, 181288 233742, 181507 233684, 181522 233670, 181534 233647, 181535 233419, 181446 233315, 188117 224715, 190050 222523, 190021 222508, 188153 220600, 180047 215032, 170483 208489, 170345 208311, 170342 208066, 170520 207645, 171417 206535, 172361 205459, 172745 205213, 172987 205175, 173185 205281, 179737 212006, 188153 220600, 190355 222113, 190381 222147, 190050 222523, 190214 222609, 190436 222560, 190465 222537, 190479 222511, 190489 222283, 190381 222147, 198209 213268, 198200 213262, 196662 211512, 190574 206877, 179376 198294, 179245 198112, 179257 197864, 179463 197445, 180430 196364, 181439 195323, 181839 195091, 182085 195062, 182278 195177, 190571 204578, 196662 211512, 198514 212922, 198209 213268, 198383 213376, 198607 213338, 198612 213334, 198618 213325, 198642 213098, 198515 212922, 198514 212922, 199542 211756, 208223 203075, 208161 203034, 206545 201031, 198957 194658, 190051 187210, 189931 187019, 189953 186774, 190168 186376, 191173 185351, 192223 184367, 192627 184158, 192872 184143, 193059 184268, 198884 191535, 206545 201031, 208517 202687, 208554 202744, 208223 203075, 208342 203154, 208569 203123, 208591 203108, 208601 203094, 208634 202869, 208554 202744, 211757 199541, 217276 194676, 217200 194618, 216010 192963, 210203 187593, 199854 177952, 199743 177756, 199781 177509, 200028 177111, 201121 176106, 202243 175150, 202673 174949, 202923 174941, 203104 175075, 210495 185296, 216010 192963, 217506 194347, 217554 194430, 217276 194676, 217371 194749, 217573 194735, 217614 194534, 217554 194430, 224716 188117, 228136 185464, 228077 185417, 226689 183302, 219725 176197, 211570 167926, 211469 167724, 211516 167481, 211711 167196, 212052 166868, 212886 166170, 214036 165282, 214463 165110, 214710 165117, 214884 165259, 219907 172969, 226689 183302, 228460 185109, 228498 185183, 228136 185464, 228247 185553, 228476 185543, 228494 185533, 228502 185524, 228559 185302, 228498 185183, 237707 178040, 236754 176411, 231603 170629, 222020 159805, 221928 159600, 221990 159357, 222274 158986, 223453 158094, 224660 157251, 225103 157096, 225353 157113, 225520 157263, 231776 167891, 236754 176411, 238002 177811, 237707 178040, 237709 178044, 237867 178190, 238051 178195, 238103 178019, 238013 177823, 238002 177811, 238365 177529, 249738 169801, 249694 169758, 248522 167512, 242603 160128, 235005 150718, 234924 150507, 234994 150270, 235291 149916, 236486 149098, 237721 148326, 238159 148199, 238405 148230, 238564 148389, 242573 156118, 248522 167512, 250106 169489, 250125 169538, 249738 169801, 249849 169910, 250077 169924, 250097 169916, 250106 169907, 250185 169691, 250125 169538, 252654 167819, 259754 163620, 259687 163546, 258826 161681, 254503 155790, 245815 143889, 245743 143677, 245827 143441, 246149 143096, 247411 142320, 248698 141596, 249156 141482, 249404 141522, 249557 141688, 254626 152577, 258826 161681, 260042 163337, 260074 163431, 259754 163620, 259832 163707, 260034 163731, 260111 163542, 260074 163431, 267523 159025, 272674 156400, 272621 156336, 271652 153940, 266530 146086, 259873 135947, 259813 135731, 259904 135502, 260226 135183, 261484 134489, 262773 133849, 263219 133765, 263459 133820, 263601 133994, 266875 142132, 271652 153940, 273063 156104, 273087 156190, 272674 156400, 272759 156503, 272983 156541, 273004 156535, 273024 156519, 273122 156312, 273087 156190, 282916 151181, 283179 151067, 282417 148889, 278779 142763, 271340 130171, 271288 129953, 271391 129728, 271736 129419, 273041 128780, 274364 128196, 274826 128130, 275066 128195, 275202 128375, 279202 139697, 282417 148889, 283602 150884, 283179 151067, 283191 151101, 283320 151276, 283541 151325, 283549 151323, 283559 151316, 283665 151115, 283614 150904, 283602 150884, 296761 145190, 296753 145178, 295994 142611, 291711 134417, 286046 123649, 286006 123428, 286118 123209, 286473 122920, 287783 122356, 289117 121845, 289573 121805, 289806 121884, 289931 122070, 292412 130503, 295994 142611, 297233 144982, 297234 144986, 296761 145190, 296874 145358, 297093 145418, 297126 145412, 297156 145392, 297273 145196, 297234 144986, 298770 144321, 307837 141057, 307792 140980, 307198 138557, 304205 132183, 298047 118993, 298016 118771, 298138 118558, 298506 118286, 299851 117780, 301212 117332, 301672 117313, 301901 117402, 302017 117594, 304917 129257, 307198 138557, 308258 140815, 308270 140901, 307837 141057, 307902 141167, 308117 141237, 308141 141234, 308164 141220, 308289 141030, 308270 140901, 315024 138469, 321910 136469, 321869 136393, 321368 133799, 317890 125229, 313274 113937, 313257 113712, 313390 113505, 313772 113251, 315138 112814, 316525 112431, 316980 112435, 317204 112536, 317312 112734, 318961 121340, 321368 133799, 322361 136246, 322368 136336, 321910 136469, 321972 136584, 322185 136664, 322219 136661, 322245 136647, 322379 136462, 322368 136336, 331614 133650, 333259 133282, 333257 133278, 332896 130791, 330530 124151, 325686 110452, 325675 110229, 325818 110029, 326209 109794, 327591 109421, 328637 109186, 329099 109114, 329439 109134, 329658 109245, 329755 109447, 331526 121355, 332896 130791, 333740 133160, 333741 133175, 333259 133282, 333349 133475, 333557 133566, 333582 133565, 333607 133553, 333748 133377, 333741 133175, 347734 130046, 347503 127600, 344824 118604, 341306 106897, 341311 106671, 341466 106477, 341876 106260, 343293 105955, 344366 105767, 344840 105716, 345185 105750, 345400 105872, 345488 106078, 346291 114729, 347503 127600, 348201 129942, 347734 130046, 347736 130069, 347821 130268, 348025 130368, 348044 130368, 348056 130363, 348208 130193, 348211 129976, 348201 129942, 348472 129881, 359381 128153, 359351 128069, 359237 125678, 357496 118736, 353996 104623, 354008 104400, 354169 104214, 354580 104019, 355998 103779, 357421 103600, 357872 103671, 358081 103802, 358158 104013, 358780 116071, 359237 125678, 359820 128002, 359816 128084, 359381 128153, 359424 128274, 359623 128384, 359636 128385, 359649 128380, 359809 128218, 359816 128084, 365536 127178, 374143 126365, 374114 126272, 374121 124079, 372264 114602, 369878 102593, 369905 102368, 370082 102191, 370409 102058, 370885 101971, 371988 101844, 373467 101729, 373927 101818, 374133 101959, 374202 102174, 374161 110738, 374121 124079, 374542 126230, 374531 126328, 374143 126365, 374179 126477, 374361 126589, 374518 126445, 374531 126328, 382734 125553, 385807 125456, 385794 125406, 385911 123101, 384838 115989, 382712 101552, 382747 101331, 382928 101161, 383359 101007, 384809 100904, 386259 100864, 386705 100977, 386901 101128, 386959 101345, 386401 113422, 385911 123101, 386255 125384, 386246 125443, 385807 125456, 385848 125617, 386036 125745, 386044 125743, 386221 125598, 386246 125443, 400000 125010, 400451 125024, 400449 125042, 400494 125253, 400647 125369, 400798 125253, 400841 125042, 400840 125036, 400451 125024, 400645 123031, 399653 112841, 398479 101064, 398526 100845, 398719 100685, 399055 100584, 399537 100543, 400642 100522) (400683 674518, 401566 674424, 400639 674448, 399705 674415) (411964 674186, 412596 674222, 412700 674223, 413216 674142) (385923 674150, 386021 674161, 386546 674132, 385306 674053) (374375 673307, 374501 673311, 375300 673310, 374174 673229, 373423 673119) (426913 673119, 425968 673179, 426948 673183, 427848 673003) (438602 671730, 439015 671711, 439143 671700, 439816 671528) (359520 671499, 359615 671519, 360134 671544, 358926 671349) (348057 669539, 348198 669558, 348984 669638, 348060 669481, 347134 669268) (453171 669240, 452237 669391, 453193 669296, 453289 669272, 454089 669036) (464477 666755, 465078 666666, 465200 666643, 465668 666477) (333467 666306, 333590 666344, 334294 666450, 333088 666173) (322250 663254, 322383 663285, 323155 663441, 322252 663196, 321354 662898) (478933 662843, 478020 663084, 478947 662898, 479062 662857, 479823 662553) (489947 659275, 490539 659128, 490654 659094, 491118 658879) (308037 658625, 308165 658678, 308854 658851, 307678 658459) (297180 654514, 297294 654553, 297847 654720, 296527 654178) (503960 653989, 503076 654315, 503975 654045, 504092 653989, 504816 653616) (514755 649310, 515163 649167, 515251 649132, 515873 648766) (283468 648526, 283592 648593, 284259 648827, 283128 648326) (273077 643401, 273162 643439, 273914 643742, 273073 643331, 272254 642866) (528020 642757, 527168 643166, 528034 642818, 528141 642754, 528832 642304) (538301 637063, 538714 636876, 538775 636845, 539366 636409) (259984 636105, 260087 636174, 260737 636470, 259649 635858) (250162 630018, 250240 630062, 250971 630438, 250170 629946, 249394 629397) (550875 629262, 550061 629753, 550909 629316, 550990 629256, 551647 628725) (560206 622832, 560811 622488, 561205 622128) (238150 621724, 238732 622056, 237724 621354) (228540 614385, 228623 614444, 229331 614905, 228582 614337, 227863 613714) (572392 613554, 571630 614122, 572453 613588, 572524 613523, 573108 612944) (580945 606363, 581282 606123, 581379 606047, 581861 605520) (217583 605123, 217634 605174, 218227 605599, 217280 604792) (208632 596804, 208726 596885, 209366 597403, 208684 596770, 208033 596086) (592198 595908, 591504 596543, 592266 595926, 592328 595858, 592848 595236) (600050 587894, 600353 587626, 600455 587528, 600883 586968) (198615 586523, 198674 586594, 199216 587074, 198355 586182) (190522 577393, 190608 577484, 191188 578059, 190568 577360, 189984 576618) (610225 576419, 609593 577121, 610279 576443, 610356 576340, 610809 575689) (617282 567669, 617549 567381, 617637 567279, 618016 566674) (181533 566183, 181600 566282, 182082 566800, 181317 565838) (174363 556321, 174440 556420, 174964 557050, 174413 556293, 173901 555498) (626290 555275, 625727 556037, 626344 555295, 626415 555178, 626802 554491) (632472 545884, 632713 545569, 632784 545468, 633104 544827) (166496 544297, 166556 544407, 166983 544964, 166315 543933) (160321 533804, 160375 533890, 160846 534578, 160368 533768, 159936 532927) (640241 532672, 639752 533487, 640297 532691, 640357 532566, 640676 531842) (645477 522753, 645702 522397, 645750 522312, 646008 521632) (153643 521069, 153692 521183, 154065 521774, 153493 520673) (148515 510047, 148964 510848, 148564 509994, 148216 509114) (651876 508997, 651539 509675, 652011 508830, 652055 508709, 652301 507948) (656188 498486, 656382 498104, 656423 498012, 656610 497309) (143092 496718, 143124 496821, 143477 497525, 143158 496767, 142930 496107) (139124 485467, 139491 486291, 139182 485417, 138924 484519) (661213 484201, 660894 485080, 661288 484192, 661477 483312) (664534 473170, 664693 472759, 664724 472667, 664840 471952) (134919 471329, 134941 471432, 135202 472107, 134851 470903) (132149 460080, 132185 460207, 132435 460966, 132209 460057, 132036 459122) (668029 459004, 667833 459719, 668134 458804, 668146 458725, 668247 457878) (670361 447255, 670469 446858, 670498 446735, 670543 446041) (129280 445399, 129291 445497, 129483 446197, 129253 444973) (127601 433888, 127627 434031, 127795 434803, 127628 433664, 127575 432929) (672473 432836, 672349 433566, 672552 432627, 672558 432529, 672583 431695) (673657 420911, 673724 420512, 673740 420388, 673724 419686) (126168 419016, 126170 419142, 126289 419847, 126178 418610) (125603 407404, 125614 407542, 125706 408324, 125660 407389, 125667 406442) (674371 406339, 674318 407097, 674426 406158, 674422 406034, 674370 405217) (674394 394384, 674424 393966, 674427 393848, 674342 393146) (125615 392458, 125604 392594, 125653 393304, 125662 392065) (126170 380858, 126168 380982, 126185 381775, 126237 380644, 126326 379902) (673683 379615, 673720 380557, 673741 379615, 673725 379490, 673592 378684) (672569 367909, 672559 367471, 672552 367368, 672397 366671) (127627 365971, 127602 366106, 127590 366611, 127755 365390) (129291 354503, 129281 354595, 129239 355196, 129484 353786) (670436 353262, 670561 354198, 670499 353266, 670471 353145, 670256 352350) (668218 341916, 668141 341217, 667973 340715) (132184 339798, 132150 339917, 132069 340626, 132314 339409) (134939 328571, 134920 328664, 134788 329475, 135008 328561, 135290 327653) (664664 327355, 664879 328282, 664727 327337, 664695 327244, 664392 326455) (661394 316309, 661265 315754, 660989 315144) (139126 314527, 139018 315049, 139413 313891) (143123 303181, 143093 303277, 142873 304093, 143183 303205, 143553 302329) (656373 302037, 656680 302939, 656425 301991, 656385 301902, 656014 301168) (652176 291675, 652054 291286, 652012 291170, 651659 290549) (148501 290001, 148293 290657, 148768 289506) (153692 278816, 153645 278928, 153350 279697, 153740 278853, 154189 278022) (645713 277747, 646101 278604, 645742 277666, 645274 276921) (640516 267800, 640356 267432, 640296 267307, 639893 266725) (160375 266110, 160323 266191, 160036 266852, 160620 265755) (166559 255589, 166497 255703, 166129 256431, 166712 255441, 167127 254841) (632748 254581, 633221 255398, 632784 254531, 632714 254432, 632234 253800) (626607 245167, 626415 244822, 626343 244705, 625886 244160) (174441 243579, 174366 243675, 174023 244291, 174700 243270) (181603 233715, 181534 233817, 181096 234509, 181646 233751, 182244 233019) (617603 232770, 618154 233539, 617636 232720, 617550 232619, 617016 232040) (610693 224149, 610357 223661, 610280 223559, 609919 223204) (190610 222514, 190521 222608, 190124 223184, 190900 222229) (198678 213401, 198615 213477, 198106 214138, 198728 213433, 199395 212762) (600417 212515, 601041 213232, 600455 212472, 600351 212372, 599762 211846) (592602 204472, 592332 204146, 592264 204071, 591698 203618) (208728 203113, 208635 203194, 208313 203581, 209207 202729) (217640 194821, 217583 194878, 217003 195504, 217841 194722, 218421 194257) (581347 194009, 582036 194664, 581376 193950, 581278 193874, 580629 193406) (572841 186793, 572529 186482, 572455 186414, 571843 186019) (228626 185554, 228540 185615, 228174 185980, 229158 185210) (238097 178306, 237431 178906, 238166 178343, 238941 177819) (560967 177707, 561536 178166, 560824 177525, 560747 177477, 560036 177066) (551335 171024, 550992 170745, 550910 170684, 550270 170357) (250247 169934, 250160 169984, 249595 170444, 250393 169901, 250864 169614) (260087 163826, 259981 163897, 259335 164370, 260130 163874, 260966 163421) (538763 163222, 539561 163729, 538787 163163, 538712 163125, 537938 162767) (528657 157585, 528144 157248, 528041 157186, 527577 157000) (273166 156559, 273079 156598, 272469 156998, 273554 156405) (283593 151406, 283467 151474, 282784 151873, 283623 151456, 284498 151084) (515425 151008, 516083 151354, 515252 150869, 515162 150833, 514376 150553) (504456 146200, 504094 146012, 503977 145956, 503307 145757) (297296 145446, 297179 145486, 296542 145818, 297691 145329) (308165 141321, 308038 141374, 307322 141703, 308198 141370, 309099 141084) (490637 140959, 491518 141301, 490654 140906, 490540 140873, 489746 140670) (479437 137295, 479063 137144, 478949 137103, 478258 136966) (322384 136713, 322247 136746, 321590 137012, 322781 136635) (333587 133656, 333468 133693, 332720 133954, 333622 133707, 334544 133510) (465368 133452, 466093 133668, 465206 133360, 465078 133336, 464272 133211) (453692 130850, 453288 130729, 453197 130706, 452478 130635) (348195 130442, 348057 130461, 347574 130606, 348788 130386) (359597 128481, 358740 128697, 359659 128536, 360595 128430) (439119 128356, 440049 128527, 439140 128299, 439018 128289, 438196 128246) (426210 126823, 427460 126921, 426899 126819) (374370 126692, 373874 126795, 375106 126694, 374495 126688) (385118 125975, 386056 125902, 387007 125890, 386010 125837) (412600 125778, 411756 125821, 412696 125841, 413644 125922, 412696 125777) (400160 125539, 401369 125559, 400672 125482)), ((673461 447259, 683344 447956, 694928 448746, 695135 448830, 695263 449040, 695321 449489, 695113 450910, 694842 452321, 694636 452729, 694447 452886, 694223 452894, 685239 450439, 673461 447259, 670891 447078, 670828 447053, 670901 446591, 670975 446588)), ((128904 445360, 128977 445818, 128900 445849, 126322 446030, 117269 448474, 105570 451672, 105345 451662, 105155 451505, 104948 451093, 104681 449688, 104470 448265, 104528 447816, 104655 447605, 104864 447523, 113615 446924, 126322 446030, 128816 445357)), ((675302 432972, 682946 433143, 697047 433503, 697262 433575, 697397 433783, 697478 434241, 697329 435684, 697125 437123, 696939 437543, 696757 437711, 696533 437731, 684298 435000, 675302 432972, 672967 432920, 673011 432459, 673021 432458)), ((698467 420091, 698613 420288, 698715 420727, 698644 422158, 698512 423583, 698346 424009, 698173 424182, 697950 424213, 688697 422623, 676833 420617, 686667 420357, 698251 420030)), ((110448 419045, 123071 419378, 113953 420919, 101962 422980, 101738 422949, 101565 422775, 101399 422350, 101268 420928, 101196 419493, 101297 419055, 101444 418857, 101660 418797)), ((676833 420617, 674166 420687, 674125 420676, 674172 420176, 674204 420172)), ((125711 418933, 125759 419445, 125745 419449, 123071 419378, 125707 418933)), ((113126 406765, 122672 407470, 115691 408346, 101241 410127, 101021 410088, 100856 409905, 100712 409477, 100644 408036, 100639 406609, 100763 406160, 100919 405970, 101138 405918)), ((699112 404728, 699268 404918, 699392 405363, 699384 406795, 699318 408236, 699175 408662, 699010 408845, 698789 408885, 686401 407358, 677348 406223, 684822 405670, 698892 404678)), ((125236 407174, 125250 407635, 125162 407654, 122672 407470, 125151 407159)), ((677348 406223, 674868 406406, 674789 406388, 674804 405926, 674879 405913)), ((699010 391155, 699175 391338, 699320 391769, 699384 393205, 699391 394642, 699268 395082, 699112 395272, 698893 395323, 689486 394628, 677491 393771, 687329 392552, 698788 391114)), ((677491 393771, 674880 394094, 674804 394080, 674789 393602, 674867 393583)), ((109936 390962, 122529 392523, 113304 393182, 101137 394083, 100919 394029, 100763 393839, 100640 393396, 100644 391964, 100711 390527, 100856 390095, 101021 389912, 101242 389871)), ((125250 392355, 125235 392832, 125150 392848, 122529 392523, 125164 392335)), ((113833 379017, 123231 380630, 116185 380828, 101661 381202, 101444 381142, 101297 380945, 101195 380503, 101268 379072, 101400 377646, 101565 377225, 101738 377051, 101961 377021)), ((125758 380563, 125712 381055, 125709 381055, 123231 380630, 125744 380559)), ((698173 375818, 698346 375991, 698511 376413, 698644 377841, 698716 379268, 698613 379711, 698467 379909, 698250 379969, 685809 379648, 676670 379392, 684012 378131, 697951 375788)), ((676670 379392, 674202 379816, 674171 379812, 674126 379333, 674167 379322)), ((696757 362289, 696939 362457, 697079 362773, 697177 363238, 697329 364316, 697440 365401, 697457 365877, 697397 366217, 697262 366424, 697048 366498, 687613 366709, 675426 367009, 673023 367547, 673012 367546, 672967 367070, 675426 367009, 685323 364795, 696532 362268)), ((117229 351464, 126509 353997, 128898 354161, 128975 354191, 128906 354625, 128819 354628, 126509 353997, 119368 353508, 104865 352476, 104655 352395, 104528 352184, 104469 351731, 104681 350312, 104950 348904, 105155 348495, 105345 348338, 105569 348329)), ((694447 347114, 694636 347271, 694840 347673, 695113 349090, 695322 350507, 695263 350960, 695135 351170, 694927 351253, 682527 352136, 673265 352771, 670972 353397, 670899 353394, 670829 352957, 670893 352933, 673265 352771, 680510 350791, 694224 347106))) \ No newline at end of file diff --git a/stress_benchmark/resources/041.settings b/stress_benchmark/resources/041.settings new file mode 100644 index 0000000000..6054309199 --- /dev/null +++ b/stress_benchmark/resources/041.settings @@ -0,0 +1,631 @@ +experimental=0 +infill_pattern=gyroid +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0 +wall_x_material_flow_layer_0=110.0 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=220.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=False +support_tree_branch_diameter_angle=5.0 +prime_tower_base_height=0.2 +top_bottom_thickness=1.2 +material_guid=d2af194b-ecf5-4d5e-873a-b57dea74bfa2 +platform_adhesion=0 +speed_support_interface=35.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +wall_0_material_flow_layer_0=110.0 +support_xy_distance=0.8 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=all +support_infill_angles=[] +support_zag_skip_count=2 +retraction_speed=25 +acceleration_roofing=250 +raft_interface_jerk=8 +support_roof_height=1 +acceleration_travel=1000 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=1000 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=3 +alternate_extra_perimeter=False +support_brim_line_count=9 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=10.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=26.25 +skirt_brim_speed=20.0 +retraction_amount=0.3 +skin_angles=[] +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=17.5 +cross_infill_pocket_size=4.0 +support_bottom_material_flow=60 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=4.0 +zig_zaggify_support=True +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=4 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=False +support_brim_width=4 +support_tree_branch_diameter=3.0 +support_initial_layer_line_distance=8.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=250 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=True +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=110.0 +relative_extrusion=False +wall_0_material_flow_roofing=95 +raft_surface_speed=35.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=250 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=110 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_weighted +travel_speed=200.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=175.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=110.0 +support_interface_material_flow=60 +wipe_retraction_retract_speed=25 +speed_support_bottom=35.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=60 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=45 +cutting_mesh=False +minimum_interface_area=1 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.4 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +roofing_angles=[] +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=1 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=1 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=triangles +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=25 +support_bottom_density=30 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=6 +support_material_flow=90 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=4.0 +material_flush_purge_speed=0.5 +meshfix_union_all=False +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=Test_Me +support_interface_pattern=triangles +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1.2 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.02 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=95 +bridge_wall_coast=100 +support_interface_density=30 +bridge_wall_speed=12.5 +minimum_roof_area=1 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=True +speed_wall=35.0 +infill_offset_y=0 +cool_fan_speed_max=10.0 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=35.0 +support_bottom_wall_count=1 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=60.0 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.08 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=17.5 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=1.474 +support_tree_angle_slow=40.0 +bridge_fan_speed_3=0 +raft_speed=35.0 +support_tree_branch_reach_limit=30 +support_structure=tree +support_bottom_stair_step_height=0.3 +support_fan_enable=True +z_seam_position=back +support_interface_offset=0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=35.0 +adaptive_layer_height_variation=0.08 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=gyroid +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=19 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=6 +material_print_temperature_layer_0=220.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=0.3 +support_tree_tip_diameter=0.8 +jerk_ironing=4 +machine_depth=220 +acceleration_skirt_brim=500 +skin_overlap=20.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=220 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=1 +jerk_skirt_brim=8 +support_roof_density=30 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=False +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=False +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=220.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=100 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=6 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.1 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=26.25 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.1 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=False +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=4.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=0.5 +ironing_monotonic=False +skin_material_flow_layer_0=110.0 +top_thickness=1.2 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=25.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=17.5 +infill=0 +prime_tower_position_y=191.0 +jerk_support=8 +speed_wall_x_roofing=35.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=450 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=triangles +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=220.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=70 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=211.0 +wipe_pause=0 +material_standby_temperature=180.0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=1 +raft_jerk=8 +support_z_distance=0.2 +machine_height=300 +speed_infill=70 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=35.0 +speed_support=100 +speed_prime_tower=35.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=100 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=110.0 +support_interface_line_width=0.4 +zig_zaggify_infill=True +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=8.0 +infill_line_width=0.4 +speed_wall_x=35.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=10 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=23.333333333333332 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=220.0 +material_adhesion_tendency=0 +default_material_print_temperature=225.0 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=7.34788079488412e-17 +cool_fan_speed_min=10.0 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=True +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=5 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=220.0 diff --git a/stress_benchmark/resources/041.wkt b/stress_benchmark/resources/041.wkt new file mode 100644 index 0000000000..d4f4854cea --- /dev/null +++ b/stress_benchmark/resources/041.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((79120 127292, 79224 127278, 79336 127282, 79528 127350, 79629 127367, 79848 127505, 79926 127530, 80372 128226, 80774 129260, 81174 130451, 81674 131726, 82375 134464, 82461 135843, 82643 137089, 82750 138193, 82963 139968, 82948 139942, 82875 140325, 82735 140623, 82542 140828, 82288 140924, 82007 140896, 81894 140826, 81527 141166, 81202 140623, 80700 139600, 80189 137690, 79790 136498, 79407 135193, 78360 133995, 78752 132443, 78502 131105, 78321 129860, 78048 128411, 78254 128446, 78320 128150, 78513 128186, 78618 128185, 78431 127668, 78474 127632, 78535 127473, 78606 127434, 78714 127343, 78948 127275)), ((83389 130103, 83478 130248, 83796 130463, 83818 130707, 83859 130807, 83802 130835, 83755 130991, 83579 130819, 83122 130741, 82774 130701, 82671 130642, 82545 130613, 82433 130446, 82727 130221, 82865 130151, 83132 130083)), ((97619 124430, 98131 124848, 98376 125088, 98389 125104, 98638 125442, 98677 125472, 99409 126405, 99851 126891, 100473 127465, 100956 127793, 101443 128332, 101908 128704, 102198 128999, 102374 129230, 102698 129762, 101340 129409, 100722 129165, 99040 128367, 98417 128039, 98633 128311, 98604 128664, 98812 129096, 98889 129461, 98125 129283, 97370 129064, 97039 128952, 96335 128767, 95896 128602, 95980 128816, 95851 129152, 95866 129587, 95806 129789, 94999 129543, 94079 129361, 93524 129193, 92967 128442, 93413 129252, 93528 129618, 93478 129881, 93363 130326, 93349 130457, 93185 130409, 92283 130197, 92041 130101, 91887 130021, 91764 129778, 91383 129164, 91447 128284, 91533 127807, 91656 126941, 92086 127342, 92888 128306, 93106 126673, 93167 126035, 93235 125848, 93363 125914, 93716 126150, 94228 126612, 94598 126917, 94767 126444, 94944 125904, 95015 125734, 95281 125207, 95415 125059, 95524 125132, 96098 125568, 96331 125795, 96930 126426, 97122 126605, 96989 125178, 97021 124617, 97215 124124)), ((109692 100044, 111513 100230, 111714 100266, 112574 100596, 113175 100782, 114293 101234, 114709 101453, 115529 101710, 117418 102497, 117666 102669, 119616 104773, 119906 105092, 120184 105783, 120705 106824, 121535 110116, 120882 112825, 120085 114761, 119981 114962, 119891 115057, 119121 116010, 118313 116547, 117558 117151, 116926 117724, 116574 118089, 116074 118654, 115781 119026, 114898 120328, 114317 121059, 113580 121436, 113266 121566, 112687 121534, 111361 121616, 109756 121473, 109291 121419, 109129 121461, 108708 121532, 108678 121795, 108695 121805, 108838 122281, 109063 122896, 109021 123430, 108902 124017, 108838 124389, 108252 125185, 107971 125546, 106584 126460, 105446 126917, 105091 127026, 104801 127052, 103923 127221, 103117 127242, 102608 127187, 101709 127169, 100463 126777, 100365 126737, 100293 126673, 99946 126448, 98677 125472, 98389 125104, 97962 124526, 97090 123478, 96939 122871, 96805 120972, 96909 120677, 97385 120348, 97593 120219, 97964 120052, 98237 119914, 98469 119273, 99200 118646, 99529 118345, 99870 118004, 101017 117704, 101853 117663, 103575 117979, 105120 119682, 106843 121200, 107770 121634, 107994 121756, 108533 121953, 108677 121806, 108678 121795, 108117 121464, 108006 121416, 107598 121285, 107578 121204, 107130 120585, 106939 120243, 106337 119096, 104614 118313, 103749 117422, 102433 115545, 102232 115280, 101095 113080, 100940 112750, 100742 111942, 100367 110675, 100368 109151, 100549 108698, 100648 108346, 100798 107954, 101111 107003, 101336 106482, 101674 105779, 102104 105069, 102358 104725, 102537 104510, 102716 104433, 103093 104221, 103554 104171, 103722 104183, 103781 103995, 103971 103631, 104079 103259, 104087 103198, 104323 102842, 104557 102657, 104690 102483, 104846 102230, 105146 101931, 105333 101609, 105631 101213, 105746 101100, 105881 101004, 106262 100611, 106771 100236, 106882 100187, 107164 100165, 108405 99980)), ((102856 116674, 103420 117404, 104003 118058, 104085 118073, 104614 118313, 105063 118776, 105559 119223, 105748 119349, 106140 119634, 106367 119890, 106467 120069, 105387 119570, 105299 119560, 104795 118946, 104003 118058, 103575 117979, 103429 117818, 102979 117279, 102847 117046, 102474 116516, 102256 115983)), ((111979 98048, 112640 98165, 114894 98757, 116554 100122, 117825 101324, 118551 102149, 120011 103750, 120517 104181, 120948 104476, 121480 104934, 121869 105433, 122266 105911, 122398 106118, 122538 106978, 122565 107526, 122448 108026, 122397 108330, 122312 108422, 122071 108594, 121829 108632, 121738 108717, 121614 108507, 121475 108242, 121452 107882, 121370 107371, 120931 106491, 120759 106056, 120433 105672, 119906 105092, 119837 104921, 119625 104354, 118732 103524, 118601 103249, 118490 103049, 117962 102723, 117418 102497, 116041 101538, 114943 100723, 113715 100386, 112653 100196, 111239 99730, 110995 99706, 110863 99705, 110703 99664, 109853 99360, 109531 99105, 109226 98937, 109504 98678, 109811 98368, 111163 97983)), ((113590 77519, 114718 77643, 114776 77694, 115017 77881, 114957 77842, 115114 77973, 115623 78315, 116242 78690, 116925 79083, 118875 80173, 119285 80412, 119755 81105, 120657 82492, 120971 82992, 121375 83720, 121636 84159, 121799 84325, 122004 84513, 122038 84567, 122230 84788, 122444 84933, 123436 85194, 123585 85190, 124020 85242, 123609 84818, 123120 84253, 123306 84064, 123458 83893, 124225 83636, 125320 84424, 126745 85831, 126872 85938, 128212 87377, 129072 88321, 129622 88941, 131671 91334, 132012 91715, 132077 91784, 131707 91847, 131407 91881, 131591 92747, 131648 93329, 131745 93717, 132323 95142, 132510 96186, 132564 96338, 132560 96544, 132458 97262, 132155 97896, 131934 98397, 131222 99404, 130709 99737, 130492 99776, 130356 99760, 129990 99775, 129687 99931, 129494 100079, 128874 100439, 128527 100729, 128267 100932, 127519 101262, 127061 101259, 126943 101275, 126370 101390, 125467 102144, 125284 102273, 124152 103137, 123055 103364, 122879 103414, 121993 103257, 121918 103005, 121768 102255, 121641 102189, 121452 101995, 120579 101023, 120326 100233, 120093 99955, 119948 99760, 118919 98580, 118248 97980, 118271 97689, 118384 97046, 118492 96921, 119378 96178, 121005 95573, 121673 95365, 122491 95094, 123023 94650, 123403 94379, 123492 94331, 124432 94269, 122932 92966, 121228 91461, 119935 90290, 119642 90012, 119392 89740, 118531 88850, 118250 88240, 118557 88108, 119202 88404, 119569 88592, 119238 88124, 119181 88078, 118640 87535, 118314 87364, 118281 87360, 117934 87236, 117836 87181, 116956 86534, 115714 86010, 115604 86006, 115423 85918, 114951 85293, 114733 84976, 114872 84580, 114917 83952, 115035 83619, 114940 83614, 114752 83589, 114563 83550, 114375 83497, 114190 83431, 114011 83354, 113836 83265, 113670 83166, 113372 82941, 113244 82816, 113131 82685, 113036 82548, 112961 82407, 112910 82262, 112877 82113, 112865 81964, 112878 81778, 112900 81665, 112943 81518, 113010 81365, 113082 81237, 113177 81101, 113282 80980, 113403 80863, 113537 80759, 113682 80666, 113838 80589, 114005 80529, 114180 80488, 114365 80465, 114555 80464, 114750 80480, 114947 80513, 115145 80561, 115340 80622, 115709 80778, 115761 81235, 115681 81854, 115528 82227, 115383 82780, 115179 83214, 115035 83619, 115125 83623, 115306 83617, 115479 83593, 115646 83553, 115804 83497, 115953 83428, 116093 83344, 116224 83248, 116340 83143, 116451 83025, 116564 82877, 116704 82628, 116761 82484, 116800 82338, 116822 82190, 116823 82041, 116804 81894, 116760 81749, 116693 81607, 116604 81470, 116495 81339, 116367 81213, 116224 81093, 115997 80937, 115719 80782, 115709 80778, 115551 79387, 115495 79243, 115588 79126, 115470 78944, 115019 78738, 114164 78461, 113464 78431, 113117 78185, 112795 78000, 112885 77893, 112859 77727, 113247 77548, 113451 77477) (125243 93587, 125095 93738, 124875 94240, 124432 94269, 124727 94525, 124832 94338, 124875 94240, 124877 94240, 126199 94299, 126478 94452, 126504 94493, 126596 94534, 126617 94528, 126478 94452, 126109 93872, 125506 93344) (115588 79126, 115605 79152, 115663 79170, 115749 79224, 115616 79090)), ((115584 75422, 115860 75454, 116152 75509, 116458 75585, 116780 75682, 117116 75798, 117631 76008, 117606 75949, 117754 75980, 118059 76081, 118362 76202, 119070 76524, 119801 76894, 119962 77007, 120145 77088, 120335 77276, 120494 77382, 120585 77461, 120731 77624, 120928 77783, 120979 77804, 121357 78105, 121705 78349, 121864 78285, 122041 78367, 122216 78484, 122758 78928, 123094 79169, 123375 79307, 123433 79309, 123553 79349, 123616 79335, 123759 79333, 123894 79393, 124274 79675, 124464 79766, 124571 79839, 124658 79930, 124768 79979, 124818 80022, 125026 80121, 125168 80205, 125784 80641, 125942 80617, 126439 80929, 126963 81287, 127187 81473, 127358 81634, 127744 82027, 128252 82576, 128405 82773, 129166 83530, 130073 84471, 130180 84597, 130170 84665, 130199 84836, 130348 84985, 130405 85067, 130505 85137, 130758 85352, 130989 85491, 131156 85642, 131771 86336, 131783 86534, 131769 86624, 131836 86734, 131938 86849, 132188 87053, 132292 87160, 132322 87211, 132466 87366, 132679 87530, 133018 87840, 133140 87985, 133497 88459, 133730 88792, 133973 89187, 134040 89343, 133979 89316, 134295 89775, 134648 90363, 134883 90830, 135042 91218, 135127 91480, 135186 91738, 135220 91967, 135230 92189, 135218 92396, 135186 92584, 135133 92754, 135060 92906, 134970 93036, 134862 93145, 134739 93228, 134601 93289, 134448 93323, 134283 93328, 134119 93309, 133915 93255, 133717 93170, 133489 93042, 133288 92904, 133035 92705, 132627 92345, 132438 92165, 132077 91784, 132124 91776, 132621 91923, 133094 92076, 133717 91823, 134195 91246, 133525 90688, 132083 89526, 128898 87048, 126511 85280, 125320 84424, 125113 84219, 124838 83980, 124599 83803, 123525 83089, 123006 82733, 122825 82598, 122718 82500, 121275 81606, 119797 80710, 119285 80412, 119055 80072, 118741 79655, 118601 79490, 118468 79384, 118180 78998, 117865 78516, 117521 78095, 117092 77768, 116678 77597, 116366 77625, 115926 77709, 114808 77653, 114718 77643, 114553 77499, 114364 77309, 114206 77125, 114079 76947, 113990 76775, 113938 76606, 113903 76438, 113906 76283, 113997 75999, 114083 75871, 114192 75759, 114485 75576, 114664 75506, 114866 75455, 115086 75424, 115327 75411)), ((111598 82831, 112129 83423, 112139 84189, 111689 84729, 111577 84684, 110990 84372, 110827 84186, 110509 83784, 110597 83254, 110605 83126, 110722 83027, 110999 82741)), ((112226 78193, 112723 78420, 112919 79118, 112795 79462, 112375 79815, 112036 80226, 111729 80617, 111679 80900, 111917 81136, 112273 81651, 112348 81782, 112395 82029, 112506 82450, 112400 82595, 112241 82928, 111994 82962, 111789 82855, 111372 82752, 110864 82130, 110601 81840, 110475 81456, 110426 81221, 110315 80805, 110378 79940, 110460 79774, 110794 79328, 111852 78212, 111875 78152, 111986 78087, 112129 78060))) \ No newline at end of file diff --git a/stress_benchmark/resources/042.settings b/stress_benchmark/resources/042.settings new file mode 100644 index 0000000000..91100ebe88 --- /dev/null +++ b/stress_benchmark/resources/042.settings @@ -0,0 +1,629 @@ +experimental=0 +infill_pattern=lines +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=2 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=200.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.6 +material_guid=b78b23dd-5921-41c7-a12a-de01d122f8fd +platform_adhesion=0 +speed_support_interface=13.333333333333334 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.7 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.8 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=off +support_zag_skip_count=8 +retraction_speed=45 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=0.4 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=45 +support_use_towers=False +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=2 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=5 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=22.5 +skirt_brim_speed=15 +retraction_amount=1 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.08 +acceleration_wall_x=500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=30.0 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=15 +cross_infill_pocket_size=4.0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +retraction_min_travel=2 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=False +support_brim_width=2 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=20 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=30.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=45 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=240.0 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_inner +travel_speed=120 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=120 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=140.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=45 +speed_support_bottom=13.333333333333334 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.1 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=70 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=500 +machine_disallowed_areas=[] +retract_at_layer_change=True +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.2 +minimum_bottom_area=1.0 +bridge_skin_density=60 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=zigzag +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=1 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=45 +material_brand=empty_brand +initial_bottom_layers=3 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.2 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.6 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=1 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=100 +bridge_wall_speed=10 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=15 +infill_offset_y=0 +cool_fan_speed_max=100.0 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=13.333333333333334 +support_bottom_wall_count=0 +speed_print_layer_0=15 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=70 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +quality_name=Draft +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=15 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=46.666666666666664 +bridge_fan_speed_3=0 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0.3 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=30 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=15 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=5 +raft_surface_line_spacing=0.4 +retraction_retract_speed=45 +bottom_layers=3 +material_print_temperature_layer_0=200.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=1 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=240.0 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=280 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=True +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=200.0 +wipe_hop_amount=1 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=20 +support_interface_enable=False +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=4 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=50 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=1 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=8 +raft_base_speed=22.5 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60.0 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.8 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=4.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=1 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=15 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60.0 +bridge_skin_speed_3=15 +infill=0 +prime_tower_position_y=214.775 +jerk_support=8 +speed_wall_x_roofing=30 +speed_layer_0=15 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=25 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +machine_name=SV01 +acceleration_prime_tower=500 +material_print_temperature=200.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=274.775 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.2 +machine_height=300 +speed_infill=60.0 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=30 +speed_support=20 +speed_prime_tower=60.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=True +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.6666666666666665 +infill_line_width=0.4 +speed_wall_x=30 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=10 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=90 +jerk_infill=8 +speed_ironing=20.0 +gantry_height=300 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=200.0 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=4.898587196589413e-17 +cool_fan_speed_min=100.0 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=0.8 +material_bed_temperature=60.0 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=200.0 diff --git a/stress_benchmark/resources/042.wkt b/stress_benchmark/resources/042.wkt new file mode 100644 index 0000000000..ae4001d6e9 --- /dev/null +++ b/stress_benchmark/resources/042.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((179969 66896, 100031 66896, 100000 66756, 180000 66755))) \ No newline at end of file diff --git a/stress_benchmark/resources/043.settings b/stress_benchmark/resources/043.settings new file mode 100644 index 0000000000..6e142cc7e7 --- /dev/null +++ b/stress_benchmark/resources/043.settings @@ -0,0 +1,630 @@ +experimental=0 +infill_pattern=triangles +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=95.0 +extruder_prime_pos_y=6 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=20 +brim_width=7 +material_no_load_move_factor=0.91 +material_final_print_temperature=185 +machine_max_feedrate_x=300 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=95.0 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +top_bottom_thickness=1 +material_guid=0e01be8c-e425-4fb1-b4a3-b79f255f1db9 +platform_adhesion=0 +speed_support_interface=20 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=15 +speed_equalize_flow_width_factor=110.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=True +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=110.00000000000001 +support_xy_distance=0.7 +prime_tower_brim_enable=True +gradual_support_infill_steps=2 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0 +support_offset=0.8 +acceleration_layer_0=1000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=no_outer_surfaces +support_zag_skip_count=40 +retraction_speed=25 +acceleration_roofing=1000 +raft_interface_jerk=20 +support_roof_height=0.2 +acceleration_travel=5000 +acceleration_wall_x_roofing=1500 +support_roof_enable=True +acceleration_travel_layer_0=1428.5714285714287 +support_extruder_nr=1 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=1 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=20 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=0.4 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=20 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=20 +material_flow=100 +material_is_support_material=False +raft_interface_speed=22.5 +skirt_brim_speed=10.0 +retraction_amount=6.5 +skin_angles=[] +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.0 +acceleration_wall_x=1500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=250 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=30 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=95.0 +skin_material_flow=95.0 +roofing_material_flow=100 +acceleration_infill=3500 +machine_extruder_count=2 +support_roof_line_distance=0.4 +zig_zaggify_support=True +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=1 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=20 +acceleration_print_layer_0=1000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +retraction_min_travel=0.8 +support_bottom_offset=0.8 +gradual_infill_steps=0 +support_extruder_nr_layer_0=1 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=0.5 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=1000 +extruder_prime_pos_x=9 +draft_shield_enabled=False +raft_interface_line_spacing=0.8 +ironing_inset=0.38 +infill_overlap=0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=40 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=60 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=30 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=1000 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=215 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_none +travel_speed=250 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=11 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=20 +speed_travel=250 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=100 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=116.5 +support_interface_material_flow=95.0 +wipe_retraction_retract_speed=25 +speed_support_bottom=20 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=95.0 +bridge_wall_min_length=2.1 +speed_slowdown_layers=1 +optimize_wall_printing_order=True +machine_max_acceleration_y=9000 +resolution=0 +support_angle=45 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=20 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=1500 +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +roofing_angles=[] +blackmagic=0 +travel_avoid_distance=3 +cool_min_speed=4 +interlocking_depth=2 +roofing_layer_count=1 +bridge_skin_density_3=100 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0 +minimum_bottom_area=1.0 +bridge_skin_density=80 +raft_interface_thickness=0.2 +jerk_travel_enabled=False +raft_interface_layers=1 +support_bottom_height=0.2 +small_hole_max_size=0 +support_roof_pattern=zigzag +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=10 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=429 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=6 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=1 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=False +extruder_prime_pos_z=2 +machine_heated_build_volume=False +layer_height=0.1 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +machine_gcode_flavor=Griffin +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=zigzag +xy_offset=-0.010000000000000002 +machine_max_jerk_xy=20.0 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1 +material_type=empty +material_maximum_park_duration=7200 +retraction_hop=2 +jerk_prime_tower=20 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=1 +wall_0_material_flow=100 +bridge_wall_coast=0 +support_interface_density=100 +bridge_wall_speed=30 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=20 +support_bottom_wall_count=1 +speed_print_layer_0=10.0 +jerk_support_interface=20 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=100 +lightning_infill_straightening_angle=40 +support_tree_angle=45 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +quality_name=Fine +print_temperature=200 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=2000 +meshfix=0 +machine_max_feedrate_y=300 +bridge_skin_speed=30 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=50 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=30.0 +bridge_fan_speed_3=100 +raft_speed=15 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.8 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=30 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=2 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=20 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.1 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=1.6 +jerk_wall_0=20 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3500 +inset_direction=outside_in +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=429 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=False +material_diameter=2.85 +brim_line_count=18 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=10 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=50 +bridge_skin_material_flow_2=95.0 +machine_max_feedrate_e=45 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_depth=215 +acceleration_skirt_brim=1000 +skin_overlap=10 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.2 +wall_extruder_nr=-1 +machine_width=233 +raft_smoothing=5 +acceleration_support_interface=1500 +layer_start_y=198.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=1 +jerk_skirt_brim=20 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=3500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=20 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=True +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=210 +wipe_hop_amount=2 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=False +speed_support_infill=25 +support_interface_enable=True +raft_base_acceleration=3500 +wall_line_width_x=0.4 +machine_acceleration=3000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0 +z_seam_type=sharpest_corner +prime_tower_base_size=3 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.8 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=10 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=95.0 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=True +support_tower_diameter=3.0 +acceleration_wall=1500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1.0 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=100 +wall_line_count=2 +jerk_travel_layer_0=20.0 +raft_base_speed=15 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=20 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.8 +support_tree_limit_branch_reach=True +xy_offset_layer_0=-0.010000000000000002 +remove_empty_first_layers=True +retraction_combing_max_distance=15 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=3500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.04 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=100 +retraction_extrusion_window=1 +ironing_monotonic=False +skin_material_flow_layer_0=95 +top_thickness=1 +prime_blob_enable=True +bridge_settings_enabled=True +jerk_enabled=True +speed_wall_0_roofing=20 +support_tower_roof_angle=0 +material_bed_temp_wait=True +raft_interface_fan_speed=50.0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=30 +infill=0 +prime_tower_position_y=188.2 +jerk_support=20 +speed_wall_x_roofing=30 +speed_layer_0=10.0 +wall_line_width_0=0.4 +jerk_support_infill=20 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=zigzag +raft_base_wall_count=1 +acceleration_prime_tower=2000 +material_print_temperature=200 +jerk_print_layer_0=20 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=70 +wall_0_inset=0 +skin_edge_support_thickness=0.4 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=185 +wipe_pause=0 +material_standby_temperature=100 +jerk_wall=20 +machine_nozzle_cool_down_speed=0.75 +raft_margin=15 +raft_acceleration=3500 +support_roof_wall_count=1 +raft_jerk=20 +support_z_distance=0 +machine_height=300 +speed_infill=70 +raft_surface_thickness=0.1 +infill_randomize_start_location=False +speed_roofing=30 +speed_support=25 +speed_prime_tower=30 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=True +layer_start_x=213.0 +acceleration_support=2000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=0.5 +infill_line_width=0.4 +speed_wall_x=30 +ooze_shield_dist=2 +raft_interface_line_width=0.6000000000000001 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.3 +mold_width=5 +bridge_skin_density_2=100 +acceleration_support_bottom=100 +infill_sparse_density=20 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=25 +jerk_infill=20 +speed_ironing=20.0 +gantry_height=60 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=190 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=6.123233995736766e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=1 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=80 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=190 diff --git a/stress_benchmark/resources/043.wkt b/stress_benchmark/resources/043.wkt new file mode 100644 index 0000000000..030bcf1fe0 --- /dev/null +++ b/stress_benchmark/resources/043.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((116557 108997, 116571 109003, 116623 108979, 116612 109036, 116622 109048, 116681 109050, 116647 109098, 116650 109113, 116701 109140, 116651 109165, 116647 109180, 116682 109228, 116623 109230, 116613 109242, 116624 109299, 116571 109275, 116557 109281, 116542 109339, 116505 109295, 116489 109295, 116453 109339, 116437 109282, 116423 109276, 116369 109299, 116380 109243, 116370 109231, 116311 109229, 116347 109181, 116343 109166, 116291 109140, 116344 109113, 116347 109098, 116311 109050, 116370 109048, 116380 109036, 116369 108980, 116423 109003, 116437 108997, 116452 108940, 116489 108984, 116505 108984, 116541 108940))) \ No newline at end of file diff --git a/stress_benchmark/resources/044.settings b/stress_benchmark/resources/044.settings new file mode 100644 index 0000000000..db0ea47a59 --- /dev/null +++ b/stress_benchmark/resources/044.settings @@ -0,0 +1,630 @@ +experimental=0 +infill_pattern=triangles +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=95.0 +extruder_prime_pos_y=6 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=20 +brim_width=7 +material_no_load_move_factor=0.91 +material_final_print_temperature=180 +machine_max_feedrate_x=300 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=95.0 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.06 +top_bottom_thickness=1 +material_guid=44a029e6-e31b-4c9e-a12f-9282e29a92ff +platform_adhesion=0 +speed_support_interface=20 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=15 +speed_equalize_flow_width_factor=110.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=True +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=110.00000000000001 +support_xy_distance=0.7 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0 +support_offset=0.0 +acceleration_layer_0=1000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=no_outer_surfaces +support_zag_skip_count=3 +retraction_speed=45 +acceleration_roofing=1000 +raft_interface_jerk=20 +support_roof_height=0.12 +acceleration_travel=5000 +acceleration_wall_x_roofing=1500 +support_roof_enable=True +acceleration_travel_layer_0=1428.5714285714287 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=45 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=False +skirt_line_count=1 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=20 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=0.24 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=20 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=20 +material_flow=100 +material_is_support_material=False +raft_interface_speed=17.5 +skirt_brim_speed=7.199999999999999 +retraction_amount=6.5 +skin_angles=[] +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.04 +acceleration_wall_x=1500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=150 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=35 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=95.0 +skin_material_flow=95.0 +roofing_material_flow=100 +acceleration_infill=3500 +machine_extruder_count=2 +support_roof_line_distance=0.4 +zig_zaggify_support=True +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0.136 +jerk_topbottom=20 +acceleration_print_layer_0=1000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +retraction_min_travel=0.8 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=6.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=1000 +extruder_prime_pos_x=333 +draft_shield_enabled=False +raft_interface_line_spacing=0.8 +ironing_inset=0.38 +infill_overlap=10 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=40 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=60 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=20 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=45 +acceleration_ironing=1000 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=240 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_none +travel_speed=150 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=11 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=20 +speed_travel=150 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=50 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=165.0 +support_interface_material_flow=95.0 +wipe_retraction_retract_speed=45 +speed_support_bottom=20 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=95.0 +bridge_wall_min_length=2.1 +speed_slowdown_layers=1 +optimize_wall_printing_order=True +machine_max_acceleration_y=9000 +resolution=0 +support_angle=45 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=20 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=1500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +roofing_angles=[] +blackmagic=0 +travel_avoid_distance=3 +cool_min_speed=5 +interlocking_depth=2 +roofing_layer_count=1 +bridge_skin_density_3=100 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0 +minimum_bottom_area=1.0 +bridge_skin_density=80 +raft_interface_thickness=0.18 +jerk_travel_enabled=False +raft_interface_layers=1 +support_bottom_height=0.12 +small_hole_max_size=0 +support_roof_pattern=zigzag +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=2 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=45 +material_brand=empty_brand +initial_bottom_layers=17 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=1500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=6 +material_shrinkage_percentage_xy=100.2 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=False +extruder_prime_pos_z=2 +machine_heated_build_volume=True +layer_height=0.06 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +machine_gcode_flavor=Griffin +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=zigzag +xy_offset=-0.006 +machine_max_jerk_xy=20.0 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1 +material_type=empty +material_maximum_park_duration=7200 +retraction_hop=2 +jerk_prime_tower=20 +material_shrinkage_percentage=100.2 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=0 +support_interface_density=100 +bridge_wall_speed=35 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=35 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=20 +support_bottom_wall_count=1 +speed_print_layer_0=7.199999999999999 +jerk_support_interface=20 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=100 +lightning_infill_straightening_angle=40 +support_tree_angle=45 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.08 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.18 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +print_temperature=200 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=2000 +meshfix=0 +machine_max_feedrate_y=300 +bridge_skin_speed=35 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=50 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=30.0 +bridge_fan_speed_3=100 +raft_speed=15 +support_tree_branch_reach_limit=30 +support_structure=tree +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=35 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=2 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=24 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.06 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=1.6 +jerk_wall_0=20 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3500 +inset_direction=outside_in +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=1500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=triangles +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=False +material_diameter=2.85 +brim_line_count=18 +raft_surface_line_spacing=0.4 +retraction_retract_speed=45 +bottom_layers=17 +material_print_temperature_layer_0=195 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=50 +bridge_skin_material_flow_2=95.0 +machine_max_feedrate_e=45 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_depth=240 +acceleration_skirt_brim=1000 +skin_overlap=20 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.12 +wall_extruder_nr=-1 +machine_width=330 +raft_smoothing=5 +acceleration_support_interface=1500 +layer_start_y=228.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=1 +jerk_skirt_brim=20 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=3500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=20 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=True +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=210 +wipe_hop_amount=2 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=25 +support_interface_enable=True +raft_base_acceleration=3500 +wall_line_width_x=0.4 +machine_acceleration=3000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0 +z_seam_type=sharpest_corner +prime_tower_base_size=3 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.2 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=17 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=95.0 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=True +support_tower_diameter=3.0 +acceleration_wall=1500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1.0 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=1 +cool_fan_speed_0=100 +wall_line_count=2 +jerk_travel_layer_0=20.0 +raft_base_speed=15 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=20 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.8 +support_tree_limit_branch_reach=True +xy_offset_layer_0=-0.08600000000000001 +remove_empty_first_layers=True +retraction_combing_max_distance=15 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=3500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.04 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=100 +retraction_extrusion_window=1 +ironing_monotonic=False +skin_material_flow_layer_0=95 +top_thickness=1 +prime_blob_enable=False +bridge_settings_enabled=True +jerk_enabled=True +speed_wall_0_roofing=24 +support_tower_roof_angle=0 +material_bed_temp_wait=True +raft_interface_fan_speed=25.0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=35 +infill=0 +prime_tower_position_y=217.0 +jerk_support=20 +speed_wall_x_roofing=35 +speed_layer_0=7.199999999999999 +wall_line_width_0=0.4 +jerk_support_infill=20 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.06 +machine_nozzle_head_distance=3 +support_bottom_pattern=zigzag +raft_base_wall_count=1 +acceleration_prime_tower=2000 +material_print_temperature=195 +jerk_print_layer_0=20 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50 +wall_0_inset=0 +skin_edge_support_thickness=0.24 +retraction_extra_prime_amount=0 +adhesion_type=none +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=305.0 +wipe_pause=0 +material_standby_temperature=100 +jerk_wall=20 +machine_nozzle_cool_down_speed=0.75 +raft_margin=15 +raft_acceleration=3500 +support_roof_wall_count=1 +raft_jerk=20 +support_z_distance=0 +machine_height=300 +speed_infill=50 +raft_surface_thickness=0.06 +infill_randomize_start_location=False +speed_roofing=35 +speed_support=25 +speed_prime_tower=35 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=True +layer_start_x=330.0 +acceleration_support=2000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=6.0 +infill_line_width=0.4 +speed_wall_x=35 +ooze_shield_dist=2 +raft_interface_line_width=0.6000000000000001 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.3 +mold_width=5 +bridge_skin_density_2=100 +acceleration_support_bottom=100 +infill_sparse_density=20 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=25 +jerk_infill=20 +speed_ironing=23.333333333333332 +gantry_height=55 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.0 +material_initial_print_temperature=185 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=6.245698675651501e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=185 diff --git a/stress_benchmark/resources/044.wkt b/stress_benchmark/resources/044.wkt new file mode 100644 index 0000000000..ea468ef16f --- /dev/null +++ b/stress_benchmark/resources/044.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((227245 67099, 226990 67099, 226984 67105, 226984 67290, 226990 67296, 227245 67296, 227245 67697, 226990 67698, 226984 67704, 226984 68048, 226990 68054, 227245 68072, 227245 68581, 226990 68582, 226984 68588, 226984 68884, 226990 68890, 227245 68890, 227245 69003, 226990 69003, 226984 69009, 226984 69360, 226990 69366, 227245 69367, 227245 70541, 226990 70539, 226984 70545, 226984 70742, 226990 70748, 227245 70747, 227245 71180, 226990 71182, 226984 71188, 226984 71484, 226990 71490, 227245 71490, 227245 72218, 226990 72218, 226984 72224, 226984 72306, 226990 72312, 227245 72313, 227245 72607, 226990 72607, 226984 72613, 226984 72773, 226990 72779, 227245 72778, 227245 73542, 226903 73542, 226897 73548, 226897 112385, 226903 112391, 227245 112391, 227245 112790, 226990 112790, 226984 112796, 226984 112979, 226990 112985, 227245 112989, 227245 113386, 226990 113389, 226984 113395, 226984 113743, 226990 113749, 227245 113759, 227245 114272, 226990 114273, 226984 114279, 226984 114574, 226990 114580, 227245 114580, 227245 114694, 226990 114690, 226984 114696, 226984 115050, 226990 115056, 227245 115057, 227245 117739, 226990 117759, 226984 117765, 226990 117771, 227245 117771, 227245 119233, 226903 119233, 226897 119239, 226897 121400, 226648 121400, 226642 121406, 226642 126757, 226648 126763, 226897 126764, 226897 142132, 226648 142132, 226642 142138, 226642 147076, 226648 147082, 226897 147081, 226897 158077, 226903 158083, 227245 158083, 227245 158481, 226990 158481, 226984 158487, 226984 158670, 226990 158676, 227245 158681, 227245 159080, 226990 159081, 226984 159087, 226984 159435, 226990 159441, 227245 159455, 227245 159963, 226990 159964, 226984 159970, 226984 160265, 226990 160271, 227245 160271, 227245 160385, 226990 160381, 226984 160387, 226984 160741, 226990 160747, 227245 160748, 227245 163336, 226990 163335, 226984 163341, 226984 164237, 226990 164243, 227245 164243, 227245 168043, 226989 168071, 226984 168077, 226990 168083, 227245 168085, 227245 169495, 225466 169495, 225466 169241, 225460 169235, 224455 169235, 224449 169241, 224448 169495, 222558 169495, 222557 169241, 222551 169235, 221522 169235, 221516 169241, 221516 169495, 220883 169495, 220883 169241, 220877 169235, 220638 169235, 220632 169241, 220631 169495, 220128 169495, 220128 169241, 220122 169235, 219361 169235, 219355 169241, 219354 169495, 219261 169495, 219261 169042, 219255 169036, 196409 169036, 196403 169042, 196403 169269, 196295 169269, 196300 169063, 196295 169057, 196101 169008, 196094 169014, 196095 169269, 195747 169269, 195748 169014, 195742 169008, 195314 169008, 195308 169014, 195308 169269, 194469 169269, 194468 169014, 194462 169008, 193990 169008, 193984 169014, 193984 169269, 192318 169269, 192318 169014, 192312 169008, 191312 169008, 191306 169014, 191306 169269, 189562 169269, 189562 169042, 189556 169036, 157003 169036, 156997 169042, 156997 169269, 156153 169269, 156153 169014, 156147 169008, 155748 169008, 155742 169014, 155745 169269, 154863 169269, 154866 169014, 154860 169008, 154274 169008, 154268 169014, 154268 169269, 152761 169269, 152761 169014, 152755 169008, 152631 169008, 152625 169014, 152624 169269, 151991 169269, 151991 169014, 151985 169008, 151700 169008, 151694 169014, 151689 169269, 150150 169269, 150150 168798, 150144 168792, 127296 168783, 127290 168789, 127290 169495, 126347 169495, 126347 169241, 126341 169235, 125910 169235, 125904 169241, 125905 169495, 124956 169495, 124954 169241, 124948 169235, 124108 169235, 124102 169241, 124102 169495, 122887 169495, 122886 169241, 122880 169235, 122194 169235, 122188 169241, 122188 169495, 121911 169495, 121911 169241, 121905 169235, 121084 169235, 121078 169241, 121077 169495, 119308 169495, 119308 166571, 119591 166571, 119597 166565, 119597 166318, 119591 166312, 119308 166311, 119308 165504, 119591 165504, 119597 165498, 119597 165322, 119591 165316, 119308 165315, 119308 163863, 119591 163864, 119597 163858, 119597 163645, 119591 163639, 119308 163640, 119308 162766, 119450 162769, 119456 162762, 119308 162017, 119295 161713, 119289 161708, 119010 161698, 119007 161699, 118933 161748, 118933 161715, 118927 161709, 118678 161708, 118672 161714, 118676 161804, 117215 161801, 117212 161105, 117313 161105, 117319 161099, 117321 160796, 117315 160790, 117215 160791, 117207 160695, 117315 160693, 117321 160688, 117315 160681, 117209 160679, 117213 160044, 117318 160045, 117324 160039, 117321 159761, 117315 159755, 117209 159753, 117212 158880, 118222 158877, 118228 158871, 118228 157366, 118307 157366, 118313 157361, 118308 157354, 118228 157345, 118230 157201, 118297 157197, 118303 157191, 118303 156920, 118297 156914, 118228 156914, 118228 156413, 118297 156415, 118303 156409, 118303 155716, 118297 155710, 118228 155712, 118228 154560, 118297 154560, 118303 154554, 118303 154036, 118297 154030, 118228 154026, 118228 151728, 118297 151728, 118303 151722, 118303 150373, 118297 150367, 118228 150367, 118229 147946, 119315 147934, 119319 148278, 119325 148284, 119382 148288, 119388 148282, 119387 147935, 120519 147936, 120515 158077, 120521 158083, 127290 158083, 127290 158535, 127043 158535, 127037 158541, 127037 159010, 127043 159016, 127290 159017, 127290 159086, 127043 159087, 127037 159093, 127037 159810, 127043 159816, 127290 159816, 127290 159997, 127043 159997, 127037 160003, 127037 160447, 127043 160453, 127290 160454, 127290 163320, 127294 163326, 127886 163509, 127887 163509, 128497 163562, 128500 163562, 128789 163471, 129397 163467, 129400 163466, 129719 163295, 130270 163393, 130275 163392, 130471 163222, 130473 163217, 130477 162585, 131027 162612, 131029 162612, 131620 162387, 132217 162618, 132851 162618, 133466 162511, 134047 162435, 134658 162510, 135266 162530, 135906 162519, 136516 162573, 137092 162581, 137094 162581, 137714 162434, 138344 162574, 138346 162574, 138931 162484, 138957 162490, 138958 162490, 139564 162440, 140786 162555, 140788 162555, 141402 162412, 141568 162474, 141657 162847, 141427 163427, 140910 163427, 140904 163432, 140906 163438, 141312 163742, 141321 163740, 141606 163324, 141926 163252, 142211 163397, 142215 163398, 142821 163294, 143146 163384, 143150 163384, 143760 163209, 144038 163490, 144039 163491, 144365 163650, 144371 163650, 144528 163566, 144530 163558, 144415 163347, 144429 163109, 144539 162936, 144743 162818, 144968 162818, 145181 162946, 145286 163127, 145229 163478, 145233 163485, 145239 163484, 145590 163226, 146193 163518, 146196 163519, 146813 163563, 146817 163562, 147103 163329, 147417 163402, 147706 163645, 147713 163645, 148032 163448, 148318 163441, 148639 163543, 148642 163543, 148810 163514, 148814 163505, 148745 163367, 148745 163127, 148853 162932, 149053 162818, 149289 162818, 149495 162932, 149615 163249, 149617 163252, 149857 163430, 149862 163431, 150145 163393, 150150 163387, 150150 161511, 151728 161511, 151729 161761, 151735 161767, 151813 161767, 151819 161761, 151820 161511, 152435 161511, 152438 161761, 152444 161767, 152649 161767, 152655 161761, 152654 161511, 153232 161511, 153233 161761, 153239 161767, 153287 161767, 153293 161761, 153293 161511, 154291 161511, 154292 161761, 154298 161767, 154378 161767, 154384 161761, 154385 161511, 154521 161511, 154521 161761, 154527 161767, 154607 161767, 154613 161761, 154608 161511, 155626 161511, 155624 161761, 155630 161767, 156083 161767, 156089 161761, 156088 161511, 156997 161511, 156997 162074, 157003 162080, 164857 162080, 164856 162337, 164862 162343, 169796 162343, 169802 162337, 169803 162080, 185170 162080, 185171 162337, 185177 162343, 189556 162343, 189562 162337, 189562 161511, 192161 161511, 192161 161761, 192167 161767, 192292 161767, 192298 161761, 192297 161511, 192684 161511, 192685 161761, 192691 161767, 192865 161767, 192871 161761, 192871 161511, 194015 161511, 194016 161761, 194022 161767, 194092 161767, 194098 161761, 194098 161511, 194638 161511, 194641 161761, 194647 161767, 195305 161767, 195311 161761, 195311 161511, 196403 161511, 196403 162738, 196409 162744, 196644 162743, 196645 162743, 197227 162596, 197836 162693, 197838 162693, 198446 162632, 199057 162756, 199058 162756, 199669 162705, 200279 162685, 200885 162595, 201497 162749, 201498 162749, 202107 162746, 202746 162645, 203356 162696, 203963 162644, 204551 162661, 205184 162708, 205185 162708, 205768 162574, 206357 162765, 206359 162765, 207018 162761, 207020 162761, 207602 162550, 208210 162660, 208212 162660, 208236 162656, 208820 162757, 208821 162757, 209400 162711, 209399 163107, 209402 163112, 209660 163268, 209669 163263, 209677 162677, 210650 162665, 210676 162674, 210678 162674, 211263 162662, 211897 162671, 212512 162716, 213123 162734, 213730 162670, 214340 162749, 215558 162588, 216175 162678, 216784 162615, 217366 162721, 218001 162736, 218002 162736, 218610 162716, 219255 162637, 219261 162631, 219261 161508, 219513 161353, 219515 161346, 219510 161342, 219261 161342, 219261 159406, 219510 159406, 219516 159400, 219516 159301, 219510 159295, 219261 159294, 219261 158083, 219835 158083, 219841 158077, 219841 155916, 220090 155916, 220096 155910, 220096 150562, 220090 150556, 219841 150555, 219841 135181, 220090 135181, 220096 135175, 220096 130245, 220090 130239, 219841 130240, 219841 119239, 219835 119233, 219261 119233, 219261 118781, 219510 118781, 219516 118775, 219516 118306, 219510 118300, 219261 118299, 219261 118230, 219510 118229, 219516 118223, 219516 117507, 219510 117501, 219261 117501, 219261 117321, 219510 117321, 219516 117315, 219516 116869, 219510 116863, 219261 116862, 219261 115202, 219510 115195, 219516 115189, 219516 115095, 219510 115089, 219261 115088, 219261 114695, 219510 114692, 219516 114686, 219516 114619, 219510 114613, 219261 114612, 219261 112391, 220658 112391, 220664 112385, 220720 111042, 220720 111041, 220639 110454, 220645 109847, 220669 109263, 220681 108657, 220708 108073, 220708 108072, 220590 107468, 220588 106882, 220710 106250, 221229 106248, 221235 106243, 221301 105820, 221300 105289, 221294 105282, 221078 105283, 220807 105075, 220803 105074, 220680 105069, 220694 104494, 220638 103891, 220558 102701, 220649 101513, 220666 100318, 220651 99130, 220623 98545, 220652 97939, 220707 97355, 220709 96749, 220709 96748, 220589 96164, 220515 95560, 220563 94973, 220636 94364, 220632 93780, 220584 93174, 220642 92590, 220616 91984, 220567 91399, 220597 90793, 220642 90208, 220673 89601, 220674 89016, 220674 89015, 220546 87828, 220643 87224, 220665 86640, 220665 86639, 220630 86033, 220683 85445, 220614 84835, 220668 83645, 220587 83062, 220582 82458, 220655 81267, 220603 80683, 220560 79490, 220553 78883, 220667 78299, 220707 77693, 220707 77692, 220628 76504, 220637 75313, 220655 74727, 220714 74119, 220699 73548, 220693 73542, 219261 73542, 219261 73501, 219459 73498, 219464 73495, 219515 73393, 219510 73384, 219261 73385, 219261 73216, 219510 73218, 219516 73212, 219516 72988, 219510 72982, 219261 72982, 219261 72567, 219510 72566, 219516 72560, 219516 72343, 219510 72337, 219261 72337, 219261 71505, 219510 71505, 219516 71499, 219516 70977, 219510 70971, 219261 70970, 219261 70128, 219513 69970, 219515 69962, 219510 69959, 219261 69958, 219261 68031, 219510 68031, 219516 68025, 219516 67914, 219510 67908, 219261 67907, 219261 66700, 227245 66700) (139214 163427, 139208 163432, 139210 163437, 139479 163732, 139484 163734, 140093 163681, 140095 163680, 140501 163438, 140503 163431, 140498 163427) (133165 163427, 133159 163432, 133163 163439, 133375 163505, 133378 163505, 133913 163439, 133918 163433, 133912 163427) (118359 160726, 118273 160861, 118272 160866, 118357 161089, 118362 161093, 118577 161127, 118581 161126, 118711 161050, 118711 161040, 118579 160973, 118575 160972, 118421 161001, 118508 160868, 118509 160863, 118481 160768, 118477 160764, 118366 160723) (119036 158531, 119011 158970, 119017 158976, 119283 158976, 119289 158971, 119299 158888, 119293 158881, 119162 158889, 119159 158535, 119153 158529, 119042 158525)), ((100547 157629, 100554 157814, 100554 161524, 100440 161529, 99949 161382, 99941 161388, 99947 161529, 98886 161531, 98886 161316, 98880 161310, 98418 161308, 98412 161314, 98406 161382, 98406 161314, 98400 161308, 98019 161309, 98013 161315, 98013 161530, 96282 161534, 96282 159761, 96416 159759, 96422 159753, 96422 159186, 96416 159180, 96282 159181, 96282 158926, 96416 158925, 96422 158919, 96422 158829, 96416 158823, 96282 158823, 96276 157372, 96416 157371, 96422 157365, 96418 156729, 96412 156723, 96275 156723, 96275 154698, 98240 154696, 98240 154914, 98246 154920, 98417 154918, 98423 154912, 98423 154697, 98629 154697, 98631 154914, 98637 154920, 98872 154919, 98878 154913, 98883 154697, 99978 154698, 99979 154860, 99987 154866, 100547 154669)), ((126470 135168, 126478 135376, 126484 135382, 126941 135380, 126945 135377, 126948 135380, 127330 135382, 127336 135376, 127340 135159, 129115 135160, 129103 136921, 128969 136920, 128963 136926, 128959 137505, 128965 137511, 129093 137511, 129096 137765, 128964 137765, 128958 137771, 128955 137850, 128961 137856, 129096 137857, 129087 139310, 128955 139307, 128949 139313, 128943 139948, 128949 139954, 129081 139955, 129068 141997, 127128 142001, 127131 141784, 127125 141778, 126909 141777, 126903 141782, 126884 141999, 126739 142000, 126739 141780, 126733 141774, 126451 141778, 126445 141784, 126440 142000, 125336 142000, 125337 141841, 125329 141835, 124747 142016, 124761 139306, 124771 138890, 124788 135687, 124918 135661, 124881 136134, 124886 136140, 124890 136139, 125205 135951, 125207 135950, 125436 135643, 125437 135638, 125386 135360, 125381 135355, 125207 135328, 125202 135330, 124959 135594, 124986 135204, 125393 135312, 125401 135306, 125400 135155) (125456 138080, 125394 138216, 125393 138218, 125429 138686, 125439 138691, 125483 138657, 125485 138652, 125523 138127, 125521 138122, 125465 138077)), ((97497 63734, 97501 63737, 97644 63765, 97647 63765, 97912 63658, 98179 63907, 98188 63907, 98453 63584, 98930 64024, 99014 64326, 99023 64329, 99425 64109, 99811 64348, 99818 64347, 100066 64083, 100340 63977, 100344 63973, 100363 63903, 100360 63896, 100164 63776, 100160 63775, 99870 63817, 99804 63698, 99797 63695, 99532 63764, 99406 63703, 99312 63505, 99383 63322, 99380 63315, 99373 63316, 99259 63422, 99155 63255, 100377 63255, 100377 63468, 100382 63474, 100388 63472, 100554 63267, 100559 66864, 100565 66870, 101097 66830, 101103 66824, 101100 66819, 100713 66623, 119301 71007, 119308 71001, 119308 70131, 127290 70131, 127290 71171, 127043 71171, 127037 71177, 127037 71622, 127043 71628, 127290 71627, 127290 71813, 127043 71813, 127037 71819, 127037 72532, 127043 72538, 127290 72539, 127290 72607, 127043 72608, 127037 72614, 127037 73084, 127043 73090, 127290 73089, 127290 73542, 126961 73542, 126955 73548, 126955 75709, 126700 75709, 126694 75715, 126694 81065, 126700 81071, 126955 81072, 126955 96444, 126700 96444, 126694 96450, 126694 101382, 126700 101388, 126955 101387, 126955 112385, 126961 112391, 127290 112391, 127290 113603, 127043 113604, 127037 113610, 127037 113708, 127043 113714, 127290 113714, 127290 115648, 127043 115648, 127037 115653, 127040 115659, 127285 115814, 127040 115964, 127038 115971, 127043 115975, 127290 115975, 127290 117912, 127043 117912, 127037 117918, 127037 118019, 127043 118025, 127290 118026, 127290 119233, 119308 119233, 119308 118834, 119563 118834, 119569 118828, 119569 118643, 119563 118637, 119308 118641, 119308 118241, 119563 118242, 119569 118236, 119569 117873, 119563 117867, 119308 117867, 119308 117351, 119563 117350, 119569 117344, 119569 117051, 119563 117045, 119308 117045, 119308 116934, 119563 116934, 119569 116928, 119569 116579, 119563 116573, 119312 116570, 119312 115057, 119563 115057, 119569 115051, 119569 114697, 119563 114691, 119308 114690, 119308 114580, 119563 114580, 119569 114574, 119569 114279, 119563 114273, 119308 114272, 119308 113762, 119563 113762, 119569 113756, 119569 113395, 119563 113389, 119308 113385, 119308 112989, 119563 112984, 119569 112978, 119569 112795, 119563 112789, 119308 112789, 119308 112391, 119643 112391, 119649 112385, 119649 101387, 119905 101388, 119911 101382, 119911 96450, 119905 96444, 119649 96443, 119649 81072, 119905 81071, 119911 81065, 119911 75734, 119904 75728, 119649 75780, 119649 74101, 119644 74095, 117527 73594, 117520 73600, 117518 75077, 117370 75274, 115698 74836, 115654 74564, 115648 74559, 115642 74565, 115641 74826, 114825 74618, 114816 74348, 114811 74342, 114804 74348, 114785 74603, 113950 74384, 113799 74111, 113792 74108, 113789 74111, 113639 74422, 113101 74282, 113099 74020, 113095 74014, 112771 73930, 112763 73936, 112763 74197, 112538 74135, 112539 73872, 112534 73866, 112459 73848, 112452 73854, 112453 74113, 111877 73967, 111879 73705, 111875 73699, 111795 73669, 111787 73675, 111788 73939, 111595 73887, 111593 73628, 111589 73622, 111534 73604, 111526 73610, 111527 73873, 110228 73534, 110069 73139, 110060 73136, 109919 73215, 109461 73094, 109461 72833, 109457 72827, 109228 72766, 109220 72772, 109221 73034, 108713 72888, 108712 72638, 108708 72632, 108568 72595, 108560 72601, 108560 72863, 107742 72652, 107723 72380, 107717 72374, 107711 72380, 107712 72645, 107402 72559, 107396 72298, 107392 72292, 107291 72264, 107283 72270, 107277 72533, 106484 72322, 106341 72170, 106332 72171, 106189 72483, 105802 72384, 105794 72119, 105789 72113, 105628 72072, 105621 72078, 105621 72338, 105264 72239, 105260 71981, 105256 71975, 104815 71861, 104807 71867, 104806 72127, 104306 71998, 104305 71736, 104301 71730, 104022 71651, 104014 71657, 104015 71795, 104001 71652, 103997 71647, 103631 71550, 103623 71556, 103623 71818, 102761 71591, 102614 71199, 102616 70519, 102612 70513, 102567 70501, 102565 70071, 102560 70065, 100566 69596, 100559 69602, 100559 70083, 99473 70085, 99432 69870, 99426 69865, 99420 69871, 99417 70084, 98445 70086, 98421 69873, 98415 69868, 98409 69874, 98410 70084, 96287 70090, 96286 68662, 96421 68660, 96427 68654, 96427 68322, 96515 68327, 96545 68662, 96350 69095, 96350 69101, 96473 69251, 96561 69577, 96568 69581, 96572 69579, 96972 69101, 96972 69094, 96843 68850, 96836 68847, 96692 68901, 96598 68630, 96623 68239, 96842 67828, 96978 67808, 96983 67802, 96983 67581, 97064 67374, 97064 67370, 96880 66941, 96875 66516, 97109 65993, 97156 66009, 97162 66008, 97573 65659, 97571 65648, 97420 65589, 97384 65328, 97374 65324, 97105 65552, 96965 65452, 96962 65451, 96696 65449, 96572 65227, 96569 65226, 96574 65224, 97030 64787, 97352 64950, 97372 65052, 97380 65057, 97527 64995, 97530 64992, 97648 64820, 97914 64796, 97915 64796, 98275 64657, 98449 64768, 98458 64765, 98621 64370, 98621 64369, 98673 64018, 98669 64011, 98664 64012, 98451 64125, 98345 64104, 98188 63946, 98180 63945, 97674 64363, 97672 64367, 97641 64563, 97564 64503, 97588 64369, 97585 64363, 97412 64270, 97107 63255, 97244 63255) (97615 66125, 97205 66512, 97203 66517, 97224 66749, 97225 66751, 97327 66943, 97129 67369, 97128 67372, 97132 67802, 97134 67807, 97297 67931, 97304 67931, 97378 67895, 97642 68064, 97649 68064, 97918 67866, 97920 67863, 97969 67724, 97966 67717, 97960 67717, 97917 67738, 97845 67489, 97841 67485, 97647 67407, 97641 67409, 97592 67453, 97419 66943, 97676 66519, 97677 66515, 97625 66128, 97619 66123) (98530 67798, 98528 67804, 98599 67992, 98608 67995, 98977 67807, 98980 67800, 98976 67796, 98774 67723, 98727 67627, 98718 67626) (98273 67368, 98272 67373, 98302 67605, 98305 67609, 98449 67708, 98458 67705, 98589 67374, 98588 67369, 98457 67146, 98447 67145) (99252 66120, 99092 66773, 99093 66777, 99253 67002, 99261 67004, 99264 67000, 99368 66354, 99367 66351, 99263 66119, 99256 66115) (98257 66395, 98188 66340, 98178 66343, 98050 66716, 98053 66723, 98059 66723, 98184 66664, 98451 66719, 98457 66716, 98580 66519, 98581 66516, 98574 66330, 98567 66324) (99793 65873, 99713 66084, 99713 66087, 99770 66553, 99778 66558, 99893 66522, 99895 66512, 99840 66458, 99887 65953, 99885 65948, 99803 65871) (98987 65329, 98868 65840, 98870 65845, 98989 65972, 98997 65973, 98999 65969, 99063 65655, 99063 65653, 98999 65329, 98993 65324) (97907 64803, 97843 65224, 97844 65224, 97686 65579, 97688 65586, 97695 65585, 97914 65353, 98182 65428, 98185 65428, 98343 65403, 98448 65492, 98455 65492, 98935 65230, 98938 65224, 98884 64975, 98878 64970, 98606 64978, 98427 64839, 98420 64839, 98037 65027, 97918 64801, 97911 64798) (99793 64580, 99769 64795, 99528 65031, 99526 65034, 99467 65313, 99470 65319, 99529 65347, 99537 65345, 99849 64800, 99850 64796, 99805 64580, 99799 64575)), ((96564 65219, 96569 65226, 96565 65224, 96561 65228, 96398 65652, 96398 65656, 96460 65818, 96465 65822, 96711 65853, 96781 66086, 96735 66239, 96735 66242, 96805 66515, 96526 66940, 96525 66942, 96415 67376, 96415 67377, 96424 67601, 96427 67606, 96571 67674, 96577 67674, 96709 67586, 96783 67801, 96572 68025, 96427 68041, 96427 67991, 96421 67985, 96287 67983, 96282 66876, 96476 66519, 96477 66514, 96416 66336, 96409 66332, 96282 66364, 96282 66282, 96416 66282, 96422 66276, 96422 66184, 96416 66178, 96282 66177, 96283 65387, 96416 65389, 96422 65383, 96422 65302, 96559 65230, 96560 65221, 96422 65068, 96432 64801, 96612 64725))) \ No newline at end of file diff --git a/stress_benchmark/resources/045.settings b/stress_benchmark/resources/045.settings new file mode 100644 index 0000000000..c93fd544aa --- /dev/null +++ b/stress_benchmark/resources/045.settings @@ -0,0 +1,630 @@ +experimental=0 +infill_pattern=zigzag +dual=0 +slicing_tolerance=exclusive +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=20 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=220 +machine_max_feedrate_x=299792458000 +top_bottom_pattern=zigzag +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.8 +material_guid=4f14d5fb-3b32-4bc4-adc2-e83693b02d69 +platform_adhesion=0 +speed_support_interface=40.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.7 +prime_tower_brim_enable=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=False +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.1 +support_offset=0.8 +acceleration_layer_0=3000 +support_conical_min_width=5.0 +shell=0 +retraction_combing=no_outer_surfaces +support_zag_skip_count=8 +retraction_speed=25 +acceleration_roofing=3000 +raft_interface_jerk=20 +support_roof_height=1 +acceleration_travel=5000 +acceleration_wall_x_roofing=3000 +support_roof_enable=False +acceleration_travel_layer_0=5000.0 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=1 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=20 +date=01-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=20 +cool_fan_speed=100.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=20 +material_flow=100 +material_is_support_material=False +raft_interface_speed=22.5 +skirt_brim_speed=30.0 +retraction_amount=6.5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0 +acceleration_wall_x=3000 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=60.0 +skirt_gap=3 +ooze_shield_angle=60 +bridge_skin_speed_2=50 +cross_infill_pocket_size=0.4 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=20 +acceleration_print_layer_0=3000 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +retraction_min_travel=0.8 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=False +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +skin_monotonic=True +command_line_settings=0 +acceleration_topbottom=3000 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=299792458000 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=30.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=3000 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=310 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_inner +travel_speed=120 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=10 +jerk_travel=30 +speed_travel=120 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=225.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=25 +speed_support_bottom=40.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=3.0 +speed_slowdown_layers=2 +optimize_wall_printing_order=False +machine_max_acceleration_y=9000 +resolution=0 +support_angle=50 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=20 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=3000 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Fri +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=1 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.1 +minimum_bottom_area=1.0 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=1 +wall_thickness=0.8 +top_bottom_pattern_0=zigzag +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=5 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=3000 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=zigzag +jerk_wall_x_roofing=20 +top_skin_preshrink=1.6 +minimum_polygon_circumference=4.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=20.0 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.8 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=1 +jerk_prime_tower=20 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=0.0 +support_interface_density=100 +bridge_wall_speed=50 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30.0 +infill_offset_y=0 +cool_fan_speed_max=100.0 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=40.0 +support_bottom_wall_count=0 +speed_print_layer_0=30.0 +jerk_support_interface=20 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=95 +lightning_infill_straightening_angle=40 +support_tree_angle=50 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.1 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=2 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=buildplate +lightning_infill_overhang_angle=40 +quality_name=Coarse +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=1.6 +min_wall_line_width=0.34 +acceleration_support_infill=3000 +meshfix=0 +machine_max_feedrate_y=299792458000 +bridge_skin_speed=50 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=33.333333333333336 +bridge_fan_speed_3=0 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0.3 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=30.0 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=20 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=3000 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=False +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=5 +material_print_temperature_layer_0=220 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=6.5 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_depth=310 +acceleration_skirt_brim=3000 +skin_overlap=25 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=450 +raft_smoothing=5 +acceleration_support_interface=3000 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=20 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=3000 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=20 +alternate_carve_order=False +wipe_hop_speed=10 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=220 +wipe_hop_amount=1 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=60 +support_interface_enable=False +raft_base_acceleration=3000 +wall_line_width_x=0.4 +machine_acceleration=4000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=5 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=95 +skin_preshrink=1.6 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=3000 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=4 +jerk_travel_layer_0=30.0 +raft_base_speed=22.5 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=20 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.8 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=False +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=3000 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=0.4 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=6.5 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.8 +prime_blob_enable=False +bridge_settings_enabled=True +jerk_enabled=False +speed_wall_0_roofing=30.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=50 +infill=0 +prime_tower_position_y=280.575 +jerk_support=20 +speed_wall_x_roofing=60.0 +speed_layer_0=30.0 +wall_line_width_0=0.4 +jerk_support_infill=20 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +machine_name=Unknown +acceleration_prime_tower=3000 +material_print_temperature=220 +jerk_print_layer_0=20 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=brim +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=440.575 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=3000 +support_roof_wall_count=0 +raft_jerk=20 +support_z_distance=0.1 +machine_height=900 +speed_infill=60 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=30.0 +speed_support=60 +speed_prime_tower=60 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=3000 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.6666666666666665 +infill_line_width=0.4 +speed_wall_x=60.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=buildplate +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=3000 +infill_sparse_density=100 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=1.6 +retraction_count_max=90 +jerk_infill=20 +speed_ironing=20.0 +gantry_height=900 +bottom_skin_expand_distance=1.6 +min_feature_size=0.32 +layer_0_z_overlap=0.15 +material_initial_print_temperature=220 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=6.123233995736766e-17 +cool_fan_speed_min=100.0 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=1.6 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=220 diff --git a/stress_benchmark/resources/045.wkt b/stress_benchmark/resources/045.wkt new file mode 100644 index 0000000000..5811a3c9c1 --- /dev/null +++ b/stress_benchmark/resources/045.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((302030 234958, 302026 234978, 302005 234946)), ((302414 234417, 302456 234464, 302244 234612, 302232 234624, 302254 234461, 302238 234162)), ((302610 234480, 302659 234533, 302572 234595, 302456 234464, 302497 234436, 302561 234409)), ((304291 234278, 304213 234268, 304209 234256)), ((303386 234037, 303762 234137, 303742 234134, 303322 234200, 303292 234178, 302566 233851)), ((261951 233033, 261878 233014, 261873 233007, 261913 232965)), ((262907 232282, 262967 232628, 262960 232632, 262400 232746, 262069 232713, 261974 232459, 261695 232330, 261767 232262, 261783 232237, 262224 232153, 262682 231886, 262912 231700)), ((261976 232704, 262069 232713, 262077 232734, 261867 232713, 261836 232635)), ((263149 232614, 263148 232634, 262998 232699, 262963 232706, 262964 232698, 263148 232615, 262970 232644, 262967 232628, 263142 232543)), ((261348 232329, 261441 232372, 261502 232439, 261348 232329, 261314 232313, 261317 232307)), ((261783 232237, 261655 232261, 261624 232297, 261615 232293, 261479 232148, 261491 232138, 261896 232053)), ((299479 230332, 299507 230343, 299507 230350, 299403 230309)), ((299508 79655, 299479 79666, 299438 79678, 299508 79652)), ((262957 77366, 262964 77370, 262906 77716, 262914 78301, 262683 78114, 262224 77843, 261781 77760, 261767 77737, 261649 77624, 261695 77513, 262043 77288, 262396 77252)), ((261658 77737, 261781 77760, 261894 77945, 261600 77885, 261615 77705, 261620 77693)), ((262054 77281, 262043 77288, 261974 77295, 261619 77469, 261578 77532, 261557 77500, 261619 77469, 261665 77400, 261834 77290, 262061 77267)), ((263124 77377, 263123 77447, 262964 77370, 262969 77342, 262951 77331)), ((262992 77297, 263124 77354, 263124 77373, 263147 77383, 263124 77377, 263124 77373, 262944 77291, 262944 77287)), ((262946 77330, 262946 77335, 262861 77308)), ((303745 75860, 303776 75856, 303387 75956, 302604 76139, 303293 75819, 303316 75802)), ((302460 75532, 302421 75575, 302239 75837, 302255 75537, 302228 75340)), ((304210 75744, 304213 75732, 304293 75722)), ((302660 75466, 302618 75511, 302565 75588, 302495 75561, 302460 75532, 302573 75405)), ((302030 75040, 302005 75052, 302026 75021)), ((261929 231714, 261987 231728, 262024 231737, 261965 231743, 261964 231744)), ((250196 167964, 249781 166859, 249410 165810, 249081 164806, 248793 163847, 248543 162928, 248439 162511, 262246 162511, 262246 168087, 250245 168087)), ((305216 72882, 305560 73066, 305700 73216, 305897 73538, 306025 73910, 306110 74342, 306156 75147, 306100 75885, 305989 76355, 305715 76779, 305339 76921, 304832 76999, 304294 77123, 304267 77144, 304080 77197, 303969 77285, 303697 77688, 303528 78403, 303414 79639, 303369 80568, 303339 81658, 303323 82898, 303325 84270, 303369 86547, 303397 87358, 303528 89914, 303591 90804, 303668 91710, 303854 93596, 304101 95597, 304408 97735, 304779 100038, 305211 102530, 306306 108720, 306487 109788, 307077 113114, 307393 114843, 307734 116601, 307905 117411, 308096 118380, 308491 120165, 308913 121954, 309364 123737, 309834 125506, 310319 127258, 310813 128987, 312343 134172, 313076 136688, 313419 137910, 314054 140279, 314339 141436, 314606 142579, 314850 143690, 315071 144790, 315270 145874, 315445 146948, 315600 148007, 315798 149673, 315895 150763, 315971 151836, 316025 152897, 316055 153951, 316066 155001, 316056 156050, 316026 157103, 315972 158163, 315899 159238, 315800 160328, 315672 161438, 315523 162570, 315342 163732, 315128 164926, 314883 166156, 314606 167431, 314341 168572, 314053 169732, 313415 172123, 313070 173356, 310757 181334, 309795 184805, 309319 186608, 308844 188503, 308440 190211, 308048 191988, 307688 193743, 307350 195468, 307020 197265, 305399 206425, 304634 210849, 304318 212884, 304177 213866, 303972 215419, 303855 216403, 303735 217578, 303582 219329, 303523 220188, 303395 222678, 303368 223473, 303325 225730, 303323 227102, 303339 228345, 303369 229447, 303415 230384, 303515 231442, 303696 232309, 303969 232714, 304079 232800, 304253 232843, 304293 232874, 304846 233003, 305339 233077, 305714 233219, 305988 233642, 306101 234115, 306157 234852, 306111 235657, 306025 236088, 305896 236459, 305699 236782, 305560 236932, 305216 237117, 304835 237208, 304239 237208, 302574 236772, 301388 236477, 301232 236389, 300898 236109, 300621 235716, 300542 235522, 300465 235050, 300404 234233, 300146 233851, 299605 233489, 299409 233416, 299403 233412, 298276 232989, 296892 232594, 296145 232401, 294585 232023, 292872 231635, 291692 231379, 289967 231021, 288559 230741, 287192 230491, 285869 230262, 284591 230057, 283361 229876, 282181 229725, 281049 229604, 279970 229519, 278939 229465, 277941 229438, 277759 229440, 277753 229440, 276812 229450, 275737 229502, 275048 229557, 274219 229649, 273422 229764, 272629 229903, 271914 230058, 271196 230236, 270499 230430, 269819 230644, 269273 230830, 268608 231079, 267813 231406, 267049 231756, 266203 232196, 265990 232357, 265887 232417, 265332 232837, 265209 233013, 265059 233419, 265036 234114, 264979 234392, 264857 234696, 264634 235032, 264177 235377, 263873 235517, 263334 235629, 262603 235728, 262046 235760, 261408 235740, 260889 235690, 260723 235616, 260343 235428, 260134 235267, 259792 234815, 259562 234352, 259380 233797, 259269 233264, 259181 232697, 259113 232069, 259074 231561, 259016 230110, 259004 228898, 259019 227750, 259041 226885, 259099 225548, 259181 224640, 259274 224177, 259396 224038, 259698 224941, 259733 225006, 260028 226214, 260202 226811, 260392 227378, 260616 227890, 260905 228396, 261193 228637, 261323 228675, 261482 228422, 261563 228144, 261683 227331, 261746 226527, 261789 225624, 261826 224293, 261851 222906, 261879 218451, 261871 215290, 261836 212973, 261804 211948, 261757 210868, 261691 209746, 261598 208543, 261478 207374, 261315 206101, 261104 204760, 260825 203337, 260468 201827, 260035 200241, 259521 198591, 258935 196896, 258288 195182, 257604 193474, 256880 191776, 256141 190108, 255388 188464, 253865 185263, 249426 176269, 248752 174867, 248111 173501, 247507 172176, 246951 170901, 246435 169668, 245966 168488, 245553 167371, 245176 166292, 244841 165262, 244549 164268, 244287 163311, 244066 162387, 243870 161495, 243710 160626, 243573 159781, 243460 158954, 243370 158145, 243301 157347, 243254 156559, 243228 155776, 243218 155001, 243229 154221, 243256 153438, 243302 152651, 243371 151852, 243462 151043, 243574 150218, 243711 149371, 243867 148549, 244066 147611, 244291 146686, 244550 145729, 244847 144738, 245180 143706, 245554 142627, 245982 141486, 246438 140330, 246950 139104, 247511 137822, 248115 136498, 249429 133729, 250130 132296, 252346 127832, 253868 124737, 254631 123148, 255390 121532, 256143 119889, 256889 118205, 257607 116522, 258294 114814, 258938 113103, 259524 111405, 260036 109754, 260471 108169, 260824 106661, 261103 105239, 261317 103895, 261479 102623, 261602 101406, 261708 99998, 261807 98046, 261837 97000, 261871 94990, 261879 91213, 261850 87057, 261827 85704, 261794 84484, 261747 83470, 261662 82420, 261525 81647, 261325 81326, 261194 81362, 260906 81601, 260615 82106, 260392 82622, 260201 83187, 260027 83785, 259733 84992, 259698 85057, 259396 85960, 259274 85820, 259181 85358, 259098 84451, 259040 83114, 259018 82250, 259004 81100, 259011 80104, 259061 78666, 259113 77929, 259182 77301, 259268 76736, 259387 76177, 259561 75647, 259729 75291, 260122 74745, 260153 74715, 260341 74571, 260866 74311, 261407 74258, 262046 74239, 262609 74271, 263179 74346, 263857 74475, 264177 74623, 264650 74985, 264857 75302, 265017 75700, 265059 76580, 265209 76986, 265329 77159, 265886 77581, 265990 77641, 266195 77797, 267048 78243, 267813 78593, 268607 78920, 269272 79167, 269817 79355, 270497 79567, 271195 79762, 271913 79941, 272653 80097, 273422 80236, 274218 80348, 275047 80440, 275911 80508, 276812 80546, 277398 80553, 277967 80560, 279057 80528, 279970 80480, 281049 80394, 282180 80273, 283361 80122, 284591 79941, 285869 79736, 287192 79508, 288645 79241, 291414 78680, 292898 78358, 294678 77955, 296227 77578, 296892 77405, 298273 77010, 299404 76585, 299412 76580, 299607 76507, 300146 76147, 300403 75767, 300449 75372, 300472 74861, 300543 74475, 300621 74281, 300898 73889, 301233 73608, 301383 73524, 302575 73228, 304239 72792, 304833 72791) (261929 231714, 261815 231869, 261491 232138, 261473 232142, 261479 232148, 261464 232161, 261514 232364, 261537 232399, 261527 232412, 261555 232425, 261580 232463, 261557 232499, 261535 232489, 261503 232440, 261527 232412, 261441 232372, 261397 232324, 261324 232296, 261340 232264, 261464 232161, 261460 232145, 261473 232142, 261454 232121, 261434 232040, 261433 231585, 261202 231130, 261143 231064, 260943 230531, 261123 231113, 261372 231789, 261434 232040, 261434 232100, 261454 232121, 261460 232145, 261313 232176, 261267 232173, 261255 231907, 261235 231842, 261235 231735, 261148 231561, 261235 231842, 261234 232171, 260707 232135, 260500 232146, 260195 232032, 260659 232224, 260839 232270, 260514 232266, 260846 232412, 261315 232529, 261207 233099, 260978 233427, 260959 233960, 261147 233615, 261169 233592, 261165 233955, 261254 233874, 261275 233908, 261585 233447, 261797 233294, 261851 233321, 261931 233281, 262078 233066, 262020 233051, 262384 232996, 262385 232995, 262025 233047, 261913 232965, 261724 232680, 261771 232703, 261867 232713, 261926 232855, 262382 232816, 262475 232788, 262557 232782, 262583 232785, 262839 232732, 262385 232995, 262394 233015, 262556 233386, 262910 233532, 262915 233420, 263131 233508, 263126 232977, 263148 232634, 263928 232297, 264009 232272, 264592 231851, 264957 231443, 265357 230738, 265627 229813, 265721 229181, 265913 229104, 266100 228983, 266701 228705, 267340 228435, 268028 228170, 268512 227998, 269299 227742, 270122 227506, 270978 227290, 271873 227097, 272803 226929, 273771 226788, 274774 226679, 275815 226599, 276892 226553, 277816 226542, 278959 226567, 280151 226631, 281382 226730, 282647 226864, 283937 227027, 285258 227221, 286608 227438, 288091 227699, 289400 227941, 291118 228283, 292176 228505, 294154 228941, 295925 229357, 297482 229751, 298179 229946, 299323 230286, 299323 230339, 299442 231105, 299579 231856, 299709 232345, 300025 233088, 300296 233534, 300712 234052, 301305 234598, 301680 234847, 302102 235029, 302808 235463, 303548 235703, 303554 235704, 303748 235767, 304317 235856, 304836 235961, 304392 235839, 304060 235608, 303624 235362, 303007 234909, 302659 234533, 302674 234522, 303082 234345, 303350 234301, 303775 234619, 304101 234785, 304116 234755, 304296 234865, 304455 234488, 304318 234025, 304030 233437, 303593 232824, 303030 232249, 302406 231755, 301776 231353, 301176 231036, 300591 230769, 299507 230343, 299520 229894, 299471 228916, 299441 227799, 299427 226543, 299436 225160, 299463 223659, 299516 222050, 299604 220352, 299661 219447, 299804 217648, 299894 216704, 299999 215734, 300253 213713, 300560 211563, 300930 209263, 301170 207855, 301828 204138, 302909 198139, 303548 194805, 303904 193073, 304289 191305, 304706 189509, 305157 187694, 305632 185874, 306130 184059, 307164 180480, 307431 179607, 307684 178736, 309375 173174, 310066 170803, 310686 168545, 310964 167452, 311218 166379, 311454 165324, 311664 164286, 311854 163268, 312029 162194, 312165 161267, 312308 160063, 312408 159027, 312482 158007, 312535 156998, 312567 155996, 312577 155001, 312568 154000, 312536 152999, 312483 151991, 312407 150970, 312309 149933, 312185 148879, 312031 147803, 311848 146697, 311634 145556, 311385 144375, 311106 143154, 310793 141885, 310443 140566, 310061 139193, 309381 136884, 307711 131444, 306649 127914, 306174 126251, 305681 124470, 305206 122672, 304755 120864, 304339 119061, 303952 117271, 303592 115506, 303236 113668, 302644 110456, 301573 104465, 300985 101076, 300561 98442, 300344 96958, 300091 95041, 299982 94112, 299800 92300, 299659 90526, 299604 89698, 299520 88038, 299487 87131, 299437 84951, 299427 83561, 299440 82287, 299469 81144, 299521 80105, 299508 79655, 299667 79592, 299817 79536, 300221 79375, 300591 79230, 301176 78964, 301782 78641, 302407 78243, 303023 77755, 303592 77174, 304035 76560, 304319 75974, 304456 75509, 304295 75136, 304114 75245, 304100 75216, 303775 75379, 303330 75713, 303268 75705, 302672 75475, 302660 75466, 303011 75089, 303617 74641, 304057 74392, 304390 74161, 304835 74040, 304314 74144, 303758 74230, 303561 74294, 303558 74294, 302800 74539, 302101 74970, 301684 75151, 301309 75399, 300708 75953, 300297 76464, 300025 76908, 299709 77653, 299511 78397, 299386 79390, 299324 79658, 299324 79712, 298179 80053, 296732 80442, 295714 80693, 294020 81087, 292835 81349, 290841 81770, 289400 82057, 287861 82342, 286607 82560, 285258 82777, 283937 82970, 282646 83135, 281382 83270, 280152 83366, 278959 83431, 277848 83458, 276893 83446, 275816 83400, 274775 83322, 273772 83211, 272804 83069, 271874 82902, 270979 82709, 270123 82494, 269300 82258, 268512 82001, 268033 81832, 267341 81565, 266702 81295, 266101 81017, 265914 80894, 265722 80818, 265658 80316, 265520 79737, 265291 79067, 264957 78554, 264588 78147, 264013 77728, 263927 77701, 263124 77354, 263131 76492, 262915 76579, 262910 76468, 262554 76613, 262397 76981, 262387 77004, 262839 77266, 262578 77214, 262555 77216, 262499 77213, 262382 77182, 261924 77144, 261853 77278, 261834 77290, 261769 77297, 261715 77323, 261904 77034, 261869 76995, 261880 76978, 261956 76954, 261904 77034, 261909 77039, 262035 76947, 262281 76986, 262387 77004, 262386 77003, 262281 76986, 262003 76940, 262072 76918, 261930 76715, 261850 76676, 261802 76706, 261586 76552, 261274 76089, 261252 76122, 261164 76044, 261169 76404, 261148 76382, 260961 76066, 260979 76573, 261206 76901, 261316 77469, 260842 77586, 260521 77727, 260763 77740, 260634 77771, 260475 77844, 260970 77874, 261266 77830, 261254 78095, 261150 78432, 261262 78203, 261294 77826, 261300 77825, 261457 77857, 261371 78209, 261121 78884, 260937 79484, 261203 78868, 261202 78777, 261431 78236, 261583 78083, 261594 77947, 261496 77864, 261457 77857, 261462 77836, 261339 77733, 261318 77692, 261397 77673, 261502 77559, 261317 77691, 261307 77671, 261311 77629, 261362 77596, 261532 77512, 261502 77559, 261536 77598, 261512 77634, 261462 77836, 261496 77864, 261600 77885, 261594 77947, 261811 78129, 261928 78287, 261987 78273, 261965 78258, 262027 78264, 261987 78273, 262471 78615, 263191 79238, 263821 79697, 264400 80082, 264448 80111, 264597 80211, 265106 80514, 265254 80631, 265398 80688, 265516 80758, 265530 80850, 265610 81669, 265674 82772, 265715 83889, 265752 85703, 265768 87402, 265780 90850, 265772 94751, 265736 97143, 265702 98213, 265653 99316, 265585 100463, 265489 101662, 265362 102915, 265197 104237, 264970 105638, 264684 107126, 264304 108745, 263853 110392, 263296 112182, 262634 114092, 261875 116100, 261025 118181, 260125 120263, 259217 122286, 258065 124756, 256995 126990, 253465 134224, 252118 137065, 251506 138403, 250948 139681, 250437 140899, 249970 142057, 249559 143157, 249189 144206, 248865 145195, 248575 146164, 248322 147084, 248104 147968, 247915 148836, 247760 149647, 247627 150451, 247518 151237, 247434 152008, 247367 152768, 247321 153516, 247294 154260, 247284 155001, 247293 155738, 247322 156482, 247368 157233, 247434 157991, 247519 158761, 247626 159549, 247761 160354, 247933 161257, 248102 162032, 248221 162511, 247648 162511, 248072 164408, 248073 168087, 250026 168087, 250431 169099, 250941 170318, 251504 171594, 252113 172933, 252767 174325, 254190 177277, 256994 183015, 258309 185769, 259046 187350, 260121 189733, 261019 191813, 261869 193894, 262631 195905, 263274 197756, 263848 199603, 264309 201286, 264683 202870, 264970 204360, 265197 205762, 265362 207083, 265490 208337, 265585 209535, 265653 210682, 265702 211786, 265737 212856, 265770 214883, 265781 216800, 265767 222819, 265753 224298, 265711 226256, 265668 227372, 265595 228581, 265515 229242, 265310 229337, 265286 229354, 265255 229367, 265128 229467, 264596 229789, 264428 229902, 264401 229918, 263818 230302, 263194 230755, 262829 231086, 262433 231417, 261989 231726, 262091 231654))) \ No newline at end of file diff --git a/stress_benchmark/resources/046.settings b/stress_benchmark/resources/046.settings new file mode 100644 index 0000000000..2ebb338bdb --- /dev/null +++ b/stress_benchmark/resources/046.settings @@ -0,0 +1,629 @@ +experimental=0 +infill_pattern=triangles +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=5 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=215 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=False +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=0.6 +material_guid=475a94a5-3ca4-4c3a-8922-f3fce5cd21ab +platform_adhesion=0 +speed_support_interface=25.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0 +support_offset=0.2 +acceleration_layer_0=1500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=all +support_zag_skip_count=8 +retraction_speed=25 +acceleration_roofing=1500 +raft_interface_jerk=5 +support_roof_height=0.8 +acceleration_travel=3000 +acceleration_wall_x_roofing=1500 +support_roof_enable=True +acceleration_travel_layer_0=3000 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=25 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=2 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=5 +date=03-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=5 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=5 +material_flow=100 +material_is_support_material=False +raft_interface_speed=18.75 +skirt_brim_speed=20 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.04 +acceleration_wall_x=1500 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=80 +skirt_gap=5.0 +ooze_shield_angle=60 +bridge_skin_speed_2=12.5 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=1500 +machine_extruder_count=1 +support_roof_line_distance=0.8 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=3000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=5 +acceleration_print_layer_0=1500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=1500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=15.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=8 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=25.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=25 +acceleration_ironing=1500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=300 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_inner +travel_speed=100.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=10 +speed_travel=80 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=105.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=25 +speed_support_bottom=25.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=2000 +resolution=0 +support_angle=60 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=5 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.4 +acceleration_support_roof=1500 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.3 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Sun +blackmagic=0 +travel_avoid_distance=1 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.12 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.8 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.3 +wall_thickness=0.8 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=50 +wipe_retraction_prime_speed=25 +material_brand=empty_brand +initial_bottom_layers=5 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=5 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=1500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=5 +top_skin_preshrink=0.8 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=GamBody +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0.12 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.6 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.3 +jerk_prime_tower=5 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=50 +bridge_wall_speed=12.5 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=25.0 +support_bottom_wall_count=0 +speed_print_layer_0=20 +jerk_support_interface=5 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=60 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=3 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +quality_name=Normal +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=0.8 +min_wall_line_width=0.34 +acceleration_support_infill=1500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=12.5 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=40.0 +bridge_fan_speed_3=0 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=True +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=25.0 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=25 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.24 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=5 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=1500 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=1500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=10 +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +bottom_layers=5 +material_print_temperature_layer_0=220 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.8 +jerk_ironing=5 +machine_depth=210 +acceleration_skirt_brim=1500 +skin_overlap=10 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.8 +wall_extruder_nr=-1 +machine_width=210 +raft_smoothing=5 +acceleration_support_interface=1500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=5 +support_roof_density=50 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=1500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=5 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=60 +material_alternate_walls=False +material_break_preparation_temperature=215 +wipe_hop_amount=0.3 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=45 +support_interface_enable=True +raft_base_acceleration=1500 +wall_line_width_x=0.4 +machine_acceleration=3000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=5 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=0.8 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=4 +acceleration_wall=1500 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.01 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_travel_layer_0=10 +raft_base_speed=18.75 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=5 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.016 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=1500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.05 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=8 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.6 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=25 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=65 +bridge_skin_speed_3=12.5 +infill=0 +prime_tower_position_y=183.0 +jerk_support=5 +speed_wall_x_roofing=50 +speed_layer_0=80 +wall_line_width_0=0.4 +jerk_support_infill=5 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=1500 +material_print_temperature=215 +jerk_print_layer_0=5 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=203.0 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=5 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=1500 +support_roof_wall_count=0 +raft_jerk=5 +support_z_distance=0.12 +machine_height=205 +speed_infill=50 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=25.0 +speed_support=25 +speed_prime_tower=25.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=True +layer_start_x=0.0 +acceleration_support=1500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.6666666666666665 +infill_line_width=0.4 +speed_wall_x=50 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=1500 +infill_sparse_density=20 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=0.8 +retraction_count_max=100 +jerk_infill=5 +speed_ironing=16.666666666666668 +gantry_height=0 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=205 +material_adhesion_tendency=0 +default_material_print_temperature=200.0 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=6.123233995736766e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=0.8 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=5 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=215 diff --git a/stress_benchmark/resources/046.wkt b/stress_benchmark/resources/046.wkt new file mode 100644 index 0000000000..c6e4284486 --- /dev/null +++ b/stress_benchmark/resources/046.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((110044 85277, 110072 85286, 110079 85299, 110063 85329, 110019 85734, 109934 85891, 109885 86013, 109904 86228, 109784 86283, 109721 86258, 109628 86250, 109536 86203, 109391 86107, 109325 86033, 109323 86000, 109285 85941, 109308 85859, 109612 85364, 109753 85277, 109893 85263, 110004 85229))) \ No newline at end of file diff --git a/stress_benchmark/resources/047.settings b/stress_benchmark/resources/047.settings new file mode 100644 index 0000000000..49e632dc16 --- /dev/null +++ b/stress_benchmark/resources/047.settings @@ -0,0 +1,629 @@ +experimental=0 +infill_pattern=zigzag +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=100 +skirt_brim_line_width=0.4 +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=4.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=185 +machine_max_feedrate_x=299792458000 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +top_bottom_thickness=1.2 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=20.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.7 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.1 +support_offset=0.8 +acceleration_layer_0=1800 +support_conical_min_width=5.0 +shell=0 +retraction_combing=all +support_zag_skip_count=2 +retraction_speed=40 +acceleration_roofing=1800 +raft_interface_jerk=8 +support_roof_height=1 +acceleration_travel=3000 +acceleration_wall_x_roofing=1800 +support_roof_enable=True +acceleration_travel_layer_0=3000.0 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=40 +support_use_towers=False +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=03-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=3 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=100 +material_is_support_material=False +raft_interface_speed=18.75 +skirt_brim_speed=40 +retraction_amount=6 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.06 +acceleration_wall_x=1800 +prime_tower_flow=100 +machine_steps_per_mm_x=50 +speed_travel_layer_0=50.0 +skirt_gap=5 +ooze_shield_angle=60 +bridge_skin_speed_2=10 +cross_infill_pocket_size=1.6 +support_bottom_material_flow=100 +skin_material_flow=100 +roofing_material_flow=100 +acceleration_infill=1800 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=9000 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=True +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=1800 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.5 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=1.6800000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=8.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=1800 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=15 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=299792458000 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=100 +raft_surface_speed=25.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=40 +acceleration_ironing=1800 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=210 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +z_seam_corner=z_seam_corner_inner +travel_speed=100 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=10000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=10 +speed_travel=100 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=100 +anti_overhang_mesh=False +z_seam_x=105.0 +support_interface_material_flow=100 +wipe_retraction_retract_speed=40 +speed_support_bottom=20.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=100 +bridge_wall_min_length=2.1 +speed_slowdown_layers=2 +optimize_wall_printing_order=False +machine_max_acceleration_y=9000 +resolution=0 +support_angle=60 +cutting_mesh=False +minimum_interface_area=1.0 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +acceleration_support_roof=1800 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Sun +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.1 +minimum_bottom_area=1.0 +bridge_skin_density=100 +raft_interface_thickness=0.30000000000000004 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=1 +small_hole_max_size=0 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.075 +wall_thickness=1.2 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=100 +wipe_retraction_prime_speed=40 +material_brand=empty_brand +initial_bottom_layers=6 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=1800 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=True +cool_min_layer_time=5 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.2000000000000002 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.2 +material_anti_ooze_retracted_position=-4 +support_enable=True +support_bottom_line_distance=0.4 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=concentric +xy_offset=0 +machine_max_jerk_xy=20.0 +support_bottom_distance=0.1 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=1.2 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.075 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=100 +bridge_wall_coast=100 +support_interface_density=100 +bridge_wall_speed=25.0 +minimum_roof_area=1.0 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=50 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=20.0 +support_bottom_wall_count=0 +speed_print_layer_0=25.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=60 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.02 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.2 +cool_fan_full_layer=3 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=graceful +lightning_infill_overhang_angle=40 +quality_name=Normal +print_temperature=210 +adaptive_layer_height_variation_step=0.01 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +min_wall_line_width=0.34 +acceleration_support_infill=1800 +meshfix=0 +machine_max_feedrate_y=299792458000 +bridge_skin_speed=10 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=40.0 +bridge_fan_speed_3=0 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=20 +adaptive_layer_height_variation=0.1 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=z_overrides_xy +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=50 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.2 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=1800 +inset_direction=inside_out +wall_x_material_flow_roofing=100 +infill_before_walls=True +acceleration_wall_0_roofing=1800 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=triangles +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=8 +raft_surface_line_spacing=0.4 +retraction_retract_speed=40 +bottom_layers=6 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=6 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=210 +acceleration_skirt_brim=1800 +skin_overlap=5 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=1 +wall_extruder_nr=-1 +machine_width=210 +raft_smoothing=5 +acceleration_support_interface=1800 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=100 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=1800 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=10 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=200 +wipe_hop_amount=0.075 +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=30 +support_interface_enable=True +raft_base_acceleration=1800 +wall_line_width_x=0.4 +machine_acceleration=4000 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=sharpest_corner +prime_tower_base_size=4.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=6 +machine_max_jerk_e=5.0 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=1.2000000000000002 +layer_height_0=0.2 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=1800 +wall_material_flow=100 +skirt_height=3 +meshfix_maximum_resolution=0.5 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=1 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_travel_layer_0=10.0 +raft_base_speed=18.75 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=60 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.8 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=1800 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=1.6 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=6 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=1.2 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=50 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=60 +bridge_skin_speed_3=10 +infill=0 +prime_tower_position_y=181.895 +jerk_support=8 +speed_wall_x_roofing=50 +speed_layer_0=25.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=True +wall_x_extruder_nr=-1 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +acceleration_prime_tower=1800 +material_print_temperature=200 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=10 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=100 +prime_tower_position_x=201.895 +wipe_pause=0 +material_standby_temperature=175 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=1800 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.1 +machine_height=205 +speed_infill=50 +raft_surface_thickness=0.2 +infill_randomize_start_location=False +speed_roofing=20 +speed_support=30 +speed_prime_tower=50 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=140 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=1800 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=8.0 +infill_line_width=0.4 +speed_wall_x=50 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=everywhere +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=True +raft_base_thickness=0.24 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=1800 +infill_sparse_density=25 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=1.2000000000000002 +retraction_count_max=90 +jerk_infill=8 +speed_ironing=13.333333333333334 +gantry_height=0 +bottom_skin_expand_distance=1.2000000000000002 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=190 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=7.34788079488412e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=15 +expand_skins_expand_distance=1.2000000000000002 +material_bed_temperature=60 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=False +interlocking_beam_layer_count=2 +cool_min_temperature=200 diff --git a/stress_benchmark/resources/047.wkt b/stress_benchmark/resources/047.wkt new file mode 100644 index 0000000000..b6f942f9a9 --- /dev/null +++ b/stress_benchmark/resources/047.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((106032 105050, 106062 105402, 105490 106002, 105085 106091, 104982 105403, 105068 105298, 105825 104922))) \ No newline at end of file diff --git a/stress_benchmark/resources/048.settings b/stress_benchmark/resources/048.settings new file mode 100644 index 0000000000..73eacc8380 --- /dev/null +++ b/stress_benchmark/resources/048.settings @@ -0,0 +1,627 @@ +experimental=0 +infill_pattern=cubic +dual=0 +slicing_tolerance=middle +skirt_brim_material_flow=95.0 +skirt_brim_line_width=0.4 +minimum_support_area=0 +wall_x_material_flow_layer_0=100 +extruder_prime_pos_y=0 +magic_fuzzy_skin_outside_only=False +wall_transition_angle=10 +coasting_min_volume=0.8 +jerk_print=8 +brim_width=8.0 +material_no_load_move_factor=0.940860215 +material_final_print_temperature=215.0 +machine_max_feedrate_x=500 +top_bottom_pattern=lines +min_infill_area=0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +bridge_skin_material_flow_3=110 +material_print_temp_prepend=True +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.12 +top_bottom_thickness=0.84 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +speed_support_interface=50.0 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +machine_min_cool_heat_time_window=50.0 +speed_equalize_flow_width_factor=100.0 +support_bottom_stair_step_min_slope=10.0 +extruder_prime_pos_abs=False +wipe_brush_pos_x=100 +machine_scale_fan_speed_zero_to_one=False +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wall_0_material_flow_layer_0=100 +support_xy_distance=0.8 +prime_tower_brim_enable=False +gradual_support_infill_steps=0 +wall_line_width=0.4 +machine_heated_bed=True +top_bottom_extruder_nr=-1 +infill_wipe_dist=0.0 +support_offset=0.0 +acceleration_layer_0=500 +support_conical_min_width=5.0 +shell=0 +retraction_combing=noskin +support_zag_skip_count=10 +retraction_speed=52.0 +acceleration_roofing=500 +raft_interface_jerk=8 +support_roof_height=0.96 +acceleration_travel=500 +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_travel_layer_0=500 +support_extruder_nr=0 +brim_outside_only=True +retraction_prime_speed=52.0 +support_use_towers=True +material_surface_energy=100 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +skirt_line_count=3 +machine_nozzle_size=0.4 +wipe_retraction_extra_prime_amount=0 +jerk_support_roof=8 +date=03-12-2023 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +alternate_extra_perimeter=False +support_brim_line_count=10 +build_volume_temperature=28 +raft_base_jerk=8 +cool_fan_speed=100 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +group_outer_walls=True +jerk_roofing=8 +material_flow=95.0 +material_is_support_material=False +raft_interface_speed=15.0 +skirt_brim_speed=20.0 +retraction_amount=5 +support_tree_bp_diameter=7.5 +infill_overlap_mm=0.12 +acceleration_wall_x=500 +prime_tower_flow=95.0 +machine_steps_per_mm_x=50 +speed_travel_layer_0=100.0 +skirt_gap=10.0 +ooze_shield_angle=60 +bridge_skin_speed_2=10 +cross_infill_pocket_size=6.0 +support_bottom_material_flow=95.0 +skin_material_flow=95.0 +roofing_material_flow=95.0 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=True +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +machine_max_acceleration_x=500 +infill_support_angle=40 +support_bottom_extruder_nr=0 +smooth_spiralized_contours=True +acceleration_enabled=False +brim_gap=0 +jerk_topbottom=8 +acceleration_print_layer_0=500 +center_object=False +connect_infill_polygons=False +cool_fan_full_at_height=0.36 +meshfix_union_all_remove_holes=False +retraction_min_travel=1.5 +support_bottom_offset=0.0 +gradual_infill_steps=0 +support_extruder_nr_layer_0=0 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +support_bottom_enable=True +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +skin_monotonic=False +command_line_settings=0 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +ironing_inset=0.38 +infill_overlap=30.0 +support_mesh_drop_down=True +lightning_infill_prune_angle=40 +machine_max_feedrate_z=10 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +material_break_temperature=50 +roofing_line_width=0.4 +material_flow_layer_0=100 +relative_extrusion=False +wall_0_material_flow_roofing=95.0 +raft_surface_speed=20.0 +prime_tower_min_volume=6 +material_end_of_filament_purge_speed=0.5 +wipe_retraction_speed=52.0 +acceleration_ironing=500 +line_width=0.4 +flow_rate_extrusion_offset_factor=100 +machine_settings=0 +raft_base_extruder_nr=0 +z_seam_y=235 +wall_overhang_angle=90 +draft_shield_height=10 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +z_seam_corner=z_seam_corner_weighted +travel_speed=150.0 +max_extrusion_before_wipe=10 +support_meshes_present=False +support_join_distance=2.0 +machine_max_acceleration_e=5000 +cool_min_layer_time_fan_speed_max=10 +meshfix_keep_open_polygons=False +wall_transition_filter_deviation=0.1 +support_tree_top_rate=30 +jerk_travel=8 +speed_travel=150.0 +machine_shape=rectangular +ironing_enabled=False +wipe_move_distance=20 +raft_surface_fan_speed=0 +small_skin_width=0.8 +infill_material_flow=95.0 +anti_overhang_mesh=False +z_seam_x=117.5 +support_interface_material_flow=95.0 +wipe_retraction_retract_speed=52.0 +speed_support_bottom=50.0 +material_id=empty_material +raft_surface_layers=2 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +prime_tower_base_curve_magnitude=4 +infill_mesh_order=0 +support_roof_material_flow=95.0 +bridge_wall_min_length=2.2 +speed_slowdown_layers=2 +optimize_wall_printing_order=True +machine_max_acceleration_y=500 +resolution=0 +support_angle=45.0 +cutting_mesh=False +minimum_interface_area=10 +jerk_layer_0=8 +machine_center_is_zero=False +roofing_monotonic=True +default_material_bed_temperature=50 +support_xy_distance_overhang=0.4 +acceleration_support_roof=500 +retract_at_layer_change=False +support_roof_line_width=0.4 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +support_bottom_stair_step_width=5.0 +day=Sun +blackmagic=0 +travel_avoid_distance=0.625 +cool_min_speed=10 +interlocking_depth=2 +roofing_layer_count=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +support_top_distance=0.24 +minimum_bottom_area=10 +bridge_skin_density=100 +raft_interface_thickness=0.18 +jerk_travel_enabled=True +raft_interface_layers=1 +support_bottom_height=0.96 +small_hole_max_size=0 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +retraction_hop_after_extruder_switch_height=0.2 +wall_thickness=2.3 +top_bottom_pattern_0=lines +support_supported_skin_fan_speed=100 +support_bottom_density=33.333 +wipe_retraction_prime_speed=52.0 +material_brand=empty_brand +initial_bottom_layers=7 +support_material_flow=95.0 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_preparation_retracted_position=-16 +fill_outline_gaps=True +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +wipe_hop_enable=False +cool_min_layer_time=10 +material_shrinkage_percentage_xy=100.0 +support_roof_extruder_nr=0 +interlocking_enable=False +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.6 +minimum_polygon_circumference=1.0 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +acceleration_travel_enabled=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +layer_height=0.12 +material_anti_ooze_retracted_position=-4 +support_enable=False +support_bottom_line_distance=2.4000240002400024 +material_flush_purge_speed=0.5 +meshfix_union_all=True +travel=0 +meshfix_fluid_motion_enabled=True +machine_show_variants=False +machine_always_write_active_tool=False +quality_changes_name=empty +support_interface_pattern=grid +xy_offset=0 +machine_max_jerk_xy=10 +support_bottom_distance=0 +ironing_flow=10.0 +cool_fan_enabled=True +bottom_thickness=0.84 +material_type=empty +material_maximum_park_duration=300 +retraction_hop=0.2 +jerk_prime_tower=8 +material_shrinkage_percentage=100.0 +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +raft_fan_speed=0 +support_infill_extruder_nr=0 +wall_0_material_flow=95.0 +bridge_wall_coast=100 +support_interface_density=33.333 +bridge_wall_speed=10 +minimum_roof_area=10 +machine_buildplate_type=glass +ironing_pattern=zigzag +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=20.0 +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +support_tree_min_height_to_model=3 +speed_support_roof=50.0 +support_bottom_wall_count=0 +speed_print_layer_0=20.0 +jerk_support_interface=8 +raft_surface_line_width=0.4 +initial_extruder_nr=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +support_tree_angle=30.0 +draft_shield_height_limitation=full +conical_overhang_angle=50 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +gradual_infill_step_height=1.5 +support_infill_sparse_thickness=0.12 +cool_fan_full_layer=4 +hole_xy_offset_max_diameter=0 +cool_lift_head=False +support_tree_rest_preference=buildplate +lightning_infill_overhang_angle=40 +print_temperature=210 +adaptive_layer_height_variation_step=0.04 +z_seam_relative=False +top_skin_expand_distance=1.6 +min_wall_line_width=0.34 +acceleration_support_infill=500 +meshfix=0 +machine_max_feedrate_y=500 +bridge_skin_speed=10 +bridge_fan_speed=100 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +material_break_preparation_speed=2 +skin_line_width=0.4 +material_crystallinity=False +material=0 +adaptive_layer_height_threshold=0.2 +support_tree_angle_slow=20.0 +bridge_fan_speed_3=0 +raft_speed=20.0 +support_tree_branch_reach_limit=30 +support_structure=tree +support_bottom_stair_step_height=0 +support_fan_enable=False +z_seam_position=back +support_interface_offset=0.0 +magic_spiralize=False +wall_transition_filter_distance=100 +speed_topbottom=20.0 +adaptive_layer_height_variation=0.04 +material_extrusion_cool_down_speed=0.7 +interlocking_orientation=22.5 +prime_tower_size=20 +machine_nozzle_id=unknown +support_xy_overrides_z=xy_overrides_z +extruders_enabled_count=1 +switch_extruder_extra_prime_amount=0 +meshfix_fluid_motion_angle=15 +speed_wall_0=20.0 +top_bottom=0 +infill_multiplier=1 +infill_sparse_thickness=0.12 +raft_base_line_width=0.8 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +machine_nozzle_heat_up_speed=2.0 +jerk_wall_0=8 +machine_steps_per_mm_z=50 +machine_heat_zone_length=16 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +inset_direction=inside_out +wall_x_material_flow_roofing=95.0 +infill_before_walls=False +acceleration_wall_0_roofing=500 +min_bead_width=0.34 +switch_extruder_retraction_speeds=20 +support_pattern=gyroid +machine_feeder_wheel_diameter=10.0 +bridge_enable_more_layers=True +material_diameter=1.75 +brim_line_count=20 +raft_surface_line_spacing=0.4 +retraction_retract_speed=52.0 +bottom_layers=7 +material_print_temperature_layer_0=215.0 +raft_surface_extruder_nr=0 +material_anti_ooze_retraction_speed=5 +bridge_skin_material_flow_2=100 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_depth=235 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +adaptive_layer_height_enabled=False +support_interface_height=0.96 +wall_extruder_nr=-1 +machine_width=235 +raft_smoothing=5 +acceleration_support_interface=500 +layer_start_y=0.0 +adhesion_extruder_nr=-1 +machine_endstop_positive_direction_z=True +support_interface_wall_count=0 +jerk_skirt_brim=8 +support_roof_density=33.333 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +raft_surface_acceleration=500 +support_brim_enable=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +jerk_wall_x=8 +alternate_carve_order=True +wipe_hop_speed=5 +prime_tower_enable=False +machine_max_acceleration_z=100 +material_alternate_walls=False +material_break_preparation_temperature=215.0 +wipe_hop_amount=0.2 +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +prime_tower_wipe_enabled=True +speed_support_infill=60 +support_interface_enable=True +raft_base_acceleration=500 +wall_line_width_x=0.4 +machine_acceleration=500 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +raft_remove_inside_corners=False +wall_distribution_count=1 +support_roof_offset=0.0 +material_shrinkage_percentage_z=100.0 +support_skip_zag_per_mm=20 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_fluid_motion_shift_distance=0.1 +top_layers=7 +machine_max_jerk_e=5 +wall_overhang_speed_factor=100 +bridge_skin_material_flow=60 +skin_preshrink=1.6 +layer_height_0=0.12 +carve_multiple_volumes=False +support_tower_diameter=3.0 +acceleration_wall=500 +wall_material_flow=95.0 +skirt_height=3 +meshfix_maximum_resolution=0.25 +magic_fuzzy_skin_point_dist=0.8 +machine_nozzle_tip_outer_diameter=1 +mold_roof_height=0.5 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +raft_base_line_spacing=1.6 +support_wall_count=0 +cool_fan_speed_0=100.0 +wall_line_count=4 +jerk_travel_layer_0=8 +raft_base_speed=15.0 +raft_base_fan_speed=0 +max_skin_angle_for_expansion=90 +ooze_shield_enabled=False +print_bed_temperature=64.0 +raft_surface_jerk=8 +support_conical_angle=30 +material_flush_purge_length=60 +meshfix_maximum_travel_resolution=0.25 +support_tree_limit_branch_reach=True +xy_offset_layer_0=0 +remove_empty_first_layers=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +machine_minimum_feedrate=0.0 +acceleration_print=500 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +magic_fuzzy_skin_enabled=False +mold_enabled=False +machine_firmware_retract=False +support=0 +support_mesh=False +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +infill_line_distance=6.0 +lightning_infill_support_angle=40 +print_sequence=all_at_once +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +ironing_monotonic=False +skin_material_flow_layer_0=100 +top_thickness=0.84 +prime_blob_enable=False +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=20.0 +support_tower_roof_angle=65 +material_bed_temp_wait=True +raft_interface_fan_speed=0 +material_bed_temperature_layer_0=64.0 +bridge_skin_speed_3=10 +infill=0 +prime_tower_position_y=203.175 +jerk_support=8 +speed_wall_x_roofing=20.0 +speed_layer_0=20.0 +wall_line_width_0=0.4 +jerk_support_infill=8 +infill_offset_x=0 +skirt_brim_extruder_nr=-1 +machine_endstop_positive_direction_x=False +skirt_brim_minimal_length=250 +cooling=0 +brim_replaces_support=False +wall_x_extruder_nr=-1 +support_interface_skip_height=0.12 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +acceleration_prime_tower=500 +material_print_temperature=215.0 +jerk_print_layer_0=8 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=40.0 +wall_0_inset=0 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +adhesion_type=skirt +min_odd_wall_line_width=0.34 +speed_z_hop=5 +brim_inside_margin=2.5 +infill_mesh=False +wall_x_material_flow=95.0 +prime_tower_position_x=223.175 +wipe_pause=0 +material_standby_temperature=180 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_margin=15 +raft_acceleration=500 +support_roof_wall_count=0 +raft_jerk=8 +support_z_distance=0.24 +machine_height=250 +speed_infill=40.0 +raft_surface_thickness=0.12 +infill_randomize_start_location=False +speed_roofing=20.0 +speed_support=60 +speed_prime_tower=20.0 +machine_steps_per_mm_y=50 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_interface_line_width=0.4 +zig_zaggify_infill=False +layer_start_x=0.0 +acceleration_support=500 +material_name=empty +support_tower_maximum_supported_diameter=3.0 +support_line_distance=2.0 +infill_line_width=0.4 +speed_wall_x=20.0 +ooze_shield_dist=2 +raft_interface_line_width=0.8 +support_type=buildplate +speed=0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +retraction_hop_only_when_collides=False +raft_base_thickness=0.144 +mold_width=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +infill_sparse_density=20.0 +nozzle_disallowed_areas=[] +small_skin_on_surface=False +bottom_skin_preshrink=1.6 +retraction_count_max=100 +jerk_infill=8 +speed_ironing=13.333333333333334 +gantry_height=25 +bottom_skin_expand_distance=1.6 +min_feature_size=0.1 +layer_0_z_overlap=0.15 +material_initial_print_temperature=215.0 +material_adhesion_tendency=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +min_skin_width_for_expansion=5.143516556418883e-17 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +infill_support_enabled=False +support_interface_extruder_nr=0 +brim_smart_ordering=True +mesh_position_z=0 +support_infill_rate=20 +expand_skins_expand_distance=1.6 +material_bed_temperature=64.0 +mold_angle=40 +raft_airgap=0.3 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +travel_avoid_supports=True +interlocking_beam_layer_count=2 +cool_min_temperature=215.0 diff --git a/stress_benchmark/resources/048.wkt b/stress_benchmark/resources/048.wkt new file mode 100644 index 0000000000..43558a40ee --- /dev/null +++ b/stress_benchmark/resources/048.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((134260 189842, 134788 191162, 136083 191813, 136689 193182, 134663 194101, 134353 193972, 134066 193721, 134214 191386, 133525 190548, 133455 189673)), ((151951 164738, 151585 166602, 151120 167119, 150266 167129, 150880 167732, 151138 168002, 151077 168451, 151213 168456, 151413 168570, 151780 168929, 151790 169443, 148149 171233, 146304 172747, 145689 173444, 144933 174436, 144692 174950, 144146 177004, 143942 178651, 143902 179598, 143995 180168, 144292 181448, 144704 182221, 145662 183599, 146909 184895, 149006 186636, 150224 187468, 150301 187562, 150080 188002, 149850 188210, 149960 188778, 150285 189906, 150196 190308, 148763 190905, 148689 190874, 147060 188925, 146876 188623, 146310 188676, 146223 188600, 146149 189095, 147162 189971, 147200 189965, 147297 189689, 147470 190452, 147620 190792, 147331 192040, 146971 192347, 145953 192259, 145519 192071, 144963 190770, 144714 190236, 144386 189439, 144753 188875, 144566 188392, 144530 188204, 144449 188052, 144248 187853, 143920 187621, 143713 187564, 143437 187212, 143165 186984, 143109 186875, 142958 187214, 142822 187383, 142474 187851, 141683 187600, 140961 187324, 140487 185840, 139941 185505, 139528 185183, 140075 184823, 139918 184437, 139848 184100, 139816 184065, 140099 183694, 139872 183570, 139324 183235, 139254 183279, 138582 183042, 137548 182065, 137405 181698, 137162 180851, 137427 180362, 137490 180019, 138988 177624, 140139 177691, 140171 176540, 140188 175002, 139833 174913, 137962 174561, 137944 174112, 137835 173498, 137944 173276, 138561 172355, 139739 171777, 140700 171579, 140705 171538, 140858 171533, 141133 171415, 141211 171275, 140416 170506, 140444 170212, 141495 169784, 141400 169218, 142228 167585, 143700 167343, 143809 167488, 144208 168248, 144275 168156, 144194 167515, 145151 166514, 146341 166978, 146464 166923, 146919 167347, 147506 166635, 148307 166502, 149089 166351, 149381 166315, 149468 166256, 149799 165307, 151848 164097) (144399 168763, 143810 169870, 143570 170218, 143488 170513, 143549 170619, 144499 170356, 144786 170302, 144941 169066, 144800 168941, 144603 168886, 144375 168637)), ((140190 163235, 140244 164334, 139810 165623, 138070 167102, 138231 167349, 138932 168076, 138925 168140, 135253 169405, 134378 169803, 132435 170854, 132181 171044, 131159 172124, 131096 172297, 130798 172668, 129655 175435, 129529 175963, 129111 178371, 129168 180278, 129537 181207, 129949 182317, 130095 182572, 131860 184968, 132166 185298, 134525 187424, 134599 187535, 134393 187697, 134090 187904, 134060 188007, 134138 188576, 134053 188809, 133707 188800, 132941 188839, 132339 188895, 131826 188089, 131318 188381, 131406 189351, 131839 190821, 131755 191044, 130749 191693, 130158 191563, 129047 190322, 128936 189933, 128811 190227, 128250 190365, 127819 190068, 127555 189580, 127555 189044, 127391 189369, 126667 189801, 125596 188987, 126834 188035, 127556 189041, 127544 188657, 126846 188009, 126855 187448, 126672 186968, 126659 186403, 126879 186277, 126947 186198, 127442 186027, 127773 186368, 127984 186721, 128478 186112, 127836 185298, 127560 185383, 127350 185587, 126835 186056, 126307 185804, 125334 185276, 125146 184242, 125062 184103, 124796 183889, 124144 183230, 124373 183119, 124258 182683, 123170 181786, 122482 181179, 122174 180377, 122104 179917, 122308 179505, 122446 179318, 122589 179207, 123467 179340, 123833 179246, 124540 179523, 126138 175954, 126424 174323, 126694 172602, 126677 171247, 125534 171036, 124437 170542, 124368 170131, 124297 169954, 124401 169681, 124992 168918, 125295 168809, 126011 168585, 126979 168318, 126777 168069, 127388 167889, 128050 167717, 128044 167518, 129160 165906, 130276 165877, 130744 165874, 130952 166461, 131129 166997, 131030 167376, 130721 168025, 132054 167912, 132147 167721, 131880 167505, 131809 167476, 131626 167207, 131408 166794, 131518 166679, 131468 166399, 131468 166097, 131712 165884, 132338 165387, 132616 165145, 132822 165172, 133856 165749, 134269 165630, 134402 165791, 134619 165588, 134939 165509, 136094 165501, 136440 165137, 137086 163866, 137306 163621, 137513 163448, 139723 162966) (128151 188066, 128342 188274, 128379 188268, 128448 188405, 128215 187618, 128072 187185)), ((144595 191292, 144560 191449, 144511 191468, 144408 191416, 144032 190795, 144441 190410)), ((142894 190693, 142856 190798, 142657 190956, 142304 190753, 142639 190418)), ((143542 188621, 143691 188757, 143941 189122, 144081 189811, 144007 190101, 143573 190362, 143061 190198, 142717 189953, 142523 188683, 142909 188395, 142939 188348, 143142 188196)), ((160542 166051, 161855 166825, 162212 167461, 162144 167844, 161788 168147, 161327 168575, 161380 168697, 161290 168615, 161228 168820, 160884 168990, 160933 169064, 160989 169015, 161553 169160, 161497 168790, 161833 168167, 162319 168244, 162493 168080, 162709 168085, 162969 168070, 163042 168311, 163478 169219, 161733 170819, 159869 172742, 159600 173198, 158915 174436, 158762 174906, 158604 175173, 158336 176286, 158358 176781, 158595 178373, 159483 180068, 159851 180696, 160869 181691, 162672 183113, 164951 184368, 165000 184959, 164749 185584, 164603 185666, 163577 185132, 163568 185196, 164057 185811, 165096 186668, 165365 187457, 165334 188673, 164902 188962, 163002 188572, 162831 188410, 161947 186845, 160810 186855, 160611 186823, 160355 186603, 160079 186657, 160012 186641, 159988 186702, 159656 186915, 158980 186968, 158687 186978, 158284 186924, 158058 187650, 156857 187510, 156588 187463, 155822 186084, 155904 185633, 154825 185249, 154821 185100, 155606 184337, 155431 184078, 155371 183817, 155489 183551, 156419 183586, 155895 183062, 155854 182943, 155681 182555, 155794 182463, 155674 182558, 155447 182898, 155373 182922, 155243 183113, 154811 182970, 154654 182885, 154462 182851, 154238 182412, 154211 182436, 153753 182332, 153652 182188, 153599 182335, 153396 182593, 152952 182610, 152755 182287, 152944 181942, 153094 181925, 153023 181892, 152959 181603, 153007 181476, 152996 181138, 152393 180428, 151673 179260, 151468 178090, 151557 177271, 151713 176247, 152014 175446, 152341 174920, 152520 174655, 152882 174271, 153451 173612, 153814 173641, 153959 173781, 154391 173562, 154768 173286, 154860 173238, 155279 172973, 155170 172889, 155123 172737, 155135 172631, 155286 172538, 155647 172451, 155436 172058, 154877 172297, 154925 172686, 154567 173275, 153864 173383, 153609 173397, 153358 173231, 153272 172791, 153335 172650, 153620 172297, 153259 172021, 153320 171318, 153734 171145, 153674 170533, 154012 170321, 154142 170326, 153723 169646, 153588 169279, 153714 168842, 154461 167907, 155162 167752, 155713 168256, 155857 168978, 155947 169244, 155891 169516, 155777 169916, 155706 170004, 154810 170437, 155426 170806, 155632 170892, 155952 170853, 156112 170858, 156302 170657, 156429 170093, 156351 168670, 156091 168535, 155962 168202, 155900 167615, 156292 167166, 156871 167194, 156949 167259, 157471 166895, 157715 166963, 158226 167176, 158265 167052, 158905 165983) (159084 169291, 159220 169417, 159295 169601, 159620 169849, 160050 169271, 159758 169154, 159022 168770)), ((123806 158287, 124448 159275, 124113 160713, 123585 161383, 123473 161410, 123580 161465, 123909 161335, 124694 161730, 125513 162507, 125679 162694, 125629 162863, 125269 163527, 125151 163678, 125896 163724, 125026 164437, 124336 164748, 123793 164829, 123334 164925, 121425 165424, 120013 165813, 117697 166960, 117170 167309, 116776 167714, 115922 168501, 115560 169080, 114774 170755, 113959 173030, 113775 173912, 113663 175083, 113720 175503, 113799 176325, 113917 176538, 114472 178189, 114619 178432, 114998 179243, 117255 182216, 117610 182650, 117727 182833, 117908 183026, 118301 183541, 118325 183663, 118604 184464, 118632 184620, 118190 184683, 117412 183986, 117111 184258, 116895 184226, 116771 184261, 117107 184658, 116722 186507, 115917 187105, 114566 186686, 114071 185953, 113919 185067, 113784 184563, 113813 184539, 113481 184279, 112959 183945, 112722 183750, 112372 184037, 111629 183861, 111481 183756, 111272 183514, 111043 182881, 111028 182653, 110417 182537, 109722 182429, 109084 182247, 107881 181362, 107276 180933, 106841 180315, 106624 180465, 105831 180947, 105637 181030, 104354 180063, 104193 178937, 104137 178434, 103352 178327, 102728 178213, 102296 177478, 102378 177987, 102137 178403, 100715 179315, 100211 179294, 99949 178851, 100050 177177, 100312 176725, 102078 176120, 102186 176790, 102222 175986, 102264 175888, 102132 175936, 101572 175669, 101173 175343, 101403 174377, 101873 174181, 100917 172405, 100974 172185, 102876 172553, 103080 172557, 103068 172606, 103709 172740, 104731 171594, 106206 169152, 106357 168845, 106806 166457, 106868 165216, 106852 164568, 106754 163839, 106631 163737, 106265 163655, 106151 163969, 105751 163814, 105039 163214, 105119 163024, 104583 162708, 104359 162613, 104386 162506, 104546 162312, 104596 162278, 104786 162086, 106947 161481, 107392 160131, 108263 159681, 109582 160366, 109920 160533, 110558 159343, 112014 159185, 112704 160425, 113133 160088, 113800 159951, 116580 159332, 117519 160168, 117950 161360, 117718 162149, 117616 162398, 118000 162463, 117926 162376, 119159 161490, 119528 161646, 120271 162058, 120313 162152, 119775 162510, 120580 162324, 120723 162439, 120903 162747, 121535 162059, 121668 161875, 121190 161950, 120945 161473, 120658 160962, 120473 160765, 120406 160383, 120471 160183, 121935 158087) (106651 178570, 106683 178839, 107036 178472, 107323 178424, 106690 178489, 106582 178402)), ((171881 166614, 171984 167370, 172340 167245, 172844 167466, 172870 167582, 173039 167453, 173150 167426, 173275 168175, 173121 169321, 173031 169687, 172928 169881, 172499 170367, 171975 171216, 172773 171191, 172402 172240, 172415 172422, 172684 172460, 173057 172632, 173571 173137, 173795 173778, 173773 174488, 173628 174868, 173329 175261, 172995 175426, 173231 175883, 173441 176142, 174291 176765, 173591 177232, 173434 177274, 173481 177532, 173949 177485, 174159 177515, 174905 177783, 175331 177997, 175894 178749, 176327 179266, 176593 179884, 176563 179897, 176201 179790, 176275 180391, 176045 180530, 175607 180774, 175583 180821, 175916 181019, 176105 181025, 176339 181408, 176329 181694, 175424 183173, 174481 183653, 174396 183652, 174150 183703, 173383 183240, 173140 183081, 172673 183619, 172113 183509, 171873 183655, 171555 183743, 171440 183661, 171565 184023, 171349 184508, 170755 184618, 169683 184002, 169551 183835, 169555 183608, 169746 182718, 169592 182772, 169332 182717, 169017 181376, 169096 181275, 169047 181245, 168855 180931, 168840 180679, 168906 180183, 168757 179790, 168460 179308, 168201 178972, 168127 178761, 167945 178733, 167589 178636, 167507 178224, 167837 177887, 168129 177993, 168482 178249, 168976 177932, 168935 177585, 168957 177362, 169186 176994, 168066 177117, 167811 177167, 167855 177323, 167854 177773, 167723 177715, 167608 177881, 167272 178206, 166928 178329, 166012 177922, 165897 177582, 165943 177489, 165874 177354, 165893 177054, 166037 176918, 166288 177093, 166540 177008, 166660 176930, 166563 176382, 166969 175912, 167018 176004, 167141 175864, 167196 175660, 167028 175631, 167013 175466, 167146 175305, 166617 175004, 166417 174955, 166340 174669, 166534 174164, 166621 174121, 166507 173868, 166604 173712, 166883 173427, 166797 173429, 166339 173629, 165391 173110, 165365 173059, 165614 172365, 166370 172397, 166696 172659, 167041 172971, 166998 173280, 167473 173279, 167723 173356, 167908 173494, 167977 173715, 168156 173598, 168131 173405, 167991 173420, 167915 173269, 167709 173070, 167473 172737, 167671 172469, 167661 172430, 167462 172374, 167240 172369, 166558 172168, 166322 171164, 167108 170543, 167187 170422, 167528 170133, 167514 170071, 167483 170117, 166558 170543, 166603 169502, 167096 169707, 167451 169907, 167358 169519, 167303 169226, 167398 168677, 167790 167926, 169699 167191, 170158 167339, 170284 167405, 171321 166382, 171630 166337) (170734 182279, 170332 182481, 170683 182482, 171051 182619, 170902 182238) (173016 180413, 172822 180460, 173195 181440, 173558 180676, 173655 180573, 173069 180286) (174607 179244, 174725 179685, 175283 179382, 174742 179002) (171186 169258, 171886 169346, 172186 168744, 172190 168654)), ((106826 182956, 106268 183987, 105877 184119, 105364 183759, 105089 183143, 105167 182208, 105808 181844, 106010 181668)), ((97555 178676, 97879 180294, 99212 181309, 99610 182991, 97539 183494, 97041 183169, 96617 182629, 97178 180428, 96576 179333, 96684 178332)), ((154126 182797, 154114 182988, 153781 183301, 153622 183350, 153337 183238, 153266 182933, 153328 182793, 153560 182537, 154101 182517)), ((168309 180100, 168358 180244, 168326 180321, 168192 180349, 168054 180265, 168078 180027)), ((108442 154069, 108265 155305, 107703 156320, 105644 157530, 105732 157735, 106296 158577, 103309 158996, 102508 159167, 100911 159658, 99439 160151, 99036 160349, 97982 161111, 97853 161320, 97395 161700, 95818 164090, 95525 164753, 94706 166908, 94432 168663, 94454 169012, 94824 171035, 96271 174000, 98371 176735, 98418 176841, 98206 176916, 97929 177071, 97812 177260, 97798 177574, 97651 177821, 97263 177744, 96627 177656, 95964 177603, 95695 176934, 95049 177160, 94971 177988, 95137 179616, 95067 179731, 93898 180212, 93434 180016, 92461 178417, 92439 178226, 92302 178402, 91674 178435, 91380 178141, 91162 177471, 91228 177118, 91078 177309, 90242 177616, 89278 176558, 90758 175812, 90877 175229, 90777 174686, 90861 174184, 91157 174041, 91649 173874, 91768 174114, 92065 174491, 92083 174562, 92663 174169, 92252 173378, 91841 173443, 91104 173931, 90899 173773, 90649 173597, 89765 172883, 89771 171890, 89710 171729, 89507 171492, 88966 170699, 89171 170644, 89144 170274, 87688 168433, 87609 168258, 87517 167601, 87529 167237, 87897 166761, 88148 166637, 88593 166792, 89350 166743, 90096 167209, 90223 166975, 92316 164028, 93348 161367, 93478 161010, 93774 159467, 93552 159372, 92646 159186, 91955 158544, 91704 158394, 91669 157834, 91833 157563, 92380 157075, 92595 156986, 94395 156811, 94327 156688, 95230 156585, 95616 156557, 95633 156447, 97007 155055, 98625 155258, 98796 156414, 98662 156696, 98325 157152, 99419 157233, 99589 157357, 99725 157235, 99489 156975, 99411 156927, 99190 156219, 99297 156138, 99301 155829, 99348 155585, 99668 155385, 100296 155029, 100740 154819, 100889 154860, 101784 155556, 102251 155499, 102321 155623, 102497 155509, 102871 155508, 103617 155596, 103976 155406, 103958 155569, 104360 155269, 105053 154354, 105477 154017, 105858 153790, 107979 153689) (91263 176860, 91338 176505, 91260 176561, 91148 176347, 90794 175869) (92043 176234, 92107 176231, 92162 176330, 92099 175513)), ((167986 179623, 167846 179893, 167448 180062, 167003 179820, 167124 179353, 167441 179273)), ((149349 176284, 149398 176350, 149696 176645, 150036 177396, 150027 178219, 149704 179032, 149350 179398, 148638 179764, 147683 179815, 146797 179249, 146401 178407, 146588 176853, 147281 176094, 147428 175980, 148672 175914)), ((167109 178864, 167088 179317, 166799 179609, 166645 179608, 166464 179370, 166453 179119, 166875 178740)), ((178260 164385, 178705 164890, 178892 165577, 178889 165705, 178945 165627, 179347 165481, 180774 165643, 181060 165836, 181186 165976, 181335 166948, 180674 167673, 181281 168176, 181342 168122, 181508 167687, 181508 167591, 181639 167505, 182137 167456, 182611 167542, 182951 167841, 182972 168299, 183019 168546, 183033 169103, 183056 169171, 183130 169627, 183522 169975, 183600 170015, 183983 170453, 184055 170551, 184421 170869, 184438 171064, 184323 171330, 184001 171977, 183791 172126, 183379 172003, 183238 172402, 183432 172871, 183485 173174, 183374 173319, 183706 173467, 184023 173579, 184623 173501, 185228 174025, 185135 174278, 185159 174320, 185279 175144, 185302 175425, 184674 175953, 183824 176004, 183766 176278, 182795 176702, 183632 176940, 183811 177234, 183898 178526, 183926 179082, 183784 179331, 183509 179328, 182396 178638, 181996 178216, 182006 177900, 182033 177523, 181951 177422, 181686 177347, 181633 177251, 181261 177676, 180454 176643, 180792 176580, 180689 176538, 180693 176499, 180507 176316, 180258 175864, 179873 176120, 179652 176095, 179029 176175, 178839 176024, 178393 175322, 178488 175100, 178312 174962, 178360 174731, 178578 174797, 178637 174582, 178751 174664, 178923 174543, 178846 174147, 179117 173958, 179107 173805, 179270 173418, 179286 173281, 179204 173086, 179103 173405, 178943 173682, 178380 173851, 178102 173960, 177669 174093, 177263 173518, 177175 173286, 176989 172989, 176979 172493, 177061 172133, 177209 171797, 177814 171609, 177733 171272, 177549 170598, 177943 169849, 178191 169724, 178251 169452, 177352 169678, 177167 169338, 177114 169334, 176708 168906, 176609 169021, 176040 168826, 175873 168365, 176186 167997, 176693 168016, 176763 168131, 176927 167919, 177250 167591, 177439 167634, 178051 168070, 178054 168178, 178295 167919, 178456 167894, 178120 167469, 178198 166611, 177631 167167, 177442 167339, 177292 167198, 177023 167105, 176662 166837, 176242 166058, 176275 165891, 177048 164868, 177915 164338) (180212 172397, 180383 172546, 180465 172912, 180715 172518, 180314 172086)), ((135075 174969, 135232 175100, 135714 175448, 135769 175545, 136029 175878, 136276 176673, 136204 177314, 136157 177570, 135898 178096, 135649 178397, 135128 178796, 134474 178988, 133490 178921, 132650 178213, 132556 177965, 132328 177246, 132670 175904, 132762 175639, 133268 175162, 133508 175022, 134103 174818)), ((161813 175235, 161849 175267, 162185 175487, 162597 176037, 162786 176837, 162607 177683, 162390 178034, 161957 178435, 160978 178732, 160061 178369, 159565 177693, 159458 176223, 160031 175299, 161165 175024)), ((186306 176536, 186360 176911, 186075 177651, 185547 178054, 184724 178230, 184165 178062, 184075 177921, 184598 176142, 185126 175935, 185548 176012, 185611 175933)), ((165238 176727, 165211 176954, 165060 176991, 164958 176964, 164929 176830, 165061 176650)), ((165541 174222, 166037 174451, 166184 174553, 166265 175055, 166078 175208, 166365 175127, 166668 175306, 166659 175648, 166676 175804, 166506 176151, 166433 176202, 165790 176373, 165639 176434, 165545 176414, 165296 175951, 165308 175837, 165542 175432, 165314 175285, 165228 175252, 165165 175115, 165119 174541, 165166 174504, 164870 174456, 164821 173970, 165326 173871)), ((186722 174501, 186888 175144, 186778 175296, 186356 175668, 185594 175567, 185560 175382, 185383 174833, 185952 174343)), ((121167 171759, 121609 171832, 122400 172670, 122641 173704, 122458 174301, 122327 174643, 121999 174900, 121036 175470, 120693 175488, 119689 175116, 119451 174987, 119388 174879, 119205 174670, 119046 174365, 118912 173837, 118872 173309, 119069 172870, 119256 172415, 119581 172154, 120027 171822, 120596 171695)), ((177275 174169, 177416 174285, 177321 174533, 177092 174637, 176740 174516, 176682 174414, 176716 174251, 176936 174111)), ((153258 173597, 153008 173968, 152683 173809, 152709 173669, 152946 173374)), ((164709 173101, 164633 173299, 164442 173239, 164398 173083, 164479 172977, 164627 172975)), ((87659 149905, 87838 150844, 87900 150643, 88181 150168, 89062 149977, 89739 150532, 89782 150722, 90117 150734, 90460 151292, 91174 150987, 91608 150787, 92149 150938, 92657 151108, 93212 151560, 93968 153356, 93910 153799, 93690 154157, 93588 154130, 93219 154154, 93433 154377, 93491 154505, 93793 154631, 93949 154860, 93851 155369, 93657 155797, 92333 155805, 90703 155971, 88983 156251, 88134 156452, 85963 157365, 84586 158486, 83416 160645, 83113 162532, 83058 163003, 83210 164061, 83451 165532, 83666 166336, 85308 169959, 85243 170060, 84958 170271, 84434 170617, 84305 170609, 84207 170441, 84211 170553, 84418 171338, 84347 171733, 83338 173015, 82460 172965, 81598 171994, 81360 171066, 81279 170147, 81321 169756, 81227 169855, 81092 169801, 80723 169174, 79856 170096, 79502 169076, 79727 168775, 79755 168691, 79873 168582, 79859 168505, 79415 168135, 79140 167971, 78862 167784, 78691 167229, 78637 167145, 78451 167324, 78194 167508, 77869 167682, 77094 166947, 76786 166620, 77010 165024, 77209 164838, 76537 163821, 77599 163683, 77618 163409, 77672 163192, 77638 163087, 78084 162866, 78861 163497, 78914 162751, 78690 162503, 78606 162587, 78451 162633, 78269 162483, 78179 162303, 78146 162046, 77965 161721, 77362 161788, 77017 161450, 77135 161310, 77276 161059, 77328 161039, 76931 160765, 76977 160367, 77145 160302, 76918 159309, 76932 158916, 77107 157817, 77916 156167, 78326 155614, 78607 155017, 79741 153812, 79994 153660, 81106 153255, 82052 153079, 82218 152923, 82391 152878, 82852 152916, 82925 153142, 83042 152849, 83220 152756, 82911 152716, 82808 152581, 82781 152367, 82918 152181, 83109 152158, 83375 152354, 83407 152495, 83474 152361, 83838 151955, 83851 151962, 84332 151181, 84965 151228, 85227 150320, 86169 149605, 86684 149468) (84655 153555, 85262 153594, 85275 153488, 84726 153409) (87379 151637, 86847 152026, 86416 152269, 85911 152265, 86043 152545, 86048 152622, 86204 152902, 86267 152917, 86579 153166, 87051 152879, 87746 152037, 88003 151647, 87691 151360)), ((176311 172505, 176290 172816, 176014 172963, 175901 172799, 175982 172597, 176211 172475)), ((80664 171473, 80167 172305, 79412 172061, 79037 171624, 79055 171206, 80242 170463)), ((187933 161034, 188036 161336, 187993 161722, 187725 161915, 188341 162067, 188973 162507, 189098 162671, 189128 162895, 189187 162902, 189520 162778, 189918 162451, 190168 162656, 190260 162616, 190598 162794, 190697 163133, 191085 163559, 191488 164276, 191871 164523, 192120 165106, 191900 165380, 191979 165987, 191995 166263, 191940 166643, 192337 167225, 191651 168828, 191724 168864, 191674 168823, 192363 168258, 192719 168200, 192825 167645, 193114 167522, 193584 167559, 193876 167862, 193815 168190, 193378 168534, 194170 169184, 194202 169289, 194151 169349, 193904 169408, 192262 169201, 192588 169883, 192438 170312, 191469 171153, 190645 171319, 190170 171223, 189540 170470, 189473 170050, 189536 169736, 189804 169596, 190077 169411, 189592 169064, 189349 168984, 189247 168824, 189144 168877, 189419 169514, 189461 169712, 188806 170339, 188751 170338, 188754 170383, 188629 170637, 188064 170766, 187613 170388, 187669 169644, 187704 169571, 187621 169311, 188130 168685, 188079 168472, 188240 168464, 188231 168438, 187825 168279, 187763 168130, 187551 167805, 187552 167548, 187606 167490, 187015 167271, 187536 167653, 187347 169030, 186795 169174, 186190 169032, 185578 168432, 185433 168219, 185377 167928, 185391 167589, 186451 167005, 186263 166919, 185788 165929, 186034 165138, 186409 164950, 186406 164575, 186887 164381, 187289 164665, 187188 165061, 188251 165387, 188669 166201, 188519 167202, 188583 167252, 188797 167790, 188913 167738, 189094 167768, 189324 167961, 189660 167165, 189458 167009, 189380 166896, 189436 166685, 189491 166359, 188839 165835, 188302 165366, 187585 164999, 188218 164302, 186642 164006, 186558 164122, 186393 164137, 186308 164002, 186418 163858, 186625 163935, 186614 163116, 186674 162743, 186637 162689, 187036 162213, 186451 162678, 186322 162571, 186204 162134, 186791 161313, 187330 160985, 187783 160955)), ((78254 168869, 78014 169931, 77916 170047, 77869 170052, 77792 169979, 77666 169358, 78026 168855, 78233 168814)), ((101228 164615, 101381 164796, 101816 165213, 101843 165301, 102043 165701, 102139 166503, 101896 167310, 101498 167847, 101192 168098, 100690 168354, 99914 168450, 98964 168188, 98279 167360, 98233 167097, 98141 166357, 98721 165117, 98867 164872, 99447 164498, 99718 164401, 100371 164302)), ((168226 167199, 168080 167562, 167866 167584, 167739 167349, 167660 166194)), ((173068 165832, 173151 165966, 173104 166184, 172693 166426, 172536 166053, 172861 165808)), ((134593 165161, 134445 165231, 134116 165268, 134111 164846, 134527 164591)), ((170746 164740, 170794 164800, 170791 164994, 170632 165121, 170085 165057, 170229 164829, 170426 164704, 170598 164683)), ((77719 143344, 77721 143872, 76825 145101, 76680 145168, 75468 144686, 75680 145695, 76029 145989, 76032 146090, 76233 146029, 76458 146031, 76852 145806, 78066 144556, 78015 144382, 78126 144156, 78398 143849, 78811 143837, 79071 144147, 79073 144197, 79908 144380, 80227 145203, 80372 145145, 81097 144984, 81578 145197, 82461 146241, 82726 147480, 82539 148058, 81876 148480, 81288 148424, 81175 148478, 80497 148185, 80328 148307, 80490 148508, 80539 148855, 80610 149190, 80998 149206, 81263 148684, 81675 148578, 81831 148817, 82374 148858, 82781 149308, 82585 149675, 82379 150007, 82287 150003, 82105 150327, 81810 150627, 79005 150393, 76909 150545, 75844 150772, 75055 151134, 74527 151244, 73854 151626, 73293 152192, 72612 153038, 71978 154806, 71711 155659, 71690 156409, 71928 159571, 72355 161303, 71764 161947, 71391 162096, 71146 162021, 71071 161946, 70958 161443, 70876 160906, 70647 161254, 70428 161258, 70384 161533, 70471 163013, 69736 164361, 69197 164831, 68902 164758, 68220 163620, 67962 162771, 68457 161263, 68081 160905, 67568 160356, 67456 160173, 67443 159659, 67356 159592, 67264 159420, 67083 159480, 66933 159450, 66700 159333, 66236 158936, 66046 158735, 65873 158498, 65131 158870, 64295 157730, 64790 156242, 65268 155936, 64890 155039, 65147 154767, 66112 154825, 66169 154590, 66147 154423, 66571 154283, 66963 154746, 66985 154221, 67089 154034, 67206 153760, 67590 153819, 67537 154146, 67659 154321, 67857 154269, 68077 153723, 67670 153635, 67208 153722, 67179 153744, 66801 153826, 66613 153717, 66271 153148, 66507 152488, 66409 152480, 66165 152120, 66326 151673, 66107 151582, 66076 151856, 65644 151928, 65341 151621, 65446 151245, 65827 151174, 66036 151359, 65994 151218, 66090 151080, 66453 150935, 66616 151299, 66813 151153, 67045 151055, 67075 150637, 67042 150149, 67129 149917, 67175 149592, 67204 149517, 67333 149038, 67596 148589, 68044 148127, 68246 147782, 68682 147461, 69023 147228, 70562 146606, 70648 146590, 70942 146120, 71597 146243, 71717 146581, 71749 146355, 71841 146202, 72122 146084, 72400 146149, 72519 146299, 72492 146621, 72372 146733, 72522 146756, 72538 146838, 72656 146781, 73761 146870, 73949 147348, 74005 147211, 73980 146931, 74178 146748, 74275 146777, 74524 146962, 74772 146930, 74787 146497, 74174 146185, 74112 146281, 73845 146534, 73283 146657, 72927 146356, 72505 145945, 72489 145818, 72733 145382, 72841 145333, 72964 145346, 73398 145319, 73396 144740, 73691 144509, 73962 144377, 74446 144574, 74494 144726, 74936 144234, 75184 144300, 75308 144443, 75377 144285, 75692 143175, 77303 143054) (73188 148727, 73265 148673, 73508 148695, 73849 148649, 73830 148472, 73305 148461, 72960 148357) (79059 147339, 79058 147513, 79168 147561, 79280 147980, 79926 147905, 80062 147919, 79993 147601, 79949 147318, 79740 146543)), ((185075 163636, 185117 163808, 184918 163939, 184762 163807, 184897 163569)), ((88213 159493, 88616 160061, 88764 160522, 88755 161347, 88429 161998, 88032 162399, 87728 162589, 87222 162776, 86544 162763, 85756 162433, 85227 161578, 85236 160704, 86046 159432, 87099 159019)), ((193569 162119, 193474 162468, 193157 162559, 193033 162250, 193254 162011)), ((194075 155047, 194631 155139, 194984 155287, 195198 155524, 195345 155936, 195306 156096, 195219 156216, 195377 156139, 195677 155830, 195938 155520, 196192 155565, 196583 155788, 196913 156033, 197298 156290, 198034 157116, 198113 157410, 198114 157929, 198008 158060, 198079 158072, 198561 157984, 198710 158155, 198809 158472, 198960 159103, 198967 159296, 198809 159962, 198396 160066, 198436 160126, 198370 160733, 197960 161314, 197132 161761, 197035 161730, 196731 161360, 196869 160771, 197237 159902, 197112 159576, 197082 159377, 196791 158958, 196522 159066, 195599 158553, 195289 158408, 194502 158176, 194864 157592, 194806 156933, 194739 156994, 194168 156992, 193781 156967, 193298 157079, 193200 156485, 193192 156299, 192955 156044, 193332 155386, 193395 155077, 193581 155012)), ((195710 161231, 195731 161391, 195566 161458, 195430 161350, 195321 161329, 195575 161130)), ((195336 160912, 195110 161286, 194594 161323, 194377 160957, 194598 160603, 195030 160499)), ((194394 159185, 194607 159472, 194625 159902, 194391 160055, 193732 159944, 193465 159561, 193489 159228, 193772 159072)), ((113743 157076, 113809 157713, 113576 158381, 112517 158788, 112447 158533, 112033 157737, 112196 157278, 112729 156697, 113303 156619)), ((76631 152936, 76723 153620, 76610 154298, 76160 154945, 75504 155372, 74643 155481, 73584 154889, 73244 153996, 73398 153203, 74395 152142, 75437 151939)), ((102833 155210, 102314 155221, 102042 155241, 102061 154959, 102138 154520, 102923 154200)), ((100833 153494, 100861 153535, 100829 153689, 100095 154703, 99827 154773, 99621 154179, 99891 153904, 100748 153490)), ((67346 137182, 67266 137778, 67142 138267, 67361 138135, 67476 137912, 67689 137934, 68184 137723, 68474 137698, 68822 137482, 69186 136954, 69529 136721, 70724 136478, 71330 136371, 71751 136557, 71823 137007, 71491 137739, 71066 138638, 70632 138977, 69871 138960, 70599 139601, 70579 140034, 70812 140053, 71120 140148, 71213 140208, 71503 140334, 71950 141104, 71733 141472, 71523 141970, 72000 142082, 71851 141804, 72314 141202, 73199 141374, 73401 142086, 73062 142554, 72715 142612, 72552 142574, 72337 142780, 71420 143397, 71013 143279, 70489 143160, 69353 143026, 67652 142788, 67597 142843, 67474 142805, 67483 142849, 67287 142807, 65883 143046, 65573 143048, 65884 143051, 66804 144212, 66775 144881, 66564 145412, 65979 146006, 65195 146295, 64811 146274, 64137 146017, 63578 145466, 63422 144559, 63722 143851, 64525 143284, 63697 143841, 63545 144091, 63373 144607, 62766 145479, 62288 146581, 62225 146854, 62123 147122, 61661 150931, 60548 151721, 60305 151486, 60314 150909, 60339 150518, 59788 150092, 59783 150127, 59995 150705, 59808 150959, 59502 151271, 59322 151238, 57777 151130, 58946 151863, 58897 152198, 58252 152968, 57412 153269, 57266 151715, 57571 151090, 56925 150165, 56660 149723, 56813 148699, 56657 148678, 56365 148553, 56349 148471, 55977 148179, 55656 147756, 55574 147579, 55215 147703, 54735 147678, 54150 146730, 54174 146546, 54825 145399, 55568 145114, 55448 144487, 56141 144010, 56807 144194, 56861 143902, 57197 143827, 57314 144040, 57208 143806, 57524 143430, 57718 143539, 57800 143876, 57896 143832, 58612 143131, 58913 142728, 58696 142655, 58445 142868, 58131 142981, 57743 143268, 57358 143261, 56975 142694, 57344 142137, 57351 141846, 57302 141833, 57084 141466, 57394 140952, 57904 140717, 58476 140918, 58865 141112, 58932 140880, 58973 140625, 58992 140228, 59313 140009, 59386 140016, 59509 139849, 59751 139698, 59781 139627, 60080 139380, 60141 139440, 60488 139603, 60356 139946, 60065 140088, 60291 140247, 60503 139914, 60611 139683, 60243 139303, 60236 139258, 59977 139411, 59622 139215, 59528 139088, 59491 138760, 59508 138628, 59963 138438, 60059 138455, 60433 138735, 60436 138800, 60501 138721, 60583 138699, 60478 138654, 60398 138499, 60465 138112, 60535 138065, 60911 138099, 60922 138339, 61190 138475, 61570 138261, 61638 138299, 62047 138396, 62444 138270, 62023 138007, 62012 137956, 62226 137619, 62318 137534, 62654 137622, 62803 138077, 62587 138280, 62556 138346, 62438 138394, 62099 138424, 62148 138670, 62217 138918, 62157 138983, 62312 139020, 62382 138914, 62397 138721, 62763 138603, 62935 138785, 62982 138895, 62909 138995, 63128 139005, 62869 138570, 62910 138062, 62908 137661, 62991 137572, 62512 137503, 62496 137276, 62410 136939, 62796 136519, 63321 136647, 63465 137183, 63228 137471, 63349 137520, 63901 137553, 64280 138010, 64924 137707, 65023 137734, 64875 138281, 64636 138489, 64632 138545, 64420 138868, 64350 138841, 64077 139342, 64194 139668, 64743 139801, 64988 139639, 64963 139229, 64908 139082, 64937 138826, 64908 138681, 65036 138461, 65083 138419, 65266 138197, 65497 138035, 65699 138025, 66060 138235, 66935 138392, 67128 138276, 66784 138271, 66298 137847, 65839 137420, 65715 137341, 65860 137181, 65881 137015, 67241 136032, 67358 135990) (59066 147937, 59377 147992, 59281 147849, 59442 147596)), ((65755 152230, 65921 152438, 65716 152616, 65469 152620, 65185 152453, 65150 152362, 65206 152280, 65513 152178)), ((200587 148457, 201394 148832, 201726 148973, 202121 149289, 202364 149733, 202428 150030, 202185 150498, 202411 150487, 203200 150202, 203888 151425, 203894 151584, 203786 152014, 203532 152137, 202987 152338, 202640 152333, 202498 152098, 201725 151367, 202010 151075, 202121 150596, 201887 150940, 201350 151374, 200948 151260, 199958 151149, 199506 151036, 199323 151021, 199469 150607, 199376 150248, 199025 149582, 199385 149250, 199421 149230, 199559 149006, 199892 148389, 200336 148374)), ((199174 148285, 199239 148396, 199219 149069, 199020 149521, 198749 149542, 197795 149983, 197678 149586, 197191 149242, 197293 148921, 197353 148159, 198764 147989)), ((206352 143153, 206381 143494, 205794 144050, 205128 143807, 204738 143583, 204734 143146, 204832 142741, 205735 142456)), ((203891 141343, 204076 141424, 204509 141909, 204567 142026, 204297 142913, 204199 143166, 203984 143434, 203659 143425, 202797 143530, 202078 143647, 202114 143385, 202011 143213, 201375 142511, 201554 142255, 201836 141219, 202446 141055)), ((200799 141193, 201101 141962, 200740 142371, 200214 142787, 200190 142741, 199659 142527, 199472 142387, 199561 141390, 200461 141087)), ((56785 140318, 57002 140633, 56855 141002, 56452 140990, 56223 140645, 56400 140310)), ((58278 140135, 58419 140128, 58775 140608, 58705 140670, 58610 140927, 57942 140722, 57703 140309, 57986 140050)), ((72263 137832, 73157 138469, 73546 139176, 73555 139925, 73380 140236, 72537 140556, 71711 140080, 71476 139232, 71465 138578, 71480 138070, 71883 137766)), ((58676 127906, 58782 128652, 58575 129030, 58319 129439, 58028 129452, 58115 129902, 58068 130222, 57837 130392, 57818 130491, 57903 130611, 58045 130566, 58017 130478, 58169 130275, 58294 130189, 58616 129809, 58934 129962, 58975 129943, 58987 129630, 59048 128835, 59170 128748, 59981 128392, 60724 129045, 60890 129115, 61217 129381, 61240 129371, 60600 128468, 61683 128318, 61566 128864, 61420 129312, 61753 129121, 62058 129009, 62574 128972, 63433 129233, 64523 131004, 64462 131444, 64409 131609, 65564 132416, 65692 132753, 65447 133073, 64757 133295, 64932 133602, 64857 133960, 64841 134140, 64739 134184, 64913 134343, 64953 134437, 64186 134716, 62947 134776, 62648 134760, 62480 134705, 61819 134307, 60948 133968, 61110 134715, 59981 134536, 59833 134577, 59845 134890, 59723 135338, 59316 135919, 58765 136230, 58191 136347, 57535 136234, 57066 135920, 56908 135693, 56827 135759, 55850 137199, 55654 137029, 55286 136644, 55226 136516, 55010 136596, 55124 136989, 55133 137230, 54978 138151, 54872 138510, 54200 139234, 53784 139735, 53168 140144, 53189 139697, 52658 139861, 52164 139272, 52113 139256, 51981 139609, 52010 139811, 51649 140136, 51400 140173, 49752 139536, 49152 138748, 49134 138644, 49018 138359, 49444 137259, 48838 136910, 48846 136342, 48659 136126, 48510 135817, 48566 135696, 48259 135884, 47707 135743, 47496 135167, 47895 134036, 48066 133841, 48337 133798, 49186 133826, 49107 133693, 49113 133411, 50368 132871, 50508 132944, 50532 132879, 50780 132654, 51048 132589, 51523 132564, 51862 132406, 51933 132285, 52441 131834, 52628 131647, 52785 131557, 52717 130980, 53275 130804, 53621 131088, 53573 131386, 53496 131493, 53380 131799, 53753 132198, 53929 132204, 54346 132108, 54588 132206, 54749 132244, 54353 130943, 54197 131018, 53723 131133, 53761 130956, 53259 130715, 53202 130591, 53017 130280, 53250 129302, 53573 129130, 53680 129161, 53887 129003, 54054 128986, 54268 129143, 54144 129461, 54349 129759, 54840 129571, 55078 129696, 55375 129873, 55302 129928, 55428 130019, 55660 130120, 55693 130001, 55863 129829, 56039 129931, 56226 129381, 56241 129163, 56522 129031, 57073 129133, 57118 129224, 57378 129040, 57834 129350, 57813 129252, 57535 128833, 57834 127958, 57862 127827, 57932 127777) (53082 138202, 53463 138683, 53633 138357, 53212 138149) (51103 137014, 51886 137214, 52020 137303, 52197 136682, 52066 136651, 51988 136470) (49620 134754, 49556 135103, 49874 134909, 49796 134732, 49554 134408) (62760 133505, 63337 133669, 63420 133660, 62725 132884)), ((59103 139236, 59417 139747, 59406 139846, 59226 140020, 58985 140162, 58478 139954, 58529 139395, 58739 139150)), ((65191 136608, 65536 137034, 65504 137273, 65195 137509, 64852 137481, 64397 136829, 64709 136536)), ((66233 135818, 66263 136090, 65964 136366, 65644 136147, 65801 135782, 66074 135713)), ((204568 133765, 205115 134114, 205153 134965, 205113 135392, 203401 136067, 203392 135955, 202476 135285, 202527 134397, 202631 134019, 203259 133740)), ((69763 135230, 69817 135286, 69801 135366, 69586 135564, 68010 135845, 69509 135198)), ((201061 134317, 201155 134462, 201019 134700, 200842 134618, 200818 134410, 200988 134310)), ((66450 133845, 66466 134074, 66338 134190, 66092 134181, 65751 133788, 66120 133543)), ((51539 131953, 51390 132037, 51297 132018, 51238 131872, 51310 131699, 51576 131679)), ((66915 131046, 67097 131240, 67154 131427, 67121 131604, 67064 131669, 66847 131707, 66704 131561, 66629 130929)), ((52625 130299, 52546 130568, 52073 130638, 52194 130937, 51946 131585, 51643 131490, 51394 131111, 51552 130595, 52043 130626, 51701 130386, 51677 130229, 51893 129996, 52150 129935)), ((64276 129587, 63820 129497, 63751 129251, 64002 129051, 65282 128730)), ((56960 127442, 57138 127900, 56844 128160, 56778 128134, 56814 128165, 56679 128698, 56599 128875, 56126 129040, 55958 128897, 56076 129144, 55953 129478, 55624 129529, 55423 129573, 55094 129474, 55026 129406, 54747 128814, 54655 128669, 54658 128568, 55070 128240, 55189 128230, 55623 128385, 55736 128059, 55869 127966, 56422 127817, 56482 127871, 56463 127559, 56922 127423)), ((203915 126975, 204087 127786, 203074 128572, 202336 128030, 202429 127162, 202775 126934, 203557 126821)), ((54373 128134, 54327 128343, 54071 128355, 54000 128199, 54010 128084, 54151 128026)), ((51152 111683, 51417 111718, 51589 112027, 51799 112523, 51944 112496, 52297 112355, 53147 112700, 53391 113240, 53312 113740, 53390 113742, 53670 114279, 53605 114428, 53725 114340, 53899 114326, 53780 114255, 53877 113784, 53877 113538, 54122 113330, 54702 112959, 55409 113368, 55370 113796, 55716 113971, 55863 114379, 56114 114236, 56511 114414, 56552 114403, 56219 113590, 56630 113346, 56065 113441, 55446 112600, 56238 111958, 57040 112297, 57144 112842, 56988 113066, 57378 112939, 57617 113055, 58026 113204, 58214 113636, 57784 114325, 57482 114536, 57253 114631, 57442 114757, 57565 114982, 58056 115192, 58527 115785, 59279 116960, 59350 117163, 58951 118151, 58671 118440, 58290 118653, 58462 118826, 58186 118947, 58515 119008, 58640 118852, 59119 119672, 58967 119841, 59170 119719, 59363 119675, 59165 119381, 58666 118709, 58719 118459, 58830 118384, 59667 118140, 59737 118186, 59689 118442, 60184 118431, 60572 118751, 60585 119148, 60064 119689, 59949 119636, 59951 119691, 60828 119749, 61275 120107, 62517 120965, 62758 121317, 62728 121862, 62303 122490, 61551 122869, 61284 122810, 60776 122783, 60817 123313, 60832 123760, 60645 124359, 60406 124472, 60586 124753, 60783 125022, 60006 125234, 59407 125305, 58785 124785, 56256 123246, 55760 123060, 54267 122833, 54717 123249, 55018 123931, 54763 124786, 54215 125305, 53530 125467, 52442 124867, 52242 123757, 52348 123422, 52611 123155, 52272 123286, 51585 123719, 51020 124011, 50908 124028, 50741 124259, 50629 124354, 50253 124854, 49035 126539, 48602 127384, 47751 127693, 47397 127711, 47128 127695, 47077 127646, 46339 127787, 46701 125546, 46567 125593, 46010 125020, 45955 124914, 46174 123986, 46460 123793, 46667 123703, 46427 123541, 46425 123482, 46347 123443, 46532 122616, 46858 122570, 47108 122521, 47045 122464, 47064 122341, 46316 122472, 45690 121886, 45889 121332, 45457 120107, 45466 119986, 45974 119089, 46476 118852, 46265 118621, 46284 118399, 46403 118049, 46386 118023, 46245 118094, 45180 118393, 44675 118156, 44579 117705, 45045 116923, 45014 116932, 44655 116014, 44746 115751, 45290 115177, 45452 115075, 44820 114214, 45202 113070, 46501 112733, 46852 113161, 46906 113107, 46970 113154, 47579 113351, 47911 113446, 47965 113842, 48166 113374, 48326 113175, 48000 113228, 47718 112983, 47451 112622, 47747 111963, 48489 111875, 48743 112225, 48972 111824, 49083 111716, 49743 111869, 49969 111583) (48409 122600, 48324 122624, 47654 122748, 47338 122777, 47502 123168, 47804 122864, 48364 122686, 48744 122696, 48722 122569) (57951 122695, 57903 122751, 58112 122882, 58067 122534, 58034 122352) (48493 121301, 48417 121465, 48415 121933, 48553 121976, 48928 121728, 49147 121436, 48729 121124) (54925 118138, 54898 118285, 54460 118942, 54509 119258, 54884 119573, 55618 119311, 56326 119377, 56609 119307, 56945 119345, 57331 119293, 57548 119318, 57886 119012, 57384 119031, 57260 119161, 57095 118981, 56465 118759, 56139 118532, 55772 118872, 55682 118520, 55561 118503, 55319 118349, 54972 118094) (47758 118280, 47674 118233, 47822 118480, 47464 118893, 47649 119069, 48018 119340, 48258 119023, 48383 118578, 48704 118568, 48430 118459, 48173 118264, 48176 118157) (47443 115224, 47197 115404, 47115 115407, 46384 115117, 46104 115131, 46521 115254, 46591 116556, 46500 116654, 46146 116837, 46405 116838, 46436 117009, 46432 117814, 46496 117790, 46755 117326, 47019 117278, 46805 116686, 46858 116485, 47038 116290, 46914 116125, 47288 115356, 48033 115210, 48239 115203, 48358 115275, 48563 115559, 48479 115258, 48648 115157, 48108 114884, 48024 114597) (50998 115762, 51078 115727, 51707 115703, 51027 115617)), ((57869 126896, 57900 127057, 57780 127172, 57549 127127, 57577 126908, 57738 126828)), ((46488 125644, 46093 125968, 45969 125787, 46102 125552, 46429 125461)), ((45087 122615, 45140 122739, 45024 122944, 44727 122934, 44568 122742, 44645 122374, 45112 122153)), ((201341 120196, 201688 120940, 200883 121922, 200051 121567, 199946 120704, 200230 120409, 200963 120126)), ((60320 116035, 60348 116286, 60151 116446, 59779 116447, 59549 116012, 60012 115846)), ((197744 115003, 197353 115911, 196659 115820, 196402 115199, 196554 114920, 197037 114558, 197336 114532)), ((55148 110708, 55264 111219, 54792 111618, 55012 112115, 54702 112627, 54000 112714, 53812 112588, 53484 111970, 54141 111391, 54669 111536, 54242 111110, 54360 110689, 54754 110497)), ((192929 110244, 192730 111200, 192042 111253, 191667 110704, 191756 110402, 192152 109954, 192436 109866)), ((44842 110127, 45126 110772, 44655 111238, 44241 111219, 43944 110815, 44005 110438, 44152 110124)), ((49428 102630, 49804 102853, 49992 103032, 49981 103345, 49994 103879, 50069 103820, 51123 103865, 51715 104465, 51740 104737, 52199 105018, 52208 105191, 52339 104908, 52911 104872, 53269 105376, 53060 105650, 53428 105874, 53473 105744, 53708 105642, 54070 105506, 55047 105914, 55106 106028, 55166 106772, 55189 107283, 54764 108233, 54569 108391, 54444 108447, 53727 108335, 53332 108070, 53165 107784, 52325 108203, 52265 108190, 52249 108233, 52445 108598, 52426 108814, 52503 108844, 52596 109140, 52539 109304, 52173 109591, 51675 109886, 51547 109860, 51013 109546, 50796 109589, 50064 109595, 49504 110162, 49408 110211, 49006 110128, 48742 110053, 48247 109620, 48428 109363, 48359 109239, 48093 109134, 47666 108814, 47094 108878, 46932 108858, 46591 108436, 46633 108699, 46342 109023, 46379 109052, 46311 109402, 46235 109874, 45589 110280, 45040 109860, 44922 109886, 44219 109766, 44015 109274, 44268 108287, 43960 108147, 43850 108029, 43738 107546, 43613 106423, 43649 106401, 43550 106015, 43694 105801, 43976 105749, 44450 105179, 44652 105072, 45411 104923, 45262 104403, 45354 103903, 45470 103472, 45771 103350, 46379 103184, 46807 103576, 47056 103740, 47002 103783, 47037 103892, 46992 103942, 47322 103909, 47350 104080, 47514 104466, 47832 104544, 48028 104672, 48420 104647, 48558 104712, 47926 104269, 47736 104083, 47736 103708, 47719 103275, 47778 103037, 47983 102852, 48316 102749, 49103 102577) (48511 105872, 47892 105814, 47842 105898, 48349 106520, 48790 106286, 49064 106185, 49396 106434, 49191 106170, 48642 105789) (51347 106336, 51685 105895, 51549 105964, 51141 105787)), ((43434 109166, 43146 109805, 42726 110067, 42524 110033, 42209 109774, 42071 109431, 42113 108978, 42359 108626)), ((187470 106675, 187464 107206, 187100 107308, 186841 107052, 186856 106882, 187021 106600, 187164 106524)), ((43562 106464, 43192 107023, 41725 106917, 43050 106280)), ((56179 104758, 56627 105384, 56775 105976, 56685 106165, 56317 106328, 55689 106304, 54954 105308, 54683 104776, 55108 104206, 55158 104189)), ((53778 103300, 53696 103532, 53404 103598, 53747 104091, 53892 104364, 53826 104482, 53420 104785, 53126 104718, 53001 104673, 52616 104680, 52675 104307, 52761 104262, 52725 104066, 52790 103922, 53397 103595, 53241 103345, 53414 103110, 53651 103102)), ((159727 97323, 161091 99112, 161138 99300, 160980 99455, 160047 101472, 159871 101425, 157595 101654, 156772 100525, 156618 98721, 156938 97976, 157189 97448, 159607 97275)), ((152469 97104, 153905 97767, 153870 97873, 154075 100203, 152879 100955, 152368 100991, 151002 100877, 149984 100230, 149887 98302, 151514 96867)), ((145896 97388, 146431 99647, 144920 100151, 143349 99951, 142614 99482, 142499 98236, 143586 97174)), ((46501 92984, 46428 93160, 47013 93156, 47086 93426, 47224 94049, 47437 94147, 47831 93905, 48128 93988, 48379 94008, 48490 94085, 48529 94265, 49053 93974, 49680 93566, 50799 93809, 51257 94482, 51123 95098, 51199 95163, 51126 95423, 50879 95495, 50738 95291, 50371 95544, 49708 96024, 48852 95846, 48155 95103, 47606 94945, 47563 95126, 47505 95180, 46960 95291, 46914 95348, 47367 96169, 47782 96063, 48163 96570, 48820 96423, 49186 96328, 49633 96253, 49775 96179, 50399 95896, 50544 96752, 50666 96869, 51773 95903, 51843 95802, 52514 96335, 52700 96529, 52844 96541, 53077 97662, 52450 98149, 52230 98288, 51645 98503, 51450 98483, 51109 98289, 51009 98465, 50985 99173, 50910 99220, 50297 99344, 49680 99426, 48341 99277, 48200 99323, 47944 99288, 47693 99275, 47605 99091, 47575 98828, 47451 98984, 46942 98680, 46629 98463, 46413 98230, 46327 98071, 45855 97910, 44948 96670, 44933 96547, 45024 96317, 44792 96475, 44400 96611, 43657 96442, 43480 96163, 43434 95220, 43930 94229, 44166 94039, 44863 94015, 45021 94101, 45378 94399, 45298 95277, 45679 95170, 46150 94855, 46520 94892, 46704 95047, 46550 94833, 46632 94526, 46552 94575, 45764 94182, 45697 93501, 45854 93315, 45692 93206, 45616 93046, 45771 92720, 46132 92645)), ((44760 98565, 44523 98822, 44370 98837, 44291 98745, 44290 98543, 44521 98376)), ((53409 97651, 53497 97946, 53474 98137, 53350 98271, 53173 98158, 53187 97852, 53227 97573)), ((48971 92063, 49555 92376, 49613 92782, 49475 93614, 48350 93934, 47934 93508, 47637 92913, 47926 92315, 48122 92155, 48440 92040)), ((46911 85788, 47013 85995, 47348 87219, 47704 87412, 47844 87548, 48381 87711, 48514 87464, 49659 87271, 49913 87192, 50290 87032, 50649 86894, 50722 87543, 51121 87994, 51206 88053, 51225 87971, 51638 87652, 51956 87428, 52283 87023, 52700 87395, 52766 87485, 53245 87556, 53302 88332, 53453 88632, 53341 88808, 52950 89073, 52436 89358, 52091 89462, 51770 89408, 51416 89187, 51330 89003, 51321 88821, 51229 89028, 51193 89427, 51179 89850, 50945 89977, 50376 90059, 49400 90081, 48646 89922, 48302 89720, 47989 89321, 47990 89133, 47919 89172, 47586 89554, 47352 89511, 47088 89332, 46564 88915, 46446 88778, 46213 88280, 46182 88137, 46460 87778, 46377 87753, 46085 87292, 46053 86660, 46386 85883, 46743 85752)), ((50548 85205, 50713 85448, 50604 85706, 50117 85968, 49815 85886, 49568 85601, 49643 85368, 50160 85084)), ((49008 84641, 49053 85013, 48805 85326, 48364 85206, 48310 84816, 48653 84504)), ((49211 82755, 49191 83006, 48952 83090, 48843 82833, 48987 82629)), ((48523 77969, 48895 78220, 49015 78364, 49563 78596, 49729 78365, 50554 78321, 51175 78241, 51548 78125, 51905 78031, 51906 78674, 52273 79186, 52351 79254, 52382 79177, 52801 78919, 53143 78733, 53526 78348, 53904 78779, 54007 78926, 54373 79022, 54401 79735, 54525 80065, 54387 80238, 53984 80453, 53427 80686, 53084 80747, 52760 80656, 52443 80402, 52371 80190, 52383 79989, 52261 80197, 52182 80592, 52120 81024, 51863 81129, 51302 81144, 50312 81060, 49819 80893, 49512 80801, 49274 80582, 49005 80160, 49031 79954, 48949 79988, 48567 80337, 48332 80264, 48097 80067, 47608 79584, 47510 79436, 47339 78936, 47321 78776, 47665 78416, 47582 78378, 47363 77929, 47398 77348, 47774 76674, 48294 76555)), ((51956 76355, 52079 76589, 51950 76813, 51495 76997, 51230 76893, 51037 76612, 51128 76411, 51619 76207)), ((50509 75601, 50512 75943, 50260 76206, 49865 76049, 49861 75691, 50202 75443)), ((50306 69871, 51206 70401, 50984 70773, 50982 71165, 51103 70854, 51546 70292, 51909 70307, 52807 70204, 53416 70207, 53626 70174, 53571 70620, 53761 70994, 54231 71532, 53947 71951, 53916 71977, 53823 72242, 53644 72904, 53226 73014, 52867 72975, 51707 72731, 51229 72506, 50917 72145, 50788 71855, 50908 71368, 50703 71424, 50005 71872, 49073 70847, 49020 70656, 49028 70231, 49286 70023, 49725 69736, 50095 69655)), ((55556 71177, 56131 71416, 56068 71801, 56179 72534, 54895 72996, 54786 73002, 54365 72821, 54264 72717, 54138 72085, 54240 71557, 54576 71445, 55339 70858)), ((58257 63274, 58858 63668, 58786 63867, 58748 64771, 57674 64941, 57335 64985, 56907 64705, 56900 63842, 56998 63592, 57147 63573, 58181 63048)), ((54996 61855, 56569 61979, 56455 62334, 56538 62591, 56845 63098, 56964 63343, 56682 63619, 56630 63652, 56193 64551, 55688 64587, 55092 64384, 54320 64065, 53961 63811, 53676 63328, 53621 63100, 53858 62584, 54150 62118, 54568 61754)), ((53188 60896, 54066 61658, 53893 61852, 53763 62528, 53617 62540, 52739 62895, 52467 62453, 52002 61658, 52053 61148, 52927 60783, 53108 60777)), ((59912 56093, 59895 56134, 60427 57196, 59584 58121, 58985 58086, 57987 57545, 57703 57058, 58198 55975, 58704 55962)), ((72187 50456, 73380 52070, 73664 53098, 73791 53592, 73615 54190, 73475 54586, 72909 55356, 71768 55782, 70993 56504, 70166 56607, 69369 56374, 69050 55037, 68908 54569, 68538 54097, 68002 53279, 68431 52727, 68723 52377, 69154 50967, 69319 50325, 71192 50004)), ((63590 50632, 62993 52613, 62509 52671, 62140 52800, 61340 52119, 61218 51845, 60976 51445, 61527 50604, 61738 50533, 63606 50455)), ((72012 49394, 72042 49663, 71905 49790, 71641 49703, 71727 49364)), ((66693 47247, 66268 49233, 66099 49389, 65183 49338, 64609 48821, 64521 48606, 64453 47562, 66455 47192)), ((65433 42590, 64278 43177, 63534 42833, 63723 43261, 63805 43400, 63821 43970, 63810 45111, 62144 45902, 61273 46927, 59816 46319, 58710 46288, 57977 46244, 57683 45699, 57549 45508, 57464 44721, 57903 44023, 58071 42886, 58183 42534, 58821 41820, 59562 41411, 61145 41368, 63011 42136, 63454 42713, 63295 42175, 63778 41344, 65060 41269)), ((69531 44365, 69737 44420, 69578 45755, 69331 45981, 68632 46320, 68227 45773, 67773 45569, 67678 45292, 67794 44443, 69436 44057)), ((71756 41595, 72451 41761, 72403 42192, 72161 42318, 71695 42718, 71374 42386, 71224 41822, 71310 41586, 71650 41513)), ((62426 39835, 62518 39966, 61621 41300, 61426 41292, 59976 40081, 59886 39819, 59966 39640, 60468 39374, 61893 39297))) \ No newline at end of file diff --git a/stress_benchmark/resources/049.settings b/stress_benchmark/resources/049.settings new file mode 100644 index 0000000000..8a534c14c4 --- /dev/null +++ b/stress_benchmark/resources/049.settings @@ -0,0 +1,626 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=15.0 +machine_acceleration=500 +bridge_sparse_infill_max_density=0 +support_line_width=0.3 +bottom_skin_preshrink=0.8999999999999999 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.8 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=180 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=250 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=0.8999999999999999 +machine_shape=rectangular +speed_travel_layer_0=100 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=205.0 +raft_jerk=8 +support_xy_distance=0.6 +bridge_skin_speed_2=10 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.075 +bottom_skin_expand_distance=0.8999999999999999 +speed_prime_tower=15.0 +speed_support=50 +speed_roofing=15.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=tetrahedral +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.3 +raft_surface_jerk=8 +print_bed_temperature=60 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +jerk_support_roof=8 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=205.0 +layer_0_z_overlap=0.15 +support_roof_enable=True +acceleration_wall_x_roofing=500 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.12 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.12 +support_bottom_pattern=grid +bottom_thickness=0.8 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=500 +skin_material_flow=100 +default_material_bed_temperature=50 +support_xy_distance_overhang=0.3 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=5 +wall_thickness=0.6 +top_bottom_pattern_0=lines +resolution=0 +support_angle=51 +retraction_min_travel=1.5 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=50 +wipe_retraction_amount=0.8 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.2 +machine_feeder_wheel_diameter=10.0 +infill_overlap=30.0 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.03 +sub_div_rad_add=0.3 +roofing_line_width=0.3 +material_flow_layer_0=100 +support_roof_pattern=grid +cool_fan_speed_min=100 +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=8 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.25 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=11.25 +speed_ironing=10.0 +gantry_height=25 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=1.5 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=8 +support_roof_density=33.333 +support_bottom_line_width=0.3 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.12 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=True +infill_support_angle=40 +support_interface_height=0.48 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=15.0 +raft_acceleration=500 +bridge_fan_speed_3=0 +support_tree_angle_slow=34.0 +raft_speed=15.0 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_max_jerk_xy=10 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=1.800018000180002 +zig_zaggify_support=True +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +speed_print_layer_0=15 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=40 +initial_bottom_layers=4 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=10 +bridge_wall_speed=10 +support_interface_density=33.333 +line_width=0.3 +acceleration_ironing=500 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=223.475 +speed_slowdown_layers=2 +bridge_wall_min_length=2.0 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=True +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=15.0 +speed_layer_0=15 +infill=0 +bridge_skin_speed_3=10 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=3.0 +jerk_layer_0=8 +minimum_interface_area=10 +wall_0_material_flow_layer_0=100 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=1.800018000180002 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=40 +material_anti_ooze_retracted_position=-4 +layer_height=0.12 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.2 +jerk_print_layer_0=8 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.3 +retraction_retract_speed=40 +brim_line_count=27 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.6 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=8 +support_tree_tip_diameter=0.6 +bridge_skin_speed=10 +bridge_fan_speed=100 +support_xy_overrides_z=xy_overrides_z +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=skirt +min_odd_wall_line_width=0.34 +skirt_line_count=3 +support_tree_angle=51 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=False +acceleration_wall_0=500 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=True +cool_min_temperature=205.0 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.3 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.0 +support_bottom_height=0.48 +machine_depth=235 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=15.0 +z_seam_x=117.5 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=235 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=235 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=3.0 +infill_sparse_thickness=0.12 +prime_tower_brim_enable=False +ironing_monotonic=False +small_skin_width=0.6 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=500 +center_object=False +skirt_height=3 +cool_fan_speed_0=20.0 +wall_line_count=3 +jerk_wall_0=8 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=20 +support_bottom_stair_step_height=0 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=500 +machine_max_acceleration_x=500 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=8 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=500 +draft_shield_dist=10 +raft_surface_acceleration=500 +switch_extruder_retraction_speeds=20 +support_pattern=cross +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=8 +retraction_hop=0.2 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=15.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=True +min_skin_width_for_expansion=2.9391523179536474e-17 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.04 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.24 +support_bottom_distance=0 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=buildplate +cool_lift_head=False +raft_interface_line_width=0.6 +support_type=buildplate +support_zag_skip_count=13 +retraction_combing=all +raft_interface_line_spacing=0.8 +draft_shield_enabled=False +material_break_preparation_temperature=205.0 +material_alternate_walls=False +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=50.0 +raft_surface_thickness=0.12 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=4 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=15.0 +infill_line_width=0.3 +wall_line_width_0=0.3 +support_extruder_nr_layer_0=0 +retraction_count_max=100 +jerk_infill=8 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.3 +material_print_temperature=205.0 +acceleration_prime_tower=500 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=8 +support_brim_enable=True +support_bottom_density=33.333 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.3 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=500 +wall_line_width_x=0.3 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.44 +travel_retract_before_outer_wall=True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=True +jerk_enabled=False +speed_wall_0_roofing=15.0 +skin_preshrink=0.8999999999999999 +layer_height_0=0.2 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=10 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=150.0 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=8 +jerk_travel_enabled=True +jerk_wall_x=8 +machine_always_write_active_tool=False +retraction_amount=0.8 +machine_minimum_feedrate=0.0 +acceleration_print=500 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=40 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=500 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=8 +infill_offset_x=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=15.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=15.0 +support_offset=0.0 +wall_overhang_speed_factor=100 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=0.8 +machine_max_feedrate_y=500 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=30.0 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=5 +raft_interface_thickness=0.18 +retraction_prime_speed=40 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=10 +raft_surface_line_width=0.3 +jerk_support_interface=8 +support_tree_bp_diameter=7.5 +support_interface_pattern=grid +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=500 +material_no_load_move_factor=0.940860215 +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +machine_max_feedrate_z=10 +speed=0 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=8 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.3 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=1.5 +support_z_distance=0.24 +raft_base_speed=11.25 +jerk_travel_layer_0=8 +speed_support_interface=15.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.28500000000000003 +material_flush_purge_speed=0.5 +acceleration_travel=500 +support_roof_height=0.48 +wall_0_inset=0.05000000000000002 +interlocking_depth=2 +prime_tower_position_y=203.475 +jerk_support=8 +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=0.8999999999999999 +acceleration_wall_0_roofing=500 +machine_max_feedrate_x=500 +material_final_print_temperature=205.0 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=40 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.09 +wall_0_material_flow_roofing=100 +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=15.0 +support_roof_wall_count=0 +skirt_gap=10.0 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=0.8999999999999999 +support_infill_rate=20 +meshfix_maximum_resolution=0.25 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=500 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=30 +jerk_travel=8 +retract_at_layer_change=True +support_roof_line_width=0.3 +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=True +skirt_brim_line_width=0.3 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.04 +acceleration_support_roof=500 +support_brim_line_count=13 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=50 +wall_0_extruder_nr=-1 +retraction_hop_enabled=True +prime_tower_wipe_enabled=True +acceleration_support_bottom=500 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=500 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/049.wkt b/stress_benchmark/resources/049.wkt new file mode 100644 index 0000000000..325b9054ab --- /dev/null +++ b/stress_benchmark/resources/049.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((117969 83306, 118266 83540, 118465 83841, 118650 84265, 118676 84997, 118624 85323, 118493 85579, 118125 86063, 117970 86152, 117516 86283, 117283 86263, 117053 86172, 116697 85881, 116522 85610, 116327 85193, 116343 84382, 116448 84020, 116614 83691, 117008 83299, 117252 83184, 117540 83126))) \ No newline at end of file diff --git a/stress_benchmark/resources/050.settings b/stress_benchmark/resources/050.settings new file mode 100644 index 0000000000..bee0e8f4ce --- /dev/null +++ b/stress_benchmark/resources/050.settings @@ -0,0 +1,628 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=45 +machine_acceleration=4000 +bridge_sparse_infill_max_density=0 +support_line_width=0.8 +bottom_skin_preshrink=2.4000000000000004 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=concentric +material_standby_temperature=175 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=265 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=2.4000000000000004 +machine_shape=rectangular +speed_travel_layer_0=60.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=230 +raft_jerk=20 +support_xy_distance=0.7 +bridge_skin_speed_2=20.0 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.2 +bottom_skin_expand_distance=2.4000000000000004 +speed_prime_tower=80 +speed_support=80 +speed_roofing=40.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=concentric +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.8 +raft_surface_jerk=20 +print_bed_temperature=60 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +jerk_support_roof=20 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=220 +layer_0_z_overlap=0.15 +support_roof_enable=False +acceleration_wall_x_roofing=1000 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.2 +support_bottom_pattern=concentric +bottom_thickness=0 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=1000 +skin_material_flow=100 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=0.8 +top_bottom_pattern_0=lines +resolution=0 +support_angle=50 +retraction_min_travel=1.6 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=8 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=2 +machine_feeder_wheel_diameter=10.0 +infill_overlap=0 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.8 +roofing_line_width=0.8 +material_flow_layer_0=100 +support_roof_pattern=concentric +cool_fan_speed_min=100 +retraction_combing_max_distance=0 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=20 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.75 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=30.0 +speed_ironing=26.666666666666668 +gantry_height=0 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=5.333333333333333 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=20 +support_roof_density=100 +support_bottom_line_width=0.8 +initial_layer_line_width_factor=130 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.2 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=1000 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=True +infill_support_angle=40 +support_interface_height=1 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=40.0 +raft_acceleration=1000 +bridge_fan_speed_3=0 +support_tree_angle_slow=33.333333333333336 +raft_speed=40.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=20.0 +roofing_material_flow=100 +acceleration_infill=1000 +machine_extruder_count=1 +support_roof_line_distance=0.8 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +speed_print_layer_0=40 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=50 +initial_bottom_layers=0 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=1.0 +bridge_wall_speed=22.5 +support_interface_density=100 +line_width=0.8 +acceleration_ironing=1000 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=244.135 +speed_slowdown_layers=2 +bridge_wall_min_length=2.1 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=160 +speed_layer_0=40.0 +infill=0 +bridge_skin_speed_3=20.0 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=0 +jerk_layer_0=20 +minimum_interface_area=1.0 +wall_0_material_flow_layer_0=100 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.8 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=50 +material_anti_ooze_retracted_position=-4 +layer_height=0.2 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=2 +jerk_print_layer_0=20 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.8 +retraction_retract_speed=50 +brim_line_count=8 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=1.6 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=20 +support_tree_tip_diameter=1.6 +bridge_skin_speed=20.0 +bridge_fan_speed=100 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=skirt +min_odd_wall_line_width=0.34 +skirt_line_count=1 +support_tree_angle=50 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=1000 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=True +cool_min_temperature=230 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.8 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.2 +support_bottom_height=1 +machine_depth=255 +acceleration_skirt_brim=1000 +skin_overlap=5 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=53.333333333333336 +z_seam_x=130 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=250 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=0 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=0 +infill_sparse_thickness=0.2 +prime_tower_brim_enable=False +ironing_monotonic=False +small_skin_width=1.6 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=True +acceleration_print_layer_0=1000 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_wall_0=20 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=0 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=5000.0 +machine_max_acceleration_x=9000 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=20 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=1000 +draft_shield_dist=10 +raft_surface_acceleration=1000 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=20 +retraction_hop=2 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=53.333333333333336 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=0.0 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.1 +support_bottom_distance=0.1 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=graceful +cool_lift_head=False +raft_interface_line_width=1.6 +support_type=everywhere +support_zag_skip_count=4 +retraction_combing=no_outer_surfaces +raft_interface_line_spacing=1.8 +draft_shield_enabled=False +material_break_preparation_temperature=230 +material_alternate_walls=False +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=80 +raft_surface_thickness=0.2 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=0 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=160 +infill_line_width=0.8 +wall_line_width_0=0.8 +support_extruder_nr_layer_0=0 +retraction_count_max=90 +jerk_infill=20 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.8 +material_print_temperature=230 +acceleration_prime_tower=1000 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=20 +support_brim_enable=True +support_bottom_density=100 +brim_width=8.0 +ironing_only_highest_layer=True +wall_transition_length=0.8 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=1000 +wall_line_width_x=0.8 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.2 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=45 +skin_preshrink=2.4000000000000004 +layer_height_0=0.2 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=5 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=120 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=20 +jerk_travel_enabled=True +jerk_wall_x=20 +machine_always_write_active_tool=False +retraction_amount=8 +machine_minimum_feedrate=0.0 +acceleration_print=1000 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=50 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=1000 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=back +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=20 +infill_offset_x=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=40.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=80 +quality_name=Fine +support_offset=1.2000000000000002 +wall_overhang_speed_factor=100 +top_layers=0 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5.0 +raft_base_line_width=0.8 +machine_max_feedrate_y=299792458000 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=80 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.30000000000000004 +retraction_prime_speed=50 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=1.0 +raft_surface_line_width=0.8 +jerk_support_interface=20 +support_tree_bp_diameter=7.5 +support_interface_pattern=concentric +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=1000 +material_no_load_move_factor=0.940860215 +travel_speed=120 +z_seam_corner=z_seam_corner_inner +machine_max_feedrate_z=299792458000 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.8 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=3.12 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=5.333333333333333 +support_z_distance=0.1 +raft_base_speed=30.0 +jerk_travel_layer_0=30.0 +speed_support_interface=53.333333333333336 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.05999999999999994 +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=1 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=229.135 +jerk_support=20 +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=2.4000000000000004 +acceleration_wall_0_roofing=1000 +machine_max_feedrate_x=299792458000 +material_final_print_temperature=215 +acceleration_roofing=1000 +raft_interface_jerk=20 +retraction_speed=50 +prime_tower_flow=100 +acceleration_wall_x=1000 +infill_overlap_mm=0 +wall_0_material_flow_roofing=100 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=40.0 +support_roof_wall_count=0 +skirt_gap=3 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=8 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=2.4000000000000004 +support_infill_rate=15 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=1000 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=10 +jerk_travel=30 +retract_at_layer_change=False +support_roof_line_width=0.8 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.8 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=1000 +support_brim_line_count=3 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=80 +wall_0_extruder_nr=-1 +retraction_hop_enabled=True +prime_tower_wipe_enabled=True +acceleration_support_bottom=1000 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=1000 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/050.wkt b/stress_benchmark/resources/050.wkt new file mode 100644 index 0000000000..627bcdec01 --- /dev/null +++ b/stress_benchmark/resources/050.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((71733 150298, 71941 150653, 71944 151277, 71703 151857, 71377 152111, 71223 152111, 70730 151719, 70575 151264, 70692 150684, 71081 150281, 71517 150214)), ((74068 132097, 76884 132875, 79516 134287, 81338 135740, 82072 136518, 82654 137208, 83350 138173, 84021 139298, 84573 140346, 85012 141235, 85750 142918, 86335 144785, 86567 146606, 86555 148197, 86485 149260, 86349 150728, 86045 152292, 85485 153850, 84781 155382, 84237 156492, 83040 158241, 81051 160435, 78859 162178, 77305 163039, 76276 163332, 74820 163616, 72636 163894, 70621 163995, 69527 163958, 68876 163800, 67782 163395, 65854 162592, 63956 161700, 63003 161200, 62234 160651, 60723 159402, 59157 157694, 57897 155680, 57023 153783, 56646 152808, 56290 151816, 56036 150769, 55937 149535, 55921 148094, 55921 147198, 55941 146002, 56014 144787, 56156 143861, 56316 143259, 56596 142450, 57385 140631, 58608 138509, 60062 136694, 61758 135183, 63706 133964, 65919 133032, 68403 132375, 70476 132050, 71888 131929) (70185 133335, 69314 133491, 68649 133668, 67529 134020, 66279 134466, 65005 134964, 63805 135471, 62786 135948, 61775 136501, 61633 136752, 61210 137298, 60306 138396, 59841 138934, 58640 140715, 57558 143204, 57016 146018, 56927 148490, 56987 149665, 57069 150730, 57260 151750, 57653 152773, 58177 153851, 58811 155108, 60601 157597, 63510 160215, 67038 162035, 70106 162891, 71536 163074, 73509 163027, 75531 162588, 76264 162329, 77190 161915, 78343 161218, 79527 160257, 80544 159274, 81193 158590, 82095 157491, 83155 155983, 83899 154634, 84182 153912, 84182 153615, 84373 153031, 84582 152479, 84929 151621, 85173 150938, 85366 150098, 85452 149072, 85473 147972, 85473 147087, 85385 145530, 85052 143770, 84362 141941, 83511 140223, 82985 139254, 82245 138066, 81236 136833, 79975 135760, 78699 134907, 77806 134370, 76347 133703, 74366 133207, 72152 133129)), ((118943 15475, 120025 15601, 120991 15889, 121532 16348, 121701 16833, 121675 17234, 121579 17448, 121382 17656, 121055 17875, 120567 18124, 119861 18429, 118966 18785, 116792 19609, 114025 20685, 111301 21871, 109036 23081, 107176 24237, 105653 25245, 102888 27218, 99289 30020, 95895 32956, 93553 35178, 92422 36342, 91304 37554, 90053 39098, 88783 40945, 87595 42843, 85814 45767, 86646 47345, 87632 49097, 88342 50324, 89785 52762, 90396 53768, 91029 54774, 91141 54900, 91513 54807, 92370 54048, 93817 52426, 95476 50430, 96827 48780, 98698 46590, 101380 43537, 102316 42449, 103582 40934, 105075 39292, 106675 37856, 107880 37215, 108550 37266, 108709 37435, 108923 37967, 109397 39281, 110034 41191, 111017 44298, 111851 46827, 112646 48804, 113272 49597, 113774 49611, 113969 49512, 114660 49264, 116444 48691, 119708 47684, 125353 45970, 127922 45243, 130836 44526, 133128 44099, 134302 43971, 136196 44061, 136282 44993, 136252 45386, 136095 46023, 135779 46814, 135283 47799, 134584 49015, 133665 50502, 132468 52353, 131426 53926, 130037 55986, 126837 60570, 123092 65630, 119661 69858, 117215 72610, 116093 73773, 115365 74545, 114608 75366, 113905 76173, 113951 76219, 114711 76347, 116463 76587, 116985 76647, 118547 76885, 121241 77363, 124564 78021, 127267 78586, 128810 78924, 130746 79491, 133715 80540, 136930 81865, 140261 83402, 143579 85088, 146751 86858, 149644 88650, 151526 89940, 153225 91229, 153875 90558, 154099 90250, 154334 89667, 154533 88750, 154691 87693, 154860 86391, 155464 83531, 156710 79047, 158375 74199, 159834 70494, 161138 67513, 163693 62319, 167168 56301, 170835 51158, 173699 47836, 174965 46589, 175663 45930, 176380 45378, 177091 45027, 177933 44755, 178849 44548, 179420 44467, 179767 44501, 179971 44601, 180135 44740, 180333 45176, 180384 45974, 180189 46957, 179882 47783, 179099 49349, 180281 51676, 180808 52569, 181682 53768, 182993 55273, 184507 56882, 186503 58963, 187689 60221, 188618 61229, 189410 62128, 190008 62854, 190515 63528, 190950 64175, 191260 64680, 191680 65403, 192514 67168, 193510 69829, 194286 72659, 194700 74779, 194819 75758, 194887 76785, 194987 78870, 195074 81459, 195121 83584, 195147 85302, 195206 88033, 195319 90386, 195513 91966, 195749 93073, 195968 93935, 196408 95463, 197035 97261, 197796 98929, 198760 100582, 200004 102334, 201598 104300, 203620 106593, 205528 108674, 207171 110440, 210056 113958, 212936 118385, 214970 122963, 216086 126755, 216352 128051, 216887 130519, 217252 132122, 217350 132513, 217469 133069, 217669 134101, 217873 135272, 218014 136161, 218183 137323, 218698 139933, 219487 142597, 220412 144422, 221158 145240, 221577 145442, 222408 145777, 222781 145777, 223834 146201, 224547 146546, 224853 146813, 225000 147264, 225000 148896, 223427 149128, 221724 149191, 218487 149206, 215042 149122, 212945 149014, 211285 148841, 208309 148383, 204068 147531, 200006 146499, 197412 145703, 195783 145093, 193463 144120, 189913 142497, 186230 140671, 183565 139257, 181547 138122, 178043 136056, 174349 133639, 171183 131214, 168840 129166, 167807 128195, 167053 127523, 166136 126756, 165169 126041, 164842 126060, 164666 126145, 164494 126339, 164302 126689, 164070 127240, 163777 128038, 163390 129163, 162642 131395, 161872 133599, 160848 136301, 159800 138749, 158679 141042, 157440 143272, 156031 145533, 154408 147921, 152981 149904, 148920 155415, 148312 156158, 147217 157407, 145901 158827, 144436 160340, 142903 161870, 141373 163338, 139924 164669, 138950 165518, 138381 165990, 137607 166599, 136384 167514, 135211 168353, 134453 168876, 133296 169626, 132583 170116, 131933 170606, 131933 170712, 132667 171422, 133489 172179, 134840 173364, 136008 174441, 137806 176161, 139761 178101, 141799 180184, 143848 182333, 145830 184472, 147715 186573, 148915 187951, 149760 188960, 151109 190618, 152400 192314, 153349 193740, 153951 194794, 154666 196222, 155033 197051, 155216 197663, 155203 198097, 154979 198389, 154535 198576, 153857 198698, 152642 198815, 151430 198850, 148904 198880, 145617 198877, 143039 198853, 133590 198718, 133754 200211, 133810 201115, 133917 203200, 134036 205812, 134185 209802, 134241 213090, 134244 217826, 134172 222649, 134034 227296, 133838 231505, 133595 235013, 133313 237554, 133156 238579, 132937 239008, 132576 239432, 132076 239574, 131789 239574, 131432 239484, 130857 239137, 130040 238424, 129125 237527, 128322 236709, 126822 235077, 124480 232393, 121897 229291, 119151 225871, 116327 222236, 113507 218489, 110771 214733, 108815 211962, 105833 207656, 105077 206592, 104530 205852, 104150 205381, 103894 205123, 103705 205004, 103518 204978, 103174 205361, 102830 205797, 102400 206373, 101897 207069, 100734 208738, 99429 210675, 97601 213328, 95539 216164, 93708 218459, 92350 220002, 91563 220837, 90553 221789, 89444 222616, 88591 222962, 88118 222901, 87959 222743, 87775 221928, 87636 221093, 87545 220408, 87429 219348, 87371 216827, 87605 212596, 88239 207200, 89021 202000, 89902 196742, 90419 193803, 90802 191730, 90972 190890, 91222 190117, 89129 190117, 88366 190095, 87623 189953, 86871 189584, 85557 188721, 84882 188224, 84107 187560, 83425 186840, 82942 186235, 82118 185108, 81601 184442, 81148 183928, 80742 183558, 80345 183305, 79917 183141, 79316 183010, 77125 182772, 72063 181944, 65631 180404, 59515 178324, 55120 176421, 52462 175055, 51432 174494, 50430 173911, 49422 173274, 48333 172538, 47091 171657, 45579 170546, 43367 168898, 41981 167661, 39643 165393, 37354 162983, 36032 161483, 35488 160777, 35079 160191, 34515 159333, 33944 158404, 33570 157755, 32939 156583, 32533 155869, 32168 155295, 31825 154847, 31472 154488, 31079 154180, 30601 153880, 29878 153485, 29391 153187, 28688 152700, 27971 152146, 27250 151532, 26606 150930, 26062 150368, 25458 149648, 25223 149198, 25058 148573, 25000 147602, 25138 146571, 25362 145812, 25775 145023, 26157 144592, 26736 144195, 27414 143837, 29003 143112, 29762 142799, 30141 142704, 30871 141626, 31944 138713, 33031 134099, 33875 129414, 34749 123655, 32967 122002, 31605 120355, 29887 117708, 28445 114747, 27600 112452, 27300 111346, 27077 110359, 26907 108877, 26832 106568, 26810 103692, 26811 100222, 26839 98334, 26912 96760, 27050 95414, 27274 94142, 27607 92795, 28085 91166, 28826 88802, 29239 87561, 29765 86101, 30354 84639, 31024 83146, 31814 81542, 32763 79744, 33942 77610, 35821 74313, 37342 71463, 39289 67505, 41092 63463, 42712 59432, 44118 55506, 45271 51775, 46139 48335, 46584 46048, 46755 44718, 46835 43017, 46814 40310, 46638 37585, 46430 35821, 46225 34800, 45866 33413, 45276 31524, 44618 29796, 44139 28742, 43830 28202, 43418 27257, 43287 26480, 43362 25908, 43490 25671, 43752 25587, 44352 25604, 44724 25696, 45230 25975, 45857 26516, 46509 27182, 47034 27734, 47921 28817, 48928 30395, 49842 32338, 50568 34239, 50892 35182, 51205 36179, 51432 37304, 51520 38728, 51535 40443, 51535 41906, 51387 44793, 50904 48476, 50024 52308, 49049 55544, 48257 57866, 47867 58950, 47452 60011, 46917 61266, 46182 62892, 45237 64919, 39641 76637, 38761 78515, 38050 80080, 37453 81462, 36883 82855, 35183 87223, 34421 89254, 33556 91688, 32866 93817, 32337 95709, 31948 97425, 31683 99031, 31527 100590, 31466 101787, 31456 102669, 31518 103987, 31703 105612, 31980 106830, 32196 107357, 32362 107461, 32578 107442, 33015 107295, 33570 107026, 34191 106662, 34828 106241, 35427 105793, 36130 105182, 38244 102320, 39719 100414, 41028 98854, 42118 97649, 43718 95959, 47710 92261, 53183 88094, 59207 84563, 64348 82158, 66321 81372, 66913 81126, 67576 80834, 68211 80518, 68283 80403, 68446 79287, 68587 78141, 68795 76201, 69143 73298, 69503 70574, 69664 69512, 69927 67572, 70020 65865, 69830 64609, 69481 63670, 69238 63150, 67036 58188, 66354 56549, 65769 54890, 65534 53722, 65668 53018, 66193 52749, 67126 52888, 68486 53403, 69862 54050, 73390 55854, 74436 53418, 75202 51752, 76357 49388, 77612 46965, 78922 44562, 80242 42259, 81527 40137, 82733 38276, 83543 37114, 84947 35265, 88618 31008, 93658 26107, 98973 22029, 103144 19474, 105424 18333, 108015 17295, 111644 16227, 115245 15597, 117779 15426) (130143 171932, 129342 172334, 128882 172586, 128293 172933, 127356 173508, 126385 174131, 125303 174855, 124692 175233, 123648 175841, 122464 176494, 121241 177142, 120072 177733, 119057 178219, 118012 178667, 117802 178667, 116080 179263, 114558 179827, 113070 180341, 110879 181032, 108582 181689, 106288 182286, 104100 182795, 102130 183190, 100481 183449, 99568 183539, 99042 183539, 98380 183613, 97691 183928, 97000 184619, 96331 185522, 95988 186029, 95566 186606, 94946 187374, 94341 188047, 93963 188422, 93677 188656, 92984 189391, 92526 190087, 92409 190446, 92228 191232, 91880 192928, 91470 195144, 91017 197744, 90550 200589, 90087 203546, 89654 206476, 89364 208552, 89147 210211, 88787 213116, 88511 215735, 88410 217513, 88421 218529, 88536 219947, 88627 220727, 88751 221215, 88938 221418, 89219 221346, 89623 221004, 90183 220402, 91170 219273, 91881 218440, 92791 217337, 93706 216180, 94670 214905, 95730 213450, 96933 211755, 98322 209755, 101496 205142, 102769 203316, 103796 201877, 104604 200787, 105221 200006, 105679 199495, 106004 199217, 106172 199132, 106301 199132, 106519 199224, 106528 199567, 106236 200273, 105779 201156, 105242 202162, 104932 202796, 104646 203476, 104652 203590, 104936 204152, 105339 204801, 112862 215160, 115122 218257, 118582 223081, 118957 223619, 120137 225198, 122043 227626, 124140 230176, 126265 232665, 128256 234905, 129952 236714, 131192 237900, 131699 238319, 131841 238271, 132072 238036, 132447 237400, 132492 236852, 132589 235360, 132665 233188, 132719 230443, 132753 227233, 132766 223670, 132762 219861, 132740 215916, 132700 211942, 132646 208051, 132576 204347, 132491 200947, 132393 197951, 132282 195475, 132161 193623, 132083 192782, 132012 192408, 132005 192018, 132097 191823, 132162 191823, 132269 192012, 132463 192523, 132683 193283, 132907 194210, 133113 195155, 133315 195986, 133549 196830, 133687 197074, 134305 197278, 136185 197503, 139616 197642, 143629 197709, 146093 197731, 149470 197738, 152182 197668, 153507 197484, 153860 197241, 153860 197043, 153696 196696, 153230 195919, 152497 194866, 151532 193582, 150371 192106, 149048 190480, 147600 188743, 146060 186939, 144465 185108, 142852 183290, 141254 181525, 139706 179858, 138246 178327, 136906 176973, 135724 175840, 134987 175175, 133850 174215, 133048 173518, 132180 172741, 131910 172435, 131432 171982, 130861 171764) (84619 84690, 82464 84923, 80882 85217, 78763 85912, 77858 86231, 77281 86448, 75484 87160, 75277 91989, 75124 94707, 74850 97688, 74429 100529, 73971 102930, 73569 104840, 72775 108161, 71649 112049, 70346 115632, 69201 118282, 68635 119465, 68150 120393, 67419 121469, 66324 122719, 65031 124048, 64247 124832, 63181 125849, 61773 127121, 60503 128184, 59762 128750, 58458 129599, 57711 129981, 57055 130149, 56216 130200, 55144 130121, 54303 129889, 53629 129435, 53140 128894, 52868 128517, 52439 127695, 52266 126968, 52266 126408, 52431 125452, 53110 124253, 54579 122778, 56471 121195, 58036 119955, 60521 117411, 63363 113496, 65528 109125, 66669 105664, 67005 103977, 67221 102061, 67529 98437, 67764 94515, 67858 92032, 67858 89693, 66972 89920, 66312 90188, 65066 90788, 63553 91610, 61871 92597, 60112 93689, 58374 94829, 56749 95961, 55682 96751, 54772 97471, 53105 98834, 50978 100641, 49006 102401, 47235 104064, 45715 105587, 44495 106918, 43625 108011, 43239 108605, 43126 108897, 43097 109151, 43154 109562, 43338 110100, 43578 110640, 43833 111154, 44293 112187, 44798 113594, 45249 115258, 45604 116859, 45820 117939, 46035 119596, 46123 121939, 45970 124720, 45683 127359, 45391 129567, 44772 133545, 43910 137771, 42901 141224, 42016 143488, 41524 144514, 41063 145388, 40480 146304, 39797 147134, 39123 147823, 38703 148221, 38116 148730, 37288 149387, 36506 149938, 36034 150230, 35699 150400, 34646 151016, 33616 151680, 32288 152622, 33622 155237, 34813 157321, 36573 159887, 38693 162422, 40650 164466, 42161 165931, 44736 168289, 47737 170723, 50669 172676, 53058 174002, 55003 174960, 58441 176529, 62678 178241, 66635 179550, 69426 180280, 70662 180531, 71548 180693, 73299 180993, 77741 181704, 80045 182056, 82149 182364, 83861 182602, 84703 182709, 85255 182761, 86057 182923, 86270 183157, 85670 183380, 84647 183518, 82403 183662, 83922 185496, 84752 186332, 85975 187353, 87256 188192, 88192 188661, 88702 188846, 89267 189024, 89842 189095, 90412 188983, 90968 188764, 91555 188497, 92667 187706, 94173 186186, 95642 184166, 97050 181695, 98374 178818, 99590 175587, 100674 172044, 101395 169197, 101936 166701, 102798 162054, 103875 155206, 104728 148431, 105162 143959, 105255 142463, 105427 140004, 102579 139671, 101500 139495, 100140 139155, 98807 138664, 97446 137991, 96004 137106, 94424 135980, 92653 134586, 91136 133318, 90073 132397, 88360 130943, 86288 129250, 84327 127727, 82868 126641, 82089 126082, 81238 125444, 80499 124789, 80011 124171, 79712 123624, 79454 123071, 79079 121771, 78560 119480, 78214 117341, 78127 116292, 78221 116046, 78507 115874, 78916 116322, 79356 117375, 79686 118537, 79837 119235, 80050 120146, 80334 121137, 80669 121971, 81106 122718, 81691 123447, 82471 124226, 83497 125125, 84483 125945, 90398 130722, 92660 132529, 94581 134044, 96166 135275, 97425 136229, 98365 136909, 98832 137229, 100504 138225, 127259 138579, 133504 138630, 139210 138653, 144297 138645, 148684 138608, 152293 138541, 155045 138446, 156404 138369, 157046 138301, 157616 138225, 157973 138131, 157997 138004, 157552 137667, 156856 137349, 155535 136900, 153893 136492, 152499 136225, 151651 136100, 150500 135987, 148268 135834, 145308 135693, 141598 135564, 137114 135445, 131832 135339, 125727 135242, 110057 135048, 107293 134996, 105341 134936, 104013 134857, 103126 134750, 102489 134609, 101204 134184, 99181 133123, 96065 130873, 92372 127517, 89000 124077, 87573 122536, 86575 121432, 85529 120217, 84736 119194, 84162 118298, 83775 117470, 83537 116642, 83415 115752, 83378 114993, 83383 113609, 83465 112860, 83662 112290, 84017 111662, 84469 111086, 85071 110455, 85886 109748, 86983 108918, 88431 107919, 90301 106694, 92661 105201, 95898 103192, 96844 102616, 97755 102020, 98337 101499, 98608 100958, 98586 100304, 98292 99436, 97749 98262, 96751 96235, 96020 94910, 94876 93038, 93607 91162, 92284 89371, 90977 87757, 89753 86408, 88682 85416, 88063 84964, 87567 84761, 86555 84665) (110240 167948, 108953 168099, 107818 168256, 105360 168633, 104300 168811, 103245 169008, 103160 169062, 102892 169709, 102677 170359, 102505 170944, 102314 171667, 101839 173238, 101031 175710, 100154 178187, 99552 179777, 99262 180469, 99059 180984, 98860 181569, 98732 182176, 98829 182280, 99439 182290, 100952 182103, 103174 181659, 105286 181162, 106584 180827, 108376 180348, 110269 179807, 111753 179316, 112914 178832, 113842 178315, 114623 177721, 115346 177008, 115914 176358, 116337 175845, 116989 174921, 117540 173873, 117734 173036, 117649 172561, 117399 172265, 116237 171412, 115152 170676, 113947 169899, 112743 169162, 111665 168539, 110523 167948) (129680 140055, 125913 140065, 123118 140084, 121060 140117, 119626 140162, 118702 140227, 118018 140337, 117643 140680, 117295 141056, 116913 141505, 116529 141983, 116175 142450, 115882 142864, 115609 143319, 115609 143449, 115771 143700, 116291 144271, 116579 144722, 117146 145725, 117808 147025, 118509 148497, 119186 150011, 119780 151439, 120232 152653, 120440 153303, 120649 154415, 120655 155038, 120465 155667, 120152 156347, 119818 157033, 118988 158405, 117394 160815, 115589 163326, 114343 164944, 112491 167167, 113355 167807, 114296 168463, 115918 169562, 116473 169956, 117251 170530, 117968 171085, 118396 171433, 119126 172096, 119406 172442, 119427 172699, 118838 173536, 118490 174124, 118333 174441, 117729 175285, 117181 175991, 116584 176718, 115122 178398, 116699 177852, 117665 177464, 118423 177090, 118600 176973, 119678 176371, 121329 175506, 122102 175116, 123644 174271, 125935 172920, 128367 171383, 130857 169717, 133323 167980, 135683 166227, 137854 164518, 139288 163318, 141682 161181, 143165 159828, 144275 158769, 145083 157920, 145659 157202, 146077 156536, 146408 155840, 146647 155239, 147003 154279, 147770 151977, 148569 149085, 149164 146183, 149508 143871, 149730 141901, 149845 141021, 149986 140052) (109923 143804, 108894 143896, 107755 144014, 106655 144158, 106559 144219, 106419 144633, 106352 145235, 106352 145696, 106299 146477, 106154 148097, 105935 150161, 105654 152526, 105331 155056, 104985 157612, 104629 160055, 104372 161701, 103496 167049, 103428 167556, 103589 167626, 103909 167619, 104370 167535, 105014 167438, 107234 167153, 108784 166923, 110149 166587, 111127 166089, 111816 165525, 112289 165065, 113034 164266, 114147 162978, 115300 161545, 116428 160054, 117467 158596, 118349 157259, 119010 156132, 119317 155517, 119451 155095, 119424 154400, 119159 153110, 118644 151555, 117936 149854, 117090 148137, 116165 146523, 115214 145134, 114547 144332, 113660 143511) (155876 139525, 153993 139650, 152685 139775, 151252 139979, 150498 144680, 150134 146690, 149736 148685, 149345 150441, 149106 151405, 148551 153376, 148379 154060, 148427 154060, 148885 153500, 149365 152889, 150175 151826, 150857 150868, 152040 149141, 153366 147141, 154718 145057, 155976 143070, 157021 141369, 157736 140137, 158001 139708, 158001 139545, 157383 139487) (36659 107665, 36029 107814, 35526 107948, 34658 108248, 33802 108710, 33152 109335, 32724 109980, 32432 110529, 32140 111617, 32079 113146, 32397 114534, 32847 115336, 33289 115647, 33473 115607, 33659 115371, 33990 114721, 34402 114220, 35039 113905, 35797 113965, 36471 114263, 37059 114658, 37961 115821, 38809 118111, 39240 121363, 39313 124601, 39255 126505, 39092 128984, 38723 131954, 38139 134802, 37537 137012, 37108 138352, 36338 140142, 35108 141783, 33340 142912, 31411 143604, 30413 143871, 29400 144174, 28464 144520, 27800 144880, 27392 145196, 26993 145580, 26333 146555, 26039 147848, 26386 149179, 27080 150230, 27559 150727, 28188 151270, 29173 152024, 30069 152608, 30491 152842, 30690 152842, 30862 152606, 31119 152149, 31246 151845, 31582 151309, 32227 150684, 33182 150110, 34188 149661, 35132 149289, 36810 148236, 38842 146325, 40525 143903, 41526 141805, 42088 140108, 42875 137144, 43742 132807, 44339 128238, 44604 124766, 44668 122673, 44659 119865, 44425 116992, 43883 114631, 43244 112958, 42767 111988, 42021 110727, 41003 109443, 39886 108529, 38951 108048, 38431 107874, 37852 107694, 37267 107605) (178893 45646, 178348 45863, 177360 46464, 176179 47391, 174872 48575, 173506 49955, 172147 51463, 170863 53037, 169991 54209, 169035 55633, 167131 58796, 164626 63451, 162281 68378, 160178 73377, 158393 78252, 157005 82802, 156093 86828, 155751 89306, 155687 92617, 157233 94086, 157755 94642, 158440 95437, 159072 96246, 159618 97018, 160044 97706, 160316 98258, 160402 98624, 160301 98757, 160224 98757, 159721 98347, 159208 97905, 158610 97368, 157691 96504, 154759 94098, 150208 90768, 145477 87738, 142215 85895, 138461 84111, 136853 83375, 136050 83045, 135831 83017, 135831 83072, 135966 83233, 136338 83752, 137391 85161, 138216 86240, 140050 88921, 142180 92670, 144169 97061, 145748 101155, 146844 104269, 147328 105686, 147720 106907, 148051 108058, 148357 109260, 148670 110640, 149023 112319, 149667 115491, 150270 118705, 150807 122279, 151135 125763, 151293 128769, 151349 130483, 151436 132620, 151547 134142, 151720 134763, 151931 134901, 155080 135442, 155819 135595, 156801 135838, 157664 136097, 158143 136273, 159438 136933, 160438 133718, 162375 127630, 162985 125418, 163784 122127, 164414 119046, 164701 117315, 164772 116463, 164874 115642, 165038 114965, 165253 114660, 165475 114658, 165614 114745, 165725 115556, 165797 117416, 165741 119655, 165628 121162, 165335 123218, 166454 124685, 166836 125126, 167451 125788, 168097 126431, 168543 126840, 170201 128242, 172744 130441, 175495 132462, 180229 135527, 185726 138675, 190131 140968, 193386 142534, 198862 144706, 206105 146819, 213295 148010, 218606 148318, 220606 148254, 222172 148173, 223074 148107, 223349 148046, 223647 147900, 223584 147663, 223464 147512, 223124 147332, 222133 147048, 220224 146676, 217849 146272, 216375 146032, 214341 145652, 211593 145051, 208526 144269, 205767 143506, 203462 142842, 197243 140573, 192024 137952, 191135 137372, 190283 136839, 185921 134175, 183977 132946, 181809 131404, 179597 129569, 177535 127700, 176474 126713, 175352 125619, 173758 123991, 172163 122277, 170650 120577, 169305 118989, 168210 117608, 167451 116532, 167153 116038, 167072 115670, 166741 114822, 166413 114061, 165795 112736, 165127 111151, 164259 108804, 163496 106397, 163030 104692, 162707 103251, 162170 100642, 161759 97953, 161575 95209, 161534 92479, 161534 90643, 161591 87860, 161811 84934, 162263 82159, 162817 79712, 163169 78311, 163757 76577, 164979 73365, 166536 69597, 168282 65602, 170069 61709, 171749 58246, 173176 55542, 173902 54298, 174439 53633, 175123 52720, 176060 51381, 176960 50003, 177772 48673, 178440 47484, 178916 46523, 179146 45880, 179093 45646) (169208 116463, 169582 117028, 170607 118345, 172132 120077, 174014 122070, 176102 124171, 178253 126227, 180316 128088, 181677 129237, 182643 129989, 184178 131106, 186704 132838, 189616 134730, 192011 136226, 193315 137019, 194913 137827, 197847 139172, 201072 140515, 203296 141360, 204772 141859, 206968 142533, 210260 143454, 213440 144253, 215382 144686, 217899 145133, 218729 145258, 219032 145233, 219110 145162, 219098 145044, 218817 144375, 218235 142843, 217604 140798, 217084 138520, 216721 136473, 216496 135011, 216090 132687, 215495 129653, 214895 126988, 214508 125488, 213768 123095, 211770 123315, 210936 123361, 209306 123422, 207343 123459, 205784 123465, 203889 123457, 199764 123279, 194460 122718, 188772 121701, 183775 120565, 176535 118727, 174633 118225, 173200 117825, 172140 117498, 171358 117218, 170762 116957, 170110 116602, 169512 116316, 169208 116273) (109542 139727, 108355 139759, 107781 139790, 106596 139954, 106596 142684, 110292 142524, 111296 142465, 112487 142369, 113750 142218, 114229 141977, 114655 141676, 115292 141160, 116706 139809, 112275 139727, 111041 139715) (35360 128458, 34735 132197, 34335 134199, 33662 137183, 32965 139885, 32544 141313, 32319 141955, 32382 142035, 32643 141946, 33294 141618, 33988 141166, 34560 140692, 34829 140394, 35291 139472, 36026 137515, 36755 134971, 37262 132793, 37693 130603, 37925 129348, 38135 128083, 38135 127831, 37929 127420, 37527 126836, 37337 126616, 36840 125956, 36430 125331, 36041 124533) (119874 88611, 119167 89039, 117361 90214, 116413 90848, 114958 91850, 113494 92888, 111852 94095, 110797 94856, 109044 96093, 107162 97388, 105827 98291, 103776 99642, 102392 100582, 101375 101297, 100937 101619, 100802 101747, 100130 102218, 99225 102735, 99043 102825, 97559 103648, 96689 104155, 90350 107996, 88783 109006, 87147 110177, 85995 111176, 85470 111762, 85251 112254, 85417 112381, 85994 112391, 88247 112210, 91595 111844, 95784 111186, 100347 110204, 104544 109145, 106203 108698, 107000 108494, 107882 108287, 108923 108082, 109351 108097, 109422 108181, 109268 108339, 108684 108681, 107298 109156, 105960 109578, 104378 110052, 102645 110551, 100854 111045, 99095 111510, 97089 112003, 95966 112227, 94060 112556, 91991 112862, 90501 113052, 88218 113309, 86694 113499, 85199 113716, 84981 113804, 84715 114024, 84720 114383, 85108 114853, 85893 115440, 87086 116152, 88700 116999, 90749 117988, 92617 118846, 93695 119325, 95061 119890, 97111 120686, 99296 121481, 101524 122243, 103701 122941, 105732 123545, 107523 124020, 108832 124322, 110373 124531, 115286 125160, 121965 125995, 132050 127230, 134528 127519, 134613 127706, 134613 127803, 134344 127892, 133577 127931, 132370 127899, 130785 127802, 128878 127647, 126711 127440, 124342 127191, 121828 126903, 119230 126585, 116609 126243, 114022 125887, 111527 125519, 109186 125149, 107057 124784, 105199 124430, 104051 124186, 102779 123881, 100122 123152, 96947 122072, 93681 120683, 90805 119291, 89420 118587, 88102 117941, 86688 117282, 85743 116893, 85400 116834, 85546 117282, 85874 118028, 86288 118594, 87099 119616, 88176 120892, 89425 122313, 90749 123775, 92052 125171, 93241 126392, 93968 127105, 96232 129159, 97820 130560, 99071 131601, 100078 132344, 100929 132851, 101714 133183, 102526 133403, 103617 133601, 105482 133692, 107430 133759, 112788 133897, 119553 134026, 139231 134327, 143384 134400, 145134 134470, 148378 134570, 145571 133067, 143989 132132, 141702 130646, 139452 129026, 137928 127828, 137087 127108, 136053 126186, 134488 124729, 132818 123114, 131119 121418, 129467 119718, 127939 118093, 126607 116618, 125808 115689, 125108 114817, 123833 113109, 122571 111113, 121555 109011, 120805 107082, 120441 106035, 120053 104834, 119766 103559, 119630 102015, 119570 100211, 119541 98987, 119525 97118, 119611 95267, 119872 93443, 120232 91635, 120415 90778, 120573 89636, 120560 88848, 120456 88613, 120359 88521, 120211 88504) (96982 76766, 94112 77174, 91138 77728, 88466 78251, 85125 78878, 84798 78931, 84243 79067, 83858 79260, 83847 79464, 84129 79626, 84373 79695, 84945 80089, 85433 80479, 85936 80923, 87105 82019, 90516 81295, 93070 80884, 95614 80607, 98970 80436, 101870 82140, 102735 82684, 103961 83511, 105109 84348, 105811 84897, 107887 86672, 107642 95541, 109525 94250, 111772 92651, 115001 90253, 115674 89777, 116428 89265, 117169 88785, 117641 88494, 120249 86980, 120654 86865, 120988 86893, 121508 87080, 121794 87246, 122077 87517, 122257 87872, 122340 88336, 122323 88930, 122210 89677, 122002 90597, 121779 91438, 121583 92128, 121252 93370, 121030 94695, 120973 96376, 121032 99781, 121089 101829, 121219 103505, 121504 104809, 121902 106027, 122140 106719, 122461 107580, 122918 108712, 123357 109703, 123624 110251, 124031 110980, 125122 112552, 127186 115117, 129893 118102, 132379 120654, 133809 122061, 135576 123774, 137594 125673, 139360 127251, 140959 128574, 142476 129709, 143995 130720, 145601 131678, 146931 132409, 149596 133815, 149968 132497, 150079 131956, 150142 131072, 150108 129817, 150020 128448, 149902 126959, 149609 123864, 149172 120342, 148612 117023, 148066 114375, 147634 112488, 146902 109473, 146019 106270, 145056 103317, 144158 100862, 143483 99110, 142356 96311, 141136 93558, 139961 91322, 138959 89672, 138148 88438, 136686 86402, 134838 84112, 133181 82402, 132202 81596, 131353 81166, 129832 80586, 127187 79802, 123980 79071, 120290 78407, 116200 77825, 111789 77334, 107140 76949, 103534 76733, 101619 76657, 99479 76628) (115805 16248, 114337 16415, 113257 16624, 111487 17096, 109019 17942, 106605 18985, 104936 19841, 103252 20847, 102023 21562, 100157 22618, 99427 23011, 98021 23955, 95866 25634, 93554 27679, 91189 29984, 88869 32445, 86699 34958, 84777 37420, 83574 39133, 82543 40799, 80661 44084, 78112 48852, 75850 53461, 74551 56356, 73925 57949, 73284 59982, 72231 63729, 71215 67797, 70610 70492, 70401 71604, 70301 72227, 70174 73255, 70049 74588, 69919 76335, 69778 78602, 69615 81501, 69121 91094, 68857 95506, 68497 100481, 68128 104387, 67881 106401, 67638 107710, 66551 110923, 64818 114124, 63990 115314, 62717 116886, 60604 119250, 58427 121434, 57066 122661, 56283 123241, 55411 123913, 54509 124664, 53857 125305, 53438 125864, 53235 126369, 53230 126850, 53409 127332, 53926 128071, 54593 128638, 55551 128934, 56688 128740, 57808 128230, 58699 127653, 59346 127218, 60116 126677, 63205 124149, 65567 121707, 67493 118875, 68335 117263, 69551 114229, 71192 109139, 72592 103543, 73390 99413, 73648 97559, 73771 96146, 73934 93348, 74073 89564, 74168 85934, 74274 80903, 74356 77990, 74461 75762, 74618 73996, 74854 72467, 75193 70955, 75661 69235, 76758 65500, 78289 60782, 80387 54989, 82475 49983, 83907 46995, 84773 45465, 85756 43758, 86887 41859, 87900 40259, 88849 38876, 89796 37632, 90797 36446, 91911 35238, 92872 34252, 94103 33014, 99198 28576, 105060 24273, 107032 22978, 109149 21739, 112327 20067, 115457 18620, 117442 17821, 118418 17509, 119312 17207, 119998 16928, 120267 16713, 120244 16544, 120123 16392, 119402 16248, 117792 16161) (35218 115010, 35026 115461, 34968 116071, 34968 116649, 35060 117775, 35364 119251, 35914 120830, 36524 122190, 38014 125191, 38097 123016, 38098 122331, 38065 121295, 38001 120264, 37896 119140, 37614 117817, 37194 116557, 36680 115631, 36260 115176, 35967 115016, 35564 114893) (190497 67748, 190137 67886, 188917 68742, 187784 69603, 186499 70625, 185154 71735, 183836 72863, 182632 73935, 181878 74640, 181105 75409, 179595 77066, 177318 79748, 175072 82604, 173594 84619, 172838 85741, 171943 87236, 170322 90087, 168546 93363, 167296 95758, 166619 97109, 165900 98796, 165152 100992, 164714 102923, 164605 104009, 164683 104567, 164929 105534, 165155 106338, 165407 107162, 166020 109032, 166638 110973, 166845 111506, 167152 112203, 167581 113030, 167934 113451, 168606 114028, 169857 114903, 171368 115770, 172590 116368, 173232 116633, 173921 116871, 175289 117305, 177004 117816, 178959 118372, 181042 118944, 183149 119499, 185169 120008, 186536 120336, 188496 120777, 193068 121513, 199722 122209, 206213 122472, 210407 122383, 212019 122218, 212765 122054, 213061 121831, 213061 121496, 212716 120711, 211839 118992, 210666 117014, 209759 115641, 209202 114906, 208488 114040, 207159 112479, 205621 110728, 204445 109419, 203322 108205, 201181 105821, 199190 103420, 197841 101490, 197114 100185, 196721 99316, 196184 98059, 195601 96522, 195141 95004, 194782 93386, 194504 91548, 194284 89371, 194102 86738, 193795 80815, 193658 78583, 193513 76738, 193345 75192, 193143 73848, 192895 72615, 192586 71399, 192113 69786, 191771 68841, 191349 68072, 190897 67743) (44248 26155, 44245 26344, 44425 26855, 44754 27615, 45085 28313, 45637 29391, 46651 32082, 47597 36031, 48027 40305, 48018 43695, 47893 45281, 47594 47750, 47222 49818, 46853 51206, 45865 54556, 44385 58920, 42649 63336, 41130 66815, 40076 69081, 39596 70083, 39110 71061, 38571 72104, 37930 73303, 37139 74747, 34480 79509, 33216 81874, 31910 84587, 30896 87094, 30257 88985, 29864 90340, 29350 92529, 28781 95660, 28371 98898, 28125 102134, 28049 105252, 28148 108138, 28431 110682, 28743 112258, 29065 113304, 29684 114884, 30708 117026, 31845 118964, 32719 120201, 34348 121902, 34394 121902, 34423 121566, 34359 120915, 34279 120361, 33793 118689, 32989 117371, 32436 116798, 31613 115548, 30893 113694, 30659 111756, 30806 110336, 31007 109696, 31166 109106, 31228 108505, 31126 107819, 30852 106772, 30699 106252, 30396 104647, 30169 102284, 30179 99893, 30335 98230, 30575 96948, 31159 94767, 32316 91213, 33825 87252, 35137 84141, 36494 81139, 37221 79492, 37711 78347, 37892 77994, 37892 77788, 38313 76736, 38792 75599, 39405 74187, 40902 70834, 42337 67722, 43323 65629, 45565 60632, 47776 55190, 49266 50726, 49966 47949, 50157 46774, 50229 46032, 50319 44645, 50379 43033, 50394 41795, 50391 40621, 50301 38338, 49960 35913, 49269 33653, 48434 31727, 47903 30649, 47131 29342, 46014 27751, 44982 26600, 44433 26155) (56360 88409, 55723 88449, 55148 88562, 54550 88787, 53850 89159, 52964 89718, 51815 90501, 49836 91878, 48471 92984, 46425 94836, 44316 96948, 42282 99163, 40461 101323, 38989 103273, 38006 104858, 37648 105654, 37648 106010, 37991 106285, 38739 106596, 39110 106705, 40038 107071, 40834 107461, 41668 108015, 46262 103469, 47648 102135, 49607 100310, 51451 98660, 52567 97701, 53304 97110, 54397 96286, 56114 95045, 57888 93826, 59093 93038, 59847 92571, 60876 91910, 61999 91159, 63035 90417, 63028 90316, 62740 90078, 61838 89602, 61069 89231, 60036 88818, 59179 88565, 58293 88443, 57426 88406) (177809 51172, 177141 52167, 176158 53688, 175069 55409, 173987 57152, 173046 58698, 172382 59832, 172131 60210, 172131 60374, 171818 60957, 171276 61837, 171011 62341, 170571 63267, 170115 64329, 169794 65135, 169572 65741, 168499 68529, 167118 72002, 166554 73384, 165530 76084, 164406 79420, 163549 82470, 163088 84521, 162908 85569, 162793 86659, 162683 88491, 162635 90560, 162649 92721, 162717 94824, 162842 96723, 163016 98270, 163157 99065, 163532 100159, 163846 100706, 163903 100706, 164217 100100, 164492 99442, 164724 98838, 165102 97801, 165370 97106, 165643 96464, 165961 95790, 166369 95002, 166908 94010, 169018 90255, 170456 87787, 172134 85108, 173836 82675, 175306 80750, 176511 79245, 178708 76697, 181705 73518, 184650 70739, 186673 69041, 187678 68306, 188553 67636, 189514 66863, 190404 66064, 190404 65721, 189914 64921, 188611 63096, 186734 60822, 185098 59000, 184171 58041, 183110 56908, 181724 55370, 180530 53982, 179887 53199, 178102 50811) (101418 99341, 100686 99658, 100333 99860, 100283 100150, 100428 100195, 100805 100057, 101612 99665, 102454 99193, 102454 99121, 102132 99118) (95691 81798, 94841 81894, 93929 82020, 93059 82164, 92521 82268, 89688 82946, 88518 83213, 91369 86130, 94943 90534, 98104 95523, 98962 97150, 99210 97544, 99472 97808, 99798 97955, 100238 97999, 100842 97953, 101662 97827, 102967 97595, 103627 97449, 104421 97234, 105263 96943, 105504 96749, 105687 96346, 105955 95446, 106188 94249, 106376 92880, 106503 91457, 106559 90104, 106530 88939, 106458 88293, 106310 87799, 105700 87046, 104198 85722, 101970 84182, 99821 82886, 98864 82359, 98174 82003, 97495 81767, 96762 81719) (67620 82190, 66459 82588, 65344 83017, 64067 83543, 62734 84118, 61450 84699, 60322 85239, 59666 85577, 58679 86130, 58009 86490, 57280 86859, 57357 86915, 58240 87204, 59216 87495, 59892 87709, 60906 88050, 61905 88407, 64707 89489, 65294 89277, 66494 88768, 68102 88036, 68102 84762, 68087 83702, 68034 82802, 67938 82329, 67824 82190) (77844 79325, 76382 79486, 75648 79663, 75447 79831, 75306 80041, 75204 80509, 75193 81361, 75242 82421, 75341 83834, 75419 84721, 75522 85579, 75567 85647, 75897 85624, 76910 85331, 78011 84968, 80067 84389, 82378 83835, 83954 83499, 84921 83275, 85836 83044, 85874 83006, 85755 82813, 85314 82421, 84625 81905, 83778 81319, 82863 80727, 81971 80188, 80894 79607, 80320 79414, 79411 79324) (76163 74393, 75939 74650, 75624 75311, 75354 76213, 75214 76949, 75024 78761, 76559 78397, 77079 78256, 77493 78075, 77707 77846, 77808 77447, 77630 76819, 77421 76312, 77164 75771, 76890 75252, 76496 74597, 76278 74393) (107931 38580, 107567 38965, 106465 40070, 104931 41700, 103090 43716, 101080 45961, 99043 48283, 97115 50527, 95851 52033, 94246 53995, 93193 55235, 92391 56135, 92026 56511, 91659 56725, 91364 56742, 91025 56554, 90591 56098, 90018 55319, 89257 54155, 88261 52551, 85083 47327, 84258 48789, 83639 50090, 82579 52551, 81394 55541, 80164 58845, 78966 62248, 77882 65532, 76986 68484, 76497 70281, 76069 72128, 77424 74146, 78375 75503, 79312 76703, 80051 77436, 80544 77773, 81333 78141, 81665 78253, 81934 78214, 82512 77991, 83807 77707, 85044 77467, 86816 77154, 89394 76678, 91380 76293, 92483 76062, 95147 75742, 99652 75454, 104522 75403, 107998 75520, 110200 75692, 111001 75724, 111638 75670, 112193 75497, 112744 75165, 113374 74640, 114164 73883, 115503 72553, 116401 71606, 117741 70120, 119189 68438, 120715 66600, 122294 64641, 123893 62602, 125488 60519, 127051 58430, 128552 56375, 129962 54389, 131256 52512, 132404 50782, 133378 49236, 134150 47912, 134692 46850, 134930 46281, 135046 45721, 135014 45515, 134854 45423, 134160 45402, 133018 45574, 130550 46106, 127050 47017, 123583 47990, 119714 49118, 117518 49747, 115784 50229, 114459 50576, 113482 50805, 112797 50926, 112346 50956, 112028 50890, 111753 50516, 111504 49885, 111391 49427, 111139 48497, 110677 46876, 110138 45042, 109026 41411, 108559 39950, 108097 38580) (67112 54469, 67230 55169, 67404 55732, 67808 56873, 68347 58252, 68957 59716, 69573 61116, 70129 62302, 70724 63431, 70865 63431, 71217 62591, 71542 61684, 71816 60857, 72566 58469, 72912 57402, 72740 57228, 72235 56857, 71458 56380, 70734 55979, 68431 54788, 67819 54495, 67429 54347, 67215 54332))) \ No newline at end of file diff --git a/stress_benchmark/resources/051.settings b/stress_benchmark/resources/051.settings new file mode 100644 index 0000000000..fd55479c67 --- /dev/null +++ b/stress_benchmark/resources/051.settings @@ -0,0 +1,629 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=20.0 +machine_acceleration=500 +bridge_sparse_infill_max_density=0 +support_line_width=0.36 +bottom_skin_preshrink=1.3 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.96 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=175.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=400 +support_interface_material_flow=97.0 +z_seam_relative=False +top_skin_expand_distance=1.3 +machine_shape=rectangular +speed_travel_layer_0=120 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=210.0 +raft_jerk=6.0 +support_xy_distance=0.4 +bridge_skin_speed_2=10 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.105 +bottom_skin_expand_distance=1.3 +speed_prime_tower=40.0 +speed_support=40.0 +speed_roofing=20.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=lines +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.44 +raft_surface_jerk=6.0 +print_bed_temperature=60.0 +support_bottom_material_flow=97.0 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +jerk_support_roof=6.0 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100.0 +material_adhesion_tendency=0 +material_initial_print_temperature=210.0 +layer_0_z_overlap=0.15 +support_roof_enable=True +acceleration_wall_x_roofing=400.0 +raft_margin=0 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.12 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.12 +support_bottom_pattern=lines +bottom_thickness=0.96 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=400.0 +skin_material_flow=97.0 +default_material_bed_temperature=65.0 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=97.0 +machine_name=SV03 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=30.0 +travel_avoid_other_parts=False +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=1.2 +top_bottom_pattern_0=lines +resolution=0 +support_angle=75 +retraction_min_travel=0.88 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=50 +wipe_retraction_amount=1.6 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.24 +machine_feeder_wheel_diameter=10.0 +infill_overlap=30.0 +support_mesh_drop_down=True +small_feature_speed_factor=30.0 +skin_overlap_mm=0.043 +sub_div_rad_add=0.44 +roofing_line_width=0.42 +material_flow_layer_0=100.0 +support_roof_pattern=lines +cool_fan_speed_min=50.0 +retraction_combing_max_distance=30.0 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=50.0 +raft_base_jerk=6.0 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.88 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=15.0 +speed_ironing=13.333333333333334 +gantry_height=400 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=0 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=6.0 +support_roof_density=80 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=120.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.12 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=400.0 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=True +infill_support_angle=40 +support_interface_height=0.6 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=20.0 +raft_acceleration=400.0 +bridge_fan_speed_3=0 +support_tree_angle_slow=30.0 +raft_speed=20.0 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_max_jerk_xy=10 +roofing_material_flow=97.0 +acceleration_infill=400.0 +machine_extruder_count=1 +support_roof_line_distance=0.5 +zig_zaggify_support=True +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +speed_print_layer_0=20.0 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=20.0 +initial_bottom_layers=8 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=210.0 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=2.0 +bridge_wall_speed=10 +support_interface_density=80 +line_width=0.44 +acceleration_ironing=400.0 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=97.0 +prime_tower_position_x=341.0 +speed_slowdown_layers=2 +bridge_wall_min_length=1.8 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=40.0 +speed_layer_0=20.0 +infill=0 +bridge_skin_speed_3=10 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=2.0 +jerk_layer_0=6.0 +minimum_interface_area=2.0 +wall_0_material_flow_layer_0=97.0 +support_wall_count=1 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.5 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=20.0 +material_anti_ooze_retracted_position=-4 +layer_height=0.12 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.24 +jerk_print_layer_0=6.0 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.44 +retraction_retract_speed=20.0 +brim_line_count=6 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.84 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=6.0 +support_tree_tip_diameter=0.72 +bridge_skin_speed=10 +bridge_fan_speed=70.0 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=brim +min_odd_wall_line_width=0.34 +skirt_line_count=3 +support_tree_angle=45.0 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=400.0 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=True +cool_min_temperature=210.0 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=50.0 +magic_mesh_surface_mode=normal +zig_zaggify_infill=True +support_interface_line_width=0.4 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.0 +support_bottom_height=0.6 +machine_depth=350 +acceleration_skirt_brim=400.0 +skin_overlap=10.0 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=30 +z_seam_x=175.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60.0 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=350 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=350 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=2.0 +infill_sparse_thickness=0.2 +prime_tower_brim_enable=True +ironing_monotonic=False +small_skin_width=0.84 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=True +acceleration_print_layer_0=400.0 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_wall_0=6.0 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.96 +material_guid=a4695965-1c53-430b-84fb-5b6bb49ba646 +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=20.0 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=800.0 +machine_max_acceleration_x=500 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=True +raft_base_thickness=0.336 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=6.0 +brim_gap=0.1 +acceleration_enabled=True +wall_material_flow=97.0 +acceleration_wall=400.0 +draft_shield_dist=10 +raft_surface_acceleration=400.0 +switch_extruder_retraction_speeds=20 +support_pattern=lines +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=97.0 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=6.0 +retraction_hop=0.24 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=97.0 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=30 +support_material_flow=97.0 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=6.0 +material_break_retracted_position=-50 +small_feature_max_length=12.566370614359172 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=5.878304635907295e-17 +experimental=0 +skin_material_flow_layer_0=100.0 +material_bed_temperature_layer_0=65.0 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.36 +support_bottom_distance=0 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=buildplate +cool_lift_head=False +raft_interface_line_width=0.88 +support_type=buildplate +support_zag_skip_count=0 +retraction_combing=noskin +raft_interface_line_spacing=1.08 +draft_shield_enabled=False +material_break_preparation_temperature=210.0 +material_alternate_walls=False +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=40.0 +raft_surface_thickness=0.12 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=8 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=40.0 +infill_line_width=0.4 +wall_line_width_0=0.42 +support_extruder_nr_layer_0=0 +retraction_count_max=90 +jerk_infill=8.0 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.44 +material_print_temperature=210.0 +acceleration_prime_tower=400.0 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=97.0 +extruder_prime_pos_y=0 +jerk_print=6.0 +support_brim_enable=True +support_bottom_density=80 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.44 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=400.0 +wall_line_width_x=0.44 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.28 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=True +jerk_enabled=False +speed_wall_0_roofing=20.0 +skin_preshrink=1.3 +layer_height_0=0.28 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=5 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=120 +group_outer_walls=True +material_is_support_material=False +material_flow=97.0 +jerk_roofing=6.0 +jerk_travel_enabled=True +jerk_wall_x=6.0 +machine_always_write_active_tool=False +retraction_amount=1.6 +machine_minimum_feedrate=0.0 +acceleration_print=400.0 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=20.0 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=400.0 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=back +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=6.0 +infill_offset_x=0 +jerk_wall=6.0 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=20.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=20.0 +quality_name=Draft +support_offset=0.0 +wall_overhang_speed_factor=100 +top_layers=8 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=0.8 +machine_max_feedrate_y=500 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=40.0 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.18 +retraction_prime_speed=20.0 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=2.0 +raft_surface_line_width=0.44 +jerk_support_interface=6.0 +support_tree_bp_diameter=7.5 +support_interface_pattern=lines +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=400.0 +material_no_load_move_factor=0.940860215 +travel_speed=120 +z_seam_corner=z_seam_corner_weighted +machine_max_feedrate_z=10 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=6.0 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.42 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=1.584 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=0 +support_z_distance=0.24 +raft_base_speed=15.0 +jerk_travel_layer_0=10 +speed_support_interface=30 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.399 +material_flush_purge_speed=0.5 +acceleration_travel=800.0 +support_roof_height=0.6 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=321.0 +jerk_support=6.0 +roofing_pattern=lines +jerk_wall_x_roofing=6.0 +top_skin_preshrink=1.3 +acceleration_wall_0_roofing=400.0 +machine_max_feedrate_x=500 +material_final_print_temperature=210.0 +acceleration_roofing=400.0 +raft_interface_jerk=6.0 +retraction_speed=20.0 +prime_tower_flow=97.0 +acceleration_wall_x=400.0 +infill_overlap_mm=0.126 +wall_0_material_flow_roofing=97.0 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=20.0 +support_roof_wall_count=0 +skirt_gap=5.0 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=1.6 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=1.3 +support_infill_rate=0 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=400.0 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=30 +jerk_travel=10 +retract_at_layer_change=False +support_roof_line_width=0.4 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=True +skirt_brim_line_width=0.44 +skirt_brim_material_flow=97.0 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=400.0 +support_brim_line_count=3 +build_volume_temperature=28 +small_hole_max_size=4.0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=40.0 +wall_0_extruder_nr=-1 +retraction_hop_enabled=True +prime_tower_wipe_enabled=True +acceleration_support_bottom=400.0 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=400.0 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/051.wkt b/stress_benchmark/resources/051.wkt new file mode 100644 index 0000000000..ab7d7e5a2c --- /dev/null +++ b/stress_benchmark/resources/051.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((176710 110618, 178664 110709, 180381 110834, 181547 110937, 183639 111186, 185334 111428, 186649 111665, 187395 111817, 187970 111982, 188399 112046, 189525 112331, 189710 112622, 189924 112626, 189992 112740, 190425 112975, 190744 113499, 191416 113698, 192007 114025, 191936 114546, 192005 115423, 191992 115665, 192100 116841, 192117 117406, 192194 117757, 192382 118858, 192571 119535, 192873 120515, 192924 120589, 193157 121136, 193345 121353, 193529 121803, 193796 122038, 193880 122185, 194077 122215, 194212 122563, 194454 122145, 194220 121869, 194014 121763, 193969 121245, 193817 120997, 193647 120375, 193430 119872, 193198 118362, 193167 117831, 193169 116505, 193254 115316, 193411 114343, 193716 113427, 194183 113538, 194805 113753, 195123 113824, 197308 114591, 198309 114977, 199575 115484, 200429 115844, 202078 116577, 202929 116981, 203957 117484, 205474 118281, 207238 119251, 208856 120224, 209655 120726, 211387 121864, 213095 123082, 214696 124293, 215897 125255, 217674 126774, 218788 127789, 219811 128759, 220452 129384, 221418 130359, 222729 131771, 223957 133167, 224394 133708, 224840 134356, 224820 134633, 225185 134760, 225458 135086, 226081 135779, 226373 136341, 225987 136465, 225527 136124, 224972 135359, 224621 134786, 223968 134890, 223468 135254, 222714 135884, 221854 136460, 221477 136806, 220419 137462, 219807 137727, 219096 138136, 218932 138189, 218294 138445, 218103 138732, 218119 139073, 217657 139582, 217787 139533, 218428 139153, 218900 138995, 219689 138592, 220045 138490, 220724 138202, 221169 137948, 221724 137673, 222571 137195, 223008 137008, 223289 137084, 223450 137188, 224302 138073, 225438 138709, 226195 139062, 226004 139648, 225214 140439, 224847 140944, 224352 141522, 223790 142206, 223440 142652, 222865 143437, 222672 143760, 221992 144708, 221929 145017, 221801 145285, 221823 145434, 222527 144523, 222953 144190, 223828 143234, 225502 141662, 226812 140506, 227743 139750, 228172 139472, 228487 139304, 229188 140214, 230383 142142, 230726 142806, 231000 143273, 231143 143495, 231217 143793, 231469 144270, 231185 144589, 230841 145167, 230393 145665, 230262 145905, 229992 146235, 229363 147172, 229456 147228, 228996 147840, 228834 148312, 229680 147336, 230368 146811, 230500 146594, 230753 146353, 231103 145963, 231221 145918, 231409 145720, 231705 145510, 231861 145338, 232135 145412, 232247 145652, 232599 146236, 232949 147011, 233256 147593, 233343 147888, 233635 148394, 233731 148755, 233835 148949, 233905 149435, 233660 149622, 233401 150052, 233240 150206, 232942 150641, 232816 150788, 232291 151469, 231841 152255, 231587 152730, 231363 153191, 231123 153655, 231035 154057, 230793 154514, 230735 154899, 230619 155246, 230657 155289, 230567 155404, 230468 155693, 230488 156066, 230441 156318, 230526 156410, 230359 156773, 230346 157216, 230494 157710, 230452 157972, 230693 158125, 230648 158227, 230804 158186, 230777 157635, 230815 157433, 230742 157051, 230462 156832, 230996 156666, 231087 156224, 231089 155862, 231276 155436, 231493 154718, 231489 154628, 231754 154164, 231910 153732, 232365 152999, 232787 152469, 232924 152326, 233523 151611, 233707 151441, 234177 150954, 234627 150955, 234946 151543, 235337 152513, 235743 153632, 236488 155879, 236793 156897, 236931 157393, 237078 158172, 237365 159009, 237559 159929, 237799 161196, 238022 161857, 238023 162426, 238248 163070, 238414 163818, 238441 164564, 238531 165058, 238657 165549, 238808 166403, 238825 166672, 238922 167533, 239008 168002, 239068 168560, 239255 170781, 239336 172289, 239385 174204, 239371 175287, 239374 176359, 239333 177731, 239278 178760, 239114 180903, 239017 181898, 238851 182982, 238837 183245, 238740 183786, 238675 183919, 238692 184026, 237194 184974, 236152 185408, 235004 185737, 234597 185904, 233463 186195, 233102 186240, 232971 186298, 231999 186447, 230968 186644, 230086 186753, 229320 186802, 228863 186953, 228853 187025, 229223 187165, 230009 187183, 230163 187238, 230667 187209, 231311 187245, 231992 187190, 232577 187168, 233304 187126, 233965 187046, 234673 187016, 235795 186869, 237264 186638, 238140 186815, 238113 187684, 237956 188210, 237877 188826, 237655 189463, 237247 189466, 236960 189608, 236800 189793, 236599 189899, 236731 190085, 236838 190467, 237320 190847, 237128 191919, 237008 192205, 236938 192573, 236226 194935, 235445 197201, 234750 199005, 234037 200710, 233751 201138, 233552 201739, 233292 202211, 233217 202467, 232847 203065, 232627 203022, 232141 202559, 231717 202271, 231318 201872, 230220 201005, 229509 200505, 229251 200355, 228811 200047, 228533 199901, 227887 199485, 227379 199187, 226648 198818, 225174 198187, 226073 198954, 226086 198999, 227219 199710, 227625 200113, 228460 200767, 229163 201465, 229366 201653, 230245 202643, 230772 203472, 231543 204861, 231520 205235, 231555 205652, 231382 205876, 231105 206519, 230800 207091, 230694 207239, 230434 207743, 230174 208195, 229271 209651, 228611 210653, 228080 211415, 227535 212229, 227005 212969, 225793 214564, 224847 215763, 222958 217974, 221221 219822, 220391 220667, 219470 221562, 218565 222404, 217856 223048, 215921 224715, 214678 225709, 213412 226669, 212693 227200, 212048 227659, 210633 228628, 210043 229016, 208025 230276, 205517 231694, 204047 232460, 203162 232896, 201452 233713, 199881 234390, 199338 234532, 198820 234796, 198668 234847, 198164 235063, 197662 235071, 197524 235025, 196631 235185, 196304 235262, 195503 235028, 195036 234980, 194668 234753, 194346 234634, 193871 234361, 193333 233979, 192544 233265, 192023 232686, 191658 232248, 191339 231818, 190618 230719, 190018 229546, 189805 229222, 189656 228890, 189592 229441, 189812 230041, 190070 230883, 190796 232548, 191097 233082, 191357 233570, 191464 233709, 192289 234966, 192747 235445, 193186 235984, 193422 236616, 192620 236906, 191580 237223, 189165 237805, 188021 238064, 185756 238485, 183779 238784, 181965 239007, 180126 239180, 178157 239308, 176289 239371, 175583 239383, 174798 239375, 174426 239343, 173618 239341, 172626 239296, 172370 238974, 172125 238977, 172053 238898, 171766 238831, 171590 238727, 171194 238323, 170915 238308, 170238 238216, 170063 238012, 170038 237813, 169935 237654, 169817 236930, 169619 236329, 169494 235668, 169316 235243, 169251 234906, 168839 233783, 168333 232624, 168283 232562, 167901 231876, 167729 231728, 167608 231508, 167316 231159, 167154 231074, 166973 230764, 166836 230643, 166575 230531, 166442 230363, 166263 230432, 166035 229957, 165668 229819, 165143 229770, 165082 229728, 164507 229682, 165093 229829, 165238 229941, 165706 230142, 165988 230002, 166009 230592, 166200 230742, 166437 230843, 166673 231402, 166983 231654, 167151 232148, 167308 232376, 167549 232837, 167952 234132, 168109 234597, 168326 235441, 168497 236715, 168563 237625, 168448 238276, 168446 238703, 168276 239014, 167138 238884, 166876 238870, 165802 238721, 164466 238516, 163551 238358, 162346 238130, 160328 237692, 157830 237061, 155560 236385, 153430 235671, 151282 234861, 150270 234448, 149515 234126, 148079 233486, 147283 233119, 146784 232878, 144635 231781, 142712 230707, 141756 230142, 139842 228942, 138701 228177, 137673 227469, 135102 225550, 134040 224628, 133955 224428, 133739 224237, 132570 223422, 132048 222921, 132315 222599, 132921 222900, 133800 223742, 133867 223851, 133957 223857, 134205 224060, 134708 223811, 134895 223538, 135141 223362, 135527 222823, 136463 221679, 137007 221073, 137636 220519, 138091 220169, 139753 218953, 139757 218893, 139477 218327, 139549 218195, 138827 218899, 138166 219253, 136602 220355, 135594 221230, 134941 221518, 133728 220693, 131977 220153, 131676 219970, 131604 219870, 131797 219468, 132043 219141, 132326 218528, 132688 217914, 132818 217750, 132872 217526, 133332 216698, 133453 216524, 133477 216401, 133987 215467, 134342 214601, 134637 213954, 134842 213312, 134926 212867, 134633 213328, 134357 213591, 134092 214027, 133856 214438, 133651 214653, 133255 215284, 133120 215530, 132998 215658, 132394 216610, 131797 217479, 131644 217640, 131282 218238, 130942 218635, 130765 218858, 130479 219116, 130302 219385, 129871 219718, 129738 219915, 129560 220064, 129246 220174, 128633 219675, 127672 218656, 126844 217745, 126583 217380, 125921 216685, 125776 216195, 125621 215951, 125737 215717, 125850 215281, 125986 215051, 126173 214548, 126514 213814, 126531 213756, 126842 213180, 127072 212660, 127165 212398, 127416 211850, 127756 211067, 128038 210354, 128062 210272, 127947 210471, 127660 211029, 127542 211230, 127318 211724, 127116 211971, 126945 212470, 126511 212758, 126167 213297, 125751 213768, 125302 214409, 124927 214714, 124759 214950, 124563 214884, 124496 214770, 124209 214549, 123641 213764, 123168 213198, 123008 212875, 122517 212278, 122473 212187, 122169 211669, 122100 211632, 122303 211164, 122316 211035, 122620 210535, 122673 210351, 122924 209882, 122991 209703, 123252 209100, 123319 208876, 123666 207985, 123837 207460, 123894 207013, 124038 206515, 124070 206200, 124043 206107, 124119 205948, 124183 205621, 124132 205253, 124240 204736, 124206 204220, 124127 204076, 124161 203740, 124055 203729, 124167 203510, 124151 203281, 123983 202844, 123896 202484, 123764 202373, 123751 202207, 123464 202215, 123487 202479, 123653 202865, 123621 203351, 123762 203505, 123570 203749, 123517 203979, 123572 204115, 123586 204661, 123639 204749, 123473 205242, 123486 205636, 123343 206125, 123279 206572, 123074 207108, 122934 207613, 122665 208247, 121917 209475, 121274 210028, 121223 210105, 120846 209777, 120079 208616, 118901 206609, 118809 206430, 118204 205352, 118070 205028, 117815 204525, 117698 204323, 117480 203862, 117466 203794, 117071 202977, 116878 202671, 116502 201794, 116152 200903, 115903 200343, 115643 199822, 115369 199163, 114920 198194, 114683 197157, 114174 196119, 113383 193711, 112775 191570, 112209 189276, 112126 188848, 111835 187520, 111604 186291, 111314 184522, 111190 183649, 111072 182681, 110874 180860, 110873 180385, 110816 179814, 110770 179175, 110788 178576, 110774 178544, 111283 177894, 111308 177837, 111762 177471, 112932 176618, 113314 176392, 113906 176002, 114589 175663, 115444 175263, 116078 175035, 117360 174494, 118247 174181, 119050 173922, 119599 173697, 119438 173592, 118603 173659, 118554 173937, 117922 173840, 117376 173876, 116596 174079, 116183 174137, 115653 174288, 114881 174488, 114225 174675, 112516 175217, 112067 175443, 111702 175484, 110907 175384, 111034 175697, 110689 175700, 110784 175360, 110622 175020, 110657 174311, 110647 173304, 110677 172740, 111127 172695, 111709 172398, 111545 172023, 111126 171675, 110808 171627, 110774 171487, 110799 171197, 110758 170878, 110846 169659, 110859 169298, 111056 167418, 111336 165341, 111463 164544, 111827 162519, 112020 161576, 112141 161047, 112277 160696, 112369 160142, 112569 159616, 112575 159270, 112682 158873, 112868 158601, 113183 158757, 113447 158745, 113697 158943, 114309 159326, 114517 159381, 115165 159770, 115636 160112, 116003 160216, 116550 160454, 116899 160678, 118687 161278, 120154 161681, 120727 161746, 121043 161627, 120526 161444, 120310 161345, 119728 161142, 119420 161048, 119167 160815, 118539 160532, 117951 160251, 117442 159903, 116821 159577, 116282 159167, 115835 158865, 114947 158010, 114141 157060, 113780 156293, 113645 156127, 113711 155872, 113711 155593, 113842 154944, 113999 154495, 114155 153959, 114349 153431, 114677 152459, 115404 150603, 115652 150012, 116006 149232, 116099 148978, 116549 147979, 116920 147191, 117622 145770, 118287 144500, 118905 143376, 119684 142029, 120429 140794, 121895 138580, 122556 137641, 123730 136035, 124856 134599, 125786 133455, 127159 131896, 127874 131116, 128490 130464, 129781 129160, 130681 128278, 132346 126742, 133969 125361, 135117 124431, 136981 123024, 137469 122671, 139101 121531, 139581 121289, 140055 120929, 140319 120776, 140770 120478, 140887 120486, 140961 120440, 141174 120496, 142123 120160, 142174 120048, 143013 120048, 143598 120022, 144057 120212, 144532 120228, 145106 120450, 145757 120793, 146247 121065, 146790 121396, 147673 122162, 148195 122646, 148639 123104, 149369 123914, 150052 124824, 150150 124465, 149471 123283, 148977 122464, 148023 121172, 146888 119920, 146188 119398, 146135 119330, 145166 118500, 144937 118146, 145748 117665, 145912 117552, 146794 117114, 148105 116493, 148896 116137, 150429 115475, 151447 115068, 152577 114633, 154616 113914, 156781 113233, 158916 112638, 160083 112355, 162456 111834, 164783 111411, 167092 111089, 169246 110860, 171322 110705, 172640 110648, 174617 110604) (160937 228872, 161003 229587, 161107 229822, 161203 229764, 161583 229725, 161478 229219, 161303 228933, 161188 228446, 161126 228338) (161978 229488, 162157 229375, 162312 229342, 162857 229428, 163541 229507, 163051 229406, 162885 229284, 161950 229123) (173793 127868, 172229 127929, 170529 128061, 169069 128225, 167819 128406, 166375 128657, 165358 128849, 163800 129199, 162888 129433, 161364 129866, 160391 130178, 158845 130702, 157305 131298, 155437 132097, 153711 132930, 151908 133887, 150312 134831, 148927 135716, 147645 136598, 146362 137545, 145493 138216, 144062 139419, 142670 140692, 141577 141746, 140406 142963, 139994 143416, 138887 144682, 137857 145958, 136869 147271, 135761 148848, 134883 150227, 134087 151570, 133733 152191, 133173 153245, 132389 154838, 131694 156363, 131072 157883, 130435 159610, 130022 160868, 129666 162063, 129414 162971, 129061 164393, 128774 165734, 128587 166727, 128424 167708, 128196 169315, 128074 170570, 128020 171030, 127922 172499, 127854 174330, 127875 176407, 127950 177915, 127997 178672, 128157 180264, 128274 181278, 128516 182851, 128783 184302, 129080 185661, 129451 187148, 130005 189072, 130667 191055, 131280 192629, 131827 193937, 132405 195185, 132888 196186, 133526 197427, 133880 198058, 134821 199664, 135342 200485, 135796 201159, 136172 201741, 137365 203394, 138309 204599, 138840 205238, 139933 206508, 140990 207644, 141699 208376, 142654 209293, 143867 210403, 144919 211282, 145243 211563, 146547 212585, 148388 213913, 149787 214829, 150794 215449, 151853 216063, 153317 216859, 154777 217582, 156196 218223, 157941 218946, 159647 219571, 161241 220085, 163086 220612, 164414 220932, 165510 221164, 165775 221228, 168011 221623, 169712 221841, 170929 221960, 172459 222072, 174485 222137, 176147 222123, 177489 222075, 179008 221967, 180179 221849, 181732 221659, 183641 221340, 185401 220979, 186888 220615, 188388 220195, 189323 219908, 190949 219360, 192613 218727, 193725 218259, 195543 217433, 197389 216481, 198783 215698, 200168 214863, 201579 213921, 202394 213365, 203649 212431, 204616 211663, 205607 210849, 206646 209928, 208389 208274, 209324 207297, 210193 206365, 211463 204867, 212420 203669, 213356 202404, 214251 201111, 215054 199857, 215781 198616, 216042 198189, 216964 196459, 217743 194887, 218498 193172, 219104 191640, 219560 190386, 220150 188563, 220557 187120, 220866 185883, 221185 184446, 221407 183270, 221601 182107, 221866 180127, 222013 178474, 222066 177489, 222096 177121, 222136 175821, 222140 174522, 222121 173554, 222099 173007, 222016 171508, 221860 169820, 221604 167879, 221448 166948, 221102 165144, 220785 163773, 220394 162276, 219889 160591, 219378 159113, 218797 157562, 218056 155789, 217357 154299, 216756 153118, 216132 151955, 215452 150810, 215282 150507, 214473 149218, 213711 148092, 213192 147361, 212426 146331, 211238 144840, 210013 143427, 209141 142496, 208180 141521, 207176 140539, 205814 139316, 204438 138172, 203677 137575, 202668 136834, 201484 135995, 200650 135437, 199525 134735, 198146 133928, 196510 133045, 195309 132451, 193989 131845, 192301 131136, 190438 130452, 189168 130037, 187660 129584, 186320 129231, 185288 128988, 184040 128725, 182756 128490, 181376 128285, 180300 128151, 178613 127989, 176932 127890, 175228 127847) (123359 200683, 123667 201269, 123659 201306, 123729 201317, 123422 200631, 123290 200430) (230447 159418, 230653 160069, 230693 160145, 230538 159385, 230547 159320, 230389 159051) (196981 123831, 197179 123983, 198193 124391, 198620 123956, 198546 124329, 198711 124527, 198867 124947, 198971 124938, 198999 124729, 199139 124378, 199189 124109, 199025 123868, 198643 123854, 198154 124197, 198054 124008, 197802 124024, 197309 123862, 197034 123798, 196376 123567) (194344 122776, 194643 122994, 195735 123317, 194938 122907, 194680 122512, 194556 122484))) \ No newline at end of file diff --git a/stress_benchmark/resources/052.settings b/stress_benchmark/resources/052.settings new file mode 100644 index 0000000000..629a0a2715 --- /dev/null +++ b/stress_benchmark/resources/052.settings @@ -0,0 +1,627 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=60 +machine_acceleration=500 +bridge_sparse_infill_max_density=0 +support_line_width=0.48 +bottom_skin_preshrink=1.92 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=1.4000000000000001 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=concentric +material_standby_temperature=175 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=250 +support_interface_material_flow=96 +z_seam_relative=False +top_skin_expand_distance=1.92 +machine_shape=rectangular +speed_travel_layer_0=240 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=200 +raft_jerk=8 +support_xy_distance=0.96 +bridge_skin_speed_2=30.0 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.12 +bottom_skin_expand_distance=1.92 +speed_prime_tower=60 +speed_support=60 +speed_roofing=60 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=lightning +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.48 +raft_surface_jerk=8 +print_bed_temperature=60 +support_bottom_material_flow=96 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +jerk_support_roof=8 +date=04-12-2023 +support_use_towers=True +minimum_support_area=2 +wall_x_material_flow_layer_0=96 +material_adhesion_tendency=0 +material_initial_print_temperature=200 +layer_0_z_overlap=0.15 +support_roof_enable=False +acceleration_wall_x_roofing=500 +raft_margin=5 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.28 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.28 +support_bottom_pattern=grid +bottom_thickness=1.4000000000000001 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=500 +skin_material_flow=96 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.48 +anti_overhang_mesh=False +infill_material_flow=96 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=5 +wall_thickness=1.44 +top_bottom_pattern_0=lines +resolution=0 +support_angle=68 +retraction_min_travel=1.5 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0.09 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=50 +wipe_retraction_amount=0.4 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.6 +machine_feeder_wheel_diameter=10.0 +infill_overlap=30.0 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.048 +sub_div_rad_add=0.48 +roofing_line_width=0.48 +material_flow_layer_0=96 +support_roof_pattern=grid +cool_fan_speed_min=75 +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=75 +raft_base_jerk=8 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.25 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=22.5 +speed_ironing=40.0 +gantry_height=25 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=0 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=8 +support_roof_density=33.333 +support_bottom_line_width=0.48 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.28 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +wipe_move_distance=20 +ironing_enabled=True +infill_support_angle=40 +support_interface_height=1.6800000000000002 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=45 +raft_acceleration=500 +bridge_fan_speed_3=0 +support_tree_angle_slow=45.333333333333336 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=10 +roofing_material_flow=102 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.8800288002880032 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +speed_print_layer_0=45 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=45 +initial_bottom_layers=3 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=1 +minimum_roof_area=10 +bridge_wall_speed=30.0 +support_interface_density=33.333 +line_width=0.48 +acceleration_ironing=500 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=96 +prime_tower_position_x=228.495 +speed_slowdown_layers=2 +bridge_wall_min_length=2.36 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=60 +speed_layer_0=45 +infill=0 +bridge_skin_speed_3=30.0 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=2.5600000000000005 +jerk_layer_0=8 +minimum_interface_area=10 +wall_0_material_flow_layer_0=96 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=2.8800288002880032 +support_enable=True +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.28 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.6 +jerk_print_layer_0=8 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.48 +retraction_retract_speed=45 +brim_line_count=17 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.96 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=8 +support_tree_tip_diameter=0.96 +bridge_skin_speed=30.0 +bridge_fan_speed=100 +support_xy_overrides_z=xy_overrides_z +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.32 +support_tree_max_diameter=13.0 +infill_mesh=False +adhesion_type=none +min_odd_wall_line_width=0.32 +skirt_line_count=3 +support_tree_angle=68 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=500 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=200 +material_print_temp_prepend=False +infill_offset_y=0 +cool_fan_speed_max=75 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.48 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.0 +support_bottom_height=1.6800000000000002 +machine_depth=230 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=60 +z_seam_x=115.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=230 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=230 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=2.5600000000000005 +infill_sparse_thickness=0.24 +prime_tower_brim_enable=False +ironing_monotonic=True +small_skin_width=0.96 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=500 +center_object=False +skirt_height=3 +cool_fan_speed_0=30 +wall_line_count=4 +jerk_wall_0=8 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=1.4000000000000001 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=30 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=500 +machine_max_acceleration_x=500 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=True +raft_base_thickness=0.2 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=8 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=96 +acceleration_wall=500 +draft_shield_dist=10 +raft_surface_acceleration=500 +switch_extruder_retraction_speeds=20 +support_pattern=lines +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=96 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=8 +retraction_hop=0.6 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=96 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=60 +support_material_flow=96 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=True +min_skin_width_for_expansion=5.143516556418884e-17 +experimental=0 +skin_material_flow_layer_0=96 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.04 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.12 +support_bottom_distance=0.12 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=graceful +cool_lift_head=False +raft_interface_line_width=0.96 +support_type=everywhere +support_zag_skip_count=0 +retraction_combing=no_outer_surfaces +raft_interface_line_spacing=1.16 +draft_shield_enabled=False +material_break_preparation_temperature=200 +material_alternate_walls=False +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=60 +raft_surface_thickness=0.28 +machine_center_is_zero=False +roofing_monotonic=False +bottom_layers=3 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=60 +infill_line_width=0.48 +wall_line_width_0=0.48 +support_extruder_nr_layer_0=0 +retraction_count_max=50 +jerk_infill=8 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.48 +material_print_temperature=200 +acceleration_prime_tower=500 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=96 +extruder_prime_pos_y=0 +jerk_print=8 +support_brim_enable=False +support_bottom_density=33.333 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.48 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=500 +wall_line_width_x=0.48 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.8400000000000001 +travel_retract_before_outer_wall=True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=60 +skin_preshrink=1.92 +layer_height_0=0.28 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=10 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=240 +group_outer_walls=True +material_is_support_material=False +material_flow=96 +jerk_roofing=8 +jerk_travel_enabled=True +jerk_wall_x=8 +machine_always_write_active_tool=False +retraction_amount=0.4 +machine_minimum_feedrate=0.0 +acceleration_print=500 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=500 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=back +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=8 +infill_offset_x=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=30.0 +min_bead_width=0.32 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=60 +support_offset=0.88 +wall_overhang_speed_factor=100 +top_layers=3 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=0.8 +machine_max_feedrate_y=500 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=5 +raft_interface_thickness=0.2 +retraction_prime_speed=45 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=10 +raft_surface_line_width=0.48 +jerk_support_interface=8 +support_tree_bp_diameter=7.5 +support_interface_pattern=grid +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=500 +material_no_load_move_factor=0.940860215 +travel_speed=150.0 +z_seam_corner=z_seam_corner_none +machine_max_feedrate_z=10 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.48 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=0 +support_z_distance=0.12 +raft_base_speed=22.5 +jerk_travel_layer_0=8 +speed_support_interface=60 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.07599999999999998 +material_flush_purge_speed=0.5 +acceleration_travel=500 +support_roof_height=1.6800000000000002 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=208.495 +jerk_support=8 +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.92 +acceleration_wall_0_roofing=500 +machine_max_feedrate_x=500 +material_final_print_temperature=200 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=45 +prime_tower_flow=96 +acceleration_wall_x=500 +infill_overlap_mm=0.144 +wall_0_material_flow_roofing=96 +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=60 +support_roof_wall_count=0 +skirt_gap=10.0 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=2 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0.09 +expand_skins_expand_distance=1.92 +support_infill_rate=0 +meshfix_maximum_resolution=0.25 +support_tree_min_height_to_model=3 +min_wall_line_width=0.32 +acceleration_support_infill=500 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=10 +jerk_travel=8 +retract_at_layer_change=False +support_roof_line_width=0.48 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.48 +skirt_brim_material_flow=96 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.04 +acceleration_support_roof=500 +support_brim_line_count=8 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=60 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=500 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=500 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/052.wkt b/stress_benchmark/resources/052.wkt new file mode 100644 index 0000000000..f450090e1b --- /dev/null +++ b/stress_benchmark/resources/052.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((109686 134536, 110121 134814, 110298 135133, 110200 135485, 110046 135493, 109381 134967, 109147 134698, 109303 134480)), ((120122 134632, 120345 134758, 120510 134935, 120548 135030, 120509 135169, 119847 135094, 119796 135068, 119486 135018, 119099 134934, 119177 134715, 119344 134639, 119746 134569)), ((100620 129691, 100943 129932, 101187 130371, 101216 130615, 101170 130827, 100902 130979, 100786 130956, 100302 129995, 100240 129702, 100359 129629)), ((129246 129822, 129409 129941, 129444 130214, 128289 130485, 128125 130464, 128095 130254, 128342 130035, 128585 129866, 128933 129788)), ((95134 121371, 95310 121876, 95325 122158, 95174 122609, 94896 122722, 94706 122567, 94658 122101, 94649 121537, 94706 121335, 94858 121231)), ((134942 121391, 135047 121583, 134511 122036, 134133 122480, 134012 122494, 133981 122130, 134176 121632, 134669 121339)), ((135939 111231, 136020 111393, 136015 111732, 135790 112410, 135661 112592, 135439 112519, 135364 112406, 135292 112050, 135402 111476, 135714 111197)), ((94025 111307, 94132 111642, 93957 112231, 93671 112538, 93573 112583, 93391 112589, 93193 112351, 93223 112052, 93382 111679, 93669 111305, 93920 111234)), ((132189 101709, 132349 101945, 132537 102911, 132475 103105, 132390 103133, 132141 103099, 132018 103012, 131743 102506, 131681 102019, 131986 101678, 132059 101647)), ((97784 101951, 97823 102204, 97533 102675, 97221 102899, 96920 102942, 96780 102887, 96589 102635, 96684 102462, 96895 102195, 97331 101927, 97653 101854)), ((124763 95326, 125080 95729, 125243 95968, 125187 96177, 124878 96244, 124543 96174, 124273 95957, 124021 95528, 124016 95219, 124128 95099, 124409 95051)), ((105426 95274, 105542 95448, 105508 95702, 105341 95875, 105153 95990, 104872 96059, 104486 96084, 104239 95944, 104087 95679, 104183 95492, 104464 95310, 104881 95222, 105322 95222)), ((114616 92779, 114903 92893, 115025 92959, 115297 93068, 115410 93207, 115430 93451, 115302 93573, 114903 93688, 114352 93557, 114071 93247, 114038 92946, 114340 92758))) \ No newline at end of file diff --git a/stress_benchmark/resources/053.settings b/stress_benchmark/resources/053.settings new file mode 100644 index 0000000000..5f59343201 --- /dev/null +++ b/stress_benchmark/resources/053.settings @@ -0,0 +1,631 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +machine_acceleration=3000 +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +bottom_skin_preshrink=0.8 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=95.0 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.8 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=100 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=205 +support_interface_material_flow=95.0 +z_seam_relative=False +top_skin_expand_distance=0.8 +machine_shape=rectangular +speed_travel_layer_0=120 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=200 +raft_jerk=20 +support_xy_distance=0.7 +bridge_skin_speed_2=20 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.1 +bottom_skin_expand_distance=0.8 +speed_prime_tower=50 +speed_support=30.0 +speed_roofing=20 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=grid +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +raft_surface_jerk=20 +print_bed_temperature=60 +support_bottom_material_flow=95.0 +bridge_skin_material_flow_3=95.0 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +jerk_support_roof=20 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=95.0 +material_adhesion_tendency=0 +material_initial_print_temperature=190 +layer_0_z_overlap=0.15 +support_roof_enable=False +acceleration_wall_x_roofing=3000 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +machine_nozzle_head_distance=5 +support_interface_skip_height=0.1 +support_bottom_pattern=zigzag +bottom_thickness=0.8 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=3000 +skin_material_flow=95.0 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=0.8 +top_bottom_pattern_0=lines +resolution=0 +support_angle=50 +retraction_min_travel=0.8 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=20 +machine_max_feedrate_e=45 +wipe_retraction_amount=6.5 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=False +retraction_hop_after_extruder_switch_height=1 +machine_feeder_wheel_diameter=10.0 +infill_overlap=10 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.08 +sub_div_rad_add=0.4 +roofing_line_width=0.4 +material_flow_layer_0=100 +support_roof_pattern=zigzag +cool_fan_speed_min=100 +retraction_combing_max_distance=15 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=20 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.8 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=17.5 +speed_ironing=13.333333333333334 +gantry_height=52 +material_break_temperature=60 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=2.6666666666666665 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=False +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=20 +support_roof_density=100 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=10.0 +support_infill_sparse_thickness=0.1 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=0.2 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=30 +raft_acceleration=3000 +bridge_fan_speed_3=100 +support_tree_angle_slow=33.333333333333336 +raft_speed=15 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=20.0 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=True +roofing_angles=[] +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +speed_print_layer_0=30 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=25 +initial_bottom_layers=8 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=1 +minimum_roof_area=1.0 +bridge_wall_speed=20 +support_interface_density=100 +line_width=0.4 +acceleration_ironing=3000 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=213.54375 +speed_slowdown_layers=2 +bridge_wall_min_length=2.1 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=-0.09 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=40.0 +speed_layer_0=30 +infill=0 +bridge_skin_speed_3=20 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=0 +jerk_layer_0=20 +minimum_interface_area=1.0 +wall_0_material_flow_layer_0=110.00000000000001 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=True +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.4 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=25 +material_anti_ooze_retracted_position=-4 +layer_height=0.1 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=1 +jerk_print_layer_0=20 +lightning_infill_prune_angle=40 +material_diameter=2.85 +bridge_enable_more_layers=False +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +brim_line_count=20 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=20 +support_tree_tip_diameter=0.8 +bridge_skin_speed=20 +bridge_fan_speed=100 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=True +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=brim +min_odd_wall_line_width=0.34 +skirt_line_count=1 +support_tree_angle=50 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=3000 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=190 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.4 +bridge_wall_coast=0 +slicing_tolerance=middle +infill_wipe_dist=0.1 +support_bottom_height=0.2 +machine_depth=223 +acceleration_skirt_brim=3000 +skin_overlap=20 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +quality_changes_name=empty +support_bottom_wall_count=1 +speed_support_roof=20.0 +z_seam_x=111.5 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=50.0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=223 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=223 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=0.4 +cross_infill_pocket_size=0 +infill_sparse_thickness=0.1 +prime_tower_brim_enable=True +ironing_monotonic=False +small_skin_width=0.8 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=3000 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_wall_0=20 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.8 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +platform_adhesion=0 +bridge_skin_density=80 +infill_sparse_density=0 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=5000.0 +machine_max_acceleration_x=9000 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.3 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=20 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=3000 +draft_shield_dist=10 +raft_surface_acceleration=3000 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=True +inset_direction=outside_in +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=110.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=20 +retraction_hop=1 +support_meshes_present=False +material_anti_ooze_retraction_speed=50 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=95.0 +infill_mesh_order=0 +raft_surface_fan_speed=100 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=20.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=4.898587196589413e-17 +experimental=0 +skin_material_flow_layer_0=95 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=100 +support_connect_zigzags=True +support_top_distance=0.1 +support_bottom_distance=0.1 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=graceful +cool_lift_head=False +raft_interface_line_width=0.6000000000000001 +support_type=everywhere +support_zag_skip_count=8 +retraction_combing=no_outer_surfaces +raft_interface_line_spacing=0.8 +draft_shield_enabled=False +material_break_preparation_temperature=210 +material_alternate_walls=False +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=50 +raft_surface_thickness=0.1 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=8 +alternate_extra_perimeter=False +support_bottom_offset=0.8 +speed_wall_x=40.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +support_extruder_nr_layer_0=0 +retraction_count_max=25 +jerk_infill=20 +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.4 +material_print_temperature=200 +acceleration_prime_tower=3000 +travel_avoid_distance=0.65625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=20 +support_brim_enable=True +support_bottom_density=100 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=95.0 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1.05 +raft_base_acceleration=3000 +wall_line_width_x=0.4 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.27 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=True +jerk_enabled=False +speed_wall_0_roofing=30.0 +skin_preshrink=0.8 +layer_height_0=0.27 +z_seam_position=back +support_interface_offset=0.8 +cool_min_layer_time=5 +bridge_wall_material_flow=100 +lightning_infill_straightening_angle=40 +speed_travel=120 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=20 +jerk_travel_enabled=False +jerk_wall_x=20 +machine_always_write_active_tool=False +retraction_amount=6.5 +machine_minimum_feedrate=0.0 +acceleration_print=3000 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=20 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=25 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=3000 +material_maximum_park_duration=7200 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=20 +infill_offset_x=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=20 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=40.0 +quality_name=Fine +support_offset=0.8 +machine_gcode_flavor=UltiGCode +wall_overhang_speed_factor=100 +top_layers=8 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5.0 +raft_base_line_width=0.8 +machine_max_feedrate_y=300 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.2 +retraction_prime_speed=25 +acceleration_travel_enabled=False +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=1.0 +raft_surface_line_width=0.4 +jerk_support_interface=20 +skin_angles=[] +support_tree_bp_diameter=7.5 +support_interface_pattern=zigzag +xy_offset=-0.010000000000000002 +support_roof_offset=0.8 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=3000 +material_no_load_move_factor=0.91 +travel_speed=120 +z_seam_corner=z_seam_corner_none +machine_max_feedrate_z=40 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=50 +skin_line_width=0.4 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.6666666666666665 +support_z_distance=0.1 +raft_base_speed=15 +jerk_travel_layer_0=20.0 +speed_support_interface=20.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.38 +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=0.2 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=193.54375 +jerk_support=20 +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +acceleration_wall_0_roofing=3000 +machine_max_feedrate_x=300 +material_final_print_temperature=185 +acceleration_roofing=3000 +raft_interface_jerk=20 +retraction_speed=25 +prime_tower_flow=100 +acceleration_wall_x=3000 +infill_overlap_mm=0.04 +wall_0_material_flow_roofing=100 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=20 +support_roof_wall_count=1 +skirt_gap=3 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=100 +retraction_extrusion_window=1 +skin_edge_support_thickness=0.4 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=0.8 +support_infill_rate=15 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=3000 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=1 +support_tree_top_rate=10 +jerk_travel=20 +retract_at_layer_change=False +support_roof_line_width=0.4 +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=3000 +support_brim_line_count=3 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=30.0 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=3000 +bridge_skin_density_2=100 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=3000 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/053.wkt b/stress_benchmark/resources/053.wkt new file mode 100644 index 0000000000..011e7091b9 --- /dev/null +++ b/stress_benchmark/resources/053.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((112612 86866, 113832 86959, 113832 86958, 114807 87070, 115782 87222, 116744 87411, 116744 87412, 117704 87641, 118647 87906, 119586 88211, 119586 88210, 120505 88550, 121413 88928, 122309 89343, 123184 89791, 124248 90392, 124248 90393, 125506 91206, 126484 91925, 127251 92534, 127994 93178, 128714 93853, 129584 94737, 130386 95654, 131001 96418, 131587 97208, 132141 98020, 132662 98854, 133149 99708, 133604 100584, 134020 101471, 134499 102605, 134907 103764, 135197 104703, 135516 105903, 135756 107095, 135913 108067, 136031 109043, 136030 109043, 136107 110025, 136147 111006, 136147 112231, 136057 113735, 135913 114930, 135757 115901, 135516 117096, 135198 118294, 134908 119233, 134498 120396, 134020 121530, 133604 122417, 133151 123289, 132664 124143, 132143 124977, 131589 125789, 131001 126582, 130386 127346, 129739 128086, 129063 128800, 128152 129686, 127251 130466, 126484 131076, 125491 131805, 124246 132609, 124246 132610, 123184 133209, 122309 133657, 121413 134072, 120505 134450, 119586 134790, 119586 134789, 118647 135094, 117704 135359, 116744 135588, 116744 135589, 115782 135778, 114554 135969, 113340 136083, 112358 136138, 111377 136153, 110395 136128, 109413 136064, 108431 135961, 107214 135784, 105753 135480, 104585 135163, 103646 134869, 102720 134537, 101812 134169, 100912 133764, 100035 133325, 99175 132851, 98330 132341, 97509 131799, 96511 131081, 95557 130305, 94630 129487, 93763 128624, 93095 127903, 92301 126976, 91553 125990, 90995 125184, 90462 124353, 89837 123282, 89183 121991, 88688 120848, 88332 119930, 88014 119000, 87734 118057, 87491 117104, 87287 116142, 87122 115173, 86995 114201, 86907 113218, 86858 112237, 86846 111014, 86907 109781, 86995 108798, 87122 107827, 87287 106858, 87491 105896, 87734 104943, 88014 104000, 88333 103069, 88688 102152, 89183 101009, 89837 99718, 90579 98445, 91420 97186, 92298 96027, 93095 95096, 93765 94376, 94645 93499, 95558 92695, 96509 91920, 97509 91201, 98330 90659, 99175 90148, 100035 89674, 100912 89235, 101812 88830, 102720 88463, 103646 88131, 104585 87837, 105533 87580, 106496 87361, 106496 87360, 107459 87180, 108431 87039, 109413 86936, 110395 86872, 111377 86847))) \ No newline at end of file diff --git a/stress_benchmark/resources/054.settings b/stress_benchmark/resources/054.settings new file mode 100644 index 0000000000..41766d28d4 --- /dev/null +++ b/stress_benchmark/resources/054.settings @@ -0,0 +1,629 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +machine_acceleration=4000 +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +bottom_skin_preshrink=1.2000000000000002 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=1.2 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=120 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=240.0 +support_interface_material_flow=98 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +machine_shape=rectangular +speed_travel_layer_0=75.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=235.0 +raft_jerk=8 +support_xy_distance=0.5 +bridge_skin_speed_2=10 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.1 +bottom_skin_expand_distance=1.2000000000000002 +speed_prime_tower=35.0 +speed_support=30 +speed_roofing=14 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=zigzag +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +raft_surface_jerk=8 +print_bed_temperature=70 +support_bottom_material_flow=98 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=4.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +jerk_support_roof=8 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=10 +material_initial_print_temperature=225.0 +layer_0_z_overlap=0.15 +support_roof_enable=False +acceleration_wall_x_roofing=1800 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.2 +support_bottom_pattern=concentric +bottom_thickness=1.2 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=1800 +skin_material_flow=98 +default_material_bed_temperature=70 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=98 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=1.2 +top_bottom_pattern_0=lines +resolution=0 +support_angle=60 +retraction_min_travel=1.5 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=6 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.075 +machine_feeder_wheel_diameter=10.0 +infill_overlap=15 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.02 +sub_div_rad_add=0.4 +roofing_line_width=0.4 +material_flow_layer_0=100 +support_roof_pattern=concentric +cool_fan_speed_min=40.0 +retraction_combing_max_distance=0 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=40.0 +raft_base_jerk=8 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.8 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=13.125 +speed_ironing=9.333333333333334 +gantry_height=0 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=0 +infill_enable_travel_optimization=True +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=8 +support_roof_density=100 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=140 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.2 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=1800 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=1 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=40 +raft_acceleration=1800 +bridge_fan_speed_3=0 +support_tree_angle_slow=40.0 +raft_speed=17.5 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_max_jerk_xy=20.0 +roofing_material_flow=98 +acceleration_infill=1800 +machine_extruder_count=1 +support_roof_line_distance=0.4 +zig_zaggify_support=True +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=3 +speed_print_layer_0=17.5 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=25 +initial_bottom_layers=6 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=215 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=1.0 +bridge_wall_speed=12.5 +support_interface_density=100 +line_width=0.4 +acceleration_ironing=1800 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=98 +prime_tower_position_x=215.0 +speed_slowdown_layers=2 +bridge_wall_min_length=1.9 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=True +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=True +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=35.0 +speed_layer_0=17.5 +infill=0 +bridge_skin_speed_3=10 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=1.6 +jerk_layer_0=8 +minimum_interface_area=1.0 +wall_0_material_flow_layer_0=100 +support_wall_count=1 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.4 +support_enable=True +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=25 +material_anti_ooze_retracted_position=-4 +layer_height=0.2 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.075 +jerk_print_layer_0=8 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.4 +retraction_retract_speed=25 +brim_line_count=9 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=8 +support_tree_tip_diameter=0.8 +bridge_skin_speed=10 +bridge_fan_speed=100 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=brim +min_odd_wall_line_width=0.34 +skirt_line_count=3 +support_tree_angle=60 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=1800 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=True +cool_min_temperature=235.0 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.4 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.1 +support_bottom_height=1 +machine_depth=220.0 +acceleration_skirt_brim=1800 +skin_overlap=5 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +quality_changes_name=empty +support_bottom_wall_count=0 +speed_support_roof=20.0 +z_seam_x=110.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=70 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=220.0 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=220.0 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=1.6 +infill_sparse_thickness=0.2 +prime_tower_brim_enable=True +ironing_monotonic=False +small_skin_width=0.8 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=1800 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_wall_0=8 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=1.2 +material_guid=69386c85-5b6c-421a-bec5-aeb1fb33f060 +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=25 +support_bottom_stair_step_height=0 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=3000.0 +machine_max_acceleration_x=9000 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=8 +brim_gap=0 +acceleration_enabled=True +wall_material_flow=98 +acceleration_wall=1800 +draft_shield_dist=10 +raft_surface_acceleration=1800 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=98 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=8 +retraction_hop=0.075 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=98 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=20.0 +support_material_flow=98 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=7.34788079488412e-17 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=70 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.3 +support_bottom_distance=0 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=buildplate +cool_lift_head=False +raft_interface_line_width=0.8 +support_type=buildplate +support_zag_skip_count=0 +retraction_combing=noskin +raft_interface_line_spacing=1.0 +draft_shield_enabled=False +material_break_preparation_temperature=235.0 +material_alternate_walls=False +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=35.0 +raft_surface_thickness=0.2 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=6 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=35.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +support_extruder_nr_layer_0=0 +retraction_count_max=90 +jerk_infill=8 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.4 +material_print_temperature=235.0 +acceleration_prime_tower=1800 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=98 +extruder_prime_pos_y=0 +jerk_print=8 +support_brim_enable=True +support_bottom_density=100 +brim_width=5 +ironing_only_highest_layer=False +wall_transition_length=0.4 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=1800 +wall_line_width_x=0.4 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.5 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=True +speed_wall_0_roofing=25.0 +skin_preshrink=1.2000000000000002 +layer_height_0=0.2 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=5 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=150.0 +group_outer_walls=True +material_is_support_material=False +material_flow=98 +jerk_roofing=8 +jerk_travel_enabled=True +jerk_wall_x=8 +machine_always_write_active_tool=False +retraction_amount=6 +machine_minimum_feedrate=0.0 +acceleration_print=1800 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=25 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=1800 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=8 +infill_offset_x=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=17.5 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=35.0 +quality_name=Normal +support_offset=0.0 +wall_overhang_speed_factor=100 +top_layers=6 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5.0 +raft_base_line_width=0.8 +machine_max_feedrate_y=299792458000 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=35.0 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.30000000000000004 +retraction_prime_speed=25 +acceleration_travel_enabled=True +brim_outside_only=False +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=1.0 +raft_surface_line_width=0.4 +jerk_support_interface=8 +support_tree_bp_diameter=7.5 +support_interface_pattern=concentric +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=1800 +material_no_load_move_factor=0.940860215 +travel_speed=100 +z_seam_corner=z_seam_corner_inner +machine_max_feedrate_z=299792458000 +speed=0 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=8 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.4 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=1.6800000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=0 +support_z_distance=0.15 +raft_base_speed=13.125 +jerk_travel_layer_0=10.0 +speed_support_interface=20.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.38 +material_flush_purge_speed=0.5 +acceleration_travel=3000 +support_roof_height=1 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=195.0 +jerk_support=8 +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.2000000000000002 +acceleration_wall_0_roofing=1800 +machine_max_feedrate_x=299792458000 +material_final_print_temperature=220.0 +acceleration_roofing=1800 +raft_interface_jerk=8 +retraction_speed=25 +prime_tower_flow=98 +acceleration_wall_x=1800 +infill_overlap_mm=0.06 +wall_0_material_flow_roofing=98 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=14 +support_roof_wall_count=0 +skirt_gap=5 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=6 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=1.2000000000000002 +support_infill_rate=0 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=1800 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=10 +jerk_travel=10 +retract_at_layer_change=False +support_roof_line_width=0.4 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.4 +skirt_brim_material_flow=98 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=1800 +support_brim_line_count=3 +build_volume_temperature=0 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=30 +wall_0_extruder_nr=-1 +retraction_hop_enabled=True +prime_tower_wipe_enabled=True +acceleration_support_bottom=1800 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=1800 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/054.wkt b/stress_benchmark/resources/054.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/054.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/055.settings b/stress_benchmark/resources/055.settings new file mode 100644 index 0000000000..d4d7856ea3 --- /dev/null +++ b/stress_benchmark/resources/055.settings @@ -0,0 +1,630 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +machine_acceleration=3000 +bridge_sparse_infill_max_density=0 +support_line_width=0.35 +bottom_skin_preshrink=1.0499999999999998 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.8 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=175 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=455 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=1.0499999999999998 +machine_shape=elliptic +speed_travel_layer_0=60.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=205 +raft_jerk=20 +support_xy_distance=0.7 +bridge_skin_speed_2=15.0 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.0875 +bottom_skin_expand_distance=1.0499999999999998 +speed_prime_tower=60 +speed_support=60 +speed_roofing=30.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=grid +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.35 +raft_surface_jerk=20 +print_bed_temperature=60 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +jerk_support_roof=20 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=190 +layer_0_z_overlap=0.15 +support_roof_enable=False +acceleration_wall_x_roofing=3000 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.2 +support_bottom_pattern=concentric +bottom_thickness=0.8 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=3000 +skin_material_flow=100 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=100 +machine_name=Unknown +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=0.8 +top_bottom_pattern_0=lines +resolution=0 +support_angle=50 +retraction_min_travel=0.7 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=50 +wipe_retraction_amount=4 +machine_max_acceleration_y=800 +optimize_wall_printing_order=False +retraction_hop_after_extruder_switch_height=1 +machine_feeder_wheel_diameter=10.0 +infill_overlap=10 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.0175 +sub_div_rad_add=0.35 +roofing_line_width=0.35 +material_flow_layer_0=100 +support_roof_pattern=concentric +cool_fan_speed_min=100 +retraction_combing_max_distance=0 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=20 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.7 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=20 +raft_interface_speed=22.5 +speed_ironing=20.0 +gantry_height=455 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=2.3333333333333335 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=20 +support_roof_density=100 +support_bottom_line_width=0.35 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.2 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=1 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=30.0 +raft_acceleration=3000 +bridge_fan_speed_3=0 +support_tree_angle_slow=33.333333333333336 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=20 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.35 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +speed_print_layer_0=30.0 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=50 +initial_bottom_layers=4 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=1.0 +bridge_wall_speed=15.0 +support_interface_density=100 +line_width=0.35 +acceleration_ironing=3000 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=195.0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.05 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=800 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=60.0 +speed_layer_0=30.0 +infill=0 +bridge_skin_speed_3=15.0 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=7.0 +jerk_layer_0=20 +minimum_interface_area=1.0 +wall_0_material_flow_layer_0=100 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.35 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=50 +material_anti_ooze_retracted_position=-4 +layer_height=0.2 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=1 +jerk_print_layer_0=20 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.35 +retraction_retract_speed=50 +brim_line_count=23 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.7 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=20 +support_tree_tip_diameter=0.7 +bridge_skin_speed=15.0 +bridge_fan_speed=100 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=brim +min_odd_wall_line_width=0.34 +skirt_line_count=1 +support_tree_angle=50 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=3000 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=200 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.35 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.0875 +support_bottom_height=1 +machine_depth=370 +acceleration_skirt_brim=3000 +skin_overlap=5 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +quality_changes_name=empty +support_bottom_wall_count=0 +speed_support_roof=40.0 +z_seam_x=0.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=370 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=185.0 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=7.0 +infill_sparse_thickness=0.2 +prime_tower_brim_enable=True +ironing_monotonic=False +small_skin_width=0.7 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=3000 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_wall_0=20 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=10 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=5000.0 +machine_max_acceleration_x=800 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.3 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=20 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=3000 +draft_shield_dist=10 +raft_surface_acceleration=3000 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=20 +retraction_hop=1 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=40.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=4.898587196589413e-17 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=65 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.1 +support_bottom_distance=0.1 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=graceful +cool_lift_head=False +raft_interface_line_width=0.7 +support_type=everywhere +support_zag_skip_count=9 +retraction_combing=all +raft_interface_line_spacing=0.8999999999999999 +draft_shield_enabled=False +material_break_preparation_temperature=200 +material_alternate_walls=False +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=60 +raft_surface_thickness=0.2 +machine_center_is_zero=True +roofing_monotonic=True +bottom_layers=4 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=60.0 +infill_line_width=0.35 +wall_line_width_0=0.35 +support_extruder_nr_layer_0=0 +retraction_count_max=90 +jerk_infill=20 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.35 +material_print_temperature=200 +acceleration_prime_tower=3000 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=20 +support_brim_enable=True +support_bottom_density=100 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.35 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=3000 +wall_line_width_x=0.35 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.25 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=30.0 +skin_preshrink=1.0499999999999998 +layer_height_0=0.25 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=5 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=120 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=20 +jerk_travel_enabled=True +jerk_wall_x=20 +machine_always_write_active_tool=False +retraction_amount=4 +machine_minimum_feedrate=0.0 +acceleration_print=3000 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=50 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=3000 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=20 +infill_offset_x=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=30.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=30.0 +quality_name=Normal +support_offset=0.75 +wall_overhang_speed_factor=100 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=0.8 +machine_max_feedrate_y=150 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.30000000000000004 +retraction_prime_speed=50 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=1.0 +raft_surface_line_width=0.35 +jerk_support_interface=20 +support_tree_bp_diameter=7.5 +support_interface_pattern=concentric +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=3000 +material_no_load_move_factor=0.940860215 +travel_speed=120 +z_seam_corner=z_seam_corner_inner +machine_max_feedrate_z=150 +speed=0 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=20 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.35 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=1.0499999999999998 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.3333333333333335 +support_z_distance=0.1 +raft_base_speed=22.5 +jerk_travel_layer_0=30.0 +speed_support_interface=40.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.3325 +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=1 +wall_0_inset=0.025000000000000022 +interlocking_depth=2 +prime_tower_position_y=155.625 +jerk_support=20 +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=1.0499999999999998 +acceleration_wall_0_roofing=3000 +machine_max_feedrate_x=150 +material_final_print_temperature=185 +acceleration_roofing=3000 +raft_interface_jerk=20 +retraction_speed=50 +prime_tower_flow=100 +acceleration_wall_x=3000 +infill_overlap_mm=0.035 +wall_0_material_flow_roofing=100 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=30.0 +support_roof_wall_count=0 +skirt_gap=3 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=4 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=1.0499999999999998 +support_infill_rate=15 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=3000 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=10 +jerk_travel=30 +retract_at_layer_change=True +support_roof_line_width=0.35 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.35 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=3000 +support_brim_line_count=3 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=60 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=3000 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=3000 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/055.wkt b/stress_benchmark/resources/055.wkt new file mode 100644 index 0000000000..521eb670b4 --- /dev/null +++ b/stress_benchmark/resources/055.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((1536 -3019, 1607 -2843, 1801 -2796, 2138 -2394, 2179 -2003, 2330 -1927, 2384 -1793, 2151 -1361, 1550 -1273, 1528 -1498, 1222 -1686, 1202 -1789, 1065 -1927, 1240 -2309, 1383 -2780, 1248 -3220, 1506 -3507)), ((-161 -2857, -136 -2927, -2 -2639, 123 -2650, 244 -2812, 365 -2732, 554 -2793, 686 -2662, 777 -2898, 612 -1891, 459 -1852, 355 -1932, 333 -2108, 270 -2093, 136 -2160, 113 -2072, -10 -2292, -74 -2211, -182 -2318, -293 -2784, -283 -2953)), ((851 -2133, 762 -2062, 1018 -2719)), ((1156 -4291, 1222 -4049, 1158 -3801, 1119 -3279, 967 -3206, 963 -3493, 719 -3539, 521 -3831, 271 -3964, 165 -4229, 332 -4224, 924 -4613, 1002 -4616))) \ No newline at end of file diff --git a/stress_benchmark/resources/056.settings b/stress_benchmark/resources/056.settings new file mode 100644 index 0000000000..ae77715c21 --- /dev/null +++ b/stress_benchmark/resources/056.settings @@ -0,0 +1,628 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +machine_acceleration=4000 +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +bottom_skin_preshrink=0.8 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.8 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=175 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=265 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=0.8 +machine_shape=rectangular +speed_travel_layer_0=75.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=190 +raft_jerk=20 +support_xy_distance=0.8 +bridge_skin_speed_2=15.0 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.1 +bottom_skin_expand_distance=0.8 +speed_prime_tower=60 +speed_support=60 +speed_roofing=30.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=grid +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +raft_surface_jerk=20 +print_bed_temperature=60 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=15 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +jerk_support_roof=20 +date=04-12-2023 +support_use_towers=True +minimum_support_area=0.0 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=180 +layer_0_z_overlap=0.15 +support_roof_enable=True +acceleration_wall_x_roofing=3000 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.1 +support_bottom_pattern=concentric +bottom_thickness=0.8 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=3000 +skin_material_flow=100 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.2 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=10 +wall_thickness=0.8 +top_bottom_pattern_0=lines +resolution=0 +support_angle=45 +retraction_min_travel=0.8 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=5.5 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.075 +machine_feeder_wheel_diameter=10.0 +infill_overlap=10 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.02 +sub_div_rad_add=0.4 +roofing_line_width=0.4 +material_flow_layer_0=100 +support_roof_pattern=concentric +cool_fan_speed_min=100 +retraction_combing_max_distance=0 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=20 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.8 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=22.5 +speed_ironing=20.0 +gantry_height=0 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=4.0 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=20 +support_roof_density=80 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.1 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=1 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=30.0 +raft_acceleration=3000 +bridge_fan_speed_3=0 +support_tree_angle_slow=30.0 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_max_jerk_xy=20.0 +roofing_material_flow=100 +acceleration_infill=3000 +machine_extruder_count=1 +support_roof_line_distance=0.5 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=1 +speed_print_layer_0=30.0 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=60 +initial_bottom_layers=8 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=1.0 +bridge_wall_speed=15.0 +support_interface_density=100 +line_width=0.4 +acceleration_ironing=3000 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=234 +speed_slowdown_layers=2 +bridge_wall_min_length=2.2 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=False +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=60.0 +speed_layer_0=30.0 +infill=0 +bridge_skin_speed_3=15.0 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=5.333333333333333 +jerk_layer_0=20 +minimum_interface_area=1.0 +wall_0_material_flow_layer_0=100 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=0.4 +support_enable=False +adhesion_extruder_nr=0 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=60 +material_anti_ooze_retracted_position=-4 +layer_height=0.1 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.075 +jerk_print_layer_0=20 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.4 +retraction_retract_speed=60 +brim_line_count=20 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=20 +support_tree_tip_diameter=0.8 +bridge_skin_speed=15.0 +bridge_fan_speed=100 +support_xy_overrides_z=z_overrides_xy +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=raft +min_odd_wall_line_width=0.34 +skirt_line_count=10 +support_tree_angle=45 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=True +acceleration_wall_0=3000 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=190 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.4 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.1 +support_bottom_height=1 +machine_depth=255 +acceleration_skirt_brim=3000 +skin_overlap=5 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=40.0 +z_seam_x=125.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=250 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=255 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=5.333333333333333 +infill_sparse_thickness=0.1 +prime_tower_brim_enable=True +ironing_monotonic=False +small_skin_width=0.8 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=3000 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_wall_0=20 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=15 +support_bottom_stair_step_height=0.3 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=5000.0 +machine_max_acceleration_x=9000 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.36 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=20 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=3000 +draft_shield_dist=10 +raft_surface_acceleration=3000 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=20 +retraction_hop=0.075 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=40.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=20 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=False +min_skin_width_for_expansion=4.898587196589413e-17 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.1 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.2 +support_bottom_distance=0 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=buildplate +cool_lift_head=False +raft_interface_line_width=0.8 +support_type=buildplate +support_zag_skip_count=5 +retraction_combing=no_outer_surfaces +raft_interface_line_spacing=1.0 +draft_shield_enabled=False +material_break_preparation_temperature=190 +material_alternate_walls=False +wall_0_wipe_dist=0.3 +switch_extruder_prime_speed=20 +speed_infill=60 +raft_surface_thickness=0.1 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=8 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=60.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +support_extruder_nr_layer_0=0 +retraction_count_max=90 +jerk_infill=20 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.4 +material_print_temperature=190 +acceleration_prime_tower=3000 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=20 +support_brim_enable=True +support_bottom_density=100 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=3000 +wall_line_width_x=0.4 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=30.0 +skin_preshrink=0.8 +layer_height_0=0.3 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=5 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=150 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=20 +jerk_travel_enabled=True +jerk_wall_x=20 +machine_always_write_active_tool=False +retraction_amount=5.5 +machine_minimum_feedrate=0.0 +acceleration_print=3000 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=60 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=3000 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=20 +infill_offset_x=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=30.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=30.0 +quality_name=Fine +support_offset=0.0 +wall_overhang_speed_factor=100 +top_layers=8 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5.0 +raft_base_line_width=0.8 +machine_max_feedrate_y=299792458000 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=60 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=10 +raft_interface_thickness=0.15000000000000002 +retraction_prime_speed=60 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=1.0 +raft_surface_line_width=0.4 +jerk_support_interface=20 +support_tree_bp_diameter=7.5 +support_interface_pattern=concentric +xy_offset=0 +support_roof_offset=0.0 +print_sequence=one_at_a_time +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=3000 +material_no_load_move_factor=0.940860215 +travel_speed=120 +z_seam_corner=z_seam_corner_inner +machine_max_feedrate_z=299792458000 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=20 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.4 +skirt_brim_extruder_nr=0 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=1.2000000000000002 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=4.0 +support_z_distance=0.2 +raft_base_speed=22.5 +jerk_travel_layer_0=30.0 +speed_support_interface=40.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.38 +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=1 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=219 +jerk_support=20 +roofing_pattern=lines +jerk_wall_x_roofing=20 +top_skin_preshrink=0.8 +acceleration_wall_0_roofing=3000 +machine_max_feedrate_x=299792458000 +material_final_print_temperature=180 +acceleration_roofing=3000 +raft_interface_jerk=20 +retraction_speed=60 +prime_tower_flow=100 +acceleration_wall_x=3000 +infill_overlap_mm=0.04 +wall_0_material_flow_roofing=100 +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=30.0 +support_roof_wall_count=0 +skirt_gap=3 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=5.5 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=0.8 +support_infill_rate=10 +meshfix_maximum_resolution=0.5 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=3000 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=30 +jerk_travel=30 +retract_at_layer_change=True +support_roof_line_width=0.4 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=False +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.01 +acceleration_support_roof=3000 +support_brim_line_count=3 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=60 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=3000 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=3000 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/056.wkt b/stress_benchmark/resources/056.wkt new file mode 100644 index 0000000000..b3f5ea60ac --- /dev/null +++ b/stress_benchmark/resources/056.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((186009 58534, 186103 58577, 186419 59548, 186633 59803, 186788 59503, 187003 58586, 187107 58533, 188081 58531, 188150 58622, 188407 59325, 188561 59555, 188656 59485, 188805 59118, 188990 58549, 189156 58551, 189524 59270, 189721 59554, 189777 59536, 189865 59369, 190044 58565, 190155 58532, 191302 58532, 191764 59135, 191763 60033, 191419 60283, 191762 60538, 191764 61896, 191726 62023, 190842 62302, 190710 62425, 190810 62524, 191728 62843, 191764 62948, 191765 63973, 191369 64217, 191761 64515, 191761 64892, 191135 65609, 190943 65590, 190772 65345, 190745 65705, 189895 65890, 189760 65964, 189760 66085, 189849 66223, 190717 66765, 190770 66856, 190768 67640, 190640 67671, 189870 67693, 189695 67785, 189659 67868, 189872 68104, 190770 68800, 190770 69445, 190696 69546, 190076 69785, 189806 69972, 189803 70066, 190052 70238, 190717 70491, 190765 70563, 190770 70900, 190728 71011, 190384 71383, 190259 71502, 190054 71826, 190143 71886, 190698 71904, 190772 71970, 190770 72281, 191872 72282, 192228 72741, 192228 74042, 192186 74161, 191404 74298, 191253 74392, 191283 74493, 191531 74701, 192197 75058, 192228 75168, 192228 76245, 192179 76377, 191496 76431, 191114 76508, 190978 76592, 191022 76735, 191982 77262, 192199 77415, 192228 77532, 192211 77929, 191437 78378, 190904 78578, 189993 78581, 189703 78715, 189605 78897, 189845 79096, 190701 79358, 190768 79450, 190769 80538, 190720 80673, 190156 80957, 190073 81107, 190670 81435, 190773 81529, 190767 83988, 190677 84097, 189802 84433, 189581 84639, 189707 84806, 190395 85088, 190612 85161, 190773 85271, 190777 87386, 190749 87728, 190610 87811, 189910 88060, 189591 88220, 189512 88329, 189582 88450, 189930 88623, 190735 88885, 190772 89025, 190772 89427, 191536 89294, 192038 89185, 194076 88814, 195111 88487, 196049 88331, 196574 88443, 197192 88699, 197371 89009, 197571 89484, 197641 90786, 197708 91649, 197958 91647, 197915 91388, 197885 90860, 197904 90481, 198046 90076, 198370 89519, 198698 89382, 199169 89253, 200495 89323, 201737 89367, 202620 89362, 203493 89296, 204386 89305, 204929 89355, 205342 89589, 205413 89728, 205535 90506, 205473 91456, 205413 91936, 205354 92879, 205284 93685, 205302 94391, 205350 95013, 205397 96013, 205389 96558, 205324 97215, 205270 97912, 205352 98268, 205482 98927, 205489 99494, 205421 100067, 205247 100792, 204862 101314, 204465 101324, 203954 101298, 203404 101225, 202442 101011, 201838 101083, 201423 101092, 200988 101029, 200988 101411, 201479 101469, 202180 101380, 202774 101415, 203072 101541, 203204 101678, 203511 102419, 203632 103158, 203609 103579, 203449 104452, 203315 104655, 203241 105302, 203268 105460, 203264 106351, 203311 106643, 203342 107239, 203586 107407, 203779 107189, 203968 107186, 204181 107354, 204389 107162, 205325 107193, 205659 107186, 206043 107592, 205987 107823, 206041 107953, 206067 108676, 205741 108928, 206096 109183, 206111 109923, 205863 110136, 205903 110236, 206090 110385, 206084 110889, 205807 111055, 205697 111168, 206084 111408, 206093 111706, 205590 111946, 205842 112165, 206081 112297, 206076 112782, 205746 113069, 205233 113059, 205058 112859, 204838 113061, 204425 113058, 204250 112946, 204103 113073, 203504 113059, 203312 113377, 202696 113612, 202492 113650, 200988 113575, 200988 113886, 202011 114051, 202752 114073, 203350 114200, 203742 114406, 203951 114607, 204106 114893, 204133 115093, 203976 117137, 203934 117268, 203980 117787, 203859 118602, 203644 119593, 203568 120092, 203559 120465, 203321 121332, 203097 121571, 202407 121620, 201991 121567, 201435 121518, 200988 121517, 200988 121732, 201843 121720, 202409 121803, 202720 121951, 202846 122099, 203099 122560, 203217 123394, 203097 123982, 203132 125013, 203103 125357, 203137 125592, 203190 126187, 203065 127326, 203103 127550, 203128 128315, 203097 129090, 203231 130454, 203194 131231, 203108 132388, 203022 132638, 202758 132750, 201886 132859, 200988 132837, 200988 133341, 201680 133319, 201879 133349, 202182 133475, 202314 133616, 202621 134364, 202742 135108, 202719 135461, 202765 135393, 203443 135417, 203647 135616, 203854 135437, 204473 135448, 204752 135721, 204971 135451, 206040 135387, 206320 135600, 206296 135819, 205952 136183, 205887 136314, 206310 136424, 206321 137032, 205856 137287, 205945 137399, 206277 137585, 206248 138146, 205882 138408, 205894 138502, 206286 138757, 206306 139423, 206011 139669, 206290 139900, 206291 140194, 206168 140385, 206295 140553, 206320 140919, 206159 141241, 205666 141226, 205330 140792, 205103 141213, 204521 141217, 204356 141241, 204138 141067, 203939 141233, 203327 141210, 203198 141191, 202586 141161, 202665 142321, 202871 143391, 202905 144017, 202888 144416, 202746 144841, 202420 145427, 202092 145570, 201629 145704, 200988 145673, 200988 145762, 201298 145762, 201792 145875, 202074 146014, 202335 146350, 202409 146550, 202458 147001, 202383 147351, 202369 147898, 202305 148468, 202406 148771, 202465 149541, 202460 150545, 202382 151006, 202350 152558, 202042 153121, 201763 153269, 201336 153397, 200988 153374, 200988 153709, 201260 153778, 201925 154157, 202403 154616, 202434 154696, 202425 155078, 202285 155925, 202235 156620, 202243 157174, 202284 157824, 202154 159503, 201791 159956, 201692 159999, 200988 160048, 200988 160249, 201483 160356, 202264 160728, 202421 160848, 202569 161308, 202685 161819, 202786 163215, 202852 163753, 202958 163475, 203064 163449, 203384 163482, 203573 163628, 203756 163536, 204436 163557, 204605 163773, 204787 163577, 204969 163577, 205183 163741, 205307 163555, 205772 163499, 205932 163629, 206056 163905, 206038 164160, 205750 164411, 206030 164633, 206020 165305, 205850 165488, 206002 165684, 205996 166035, 205729 166285, 206009 166530, 206012 166652, 205853 166885, 206053 167076, 206061 167257, 205876 167487, 206085 167701, 206051 168661, 206060 168952, 205655 169339, 205430 169282, 205301 169334, 204566 169362, 204318 169053, 204071 169389, 203326 169406, 203118 169154, 203010 169218, 202873 169386, 202788 169385, 202846 169888, 202852 170566, 202735 171347, 202792 171740, 202716 172408, 202462 173363, 202288 173734, 201537 173961, 200988 174002, 200988 174161, 201622 174152, 202001 174313, 202134 174452, 202440 175201, 202560 175946, 202541 176356, 202378 177254, 202237 177508, 202171 178112, 202196 178271, 202198 178879, 202238 179433, 202300 180576, 202351 181082, 202481 183135, 202692 184239, 202725 184855, 202708 185255, 202564 185678, 202240 186263, 201489 186528, 200988 186521, 200988 186583, 201527 186575, 202098 186646, 202821 186818, 203344 187204, 203367 187516, 203311 188357, 203044 189623, 203114 190228, 203122 190644, 203061 191012, 203035 191652, 202994 191824, 203084 192565, 203052 193151, 202932 193456, 202798 193589, 202084 193897, 201375 194015, 200984 193996, 200130 193833, 199888 193694, 199312 193628, 199161 193653, 198300 193646, 198051 193693, 196964 193757, 196224 193823, 194516 193939, 193499 194144, 192891 194182, 192526 194168, 192106 194019, 191548 193697, 191323 193081, 191287 192877, 191362 191310, 191272 191503, 191153 191633, 190431 191797, 189879 191829, 189132 191681, 188722 191560, 188395 191608, 187908 191763, 187626 191810, 186317 191797, 185845 191649, 185125 191616, 184723 191639, 184602 191698, 184132 191644, 183698 191188, 183635 190602, 183532 191433, 183122 191817, 182845 191867, 181881 191819, 180926 191861, 180491 191906, 180123 191810, 179983 191719, 179833 191484, 179598 190820, 179529 189467, 179448 189467, 179484 190641, 179437 191517, 179350 191891, 179081 192574, 178837 192880, 178666 192969, 178248 193082, 177347 193150, 176632 193142, 175910 193204, 175139 193340, 174091 193314, 173577 193333, 173070 193301, 172927 193280, 172261 193234, 172118 193215, 171606 193262, 170899 193345, 170361 193275, 169411 193244, 169275 193280, 168702 193220, 168400 192928, 167914 192736, 167516 192938, 167177 192939, 167077 193032, 166402 192853, 166262 192833, 166119 192689, 165763 191802, 165618 191164, 165542 190424, 165565 189859, 165608 189467, 165469 189467, 165490 190349, 165342 191221, 165291 192180, 165117 192386, 165299 192562, 165329 193022, 165187 193194, 165338 193340, 165377 194112, 165299 194261, 165151 194412, 164628 194372, 164430 194185, 164303 194265, 164243 194358, 163855 194368, 163761 194324, 163629 194176, 163557 194249, 163436 194290, 163282 194280, 163231 194397, 162517 194409, 162239 193891, 162197 193910, 161894 194344, 161600 194304, 161382 194043, 161155 194295, 160548 194282, 160308 193936, 160004 194320, 159882 194329, 159670 194215, 159490 193962, 159507 193122, 159589 192946, 159518 192805, 159564 192163, 160030 191985, 160005 191867, 159550 191625, 159541 191485, 159390 191253, 159388 190940, 159251 191481, 159175 191619, 158869 191882, 158689 191954, 158277 192004, 157961 191930, 157463 191913, 156943 191850, 156708 191928, 155970 192009, 155056 192005, 154636 191927, 153224 191895, 152716 191588, 152580 191309, 152464 190881, 152505 190138, 152454 189467, 151856 189467, 151800 189903, 151887 190611, 151852 191205, 151734 191502, 151600 191637, 150895 191941, 150179 192063, 149787 192043, 148933 191881, 148692 191739, 148115 191674, 147965 191701, 147091 191698, 146851 191741, 146200 191776, 145025 191871, 143315 191987, 142286 192192, 141694 192228, 141329 192216, 140910 192066, 140352 191743, 140215 191413, 140088 190946, 140160 189467, 139600 189467, 139545 189892, 139631 190611, 139598 191205, 139478 191503, 139346 191637, 138643 191941, 137925 192063, 137532 192043, 136678 191881, 136436 191739, 135860 191674, 135707 191701, 135128 191702, 133512 191805, 132769 191872, 131061 191987, 130029 192192, 129149 192243, 128655 192068, 128098 191743, 127871 191129, 127828 190886, 127906 189467, 127452 189467, 127467 190692, 127117 191541, 126957 191741, 126818 191766, 126816 191838, 126300 192118, 126319 192162, 126754 192463, 126713 192759, 126450 192973, 126704 193201, 126690 193812, 126326 194046, 126734 194352, 126746 194518, 126673 194661, 126378 194870, 125505 194851, 125340 194769, 125205 194840, 124560 194799, 124384 194369, 124253 194377, 123997 194809, 123506 194830, 123226 194394, 123105 194309, 122887 194906, 122260 194894, 122029 194416, 121920 194492, 121673 194889, 121282 194913, 120962 194528, 120962 194326, 121258 194002, 120941 193816, 120908 193194, 121381 192928, 121334 192826, 120883 192591, 120882 191842, 119592 191859, 119259 191643, 119131 191646, 118826 191884, 118254 191800, 118050 191715, 117920 191557, 117753 191203, 117738 191021, 117941 190114, 117982 190000, 118106 189467, 117285 189467, 117210 190847, 117044 191697, 116845 192256, 116721 192491, 116442 192770, 116297 192813, 115562 192774, 115012 192489, 114457 192362, 113844 192312, 113770 192443, 113739 192392, 113657 192561, 112459 192625, 112065 192676, 111393 192669, 110723 192557, 110117 192398, 109659 192392, 109318 192450, 108552 192528, 107965 192525, 106725 192412, 105945 192271, 104956 191937, 104653 191740, 103842 191012, 103606 188967, 103728 188223, 103708 187477, 103669 187070, 103738 186219, 103817 185770, 104029 185144, 104344 184506, 104474 184340, 104941 184201, 105522 184091, 106859 184061, 107313 184012, 107837 184052, 108461 184148, 109188 184380, 109362 184406, 109506 184563, 109619 184583, 109736 184781, 109887 184690, 110394 184639, 110465 184583, 110530 184411, 111315 184317, 112212 184437, 113777 184321, 114351 184395, 114977 184534, 115372 184491, 116036 184612, 116975 184940, 117311 185135, 117414 185467, 117521 185984, 117526 186704, 117482 187171, 118132 187171, 118007 186608, 117834 186229, 117732 185838, 117714 185566, 117752 185266, 117985 184939, 118199 184749, 118618 184662, 121112 184640, 120931 184530, 120932 184324, 121180 184085, 121888 184103, 122167 184584, 122266 184549, 122509 184093, 123116 184072, 123321 184245, 123486 184086, 124602 184143, 124818 184329, 124997 184134, 125447 184108, 125619 184249, 125773 184089, 126563 184070, 126813 184310, 126789 184606, 127196 184739, 127298 184812, 127502 185096, 127553 185294, 127561 185908, 127589 186004, 127568 186634, 127525 186963, 127541 187171, 127916 187171, 127874 186620, 127884 185727, 127932 185185, 128166 184773, 128307 184700, 128906 184606, 129314 184591, 130035 184638, 130513 184701, 131457 184760, 132272 184831, 132968 184813, 134039 184728, 134243 184750, 134896 184710, 136338 184846, 136576 184835, 136847 184761, 137506 184633, 138073 184623, 138646 184694, 139375 184867, 139891 185251, 139914 185563, 139855 186428, 139699 187171, 140171 187171, 140130 186620, 140138 185728, 140188 185185, 140420 184773, 140563 184700, 141161 184606, 141570 184591, 142291 184638, 142768 184701, 143713 184760, 144527 184831, 145224 184813, 146294 184728, 146497 184750, 147232 184708, 148735 184861, 149102 184762, 149762 184633, 150329 184623, 150900 184694, 151627 184866, 152147 185252, 152170 185562, 152112 186419, 151955 187171, 152396 187171, 152418 186573, 152374 185991, 152433 185418, 152583 185031, 152744 184817, 152987 184643, 153168 184599, 155018 184548, 155167 184568, 155765 184489, 156365 184518, 157085 184600, 157137 184623, 157740 184644, 158079 184619, 158886 184759, 159122 184942, 159231 185585, 159220 185980, 159229 186505, 159257 186664, 159254 186172, 159327 185681, 159731 184969, 160183 184504, 160263 184473, 160645 184481, 161655 184647, 162187 184672, 162740 184663, 163389 184623, 165071 184753, 165523 185116, 165566 185214, 165622 185710, 165569 187171, 165710 187171, 165673 186674, 165771 186031, 166048 185270, 166189 184990, 166347 184810, 166733 184596, 167032 184512, 168041 184377, 169983 184399, 170501 184378, 171226 184402, 172272 184660, 172812 184680, 173529 184788, 173961 184874, 174917 184954, 174963 184911, 175724 184755, 177037 184746, 177741 184726, 178152 184763, 178664 184918, 178831 185046, 179016 185750, 179157 186501, 179259 187171, 179626 187171, 179614 186407, 179626 185902, 179645 185643, 179604 185280, 179631 185009, 179690 184856, 179866 184647, 180149 184527, 180618 184515, 181660 184623, 182078 184609, 182894 184462, 183078 184483, 183608 184762, 183652 185065, 183794 184874, 184152 184718, 184580 184655, 186086 184606, 187222 184733, 187911 184827, 187971 184863, 188682 185021, 188997 184982, 189071 185061, 189252 185065, 189462 184899, 189989 184685, 190593 184670, 190899 184784, 191050 184925, 191401 185432, 191464 185709, 191525 186297, 191563 186819, 191618 186725, 191760 186654, 192537 186530, 193488 186592, 193967 186653, 194910 186713, 195725 186783, 196422 186765, 197042 186715, 198008 186668, 198692 186688, 198692 186420, 197966 186428, 197119 186497, 196225 186489, 195681 186435, 195269 186190, 195159 185965, 195090 184987, 195137 184228, 195196 183726, 195256 182735, 195327 181888, 195308 181147, 195260 180494, 195213 179492, 195221 178873, 195286 178181, 195340 177452, 195259 177077, 195110 176288, 195122 175786, 195189 175188, 195366 174420, 195748 173880, 196147 173868, 196904 173911, 198168 174195, 198692 174130, 198692 173905, 197376 173904, 196522 173844, 195810 173609, 195591 173498, 195327 173231, 195283 173091, 195282 172359, 195541 171730, 195629 170956, 195620 170615, 195495 170547, 195543 170514, 195366 170433, 195323 169697, 195251 169131, 195142 169261, 194866 169289, 194695 169161, 194536 169311, 194052 169353, 193682 169145, 193732 168655, 194347 168354, 194457 168264, 194482 168147, 193726 167939, 193719 167327, 194478 167067, 194582 166958, 194477 166853, 193724 166560, 193699 166457, 193732 166135, 193884 165946, 193790 165764, 193814 165092, 194041 164921, 193828 164729, 193827 164535, 193970 164333, 193824 164237, 193754 163772, 193916 163575, 194153 163470, 194436 163479, 194686 163727, 194901 163484, 195200 163491, 195290 162724, 195547 161719, 195684 161460, 196333 160560, 197949 160262, 198375 160243, 198692 160283, 198692 159963, 198209 159922, 197550 159900, 196551 159925, 195620 159759, 195051 159418, 194967 158799, 194921 158031, 195015 156858, 194932 155252, 195013 154725, 195239 154169, 195481 153921, 195654 153825, 196174 153795, 196908 153829, 197381 153711, 197476 153725, 197994 153730, 198692 153700, 198692 153532, 197155 153444, 196446 153493, 195873 153432, 195486 153264, 195271 153088, 195098 152819, 195054 152623, 195003 150574, 195028 150438, 194937 149923, 194971 149106, 195099 147795, 195074 147208, 195212 146331, 195398 146071, 196041 145953, 196434 145964, 196959 145954, 197199 145907, 197721 145896, 198692 145906, 198692 145586, 197995 145603, 197297 145659, 196405 145650, 195862 145599, 195450 145354, 195377 145207, 195258 144390, 195318 143392, 195378 142888, 195437 141897, 195497 141176, 195302 140931, 195101 141193, 194738 141218, 194525 141015, 194300 141224, 193954 141219, 193535 140898, 193505 140837, 193510 140494, 193718 140348, 193743 140262, 193561 140045, 193665 139587, 194141 139406, 194300 139309, 193976 138925, 193978 138883, 193699 138680, 193627 138219, 194066 137917, 194012 137841, 193529 137636, 193528 137057, 194050 136730, 194033 136620, 193490 136411, 193453 135516, 193768 135338, 194390 135339, 194587 135545, 194630 135543, 194800 135335, 195119 135352, 195343 135737, 195273 135191, 195371 134350, 195545 133588, 195906 133044, 196241 133018, 197083 133076, 198350 133359, 198692 133317, 198692 132757, 198274 132755, 197264 132823, 196234 132722, 195893 132536, 195520 132165, 195379 131604, 195462 130427, 195554 129855, 195546 129451, 195589 128604, 195626 128183, 195556 127303, 195548 127072, 195341 125182, 195410 124360, 195426 123761, 195353 122846, 195526 122272, 195610 122107, 196288 121873, 197264 121673, 198692 121771, 198692 121342, 198211 121346, 197621 121312, 196836 121238, 196234 121040, 196046 120904, 195803 120540, 195746 120326, 195764 119750, 195856 119543, 195928 118997, 196053 118432, 195997 118170, 195987 117463, 196098 116368, 196253 115730, 196424 114363, 196806 113837, 197116 113722, 197580 113638, 198287 113763, 198692 113780, 198692 113569, 198187 113607, 197296 113599, 196752 113547, 196340 113307, 196221 112922, 196091 113040, 195612 113082, 195245 112866, 195293 112381, 196007 112033, 196042 111873, 195290 111667, 195282 111055, 196038 110794, 196143 110687, 196030 110579, 195284 110290, 195259 110190, 195294 109865, 195446 109675, 195353 109490, 195378 108826, 195607 108653, 195389 108453, 195389 108253, 195520 108059, 195393 107975, 195317 107508, 195490 107297, 195712 107199, 196008 107206, 196247 107446, 196338 107336, 196277 106308, 196412 104650, 196330 104277, 196200 103592, 196192 103000, 196261 102408, 196435 101647, 196820 101108, 196959 101074, 197981 101144, 198692 101300, 198692 100940, 198476 100767, 198171 100055, 198050 99346, 198069 98954, 198232 98099, 198373 97857, 198439 97282, 198412 97128, 198412 96550, 198372 96024, 198310 94935, 198259 94447, 198224 93943, 198034 93943, 198109 94648, 198119 95193, 197923 95631, 197786 95721, 197169 95885, 196748 95949, 195991 95989, 195482 95986, 194493 96041, 194143 96050, 193559 96082, 193015 96155, 192265 96298, 191715 96388, 191589 96389, 190913 96506, 189235 96568, 188870 96693, 188098 96930, 187286 96986, 186454 96937, 186163 96861, 185639 96576, 185589 96443, 185541 95407, 185674 94137, 185631 93943, 185236 93943, 185213 94534, 185260 95117, 185198 95690, 185031 96077, 184855 96291, 184584 96465, 184388 96507, 182341 96558, 182205 96532, 182065 96577, 181529 96619, 180871 96590, 180079 96508, 180021 96484, 179358 96464, 178977 96489, 178097 96347, 177816 96151, 177718 95523, 177729 95128, 177721 94603, 177672 94364, 177671 93943, 177386 93943, 177426 94488, 177418 95381, 177366 95923, 177123 96335, 176978 96408, 176354 96501, 175932 96515, 175179 96467, 174680 96407, 173700 96348, 172854 96277, 172128 96295, 171481 96345, 170928 96371, 170805 96358, 170041 96397, 169190 96319, 168962 96280, 168377 96273, 168094 96346, 167411 96475, 166818 96483, 166225 96414, 165466 96240, 164927 95855, 164907 95627, 164626 96131, 164171 96602, 164093 96635, 163709 96625, 162692 96458, 162168 96436, 161613 96444, 160963 96485, 159280 96352, 158831 95992, 158786 95893, 158732 95398, 158785 93943, 158457 93943, 158384 94887, 158198 95746, 157774 96601, 157645 96766, 157183 96904, 156601 97016, 155261 97047, 154807 97095, 154283 97055, 153659 96958, 152933 96726, 152758 96700, 152614 96545, 152501 96525, 152384 96327, 152233 96416, 151726 96469, 151654 96524, 151590 96697, 150813 96790, 149907 96671, 148594 96768, 147915 96739, 147141 96572, 146748 96615, 146084 96495, 145145 96167, 144809 95973, 144706 95641, 144599 95124, 144594 94402, 144636 93943, 143991 93943, 144114 94498, 144288 94875, 144388 95269, 144406 95542, 144368 95842, 144136 96169, 143921 96358, 143502 96446, 142795 96445, 141078 96470, 140262 96441, 139868 96362, 139641 96058, 139177 96034, 139026 95956, 138875 95756, 138625 95679, 138295 95650, 138189 95760, 137772 95961, 137361 95899, 137290 95977, 136623 96270, 136481 96413, 135590 96547, 135060 96427, 134822 96296, 134620 96011, 134567 95814, 134559 95198, 134531 95103, 134550 94474, 134579 93943, 134204 93943, 134246 94488, 134236 95379, 134188 95923, 133954 96335, 133813 96408, 133029 96528, 132226 96480, 131607 96407, 130663 96348, 129848 96277, 129152 96295, 128530 96345, 127997 96371, 127877 96358, 127133 96398, 126326 96319, 125631 96263, 125274 96346, 124614 96475, 124045 96483, 123474 96414, 122747 96241, 122229 95856, 122206 95544, 122261 94708, 122418 93943, 121948 93943, 121990 94488, 121982 95380, 121932 95923, 121698 96335, 121557 96408, 120959 96500, 120552 96515, 119829 96467, 119352 96407, 118407 96348, 117593 96277, 116559 96304, 116418 97075, 116435 97645, 116490 97821, 116593 98337, 116374 98685, 115787 98830, 114742 98766, 114205 98874, 113858 98890, 113782 98928, 112692 99213, 112039 99270, 111075 98988, 110627 98937, 109469 98970, 109006 98954, 108322 99024, 107549 98907, 107220 98918, 106989 98779, 106917 98677, 106857 98290, 106900 98049, 106839 97608, 106862 97363, 106672 96862, 106610 96473, 106649 95613, 106799 94863, 107516 94863, 107516 94843, 110504 93831, 110504 90791, 107516 89779, 107514 89759, 106996 89759, 106905 89137, 106989 88349, 106965 86995, 106932 86653, 106978 86135, 107045 85982, 107225 85840, 107387 85792, 107903 85826, 108351 85902, 108865 85864, 109463 85838, 109847 85777, 110404 85841, 110628 85900, 111055 85903, 111439 85961, 111939 85956, 112041 85944, 112619 86022, 113261 85938, 113682 85812, 114532 85725, 114692 85763, 115249 85772, 115804 85853, 116325 85975, 116583 86243, 116620 86358, 116498 86984, 116525 87767, 116625 89267, 118799 89122, 119818 88916, 120426 88880, 120791 88892, 121210 89040, 121768 89365, 121905 89694, 122032 90158, 121958 91647, 122520 91649, 122574 91201, 122488 90495, 122522 89903, 122641 89604, 122774 89471, 123487 89163, 124195 89045, 124590 89064, 125442 89227, 125637 89360, 126260 89434, 126413 89407, 126992 89406, 128608 89303, 129349 89236, 131051 89122, 132089 88916, 132682 88880, 133046 88892, 133466 89040, 134024 89365, 134249 89979, 134285 90183, 134214 91647, 134670 91647, 134650 90418, 135007 89559, 135163 89367, 135665 89272, 136355 89268, 136879 89295, 138316 89531, 139834 89428, 140017 89471, 140127 89547, 140300 89391, 140960 89270, 142527 89247, 142861 89465, 142988 89461, 143293 89224, 143868 89308, 144069 89393, 144167 89493, 144367 89904, 144381 90085, 144179 90994, 144138 91107, 144012 91647, 144836 91647, 144907 90275, 145076 89410, 145274 88849, 145401 88617, 145678 88336, 145823 88295, 146555 88332, 147108 88619, 147847 88787, 148276 88793, 148349 88662, 148379 88713, 148472 88523, 148758 88530, 149662 88481, 150055 88432, 150720 88437, 151397 88551, 151755 88670, 152461 88716, 152802 88656, 153569 88580, 154158 88583, 155396 88695, 156178 88838, 157138 89151, 157413 89333, 158177 90001, 158283 90137, 158460 91648, 158885 91649, 158861 90753, 159021 89837, 159371 89252, 160098 89152, 160990 89141, 161778 89203, 162386 89199, 163350 89116, 164064 89216, 164616 89440, 164866 89682, 164962 89853, 164991 90375, 164959 91072, 165066 91648, 165232 91648, 165289 91198, 165197 90496, 165234 89901, 165358 89603, 165497 89471, 166236 89164, 166975 89043, 167391 89065, 168271 89227, 168475 89361, 169121 89434, 169280 89407, 170170 89411, 170430 89367, 171562 89303, 172068 89252, 174119 89121, 175163 88916, 175800 88880, 176180 88892, 176616 89040, 177196 89365, 177431 89979, 177468 90173, 177395 91649, 177573 91647, 177534 91006, 177529 90264, 177644 89769, 177780 89487, 178115 89227, 178317 89152, 178768 89104, 179116 89178, 179664 89194, 180233 89258, 180534 89159, 181306 89096, 182308 89102, 182947 89185, 184330 89213, 184886 89519, 185035 89799, 185163 90227, 185118 90970, 185173 91647, 185385 91648, 185292 91219, 185260 90625, 185350 90314, 185446 90188, 186175 89778, 187007 89542, 188105 89593, 187391 89296, 187344 89186, 187349 88221, 187423 88145, 187973 87974, 188225 87843, 188255 87715, 187952 87495, 187346 87197, 187342 86379, 187377 86244, 188145 86052, 188295 85903, 188074 85677, 187423 85308, 187352 85204, 187380 85077, 188062 84739, 188109 84631, 188024 84520, 187347 84195, 187342 83376, 187398 83219, 188273 82918, 188590 82691, 188501 82564, 188317 82445, 187402 82126, 187345 82020, 187346 81783, 187612 81295, 187558 81201, 187342 81086, 187637 80670, 187344 80374, 187344 79711, 187381 79586, 188126 79251, 188279 79077, 188115 78915, 187396 78581, 186709 78581, 186017 78285, 186057 78063, 186895 77771, 187123 77584, 187174 77478, 187065 77372, 186816 77295, 186115 77199, 186051 77157, 186018 77060, 186018 76474, 186054 76357, 186855 76144, 187045 75984, 187038 75932, 186857 75775, 186052 75465, 186020 75303, 186049 75224, 186494 74890, 186758 74528, 186756 74426, 186638 74367, 186060 74345, 186018 74234, 186018 73269, 186085 73131, 186316 72941, 186533 72646, 187619 72281, 187848 72281, 188292 71788, 188325 71658, 188121 71590, 187376 71662, 187343 71568, 187342 69585, 187409 69513, 188060 69189, 188116 69063, 187943 68921, 187344 68628, 187347 67493, 187905 67152, 187928 67075, 187892 67001, 187349 66658, 187363 66228, 187807 65763, 187826 65681, 187678 65609, 187192 65579, 186981 64640, 186807 64313, 186641 64466, 186269 65556, 186188 65604, 185498 65610, 185075 65230, 184931 65121, 184697 64431, 184691 64299, 184622 64190, 184585 63964, 184616 63905, 185283 63597, 185446 63479, 185418 63397, 185324 63321, 184865 63172, 184715 63614, 184618 63761, 183706 63754, 183458 62918, 183316 62828, 183208 62978, 182905 63647, 182809 63755, 182127 63756, 182036 63725, 181916 63172, 181815 62867, 181731 62816, 181560 62997, 181226 63680, 181111 63753, 181023 63734, 180715 63013, 180571 63009, 180228 63753, 179578 63759, 179421 63708, 179164 62881, 179004 62549, 178908 62527, 178710 62870, 178458 63721, 178156 63755, 178104 63725, 178002 64266, 177827 64760, 177632 65082, 177253 65177, 176297 65175, 176220 65073, 175987 64339, 175838 64237, 175672 64470, 175474 65101, 175393 65175, 174513 65177, 174426 65132, 174254 64415, 174115 64213, 173901 64361, 173502 65148, 173065 65159, 172481 64586, 172481 64494, 172069 63760, 171627 63759, 171543 63723, 171268 63031, 171155 62856, 171087 62868, 170969 63065, 170774 63579, 170667 63754, 170453 63759, 170330 63702, 169715 62979, 169528 62809, 169402 62771, 169346 62999, 169413 63728, 169288 63758, 167573 63758, 167279 63063, 167175 62987, 167040 63139, 166786 63755, 165815 63753, 165467 63152, 165370 63213, 165060 63755, 164719 63750, 164373 63376, 164225 63266, 164081 63719, 163970 63755, 163970 64828, 163529 65167, 162124 65169, 162036 65098, 161932 64458, 161858 64200, 161783 64145, 161724 64154, 161484 64427, 161147 65135, 161043 65167, 159928 65167, 159801 65127, 159749 64370, 159668 64003, 159560 63881, 159394 64099, 158898 64951, 158746 65137, 158642 65168, 158314 65151, 157859 64417, 157706 64005, 157682 63759, 157505 63755, 157429 63575, 157294 62815, 157207 62727, 157142 62740, 156980 62896, 156514 63760, 155769 63755, 155729 62812, 155619 62650, 155337 62910, 155220 63109, 154893 63611, 154740 63755, 154227 63755, 154132 63670, 153872 62916, 153713 62778, 153569 62986, 153308 63712, 153213 63759, 152932 63744, 152519 63324, 152171 63050, 152110 63105, 152105 63669, 152052 63754, 151282 63758, 151177 63697, 150908 62845, 150777 62548, 150669 62485, 150564 62584, 150426 62890, 150169 63711, 150056 63759, 149032 63757, 148962 63602, 148818 63021, 148816 64726, 148533 65096, 148436 65165, 148346 65131, 148181 64545, 147982 64159, 147812 64046, 147711 64145, 147488 64922, 147351 65148, 146892 65166, 146808 65130, 146573 64210, 146404 63959, 146223 64124, 145854 65142, 145757 65176, 144978 65175, 144852 65129, 144672 64471, 144676 65218, 144590 65256, 144530 65092, 144531 64469, 144610 64383, 144668 64458, 144509 64089, 144407 64026, 144242 64199, 143946 65143, 143841 65175, 143479 65159, 143394 64827, 143330 64774, 143017 64848, 142931 64832, 142664 64329, 142518 63759, 141687 63759, 141571 63725, 141231 62782, 141098 62574, 141015 62595, 140896 62764, 140684 63379, 140619 63605, 140525 63749, 138412 63758, 138329 63609, 138025 62648, 137882 62511, 137790 62545, 137645 62838, 137400 63685, 137320 63754, 136629 63759, 136533 63707, 136300 63177, 136188 63092, 136075 63215, 135822 63755, 135174 63749, 135170 63715, 134853 63953, 135296 64214, 135302 64762, 134531 65610, 133867 65609, 133780 65559, 133461 64595, 133274 64326, 133138 64507, 132872 65572, 132765 65609, 131867 65608, 131755 65565, 131453 64757, 131310 64588, 131183 64732, 130960 65413, 130867 65600, 130726 65594, 130281 64721, 130132 64594, 129981 64910, 129840 65611, 128581 65608, 128122 65010, 128128 64103, 128446 63878, 128360 63752, 128127 63605, 128120 62240, 128150 62134, 128965 61870, 129180 61706, 128946 61557, 128250 61335, 128127 61260, 128122 60163, 128376 60033, 128513 59913, 128139 59652, 128124 59251, 128756 58531, 128958 58563, 129302 59103, 129521 59330, 129615 59193, 129742 58533, 130441 58532, 130793 59299, 130912 59421, 131042 59222, 131248 58532, 132686 58532, 132937 59607, 133019 59767, 133120 59826, 133298 59496, 133615 58580, 133689 58538, 134386 58532, 134963 59042, 135111 59448, 135200 59839, 135263 59952, 135289 60219, 134587 60541, 134414 60695, 134454 60764, 135118 61000, 135143 60329, 136062 60327, 136187 60370, 136431 61117, 136539 61302, 136637 61350, 136688 61299, 137022 60423, 137107 60330, 138012 60329, 138240 61100, 138351 61256, 138498 61120, 138818 60415, 138909 60329, 139582 60328, 139673 60357, 139834 61065, 139943 61271, 140112 61168, 140505 60387, 140606 60329, 140691 60358, 140989 61074, 141110 61074, 141186 60981, 141454 60333, 142204 60329, 142302 60399, 142518 61119, 142518 60428, 142625 59871, 142799 59376, 142991 59073, 143379 58965, 144331 58968, 144404 59052, 144564 59610, 144660 59810, 144766 59903, 144848 59847, 144960 59659, 145137 59067, 145250 58967, 146187 58968, 146379 59781, 146514 59924, 146674 59831, 147118 58998, 147207 58967, 147586 59003, 148149 59554, 148138 59626, 148630 60534, 148829 60327, 150073 60326, 150186 60357, 150409 60988, 150531 61207, 150637 61217, 150790 60910, 150974 60415, 151058 60333, 151353 60352, 152088 61224, 152304 61327, 152361 61063, 152312 60382, 152363 60328, 154084 60327, 154164 60403, 154424 61003, 154517 61094, 154593 61073, 154701 60878, 154907 60364, 154986 60329, 155929 60328, 156228 60905, 156324 60908, 156618 60357, 156991 60333, 157388 60763, 157521 60810, 157633 60329, 157670 60329, 157672 59626, 157953 58961, 158198 58991, 158327 59413, 158522 59900, 158749 60157, 158845 60063, 158924 59866, 158998 59238, 159091 58961, 159808 58963, 159891 58999, 160128 59888, 160271 60070, 160344 60044, 160483 59876, 160804 58990, 161016 58983, 161390 59545, 161639 59752, 161796 59800, 161863 59692, 161894 59183, 161963 58966, 162949 58961, 163079 59010, 163293 59245, 163592 59425, 163899 60327, 164228 60346, 164274 60428, 164399 61217, 164482 61346, 164614 61321, 164792 61088, 165031 60599, 165213 60331, 165839 60327, 165943 60376, 165978 61233, 166061 61414, 166198 61378, 166442 61062, 166890 60375, 167052 60327, 167479 60329, 167566 60394, 167809 61065, 167955 61318, 168109 61192, 168395 60388, 168460 60336, 168754 60333, 168840 60372, 169350 60926, 169517 61023, 169593 61026, 169607 60421, 169663 60327, 170400 60327, 170532 60367, 170773 61170, 170928 61529, 171023 61606, 171112 61547, 171283 61222, 171517 60433, 171571 60353, 171810 60327, 171810 59418, 172117 59026, 172249 58977, 172295 59047, 172465 59654, 172671 60005, 172810 60095, 172921 59983, 173131 59269, 173257 59005, 173342 58967, 173813 58996, 173950 59549, 173947 58971, 173982 58832, 174140 58664, 174237 58643, 174393 58782, 174451 58908, 174453 59603, 174386 59686, 174015 59691, 173970 59630, 174100 60038, 174210 60171, 174352 60087, 174504 59755, 174774 59003, 174869 58967, 175655 58967, 175771 59007, 176022 59891, 176187 60115, 176270 60085, 176400 59866, 176683 59000, 176784 58967, 177149 58982, 177228 59310, 177295 59370, 177606 59295, 177701 59312, 177947 59763, 178123 60329, 180015 60327, 180142 60364, 180526 61420, 180678 61504, 180873 61186, 180929 60996, 181145 60360, 181246 60327, 183300 60327, 183381 60471, 183617 61246, 183769 61541, 183872 61567, 184016 61415, 184319 60384, 184409 60329, 184878 60327, 185037 60201, 184584 59944, 184585 59364, 185353 58529) (134522 62416, 134259 62575, 134363 62683, 135128 62931, 135122 62204)), ((97620 189481, 98105 189484, 98402 189880, 98682 189506, 99133 189521, 99353 189904, 99488 190052, 99540 190011, 99773 189535, 100163 189528, 100376 189655, 100554 189537, 100854 189538, 101149 189934, 101106 190665, 100816 190880, 100783 191000, 101119 191255, 101128 191724, 100890 191986, 101148 192215, 101177 192747, 100878 192978, 100918 193081, 101189 193251, 101183 193525, 100895 193807, 101076 193895, 101193 194005, 101173 194469, 100968 194762, 100526 194774, 100347 194705, 100248 194778, 99908 194791, 99743 194631, 99590 194728, 99023 194731, 98879 194546, 98826 194535, 98614 194743, 98399 194740, 98200 194532, 98025 194721, 97550 194724, 97310 194305, 97216 194327, 97017 194752, 96489 194711, 96408 194766, 96068 194771, 95847 194601, 95895 194054, 96197 193802, 95917 193543, 95921 192959, 96176 192732, 95913 192503, 95878 191901, 96343 191670, 96544 191528, 96451 191422, 95828 191193, 95845 190514, 95972 190369, 95841 190222, 95820 189796, 96005 189459, 96540 189443, 96614 189520, 96819 189420)), ((78409 85926, 79170 86070, 79497 86153, 80092 86140, 81112 86055, 81408 86248, 81455 86364, 81440 86451, 81496 87114, 81472 87500, 81531 88107, 81737 89051, 81809 89759, 81022 89759, 81016 89779, 78028 90791, 78028 93831, 81016 94843, 81016 94863, 81683 94863, 81614 95675, 81585 95794, 81573 96378, 81457 96934, 81447 98258, 81249 98659, 81186 98704, 80655 98710, 80286 98680, 79616 98706, 78875 98832, 78365 98932, 77941 98931, 77158 98992, 76469 98945, 75813 98846, 75016 98889, 74483 98879, 73245 98829, 73005 98883, 72366 98914, 72116 98854, 71862 98708, 71548 98227, 71547 97582, 71531 97460, 71556 96933, 71502 96426, 71115 96245, 70719 95676, 70656 95399, 70594 94811, 70559 94281, 70502 94382, 70127 94505, 69356 94563, 68633 94514, 68154 94455, 67210 94395, 66395 94324, 65698 94343, 65077 94393, 64546 94417, 64426 94404, 63828 94441, 63828 94704, 65001 94611, 65894 94619, 66438 94671, 66851 94917, 66923 95063, 67015 95694, 67032 96121, 66984 96879, 66922 97382, 66864 98372, 66793 99226, 66810 99959, 66860 100613, 66886 101171, 66873 101296, 66912 102082, 66777 103497, 66790 103747, 66862 104031, 66990 104724, 66999 105320, 66931 105920, 66756 106678, 66397 107222, 65975 107239, 65229 107198, 63952 106913, 63828 106930, 63828 107202, 65003 107205, 65421 107250, 66003 107388, 66529 107610, 66793 107875, 66838 108017, 66838 108749, 66581 109372, 66491 110150, 66500 110492, 66623 110561, 66578 110592, 66754 110676, 66766 111034, 66848 111859, 66913 112251, 66938 112906, 66866 113597, 66750 114211, 66766 114668, 66834 115005, 66941 115766, 66966 116355, 66920 117598, 66830 118384, 66573 119389, 66437 119646, 65789 120547, 64171 120846, 63828 120866, 63828 121182, 64570 121206, 65557 121183, 66482 121339, 67070 121691, 67172 122504, 67180 123310, 67105 124249, 67188 125855, 67109 126383, 66881 126935, 66639 127186, 66410 127291, 65946 127311, 65214 127278, 64740 127396, 64584 127373, 63828 127384, 63828 127596, 64953 127663, 65674 127611, 66247 127675, 66636 127842, 66850 128018, 67020 128289, 67065 128485, 67117 130532, 67090 130669, 67183 131180, 67149 132000, 67019 133313, 67045 133906, 66906 134776, 66707 135057, 66080 135154, 65685 135144, 65159 135152, 64921 135201, 64400 135210, 63828 135205, 63828 135528, 64823 135447, 65714 135455, 66258 135509, 66670 135753, 66741 135901, 66835 136530, 66850 136957, 66801 137715, 66742 138218, 66682 139209, 66612 140065, 66630 140797, 66680 141450, 66727 142454, 66717 143071, 66598 144492, 66680 144867, 66810 145560, 66818 146156, 66749 146756, 66574 147524, 66190 148064, 65793 148076, 65048 148033, 63828 147763, 63828 148354, 64846 148282, 65886 148386, 66227 148571, 66600 148941, 66741 149503, 66659 150678, 66566 151253, 66574 151657, 66530 152523, 66491 152921, 66564 153804, 66572 154036, 66780 155918, 66709 156746, 66694 157347, 66766 158262, 66594 158836, 66510 159000, 65827 159237, 64859 159434, 63828 159367, 63828 159763, 64500 159794, 65282 159870, 65940 160107, 66075 160203, 66317 160566, 66374 160782, 66356 161358, 66264 161565, 66193 162108, 66067 162676, 66124 162935, 66133 163645, 66021 164751, 65868 165378, 65696 166745, 65314 167269, 65004 167386, 64540 167468, 63828 167351, 63828 167498, 64825 167507, 65368 167559, 65780 167801, 65851 167947, 65975 168760, 65913 169745, 65852 170243, 65792 171225, 65722 172074, 65740 172798, 65790 173444, 65837 174436, 65829 175051, 65762 175737, 65708 176458, 65790 176829, 65920 177516, 65927 178106, 65859 178700, 65687 179455, 65300 179996, 64903 180008, 64396 179979, 63828 179894, 63828 180752, 63951 181065, 64070 181762, 64049 182155, 63887 183009, 63828 183107, 63828 186367, 63898 187171, 64087 187171, 64012 186459, 64000 185913, 64198 185475, 64334 185387, 65141 185172, 66129 185117, 66638 185121, 67627 185065, 67975 185058, 68561 185026, 69210 184934, 70322 184721, 70531 184719, 71300 184588, 72154 184568, 72885 184539, 73248 184415, 73921 184205, 74512 184128, 75115 184127, 75896 184214, 76472 184508, 76531 184665, 76579 185701, 76446 186971, 76490 187171, 76884 187171, 76907 186573, 76860 185991, 76922 185418, 77089 185031, 77265 184817, 77534 184643, 77733 184599, 79779 184548, 79916 184575, 79751 184409, 79719 183942, 79862 183773, 79712 183631, 79641 182911, 79781 182649, 79886 182543, 80410 182579, 80604 182780, 80731 182700, 80797 182598, 81172 182589, 81253 182627, 81438 182837, 81745 182857, 81884 182552, 82527 182548, 82818 183085, 83147 182613, 83446 182658, 83659 182931, 83882 182664, 84497 182677, 84728 183040, 85037 182633, 85197 182621, 85351 182706, 85552 182991, 85537 183849, 85453 184020, 85527 184159, 85479 184804, 85023 184978, 85044 185098, 85494 185343, 85520 185859, 85080 186139, 85022 186267, 85614 185978, 86147 185818, 86504 185650, 87571 185333, 87811 185231, 88526 185006, 89376 184753, 89521 184697, 90341 184668, 90755 185169, 90909 185452, 90957 185831, 90938 185994, 90889 186719, 92208 186868, 92617 186870, 93313 187086, 93999 187255, 94482 187551, 94566 187654, 94659 188455, 94578 188929, 94498 189074, 94364 189636, 94259 189949, 94127 190785, 93999 191189, 93775 191601, 93496 192440, 93348 193272, 93063 194083, 92471 194350, 92092 194380, 91740 194349, 90117 193952, 89801 193817, 89237 193115, 89186 192958, 89256 192555, 89484 191957, 89675 191634, 89664 191472, 89702 191349, 89583 190912, 89505 190282, 89554 189909, 89713 189637, 89620 189575, 87632 190309, 86893 190596, 85591 190918, 85143 190836, 84986 190998, 85592 191209, 85581 191841, 85098 192074, 85170 192179, 85580 192435, 85597 192858, 85236 193135, 85015 193144, 84697 192828, 84653 192836, 84474 193164, 83877 193198, 83616 192727, 83515 192771, 83276 193224, 82525 193224, 82244 192838, 81983 193215, 81591 193208, 81274 192657, 81190 192630, 80928 193206, 80609 193200, 80386 192873, 80302 192903, 80132 193181, 79931 193181, 79681 192916, 79700 192232, 80092 192008, 79824 192007, 79346 191927, 77793 191895, 77234 191589, 77086 191309, 76957 190881, 77003 190138, 76948 189467, 76737 189467, 76828 189889, 76860 190483, 76770 190792, 76675 190920, 75985 191316, 75215 191538, 74804 191564, 73892 191506, 73625 191397, 73018 191401, 72862 191444, 72257 191516, 71699 191622, 70584 191813, 70082 191923, 69033 192109, 67955 192318, 67008 192618, 66383 192727, 65985 192757, 65545 192663, 64928 192407, 64558 191651, 64479 190321, 64409 189467, 64165 189467, 64216 189856, 64216 190627, 64074 191032, 63750 191589, 63134 191814, 62864 191857, 61625 191784, 60383 191738, 59522 191739, 58711 191812, 57734 191803, 57190 191752, 56778 191519, 56707 191379, 56585 190602, 56647 189650, 56707 189171, 56766 188228, 56836 187428, 56824 186816, 56770 186095, 56723 185124, 56731 184549, 56850 183196, 56768 182840, 56638 182181, 56630 181610, 56701 181041, 56873 180311, 57258 179793, 57655 179782, 58400 179823, 59678 180095, 60282 180023, 60697 180015, 61066 180076, 61534 180092, 61534 179713, 60853 179677, 60690 179633, 59940 179727, 59353 179693, 59048 179567, 58916 179430, 58607 178683, 58490 177950, 58509 177541, 58672 176654, 58811 176403, 58877 175805, 58852 175648, 58855 174756, 58810 174492, 58748 173363, 58697 172857, 58583 171073, 58508 170507, 58359 169747, 58323 169125, 58337 168746, 58486 168310, 58808 167731, 59424 167494, 59678 167449, 60933 167526, 61534 167546, 61534 167275, 60995 167203, 60148 167060, 59645 167025, 59368 167031, 58770 166908, 58378 166699, 58168 166501, 58016 166215, 57987 166013, 58144 163971, 58184 163838, 58140 163320, 58261 162506, 58470 161557, 58552 161016, 58564 160630, 58802 159775, 59023 159533, 59714 159486, 60129 159541, 60684 159589, 60939 159566, 61534 159619, 61534 159353, 60816 159387, 60273 159387, 59712 159305, 59398 159157, 59274 159009, 59024 158554, 58903 157715, 59024 157120, 58988 156095, 59018 155910, 58930 154895, 59055 153781, 59017 153558, 58992 152791, 59022 152017, 58887 150654, 58926 149876, 59016 148670, 59097 148470, 59362 148358, 60224 148247, 61534 148282, 61534 147717, 60830 147793, 60243 147759, 59938 147631, 59826 147521, 59498 146745, 59380 145998, 59399 145588, 59562 144690, 59701 144437, 59769 143831, 59742 143674, 59745 142757, 59702 142508, 59638 141369, 59587 140857, 59456 138788, 59249 137719, 59214 137022, 59232 136688, 59375 136266, 59698 135681, 60026 135538, 60509 135397, 61534 135460, 61534 135339, 60821 135344, 60328 135230, 60046 135093, 59785 134757, 59711 134558, 59662 134107, 59737 133757, 59753 133210, 59815 132640, 59714 132329, 59655 131567, 59659 130565, 59744 129926, 59770 128548, 60078 127987, 60358 127838, 60784 127711, 61534 127765, 61534 127417, 60882 127344, 60189 126945, 59717 126492, 59686 126412, 59695 126030, 59835 125181, 59885 124488, 59877 123933, 59836 123283, 59966 121605, 60329 121151, 60923 121053, 61534 121071, 61534 120901, 61028 120842, 60450 120663, 59856 120380, 59698 120259, 59551 119800, 59435 119286, 59333 117890, 59268 117442, 59280 116916, 59339 116286, 59514 115550, 59532 115374, 59666 115223, 59676 115108, 59854 114979, 59764 114835, 59694 114330, 59639 114263, 59480 114207, 59357 113432, 59422 112581, 59276 111218, 59269 110541, 59386 109760, 59328 109367, 59405 108699, 59659 107743, 59833 107369, 60696 107111, 61534 107115, 61534 106891, 61009 106957, 60421 106921, 60119 106795, 59988 106654, 59682 105910, 59558 105162, 59580 104746, 59742 103854, 59882 103600, 59949 102995, 59922 102835, 59923 102228, 59882 101672, 59818 100531, 59769 100038, 59638 97970, 59431 96889, 59395 96252, 59413 95852, 59555 95429, 59880 94845, 60208 94700, 60678 94564, 61534 94615, 61534 94455, 60841 94560, 60024 94462, 59293 94285, 58776 93903, 58765 93506, 58807 92750, 59076 91483, 59006 90879, 58998 90463, 59059 90095, 59103 89094, 59035 88543, 59070 87947, 59188 87650, 59323 87517, 60036 87212, 60745 87091, 61155 87114, 61990 87275, 62233 87414, 62808 87480, 62959 87455, 63820 87462, 64071 87413, 65155 87351, 65897 87283, 67591 87169, 68629 86962, 69229 86926, 69594 86937, 70014 87087, 70570 87411, 70797 88027, 70842 88280, 70765 89537, 70759 89796, 70849 89600, 70969 89472, 71569 89337, 71620 87736, 71621 87050, 71597 86595, 71763 86063, 71875 86010, 72281 85959, 74150 85927, 74579 85971, 74724 85942, 75288 85962, 75774 86015, 76166 86001, 76666 86013, 77070 85953, 77967 85908)), ((97565 183305, 97783 183586, 98019 183365, 98383 183398, 98687 183854, 98762 183779, 98917 183418, 99111 183376, 99632 183344, 99840 183568, 100035 183318, 100423 183323, 100645 183614, 100749 183543, 100886 183313, 101216 183316, 101412 183511, 101561 183347, 101962 183323, 102135 183644, 102134 183878, 101898 184189, 102150 184354, 102115 185209, 101766 185374, 101759 185412, 102097 185630, 102025 186362, 101532 186586, 101478 186687, 102022 186970, 102029 187730, 101781 187942, 102064 188166, 102079 188449, 101910 188701, 101546 188667, 101205 188688, 100982 188608, 100849 188680, 100301 188659, 100065 188337, 99827 188624, 99292 188617, 99064 188253, 98985 188269, 98814 188644, 98141 188606, 97904 188183, 97849 188218, 97629 188610, 97023 188605, 96807 188236, 96812 188090, 96779 187572, 97059 187339, 96817 187134, 96820 186700, 97034 186492, 97035 186435, 96801 186228, 96826 185834, 97160 185582, 96805 185407, 96786 184618, 97216 184403, 97287 184311, 96761 184068, 96751 183577, 96933 183342, 97111 183268)), ((57963 141999, 58423 142303, 58842 142721, 58945 142922, 59033 143496, 59083 143635, 59023 143742, 58896 143787, 58445 144036, 57673 144116, 57126 144116, 56714 143978, 56568 143771, 56514 143408, 56673 142711, 57110 142098, 57350 141976)), ((186677 76038, 185935 76030, 186676 75992))) \ No newline at end of file diff --git a/stress_benchmark/resources/057.settings b/stress_benchmark/resources/057.settings new file mode 100644 index 0000000000..e69a30998b --- /dev/null +++ b/stress_benchmark/resources/057.settings @@ -0,0 +1,628 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=30.0 +machine_acceleration=500 +bridge_sparse_infill_max_density=0 +support_line_width=0.8 +bottom_skin_preshrink=0.6 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=1.7 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=180 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=270 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=1.0 +machine_shape=rectangular +speed_travel_layer_0=100.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=185 +raft_jerk=8 +support_xy_distance=2 +bridge_skin_speed_2=15.0 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.2 +bottom_skin_expand_distance=1.0 +speed_prime_tower=30.0 +speed_support=30.0 +speed_roofing=30.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=gyroid +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.8 +raft_surface_jerk=8 +print_bed_temperature=56 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +jerk_support_roof=8 +date=04-12-2023 +support_use_towers=True +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=183 +layer_0_z_overlap=0.15 +support_roof_enable=True +acceleration_wall_x_roofing=500 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.5 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.2 +support_bottom_pattern=grid +bottom_thickness=1.7 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=500 +skin_material_flow=100 +default_material_bed_temperature=60 +support_xy_distance_overhang=0.8 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=5 +wall_thickness=1.6 +top_bottom_pattern_0=zigzag +resolution=0 +support_angle=75 +retraction_min_travel=1.5 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=75 +wipe_retraction_amount=2 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.2 +machine_feeder_wheel_diameter=10.0 +infill_overlap=700 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.522 +sub_div_rad_add=0.94 +roofing_line_width=0.8 +material_flow_layer_0=100 +support_roof_pattern=grid +cool_fan_speed_min=70 +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=70 +raft_base_jerk=8 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.25 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=22.5 +speed_ironing=20.0 +gantry_height=250 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=10 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=8 +support_roof_density=30 +support_bottom_line_width=0.8 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.5 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=3.2 +material_bed_temp_prepend=False +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=2.0 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=20.0 +raft_acceleration=500 +bridge_fan_speed_3=0 +support_tree_angle_slow=50.0 +raft_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=10 +roofing_material_flow=94 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=5.333333333333333 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +speed_print_layer_0=20.0 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=70 +initial_bottom_layers=4 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=180 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=2 +minimum_roof_area=10 +bridge_wall_speed=15.0 +support_interface_density=30 +line_width=0.8 +acceleration_ironing=500 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=233.175 +speed_slowdown_layers=2 +bridge_wall_min_length=3.4 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=True +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=-0.3 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=30.0 +speed_layer_0=20.0 +infill=0 +bridge_skin_speed_3=15.0 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=12.0 +jerk_layer_0=8 +minimum_interface_area=10 +wall_0_material_flow_layer_0=100 +support_wall_count=1 +raft_base_line_spacing=3.2 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=5.333333333333333 +support_enable=True +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=70 +material_anti_ooze_retracted_position=-4 +layer_height=0.5 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.2 +jerk_print_layer_0=8 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.8 +retraction_retract_speed=70 +brim_line_count=10 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=1.6 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=8 +support_tree_tip_diameter=1.6 +bridge_skin_speed=15.0 +bridge_fan_speed=100 +support_xy_overrides_z=xy_overrides_z +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.68 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=none +min_odd_wall_line_width=0.68 +skirt_line_count=3 +support_tree_angle=75 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=False +acceleration_wall_0=500 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=183 +material_print_temp_prepend=False +infill_offset_y=0 +cool_fan_speed_max=70 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.8 +bridge_wall_coast=100 +slicing_tolerance=exclusive +infill_wipe_dist=0.0 +support_bottom_height=2.0 +machine_depth=235 +acceleration_skirt_brim=500 +skin_overlap=60 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=30.0 +z_seam_x=117.5 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=56 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=235 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=235 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=12.0 +infill_sparse_thickness=0.5 +prime_tower_brim_enable=False +ironing_monotonic=False +small_skin_width=1.6 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=500 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=2 +jerk_wall_0=8 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=1.7 +material_guid=2a3155ed-2199-44c8-8630-c6ea31f60df4 +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=8 +support_bottom_stair_step_height=0.5 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=500 +machine_max_acceleration_x=500 +wall_transition_filter_deviation=0.2 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.24 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=8 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=500 +draft_shield_dist=10 +raft_surface_acceleration=500 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=8 +retraction_hop=0.2 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=30.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_retracted_position=-50 +small_feature_max_length=43.982297150257104 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=True +min_skin_width_for_expansion=1.2246467991473532e-16 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=56 +adaptive_layer_height_variation=0.04 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.5 +support_bottom_distance=0 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=buildplate +cool_lift_head=False +raft_interface_line_width=1.6 +support_type=buildplate +support_zag_skip_count=2 +retraction_combing=infill +support_infill_angles=[45] +raft_interface_line_spacing=1.8 +draft_shield_enabled=False +material_break_preparation_temperature=183 +material_alternate_walls=False +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=60 +raft_surface_thickness=0.5 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=4 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=30.0 +infill_line_width=0.96 +wall_line_width_0=0.8 +support_extruder_nr_layer_0=0 +retraction_count_max=100 +jerk_infill=8 +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.8 +material_print_temperature=183 +acceleration_prime_tower=500 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=8 +support_brim_enable=True +support_bottom_density=30 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.8 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=500 +wall_line_width_x=0.94 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=1.2 +travel_retract_before_outer_wall=False +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=30.0 +skin_preshrink=0.6 +layer_height_0=0.2 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=10 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=120 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=8 +jerk_travel_enabled=True +jerk_wall_x=8 +machine_always_write_active_tool=False +retraction_amount=2 +machine_minimum_feedrate=0.0 +acceleration_print=500 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=70 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=500 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=sharpest_corner +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=8 +infill_offset_x=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=30.0 +min_bead_width=0.68 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=30.0 +support_offset=1.2000000000000002 +wall_overhang_speed_factor=100 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=1.6 +machine_max_feedrate_y=500 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0.14 +infill_wall_line_count=0 +speed_print=60 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=5 +raft_interface_thickness=0.75 +retraction_prime_speed=70 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=10 +raft_surface_line_width=0.8 +jerk_support_interface=8 +support_tree_bp_diameter=7.5 +support_interface_pattern=grid +xy_offset=0.14 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=500 +material_no_load_move_factor=0.940860215 +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +machine_max_feedrate_z=10 +speed=0 +coasting_enable=True +retraction_enable=True +jerk_support_bottom=8 +max_extrusion_before_wipe=10 +top_bottom_pattern=zigzag +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.8 +material_break_preparation_speed=2 +skin_line_width=0.8 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=10 +support_z_distance=0.5 +raft_base_speed=22.5 +jerk_travel_layer_0=8 +speed_support_interface=30.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.76 +material_flush_purge_speed=0.5 +acceleration_travel=500 +support_roof_height=2.0 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=213.175 +jerk_support=8 +roofing_pattern=zigzag +jerk_wall_x_roofing=8 +top_skin_preshrink=0.6 +acceleration_wall_0_roofing=500 +machine_max_feedrate_x=500 +material_final_print_temperature=183 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=70 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.5 +wall_0_material_flow_roofing=100 +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=30.0 +support_roof_wall_count=0 +skirt_gap=10.0 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=1.0 +support_infill_rate=10 +meshfix_maximum_resolution=0.25 +support_tree_min_height_to_model=3 +min_wall_line_width=0.68 +acceleration_support_infill=500 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=30 +jerk_travel=8 +retract_at_layer_change=False +support_roof_line_width=0.8 +machine_disallowed_areas=[] +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=True +skirt_brim_line_width=0.8 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.04 +acceleration_support_roof=500 +support_brim_line_count=5 +build_volume_temperature=28 +small_hole_max_size=14 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=30.0 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=500 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=500 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/057.wkt b/stress_benchmark/resources/057.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/057.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/058.settings b/stress_benchmark/resources/058.settings new file mode 100644 index 0000000000..146ed80f11 --- /dev/null +++ b/stress_benchmark/resources/058.settings @@ -0,0 +1,626 @@ +adaptive_layer_height_enabled=False +meshfix_fluid_motion_angle=15 +speed_wall_0=25.0 +machine_acceleration=500 +bridge_sparse_infill_max_density=0 +support_line_width=0.4 +bottom_skin_preshrink=1.2000000000000002 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bridge_skin_material_flow_2=100 +machine_nozzle_heat_up_speed=2.0 +top_thickness=0.84 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +top_bottom_extruder_nr=-1 +machine_buildplate_type=glass +ironing_pattern=zigzag +material_standby_temperature=180 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +support_bottom_stair_step_min_slope=10.0 +machine_scale_fan_speed_zero_to_one=False +adaptive_layer_height_threshold=0.2 +machine_height=250 +support_interface_material_flow=100 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +machine_shape=rectangular +speed_travel_layer_0=100.0 +raft_surface_extruder_nr=0 +material_print_temperature_layer_0=200 +raft_jerk=8 +support_xy_distance=0.8 +bridge_skin_speed_2=12.5 +ooze_shield_angle=60 +machine_extruders_share_nozzle=False +min_feature_size=0.1 +bottom_skin_expand_distance=1.2000000000000002 +speed_prime_tower=25.0 +speed_support=25.0 +speed_roofing=25.0 +raft_fan_speed=0 +wall_transition_filter_distance=100 +magic_spiralize=False +support_skip_zag_per_mm=20 +infill_pattern=cubic +extruders_enabled_count=1 +machine_heated_bed=True +gradual_support_infill_steps=0 +wall_line_width=0.4 +raft_surface_jerk=8 +print_bed_temperature=60 +support_bottom_material_flow=100 +bridge_skin_material_flow_3=110 +command_line_settings=0 +prime_tower_base_size=8.0 +material_print_temp_wait=True +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +jerk_support_roof=8 +date=04-12-2023 +support_use_towers=True +minimum_support_area=2 +wall_x_material_flow_layer_0=100 +material_adhesion_tendency=0 +material_initial_print_temperature=200 +layer_0_z_overlap=0.15 +support_roof_enable=True +acceleration_wall_x_roofing=500 +raft_margin=15 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.12 +machine_nozzle_head_distance=3 +support_interface_skip_height=0.12 +support_bottom_pattern=grid +bottom_thickness=0.96 +cool_fan_enabled=True +ironing_flow=10.0 +support_fan_enable=False +layer_start_y=0.0 +acceleration_support_interface=500 +skin_material_flow=100 +default_material_bed_temperature=50 +support_xy_distance_overhang=0.4 +anti_overhang_mesh=False +infill_material_flow=100 +prime_tower_size=20 +machine_nozzle_id=unknown +small_feature_speed_factor_0=50 +travel_avoid_other_parts=True +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +brim_inside_margin=2.5 +speed_z_hop=5 +wall_thickness=1.2000000000000002 +top_bottom_pattern_0=lines +resolution=0 +support_angle=59 +retraction_min_travel=1.5 +prime_blob_enable=False +wipe_retraction_extra_prime_amount=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +machine_max_feedrate_e=50 +wipe_retraction_amount=6 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +retraction_hop_after_extruder_switch_height=0.2 +machine_feeder_wheel_diameter=10.0 +infill_overlap=30.0 +support_mesh_drop_down=True +small_feature_speed_factor=50 +skin_overlap_mm=0.04 +sub_div_rad_add=0.4 +roofing_line_width=0.4 +material_flow_layer_0=100 +support_roof_pattern=grid +cool_fan_speed_min=100 +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +cool_fan_speed=100 +raft_base_jerk=8 +min_infill_area=0 +meshfix_maximum_travel_resolution=0.25 +switch_extruder_retraction_speed=20 +machine_max_jerk_z=0.4 +raft_interface_speed=18.75 +speed_ironing=16.666666666666668 +gantry_height=25 +material_break_temperature=50 +machine_endstop_positive_direction_z=True +dual=0 +raft_interface_layers=1 +ooze_shield_dist=2 +support_line_distance=2.0 +infill_enable_travel_optimization=False +machine_nozzle_temp_enabled=True +machine_min_cool_heat_time_window=50.0 +jerk_skirt_brim=8 +support_roof_density=33.333 +support_bottom_line_width=0.4 +initial_layer_line_width_factor=100.0 +support_skip_some_zags=False +meshfix_maximum_deviation=0.025 +support_infill_sparse_thickness=0.12 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +machine_steps_per_mm_z=50 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +wipe_move_distance=20 +ironing_enabled=False +infill_support_angle=40 +support_interface_height=0.96 +wall_extruder_nr=-1 +mold_enabled=False +magic_fuzzy_skin_enabled=False +skirt_brim_speed=20.0 +raft_acceleration=500 +bridge_fan_speed_3=0 +support_tree_angle_slow=39.333333333333336 +raft_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_max_jerk_xy=10 +roofing_material_flow=100 +acceleration_infill=500 +machine_extruder_count=1 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +speed_print_layer_0=20.0 +alternate_carve_order=True +support_infill_extruder_nr=0 +wipe_retraction_prime_speed=45 +initial_bottom_layers=8 +material_brand=empty_brand +skin_monotonic=False +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +roofing_layer_count=0 +minimum_roof_area=10 +bridge_wall_speed=12.5 +support_interface_density=33.333 +line_width=0.4 +acceleration_ironing=500 +magic_fuzzy_skin_point_dist=0.8 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +infill_randomize_start_location=False +wall_x_material_flow=100 +prime_tower_position_x=208.175 +speed_slowdown_layers=2 +bridge_wall_min_length=2.2 +wipe_pause=0 +lightning_infill_overhang_angle=40 +support_bottom_enable=True +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +machine_max_acceleration_z=100 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +speed_wall_x_roofing=25.0 +speed_layer_0=20.0 +infill=0 +bridge_skin_speed_3=12.5 +machine_steps_per_mm_x=50 +lightning_infill_support_angle=40 +infill_line_distance=4.0 +jerk_layer_0=8 +minimum_interface_area=10 +wall_0_material_flow_layer_0=100 +support_wall_count=0 +raft_base_line_spacing=1.6 +support_supported_skin_fan_speed=100 +machine_firmware_retract=False +support_mesh=False +support=0 +machine_heated_build_volume=False +extruder_prime_pos_z=0 +support_bottom_line_distance=2.4000240002400024 +support_enable=False +adhesion_extruder_nr=-1 +print_temperature=210 +raft_remove_inside_corners=False +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.12 +material_shrinkage_percentage_xy=100.0 +wipe_hop_amount=0.2 +jerk_print_layer_0=8 +lightning_infill_prune_angle=40 +material_diameter=1.75 +bridge_enable_more_layers=True +raft_surface_line_spacing=0.4 +retraction_retract_speed=45 +brim_line_count=20 +raft_interface_extruder_nr=0 +interlocking_orientation=22.5 +interlocking_beam_width=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +jerk_ironing=8 +support_tree_tip_diameter=0.8 +bridge_skin_speed=12.5 +bridge_fan_speed=100 +support_xy_overrides_z=xy_overrides_z +machine_show_variants=False +meshfix_fluid_motion_enabled=True +blackmagic=0 +min_even_wall_line_width=0.34 +support_tree_max_diameter=25 +infill_mesh=False +adhesion_type=skirt +min_odd_wall_line_width=0.34 +skirt_line_count=3 +support_tree_angle=59 +support_interface_priority=interface_area_overwrite_support_area +fill_outline_gaps=False +acceleration_wall_0=500 +day=Mon +support_bottom_stair_step_width=5.0 +wipe_hop_enable=False +cool_min_temperature=200 +material_print_temp_prepend=True +infill_offset_y=0 +cool_fan_speed_max=100 +magic_mesh_surface_mode=normal +zig_zaggify_infill=False +support_interface_line_width=0.4 +bridge_wall_coast=100 +slicing_tolerance=middle +infill_wipe_dist=0.0 +support_bottom_height=0.96 +machine_depth=220 +acceleration_skirt_brim=500 +skin_overlap=10.0 +material_break_speed=25 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +mesh_position_z=0 +support_bottom_wall_count=0 +speed_support_roof=25.0 +z_seam_x=110.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +material_bed_temperature=60 +coasting_volume=0.064 +interlocking_boundary_avoidance=2 +raft_smoothing=5 +machine_width=220 +raft_airgap=0.3 +mold_angle=40 +raft_base_extruder_nr=0 +z_seam_y=220 +wall_overhang_angle=90 +machine_steps_per_mm_e=1600 +gradual_support_infill_step_height=1 +cross_infill_pocket_size=4.0 +infill_sparse_thickness=0.12 +prime_tower_brim_enable=False +ironing_monotonic=False +small_skin_width=0.8 +support_join_distance=2.0 +material_type=empty +initial_extruder_nr=0 +connect_infill_polygons=False +acceleration_print_layer_0=500 +center_object=False +skirt_height=3 +cool_fan_speed_0=0 +wall_line_count=3 +jerk_wall_0=8 +material_surface_energy=100 +material=0 +material_crystallinity=False +top_bottom_thickness=0.84 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +bridge_skin_density=100 +infill_sparse_density=30 +support_bottom_stair_step_height=0 +machine_steps_per_mm_y=50 +acceleration_travel_layer_0=500 +machine_max_acceleration_x=500 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +mold_width=5 +retraction_hop_only_when_collides=False +raft_base_thickness=0.144 +shell=0 +support_conical_min_width=5.0 +conical_overhang_angle=50 +draft_shield_height_limitation=full +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +smooth_spiralized_contours=True +jerk_topbottom=8 +brim_gap=0 +acceleration_enabled=False +wall_material_flow=100 +acceleration_wall=500 +draft_shield_dist=10 +raft_surface_acceleration=500 +switch_extruder_retraction_speeds=20 +support_pattern=zigzag +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +speed_equalize_flow_width_factor=100.0 +material_flush_purge_length=60 +support_conical_angle=30 +jerk_prime_tower=8 +retraction_hop=0.2 +support_meshes_present=False +material_anti_ooze_retraction_speed=5 +raft_base_wall_count=1 +prime_tower_base_curve_magnitude=4 +support_roof_material_flow=100 +infill_mesh_order=0 +raft_surface_fan_speed=0 +material_id=empty_material +raft_surface_layers=2 +speed_support_bottom=25.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +jerk_wall_0_roofing=8 +material_break_retracted_position=-50 +small_feature_max_length=0.0 +support_roof_extruder_nr=0 +interlocking_enable=False +interlocking_beam_layer_count=2 +travel_avoid_supports=True +min_skin_width_for_expansion=5.143516556418883e-17 +experimental=0 +skin_material_flow_layer_0=100 +material_bed_temperature_layer_0=60 +adaptive_layer_height_variation=0.04 +meshfix_union_all=True +travel=0 +bridge_skin_density_3=80 +support_connect_zigzags=True +support_top_distance=0.24 +support_bottom_distance=0.24 +wall_x_extruder_nr=-1 +support_bottom_extruder_nr=0 +support_tree_rest_preference=graceful +cool_lift_head=False +raft_interface_line_width=0.8 +support_type=everywhere +support_zag_skip_count=10 +retraction_combing=all +raft_interface_line_spacing=1.0 +draft_shield_enabled=False +material_break_preparation_temperature=200 +material_alternate_walls=False +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=50.0 +raft_surface_thickness=0.12 +machine_center_is_zero=False +roofing_monotonic=True +bottom_layers=8 +alternate_extra_perimeter=False +support_bottom_offset=0.0 +speed_wall_x=25.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +support_extruder_nr_layer_0=0 +retraction_count_max=100 +jerk_infill=8 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +meshfix_fluid_motion_small_distance=0.01 +prime_tower_line_width=0.4 +material_print_temperature=200 +acceleration_prime_tower=500 +travel_avoid_distance=0.625 +cool_min_speed=10 +wall_0_material_flow=100 +extruder_prime_pos_y=0 +jerk_print=8 +support_brim_enable=True +support_bottom_density=33.333 +brim_width=8.0 +ironing_only_highest_layer=False +wall_transition_length=0.4 +wall_distribution_count=1 +material_shrinkage_percentage=100.0 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +raft_base_acceleration=500 +wall_line_width_x=0.4 +meshfix_union_all_remove_holes=False +cool_fan_full_at_height=0.36 +travel_retract_before_outer_wall=True +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +bridge_settings_enabled=False +jerk_enabled=False +speed_wall_0_roofing=25.0 +skin_preshrink=1.2000000000000002 +layer_height_0=0.12 +z_seam_position=back +support_interface_offset=0.0 +cool_min_layer_time=10 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +speed_travel=150.0 +group_outer_walls=True +material_is_support_material=False +material_flow=100 +jerk_roofing=8 +jerk_travel_enabled=True +jerk_wall_x=8 +machine_always_write_active_tool=False +retraction_amount=6 +machine_minimum_feedrate=0.0 +acceleration_print=500 +retraction_hop_after_extruder_switch=True +mesh_position_y=0 +machine_heat_zone_length=16 +switch_extruder_extra_prime_amount=0 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +material_end_of_filament_purge_speed=0.5 +extruder_prime_pos_x=0 +acceleration_topbottom=500 +material_maximum_park_duration=300 +wipe_repeat_count=5 +infill_extruder_nr=-1 +skin_no_small_gaps_heuristic=False +z_seam_type=back +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +minimum_polygon_circumference=1.0 +machine_extruders_share_heater=False +jerk_support_infill=8 +infill_offset_x=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +raft_surface_speed=25.0 +min_bead_width=0.34 +meshfix_extensive_stitching=False +mesh_position_x=0 +speed_wall=25.0 +support_offset=0 +wall_overhang_speed_factor=100 +top_layers=7 +meshfix_fluid_motion_shift_distance=0.1 +machine_max_jerk_e=5 +raft_base_line_width=0.8 +machine_max_feedrate_y=500 +meshfix=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +raft_base_fan_speed=0 +magic_fuzzy_skin_point_density=1.25 +hole_xy_offset=0 +infill_wall_line_count=0 +speed_print=50.0 +machine_endstop_positive_direction_x=False +prime_tower_enable=False +wipe_hop_speed=5 +raft_interface_thickness=0.18 +retraction_prime_speed=45 +acceleration_travel_enabled=True +brim_outside_only=True +relative_extrusion=False +magic_fuzzy_skin_outside_only=False +minimum_bottom_area=10 +raft_surface_line_width=0.4 +jerk_support_interface=8 +support_tree_bp_diameter=7.5 +support_interface_pattern=grid +xy_offset=0 +support_roof_offset=0.0 +print_sequence=all_at_once +material_extrusion_cool_down_speed=0.7 +gradual_infill_step_height=1.5 +cutting_mesh=False +acceleration_layer_0=500 +material_no_load_move_factor=0.940860215 +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +machine_max_feedrate_z=10 +speed=0 +coasting_enable=False +retraction_enable=True +jerk_support_bottom=8 +max_extrusion_before_wipe=10 +top_bottom_pattern=lines +material_shrinkage_percentage_z=100.0 +top_bottom=0 +infill_multiplier=1 +machine_nozzle_size=0.4 +material_break_preparation_speed=2 +skin_line_width=0.4 +skirt_brim_extruder_nr=-1 +multiple_mesh_overlap=0.15 +machine_nozzle_expansion_angle=45 +gradual_infill_steps=0 +support_brim_width=4 +support_tree_branch_diameter=5 +support_initial_layer_line_distance=2.0 +support_z_distance=0.24 +raft_base_speed=18.75 +jerk_travel_layer_0=8 +speed_support_interface=25.0 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +clean_between_layers=False +ironing_inset=0.38 +material_flush_purge_speed=0.5 +acceleration_travel=500 +support_roof_height=0.96 +wall_0_inset=0 +interlocking_depth=2 +prime_tower_position_y=188.175 +jerk_support=8 +roofing_pattern=lines +jerk_wall_x_roofing=8 +top_skin_preshrink=1.2000000000000002 +acceleration_wall_0_roofing=500 +machine_max_feedrate_x=500 +material_final_print_temperature=200 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=45 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.12 +wall_0_material_flow_roofing=100 +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +speed_topbottom=25.0 +support_roof_wall_count=0 +skirt_gap=10.0 +support_extruder_nr=0 +machine_endstop_positive_direction_y=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +skin_edge_support_thickness=0 +retraction_extra_prime_amount=0 +expand_skins_expand_distance=1.2000000000000002 +support_infill_rate=20 +meshfix_maximum_resolution=0.25 +support_tree_min_height_to_model=3 +min_wall_line_width=0.34 +acceleration_support_infill=500 +material_break_preparation_retracted_position=-16 +support_interface_wall_count=0 +support_tree_top_rate=30 +jerk_travel=8 +retract_at_layer_change=False +support_roof_line_width=0.4 +coasting_min_volume=0.8 +wall_transition_angle=10 +support_tower_diameter=3.0 +carve_multiple_volumes=False +support_interface_enable=True +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +draft_shield_height=10 +adaptive_layer_height_variation_step=0.04 +acceleration_support_roof=500 +support_brim_line_count=10 +build_volume_temperature=28 +small_hole_max_size=0 +connect_skin_polygons=False +flow_rate_max_extrusion_offset=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +speed_support_infill=25.0 +wall_0_extruder_nr=-1 +retraction_hop_enabled=False +prime_tower_wipe_enabled=True +acceleration_support_bottom=500 +bridge_skin_density_2=75 +support_tower_maximum_supported_diameter=3.0 +acceleration_support=500 +layer_start_x=0.0 +material_name=empty diff --git a/stress_benchmark/resources/058.wkt b/stress_benchmark/resources/058.wkt new file mode 100644 index 0000000000..a98e540d04 --- /dev/null +++ b/stress_benchmark/resources/058.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((91317 121314, 90263 123129, 89646 123124, 89562 123156, 89223 123187, 89257 123154, 88871 123236, 88861 123093, 87422 123266, 87172 123070, 86120 123132, 85755 122947, 85416 122823, 85100 122761, 84807 122761, 84542 122822, 84307 122944, 84103 123127, 83190 123076, 82531 123090, 82061 123117, 79799 123129, 78743 121312))) \ No newline at end of file diff --git a/stress_benchmark/resources/059.settings b/stress_benchmark/resources/059.settings new file mode 100644 index 0000000000..878cc7f8b5 --- /dev/null +++ b/stress_benchmark/resources/059.settings @@ -0,0 +1,628 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=10 +retraction_combing=noskin +material_bed_temperature=60 +ironing_inset=0.38 +speed_support_roof=30.0 +support_bottom_wall_count=0 +machine_max_feedrate_z=10 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=15.0 +ooze_shield_angle=60 +expand_skins_expand_distance=0.8 +support_infill_rate=20 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=10 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=xy_overrides_z +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=8 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=500 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=8 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=True +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=4.898587196589413e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=False +bridge_settings_enabled=False +material_final_print_temperature=200 +machine_max_feedrate_x=500 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=30.0 +wall_0_material_flow_roofing=100 +speed_travel=120.0 +machine_max_acceleration_z=100 +layer_height_0=0.2 +skin_preshrink=0.8 +machine_depth=220 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=0.8 +skirt_line_count=3 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.2 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.8 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=8 +retraction_enable=True +jerk_support_bottom=8 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +infill_randomize_start_location=False +jerk_wall_x=8 +cool_min_layer_time=10 +speed_layer_0=25 +speed_wall_x_roofing=30.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.24 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=500 +material_print_temperature=200 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=2000 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=110.0 +support_interface_material_flow=100 +support_enable=False +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=2.4000240002400024 +initial_layer_line_width_factor=125.0 +conical_overhang_angle=50 +acceleration_support_infill=500 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=4 +wipe_retraction_retract_speed=40 +material_anti_ooze_retracted_position=-4 +layer_height=0.2 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30.0 +support_bottom_distance=0.2 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=8 +minimum_interface_area=10 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +cool_fan_full_at_height=0.6000000000000001 +meshfix_union_all_remove_holes=False +raft_interface_speed=22.5 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=500 +layer_start_x=0.0 +support_infill_sparse_thickness=0.2 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=8 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=30.0 +speed_support_infill=30.0 +support_offset=0.0 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=10.0 +material_break_speed=25 +machine_width=220 +raft_smoothing=5 +material_break_preparation_temperature=200 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=30.0 +wall_x_material_flow=100 +prime_tower_position_x=211.0 +acceleration_layer_0=500 +retraction_amount=0.8 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=191.0 +jerk_support=8 +jerk_skirt_brim=8 +support_roof_density=33.333 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=10 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=grid +xy_offset=0 +prime_tower_brim_enable=True +support_xy_distance=0.8 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=40 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=0.8 +infill_wipe_dist=0.0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=0 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=5 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +raft_margin=15 +speed_print_layer_0=25 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=2.0 +zig_zaggify_infill=False +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=8 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=2.0 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=220 +acceleration_skirt_brim=500 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=60 +raft_surface_jerk=8 +machine_max_feedrate_y=500 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +support_interface_height=0.8 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.2 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +support_z_distance=0.2 +support_bottom_enable=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=270 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +coasting_enable=False +retraction_hop=0.2 +jerk_prime_tower=8 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=4 +wipe_retraction_prime_speed=40 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=30.0 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.25 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=False +adhesion_extruder_nr=-1 +skirt_gap=10.0 +quality_changes_name=empty +bridge_fan_speed=100 +bridge_skin_speed=15.0 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=8 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=0 +raft_base_line_spacing=1.6 +jerk_wall_0=8 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=2 +material_print_temperature_layer_0=200 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_max_feedrate_e=50 +wipe_retraction_amount=0.8 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=30.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=500 +brim_gap=0 +jerk_topbottom=8 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=2000 +support_roof_height=0.8 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=33.333 +print_temperature=210 +acceleration_wall=500 +wall_material_flow=100 +raft_acceleration=500 +raft_interface_thickness=0.30000000000000004 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=0.8 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=8 +raft_surface_speed=30.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.04 +small_feature_speed_factor=50 +wipe_hop_enable=False +support_xy_distance_overhang=0.4 +default_material_bed_temperature=60 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.12 +support_tree_branch_diameter=5 +support_brim_width=4 +gradual_infill_steps=0 +top_skin_preshrink=0.8 +jerk_wall_x_roofing=8 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=500 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=200 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=200 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +speed_travel_layer_0=35 +speed_ironing=20.0 +gantry_height=25 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=1.5 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=1 +raft_jerk=8 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.8 +skirt_brim_extruder_nr=-1 +support_brim_line_count=8 +build_volume_temperature=28 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=60.0 +raft_surface_thickness=0.2 +retraction_hop_after_extruder_switch_height=0.2 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +support_top_distance=0.2 +infill=0 +bridge_skin_speed_3=15.0 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60 +machine_acceleration=500 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=16 +retraction_retract_speed=40 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=40 +line_width=0.4 +acceleration_ironing=500 +bridge_wall_speed=15.0 +support_interface_density=33.333 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=10 +machine_extruder_count=1 +acceleration_infill=500 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.04 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=8 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=brim +speed_z_hop=5 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=24.0 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=500 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=500 +wall_line_width_x=0.4 +acceleration_support_interface=500 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=1.5 +speed_wall_0=30.0 +meshfix_fluid_motion_angle=15 +speed_support_bottom=30.0 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=45 +top_bottom_pattern_0=lines +wall_thickness=0.8 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=500 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=60.0 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=30.0 +raft_speed=30.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +small_skin_width=0.8 +speed_roofing=30.0 +speed_prime_tower=30.0 +speed_support=30.0 +small_hole_max_size=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=24.0 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.25 +min_bead_width=0.34 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=8 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=22.5 +jerk_travel_layer_0=8 +bridge_skin_material_flow_3=110 +wipe_hop_speed=5 +prime_tower_enable=False +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_wall_0_roofing=500 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=45 +support_tree_bp_diameter=7.5 +skirt_brim_speed=25 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=100 +jerk_infill=8 +infill_pattern=cubic +adaptive_layer_height_variation_step=0.04 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=40 +extruder_prime_pos_y=0 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/059.wkt b/stress_benchmark/resources/059.wkt new file mode 100644 index 0000000000..c5700df863 --- /dev/null +++ b/stress_benchmark/resources/059.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((84002 36515, 83870 36674, 84000 36783, 83990 38101, 83956 38164, 82287 38370, 78936 38594, 76367 38680, 74287 38697, 71540 38700, 67910 38681, 64513 38625, 62501 38703, 62637 38729, 62389 38851, 64083 38916, 64432 38948, 68107 38937, 69081 38891, 74645 38882, 77180 38945, 79276 38930, 81273 38800, 83408 38611, 83518 38587, 83834 38569, 84071 38598, 83995 39612, 80864 39809, 80928 39827, 80879 39934, 83822 40000, 84029 40044, 84110 40294, 84107 40462, 83799 40587, 79357 40554, 59468 40547, 59459 41106, 62742 41115, 77106 41122, 82193 41084, 100117 41126, 111401 41123, 111562 41820, 111240 41972, 109670 41959, 108712 41941, 107106 41961, 106395 42045, 107192 42138, 109526 42169, 110763 42151, 111388 42192, 111500 42282, 111463 43882, 111617 44000, 111263 43986, 106901 43550, 106654 43505, 106169 43392, 105650 43232, 104125 43182, 101526 43363, 101480 43460, 99825 43707, 97130 44045, 95146 44269, 92962 44346, 88955 44378, 88388 44374, 87835 44386, 85325 44476, 80723 44493, 79521 44508, 74572 44504, 73216 44489, 70920 44434, 69370 44366, 68816 44313, 66917 44444, 66682 44453, 66151 44645, 65924 44648, 65521 44747, 65700 44802, 65510 44865, 67886 44772, 68632 44709, 71448 44648, 78276 44612, 77886 44584, 79960 44578, 80946 44611, 85577 44655, 86532 44651, 88093 44696, 92467 44673, 92754 44665, 95250 44708, 98126 44614, 101310 44602, 101885 44575, 101513 44521, 98824 44500, 96363 44353, 96318 44268, 99786 43831, 102566 43550, 104993 43459, 106432 43552, 111195 44075, 111633 44139, 111544 44201, 111416 44426, 111205 44591, 111492 44837, 111417 45202, 111462 46486, 111012 46569, 102459 46585, 62084 46593, 59414 46583, 59413 47106, 66021 47095, 74553 47101, 73384 48341, 71963 48250, 70106 48187, 67701 48137, 62362 48140, 60033 48127, 59411 48165, 59409 48353, 59870 48382, 65641 48405, 66989 48347, 68767 48363, 70063 48354, 72516 48449, 73232 48502, 71364 50481, 68716 50472, 67397 50504, 63029 50519, 61601 50579, 61135 50660, 62321 50751, 68719 50781, 69279 50792, 71073 50790, 69382 52577, 59399 52571, 59392 53096, 61902 53083, 67688 53091, 68177 53303, 68518 53421, 68885 53393, 69105 53329, 69105 53858, 64849 53832, 59270 53857, 59269 53868, 62043 53909, 63485 53893, 64137 53897, 69105 53865, 69105 55359, 68659 55408, 66656 55365, 65716 55390, 64768 55469, 64495 55529, 65113 55599, 66743 55637, 67064 55625, 69105 55478, 69105 57214, 60970 57222, 59409 57184, 59332 57378, 61035 57336, 69105 57348, 69105 58586, 59323 58600, 59340 59089, 69105 59091, 69105 64525, 68695 64518, 59113 64556, 59113 63270, 59616 63250, 59113 63252, 59113 61679, 61680 61681, 65921 61626, 62894 61570, 59113 61571, 59040 61678, 59055 62113, 59023 62702, 58979 63079, 58978 63576, 58653 63984, 58650 64748, 58539 65085, 58471 65701, 58480 66565, 58014 67192, 57968 67927, 57954 68516, 58585 68879, 58871 68995, 58905 69387, 59067 69569, 59194 71078, 69105 71080, 69105 71542, 64022 71551, 59934 71481, 59504 71284, 59405 71286, 59504 71292, 59885 71545, 65791 71665, 69105 71672, 69105 73461, 67975 73310, 66908 73239, 66541 73278, 66938 73347, 67749 73448, 69105 73591, 69105 73949, 69054 74659, 69097 74795, 69072 75094, 68669 75051, 68232 75164, 67862 75244, 67583 75547, 67423 75876, 67478 75970, 67074 76282, 67042 76388, 66795 76495, 66180 76573, 65963 76544, 61840 76546, 61800 77099, 69105 77098, 69105 82559, 62256 82551, 62263 83081, 69105 83070, 69105 84786, 62231 84775, 62243 84906, 69105 84884, 69105 86551, 68472 86546, 67829 86527, 64216 86480, 62262 86519, 62262 86660, 63186 86666, 66592 86741, 69105 86770, 69105 88553, 62260 88549, 62259 89073, 69105 89087, 69105 90270, 67921 90267, 63819 90154, 62251 90089, 62124 90449, 61771 90174, 61482 90282, 61437 90543, 62245 90489, 64823 90456, 69105 90442, 69105 93051, 67943 93171, 66058 93192, 65171 93232, 61802 93249, 61875 93381, 64402 93378, 66857 93402, 67576 93465, 67820 93499, 68791 93445, 69105 93409, 69105 94521, 64740 94543, 62281 94546, 62281 95101, 69105 95099, 69105 96639, 68813 96630, 68074 96579, 63750 96529, 62279 96466, 62279 96686, 62621 96762, 63717 96820, 64784 96815, 67321 96826, 69105 96759, 69105 97424, 66616 97372, 65560 97423, 67856 97531, 69105 97607, 69105 98687, 67788 98678, 64510 98623, 62500 98703, 62636 98730, 62393 98850, 64083 98914, 64429 98946, 68001 98936, 69105 98885, 69105 100549, 62055 100547, 61996 100703, 62016 101115, 69105 101119, 69105 102022, 68548 102017, 68149 102049, 69105 102081, 69105 104352, 68691 104311, 66435 104443, 66101 104452, 65458 104647, 65187 104648, 64693 104749, 64915 104803, 64686 104864, 67634 104773, 68421 104710, 69105 104691, 69105 106591, 62052 106591, 62021 107096, 69407 107103, 70541 108339, 69041 108248, 67188 108187, 64553 108138, 62047 108140, 62065 108403, 62580 108406, 64060 108347, 65981 108361, 67423 108353, 69913 108449, 70690 108502, 72501 110479, 69596 110472, 68105 110505, 62595 110518, 62252 110529, 62252 110752, 70246 110783, 70929 110794, 72781 110790, 74419 112578, 62256 112574, 62260 113085, 67473 113091, 68094 113303, 68553 113422, 69018 113395, 69552 113235, 70043 113199, 70359 113210, 70520 113086, 74383 113086, 78440 113130, 80415 113120, 85895 113065, 109057 113122, 111516 113165, 111617 114378, 111246 114633, 98580 114589, 97684 114618, 93654 114818, 92306 114929, 89190 115153, 88363 115254, 85510 115263, 85696 115331, 88462 115279, 91830 115086, 94697 114905, 97936 114674, 111239 114643, 111584 114812, 111607 115453, 111604 115855, 111578 116375, 111460 116504, 111557 116715, 111575 118330, 111413 118513, 111174 118580, 95388 118596, 93255 118528, 92938 118563, 92946 118600, 76809 118581, 62279 118593, 62279 119085, 66370 119084, 75934 119109, 79546 119063, 83780 119109, 83988 119232, 84012 119407, 83792 119551, 83127 119574, 79721 119647, 78166 119728, 77903 119765, 77242 119830, 77673 119897, 78926 119903, 83788 119634, 83994 119802, 83972 121045, 84022 121532, 83766 121705, 82810 121694, 80127 121739, 79774 121824, 80965 121862, 83712 121878, 83956 121996, 83607 122295, 83625 122797, 83597 122895, 83507 123431, 83774 123526, 83750 123685, 83991 123971, 84008 124360, 83934 124479, 83732 124547, 71064 124556, 68907 124517, 62286 124540, 62282 124882, 62577 124887, 62755 124950, 63106 124875, 63377 125039, 63545 124889, 65096 124899, 65265 125025, 65161 125377, 65213 125673, 65506 125758, 65604 125708, 65626 125100, 65684 124987, 65741 125002, 66041 124875, 66304 124874, 66370 124954, 66392 125438, 66541 125205, 66572 124952, 66633 124869, 67928 124873, 69205 124931, 69513 125093, 70510 125093, 70514 124958, 71413 124882, 71571 124952, 71566 125094, 71871 125094, 71872 125068, 72020 125094, 72816 125093, 73014 124979, 73398 124905, 76771 124872, 79039 124875, 79060 125096, 79313 125083, 79938 124984, 80152 124988, 80190 124934, 81361 124931, 81519 124965, 81550 124916, 81926 124911, 82145 124994, 82179 124963, 82365 125095, 111454 125102, 111660 125250, 111699 125400, 111455 125668, 111351 125675, 111455 125680, 111718 125879, 111677 126386, 111554 126757, 111258 126784, 110703 126853, 108768 126850, 106450 126929, 110532 127006, 110902 127071, 111525 127107, 111606 127290, 111398 127418, 110650 127638, 110534 127708, 110268 127805, 109950 127858, 109436 127923, 109173 127889, 108764 127910, 108487 128061, 108501 128280, 108304 128375, 108036 128398, 108248 128448, 108866 128505, 109730 128497, 110199 128590, 110372 128709, 111091 128756, 111680 128770, 112043 128499, 112166 128360, 112481 128352, 112487 127566, 112519 127504, 114089 127307, 114504 127272, 116621 127135, 116787 126764, 115223 126866, 113067 127056, 112958 127081, 112642 127099, 112405 127070, 112481 126057, 115610 125860, 115548 125842, 115597 125734, 112654 125668, 112447 125623, 112366 125374, 112369 125206, 112675 125083, 117485 125114, 117770 125099, 117940 125003, 118160 124982, 118705 125035, 118915 124824, 120513 124944, 120682 125115, 124106 125116, 124132 125066, 126672 125087, 126662 125119, 136882 125123, 136878 125100, 137173 125058, 137387 125123, 138822 125121, 139460 125054, 139523 125124, 146725 125117, 146818 125061, 148375 125061, 148420 125114, 148981 125113, 149011 125072, 151019 125085, 151191 125108, 152449 125104, 152622 125060, 154093 125072, 154084 125101, 154161 125103, 154160 124894, 159221 124887, 159564 124950, 160235 124875, 160769 125044, 161075 124889, 164082 124899, 164379 125028, 164353 125106, 165081 125106, 165170 124987, 165279 125002, 165855 124875, 166358 124874, 166484 124954, 166500 125104, 166837 125105, 166873 124952, 166966 124875, 169468 124873, 171913 124931, 172514 125098, 173832 125098, 174305 125381, 174395 125802, 174551 125741, 174411 125116, 174421 124958, 176146 124882, 176449 124952, 176438 125064, 178929 125063, 179211 124979, 179945 124905, 187160 124872, 192014 124875, 192024 125096, 192237 125096, 192237 184077, 144094 184077, 144089 183978, 143597 183967, 143595 184077, 84967 184077, 84925 183841, 85236 183698, 87764 183728, 89370 183708, 90081 183624, 89284 183532, 86950 183499, 85713 183518, 85089 183478, 84978 183388, 85013 181785, 84858 181667, 85212 181680, 89575 182118, 89822 182164, 90307 182276, 90826 182438, 92351 182486, 94952 182307, 94997 182208, 96652 181960, 99346 181625, 101330 181401, 103514 181322, 107521 181288, 108088 181293, 111154 181194, 116132 181172, 116134 181080, 115540 181059, 110899 181015, 109944 181017, 108383 180970, 103722 181003, 101226 180961, 98350 181054, 95166 181067, 94591 181095, 94963 181149, 97652 181170, 100113 181316, 100158 181402, 96690 181836, 93910 182116, 91483 182207, 90044 182116, 85281 181591, 84841 181529, 84930 181469, 85060 181240, 85271 181078, 84984 180832, 85059 180467, 85015 179181, 85464 179101, 94016 179084, 116232 179079, 116232 178583, 104400 178598, 102267 178526, 101950 178562, 101958 178598, 83709 178582, 83705 179101, 83758 179102, 83959 179353, 84032 180592, 83898 180732, 83897 180891, 84046 180975, 83990 181811, 83801 181887, 83600 181883, 83424 182115, 83803 182108, 84005 182176, 84003 182427, 84047 182787, 83837 182990, 83967 183139, 84006 184077, 52457 184077, 51410 184112, 51165 184037, 51135 184159, 50135 184106, 49715 184059, 49376 184166, 49126 184130, 48821 184072, 48410 184032, 48005 184022, 47844 184150, 47717 184177, 47284 184149, 47062 184231, 46983 184210, 46675 184230, 46568 184186, 46421 183664, 46412 183517, 46127 183051, 46239 182724, 46240 166827, 46346 166844, 46444 166290, 46478 165953, 46491 165486, 46319 165268, 46352 164778, 46305 164645, 46218 164560, 46139 164175, 46244 163941, 47004 163900, 47310 163710, 47492 163702, 47794 163809, 47954 163815, 47948 162974, 14721 162990, 14257 162935, 14197 161777, 14314 161698, 14998 161745, 15471 161743, 16818 161765, 18231 161737, 22531 161690, 24039 161689, 24687 161742, 26116 161670, 27712 161482, 29604 161139, 31068 160839, 33422 160598, 47944 160655, 47944 160592, 43563 160502, 40976 160470, 37111 160493, 33491 160586, 33763 160517, 32250 160521, 31409 160575, 30776 160672, 29422 160840, 28798 160954, 25886 161329, 24657 161421, 24147 161495, 19954 161512, 18123 161484, 15956 161488, 14369 161470, 14276 161342, 14195 158762, 14357 158699, 15586 158768, 16986 158800, 22607 158737, 27544 158927, 30347 159080, 31910 159262, 34420 159418, 34916 159438, 38248 159461, 39624 159347, 40314 159311, 44981 159230, 46706 159165, 45010 159125, 38018 159162, 34839 159085, 33556 158992, 31331 158981, 28376 158837, 20392 158568, 16515 158550, 15834 158524, 14407 158498, 14286 158326, 14356 157533, 21940 157501, 47958 157504, 47941 157203, 48069 156736, 26202 156725, 27363 155564, 28103 155551, 27387 155541, 28308 154620, 30348 154651, 30875 154619, 31062 154578, 29687 154555, 28347 154581, 31694 151234, 48047 151238, 48011 150955, 31191 150954, 31191 147771, 31543 147745, 33870 147650, 41024 147635, 42153 147625, 39430 147525, 32674 147497, 31191 147539, 31191 146364, 32766 146256, 33003 146255, 34007 146185, 34421 146011, 34183 145694, 34113 145490, 34153 145444, 39619 145446, 42886 145486, 47946 145481, 47956 144963, 44954 144978, 31191 144985, 31191 143038, 32887 143044, 35929 143009, 36306 142894, 34489 142853, 31191 142841, 31191 142033, 34366 142053, 36911 141979, 37365 141983, 41945 141925, 42732 141903, 48210 141839, 48210 141822, 48734 141640, 48757 141597, 46125 141545, 42483 141546, 39886 141614, 38845 141658, 35155 141754, 32938 141760, 31191 141734, 31191 139493, 47984 139492, 47965 138960, 31191 138961, 31191 136811, 33389 136585, 48173 136640, 48180 136578, 44134 136488, 41621 136456, 37404 136479, 33491 136572, 33763 136503, 32250 136507, 31191 136576, 31191 135164, 31909 135248, 34420 135404, 34930 135424, 38483 135447, 39880 135333, 40569 135297, 45064 135216, 46701 135157, 46463 135142, 45222 135111, 38205 135148, 34839 135071, 33556 134978, 31191 134961, 31191 133488, 47962 133490, 47960 132959, 37902 132985, 31191 132983, 31191 131677, 37951 131859, 41421 131919, 47957 131933, 47955 131687, 37134 131749, 31191 131556, 31191 129376, 32859 129154, 34088 129067, 34599 128993, 41715 128975, 45033 129003, 47944 128998, 47942 128720, 45512 128747, 37378 128796, 34707 128797, 34059 128742, 32629 128816, 31191 128984, 31191 127507, 47937 127497, 47935 126984, 31191 126977, 31191 123628, 32161 123609, 31191 123592, 31191 121484, 47932 121492, 47933 121003, 39606 120974, 34043 120973, 33573 120864, 33289 120860, 32643 120910, 31191 120899, 31191 118794, 31946 118859, 34169 119138, 36374 119212, 36664 119242, 37528 119257, 37795 119228, 37758 119190, 38015 119118, 35122 118979, 32366 118791, 31482 118718, 31191 118704, 31191 115485, 31603 115492, 32325 115521, 33582 115539, 35015 115655, 36706 115651, 37784 115613, 38123 115659, 41105 115664, 42845 115612, 43766 115555, 44869 115644, 45502 115648, 46435 115435, 47942 115466, 47942 114962, 31191 114981, 31191 113519, 34314 113532, 35148 113615, 34903 113497, 35351 113431, 33974 113234, 31191 113223, 31191 112632, 32475 112552, 32391 112543, 47948 112548, 47949 112470, 31883 112433, 31191 112438, 31191 111613, 36305 111597, 42818 111603, 46429 111632, 47949 111666, 47949 111433, 45405 111386, 42272 111416, 34247 111456, 31191 111444, 31191 109486, 47955 109487, 47956 109023, 47985 108957, 47667 108879, 48011 108837, 48022 108804, 46960 108848, 45422 108784, 40522 108839, 36730 108635, 34307 108417, 31910 108268, 31191 108163, 31191 106949, 33077 107044, 34889 107199, 48053 107612, 48043 107516, 38502 107212, 36756 107087, 34455 106972, 33407 106804, 31191 106616, 31191 103515, 47931 103513, 47931 102948, 31191 102935, 31191 97567, 31520 97515, 31837 97518, 33898 97583, 34762 97467, 35161 97456, 36246 97478, 48986 97467, 49088 97259, 48953 96963, 37966 96990, 31191 96986, 31191 95678, 38013 95861, 41484 95922, 47989 95937, 47980 95690, 37197 95751, 32251 95586, 31191 95558, 31191 93387, 32922 93159, 34187 93069, 34869 92995, 42468 92970, 46578 93006, 48171 93003, 48189 92724, 45576 92753, 37690 92800, 35019 92801, 34122 92748, 32695 92819, 31191 92996, 31191 91510, 48161 91501, 48033 90957, 31191 90955, 31191 87769, 31543 87744, 33870 87649, 42153 87625, 39428 87526, 32674 87496, 31191 87538, 31191 86362, 32766 86258, 33003 86256, 34007 86183, 34421 86011, 34183 85693, 34113 85490, 34153 85444, 39619 85446, 42886 85484, 47944 85480, 47942 84962, 44954 84976, 31191 84984, 31191 83040, 32887 83043, 35928 83009, 36306 82895, 34489 82853, 31191 82842, 31191 82031, 34366 82055, 36911 81981, 37365 81985, 41945 81926, 42732 81905, 47931 81844, 47930 81580, 46125 81545, 42483 81545, 39886 81613, 38845 81656, 35155 81753, 32938 81760, 31191 81733, 31191 79495, 47933 79492, 47932 78961, 31191 78963, 31191 76811, 33389 76587, 48730 76642, 48727 76592, 44137 76486, 41621 76454, 37404 76477, 33491 76574, 33763 76501, 32250 76505, 31191 76574, 31191 75162, 31909 75247, 34420 75403, 34930 75424, 38483 75447, 39880 75333, 40569 75297, 45079 75217, 46774 75156, 45222 75112, 38205 75147, 34839 75070, 33556 74978, 31191 74959, 31191 73490, 49908 73490, 50609 72961, 51515 72977, 51507 71735, 51373 71788, 50142 71718, 48044 71686, 37134 71749, 32189 71584, 31191 71558, 31191 69374, 32859 69156, 34088 69065, 34599 68991, 41715 68974, 45033 69002, 48621 68998, 51358 69016, 51451 69145, 51500 70699, 51499 68731, 51414 68789, 50729 68741, 48053 68721, 45513 68749, 37378 68796, 34707 68797, 34059 68744, 32629 68815, 31191 68986, 31191 67509, 51005 67495, 51468 67552, 51499 68128, 51510 64125, 51461 62134, 51461 62599, 50828 62634, 41275 62603, 34320 62618, 31377 62657, 33545 62701, 35190 62720, 42676 62716, 50915 62682, 51461 62713, 51461 63537, 47822 63565, 50810 63648, 51461 63641, 51461 65963, 49693 65967, 51461 65972, 51461 66983, 31191 66978, 31191 63629, 31696 63610, 31191 63593, 31191 61482, 51461 61494, 51469 60917, 51157 61003, 50329 61011, 38922 60973, 34043 60973, 33573 60863, 33289 60860, 32643 60909, 31191 60899, 31191 58793, 31946 58859, 34169 59138, 36374 59210, 36664 59240, 37528 59255, 37795 59226, 37758 59188, 38015 59118, 35122 58981, 32366 58791, 31482 58717, 31191 58704, 31191 55483, 32325 55522, 33582 55538, 35015 55655, 36706 55650, 37784 55611, 38123 55658, 41105 55666, 42845 55614, 43766 55556, 44869 55645, 45502 55648, 46435 55434, 48532 55477, 51447 55501, 51510 55549, 51542 54251, 51469 51294, 51552 48055, 51530 46822, 51425 47469, 51164 47563, 50124 47579, 38502 47211, 36756 47087, 34455 46971, 33407 46803, 31191 46615, 31191 43517, 51227 43515, 51465 43649, 51451 42951, 31191 42937, 31191 37566, 31520 37516, 31837 37519, 33893 37585, 34825 37456, 34987 37477, 48393 37466, 48381 37276, 48584 37089, 48574 36962, 37966 36989, 31191 36987, 31191 35677, 38013 35860, 41484 35920, 48980 35938, 51384 35990, 51452 36084, 52397 36119, 52397 35295, 84007 35295) (115138 183433, 114051 183518, 112864 183593, 111696 183682, 110614 183720, 102788 183724, 101179 183788, 102187 183903, 102902 183930, 105142 183923, 108014 183940, 109837 183995, 110561 184029, 112607 183998, 114790 183854, 115735 183805, 118094 183712, 117688 183595, 117546 183427) (140403 183731, 141284 183731, 141906 183718, 141854 183564, 140346 183531) (119101 183680, 120059 183678, 120050 183504, 119277 183469) (152086 183189, 152064 183287, 153087 183287, 153046 183226, 152661 183161, 152318 183138) (189370 182688, 189080 182681, 188142 182734, 190965 182771, 190776 182721, 190539 182718, 189682 182655) (90699 177110, 89982 177131, 85049 177198, 83725 177204, 83724 177352, 88341 177384, 89540 177339, 91146 177260, 94355 177060, 97202 177001, 103816 176969, 106142 176933, 103853 176899, 96055 176879) (106462 176429, 113537 176473, 116230 176588, 116230 176372, 113815 176358) (83721 175341, 84245 175340, 83721 175320) (106695 174616, 102664 174816, 101316 174928, 98202 175152, 97375 175252, 94523 175262, 94706 175332, 97474 175278, 100840 175085, 103707 174903, 106946 174672, 116236 174653, 116235 174624, 107591 174587) (91718 173813, 91308 173850, 88345 173825, 86377 173826, 83892 173848, 83891 173883, 88334 173923, 92385 174029, 95019 174279, 96785 174536, 97164 174616, 97663 174621, 98830 174667, 101281 174646, 101544 174623, 102191 174523, 101710 174464, 101743 174438, 98365 174359, 97733 174327, 96529 174175, 95437 173988, 93415 173746, 92063 173693) (107621 172548, 102538 172604, 83891 172559, 83891 173092, 87454 173130, 89429 173121, 94907 173065, 116122 173120, 116115 172891, 116501 172581, 113659 172581, 109596 172538) (95768 171022, 95504 171046, 94859 171146, 95337 171206, 95301 171234, 98682 171310, 99313 171341, 100517 171494, 101609 171681, 103632 171923, 104983 171977, 105329 171856, 105740 171818, 108703 171845, 110670 171844, 114913 171802, 108714 171747, 104663 171639, 102029 171389, 100263 171133, 99884 171054, 99386 171048, 98218 171003) (115766 171765, 116526 171645, 116872 171683, 116873 171611, 116412 171591) (99574 170389, 96206 170585, 93339 170767, 90100 170998, 83884 171009, 83884 171057, 89456 171083, 90351 171054, 94382 170852, 95730 170742, 98844 170515, 99673 170414, 102525 170405, 102340 170337) (112785 170328, 113695 170363, 116129 170369, 116129 170323) (83869 169307, 90586 169240, 83867 169204) (107508 168331, 105900 168410, 102692 168608, 99844 168668, 93231 168701, 90906 168737, 93193 168770, 100993 168789, 106349 168560, 107066 168539, 111975 168470, 117637 168457, 117618 168320, 113204 168315, 108708 168285) (46395 168049, 46435 167285, 46351 167027) (83040 166590, 83062 166772, 83695 166858, 83658 167081, 92648 167072, 94781 167140, 95098 167105, 95090 167068, 111227 167091, 116363 167084, 116366 166736, 116290 166579) (112642 163363, 112595 163461, 110941 163707, 108246 164045, 106261 164269, 104077 164348, 100071 164379, 99504 164374, 98951 164386, 96440 164476, 91839 164494, 90635 164507, 85686 164505, 83640 164472, 83623 164642, 89399 164609, 89003 164583, 91077 164576, 92063 164609, 96691 164653, 97648 164651, 99211 164698, 103872 164665, 106364 164709, 109240 164616, 112424 164602, 112999 164573, 112627 164519, 109939 164499, 107478 164352, 107434 164268, 110901 163830, 113680 163552, 116149 163462, 116181 163397, 116714 163227, 115240 163185) (94987 161671, 92800 161814, 91857 161864, 88793 161986, 83893 162007, 83893 162132, 87197 162147, 89111 162245, 92481 162235, 93610 162147, 94762 162074, 95895 161987, 96977 161950, 104803 161944, 106413 161882, 105406 161767, 104691 161738, 102450 161744, 99578 161730, 97755 161673, 97031 161639) (83892 160859, 83812 160931, 83328 160955, 83554 161120, 88262 161122, 93310 161084, 111233 161125, 117965 161123, 117999 161057, 118015 160658, 117944 160574, 83886 160572) (97343 157297, 96214 157340, 94893 157456, 93407 157504, 93888 157570, 95575 157523, 97160 157433, 98020 157357, 98163 157294) (105481 155765, 99918 156171, 94391 156486, 93609 156522, 88900 156656, 87279 156747, 87245 156835, 88424 156886, 90677 156831, 94926 156584, 101523 156123, 105432 155798, 113951 155447) (94674 154109, 94181 154558, 88633 154565, 83873 154535, 83875 155110, 91990 155083, 98646 155086, 99235 155213, 99493 155347, 101300 155341, 101562 155274, 102306 155134, 102784 155078, 116224 155074, 116126 154854, 116124 154534, 113134 154507, 104031 154568, 100235 154560, 98718 154329, 98731 154262, 98136 154137, 97245 154124, 96168 154054) (44056 154197, 43410 154269, 35027 154305, 34765 154298, 35005 154310, 41750 154409, 45263 154414, 47949 154485, 47950 154171) (97177 152599, 97985 152694, 99977 152704, 103065 152693, 105445 152855, 108197 153105, 108748 153142, 109860 153307, 111539 153488, 111841 153507, 113005 153617, 114107 153643, 114433 153586, 115106 153506, 115952 153456, 115950 153254, 115241 153274, 113831 153295, 112906 153221, 112229 153154, 110220 152996, 109410 152998, 108948 152936, 106272 152828, 103396 152630, 101050 152512, 99145 152501) (86252 152194, 86028 152213, 83658 152332, 83591 152597, 83415 152671, 84559 152485, 87537 152314, 91885 152283, 93826 152284, 94750 152238, 91228 152185) (41483 152435, 47973 152652, 48026 152464, 42942 152374) (103435 152252, 104921 152313, 107259 152311, 110774 152270, 108855 152222, 106266 152215) (113605 152266, 115947 152279, 115946 152222) (83701 150259, 83703 150441, 87925 150470, 90881 150480, 92283 150531, 93640 150622, 95661 150818, 98165 150880, 100698 150809, 101999 150783, 103413 150781, 108935 150704, 108831 150682, 108140 150687, 99327 150609, 96985 150549, 94918 150473, 94725 150443, 92874 150322, 91651 150265, 89315 150232) (82903 148601, 82836 148860, 82735 149087, 115952 149091, 115957 148573, 111113 148575, 105842 148595, 99317 148573, 95681 148588, 83619 148591, 83588 148736, 83112 148546) (45879 148717, 45396 148782, 46277 148834, 47929 148848, 47929 148698) (104462 148131, 103165 148184, 101382 148193, 97832 148231, 101174 148283, 103370 148293, 106284 148361, 108221 148346, 108915 148297, 109202 148301, 109621 148233, 108452 148128) (81811 147312, 82216 147310, 83716 147237, 82596 147189, 81814 147186) (95528 147166, 95753 147226, 96086 147240, 97579 147235, 99614 147171, 98071 147115, 95905 147101) (82198 146434, 84381 146516, 87356 146572, 87062 146498, 84557 146466, 82358 146334) (98241 145415, 99095 145521, 104401 145555, 106291 145603, 104490 145537, 102513 145370, 99692 145345) (88231 144698, 87186 144748, 85700 144836, 84830 144868, 82804 144912, 82830 145004, 84788 145022, 88771 144927, 90354 144874, 91355 144760, 90159 144676) (111283 144490, 111044 144521, 111295 144561, 113661 144552, 114202 144510, 112236 144479) (98072 143582, 97128 143591, 92467 143683, 99212 143771, 100672 143823, 103531 143819, 106060 143701, 105136 143542, 100300 143538) (93753 142570, 82618 142559, 82524 143106, 87044 143107, 98765 143087, 102275 143165, 103380 143167, 105438 143098, 116827 143108, 117089 142861, 116831 142560, 116479 142560, 116050 142615, 116020 142562, 100387 142581, 96876 142503, 95771 142501) (95623 141853, 93092 141967, 94017 142126, 98852 142130, 101080 142086, 102024 142077, 106684 141985, 99941 141899, 98480 141846) (85488 141116, 84947 141158, 86916 141191, 87870 141178, 88108 141147, 87857 141107) (110381 140741, 108798 140795, 107797 140911, 108993 140992, 110921 140971, 113452 140833, 114323 140801, 116183 140761, 116194 140660, 114364 140646) (43662 140745, 44708 140835, 47433 140921, 47967 140930, 49087 140929, 48952 140636, 46355 140635) (94662 140131, 96639 140298, 99458 140325, 100912 140253, 100059 140148, 94751 140113, 92861 140065) (112090 139170, 114595 139202, 115968 139284, 115971 139199, 114771 139152, 111796 139100) (101573 138433, 99536 138497, 101082 138553, 103247 138567, 103624 138503, 103399 138442, 103066 138428) (115436 138431, 115958 138454, 115959 138404) (90931 137322, 90236 137371, 89948 137367, 89530 137436, 90698 137541, 94690 137537, 95987 137485, 97770 137476, 101320 137439, 97978 137386, 95782 137377, 92868 137307) (48053 137433, 48694 137447, 48603 137411) (83829 134522, 83858 134826, 84070 134917, 83897 135073, 83898 135957, 83724 136273, 83180 136987, 83558 137095, 88001 137094, 93308 137073, 99834 137097, 103471 137080, 115823 137077, 115945 137105, 115941 136581, 85172 136581, 84957 136438, 84933 136252, 84987 136031, 84954 134619, 84719 134479) (106893 134859, 105594 134885, 104179 134887, 98655 134967, 98759 134989, 99450 134985, 108266 135059, 110608 135119, 112672 135195, 112867 135225, 114718 135348, 115935 135403, 115934 135160, 115272 135135, 113954 135046, 111933 134850, 109425 134788) (85986 130416, 85681 130719, 85497 131092, 85421 131525, 85470 131937, 85640 132304, 85930 132590, 86296 132772, 86691 132816, 87097 132759, 87495 132561, 87723 132334, 87689 132334, 87879 131962, 87945 131557, 87871 131107, 87965 131106, 87781 130721, 87491 130442, 87131 130268, 86663 130196) (35304 122616, 31377 122657, 34286 122701, 36647 122719, 44134 122713, 47932 122699, 47933 122620, 42755 122602) (62288 121655, 65235 121624, 62286 121581) (77266 120920, 74274 121018, 72174 121039, 74983 121073, 77764 121137, 80935 121099, 81501 120999, 80452 120939, 78958 120914) (42252 119874, 42350 119945, 45935 120038, 47954 120047, 47955 119863, 43532 119803) (81686 117108, 80970 117129, 76059 117198, 71458 117213, 62276 117215, 62279 117341, 74832 117353, 79327 117383, 80526 117339, 82135 117259, 85344 117061, 88192 117000, 94805 116967, 97130 116934, 94843 116898, 87043 116879) (44319 116671, 44315 116682, 39135 116754, 45051 116796, 46642 116797, 47944 116851, 47943 116568, 47592 116561) (97450 116428, 104501 116470, 107972 116619, 109431 116599, 110926 116505, 109718 116424, 108188 116381, 104805 116358) (70867 115328, 69027 115365, 68714 115409, 66151 115365, 64959 115389, 63776 115468, 63437 115527, 64203 115598, 66262 115635, 66954 115610, 69215 115480, 69471 115453, 70101 115435, 71734 115348, 75250 115342, 74341 115306, 71754 115298) (82707 113813, 82296 113850, 79333 113823, 77365 113824, 73121 113866, 79322 113921, 83373 114029, 86006 114281, 87772 114537, 88152 114616, 88650 114622, 89818 114669, 92267 114648, 92530 114624, 93177 114524, 92698 114464, 92733 114439, 89354 114358, 88723 114327, 87519 114174, 86427 113988, 84403 113745, 83052 113693) (71309 114065, 71624 114079, 72268 113903, 71510 114025, 70106 113867) (62264 113834, 62264 113895, 69903 113861, 63888 113833) (62255 111629, 68952 111609, 70706 111566, 62254 111529) (62198 109180, 63373 109165, 64582 109108, 64789 109077, 62188 109051) (45260 106425, 47933 106455, 47931 106372, 45986 106370) (41161 104890, 39726 104877, 34783 104917, 35147 104980, 36190 105024, 44910 105069, 47929 105056, 47929 104876) (62739 102284, 62192 102513, 62238 102620, 63044 102396, 64100 102161, 63365 102058) (62270 97356, 62271 97393, 62810 97390, 62498 97356) (45879 88716, 45396 88783, 46277 88836, 47958 88848, 47957 88698) (43662 80746, 44708 80837, 47433 80920, 47933 80927, 47932 80638, 46355 80634) (67726 74836, 65975 74926, 65054 75048, 61703 75405, 61691 75528, 62936 75447, 66296 75034, 66620 75020, 67710 74895, 67933 75012, 68472 75010, 68507 74817) (59259 72057, 59383 72489, 60257 72555, 61989 72571, 64285 72489, 63755 72400, 61708 72370, 60104 72397, 59415 72388, 59373 72127, 59241 71516, 59222 71494) (42252 59874, 42350 59944, 45935 60036, 50151 60057, 51407 60075, 51474 60140, 51476 59882, 51332 59958, 47980 59864, 43532 59803) (44319 56671, 44315 56682, 39135 56753, 45051 56794, 46643 56795, 49933 56930, 50748 56899, 51315 56923, 51491 56988, 51491 56685, 51434 56728, 50235 56645, 49784 56602, 47593 56562) (59056 54750, 59113 55059, 59113 54534) (59403 51528, 59403 51638, 66696 51607, 68158 51566, 61849 51528) (60698 49042, 59407 49102, 59408 49245, 65332 49164, 66594 49109, 66798 49078, 62757 49031) (51492 45161, 51505 46377, 51326 46537, 49728 46398, 48741 46373, 45978 46370, 45253 46423, 48343 46459, 51327 46540, 51529 46796, 51499 45130) (51387 44866, 41161 44890, 39726 44878, 34783 44918, 35147 44982, 36190 45026, 44910 45069, 51301 45034, 51499 45099, 51487 44578) (54807 42335, 54447 42520, 54159 42805, 53975 43167, 53911 43569, 53974 43964, 54159 44329, 54447 44615, 54807 44799, 55209 44863, 55609 44799, 55969 44615, 56257 44329, 56441 43967, 56505 43569, 56441 43167, 56472 43000, 56295 42884, 56257 42805, 55969 42518, 55609 42335, 55209 42273) (59419 43537, 59681 43520, 60398 43519, 61189 43503, 60664 43438, 60439 43432, 59418 43370) (63930 42283, 63490 42513, 63526 42618, 64177 42394, 65031 42162, 64437 42057) (83870 41672, 81685 41815, 80741 41864, 77677 41984, 69346 42023, 68701 42018, 68371 42051, 70099 42093, 70430 42119, 76079 42149, 77995 42246, 81348 42238, 82493 42146, 83627 42074, 84779 41986, 85862 41948, 93688 41945, 95297 41882, 94289 41766, 93574 41738, 91334 41745, 88462 41729, 86639 41674, 85903 41641) (59430 41939, 59421 42149, 60625 42114, 60816 42043, 60759 41938) (51461 40732, 51485 41779, 51654 41555, 51604 40723) (65577 37422, 69032 37592, 71940 37776, 75014 37820, 75835 37742, 75264 37652, 72293 37509, 70829 37479, 69086 37417, 66671 37371) (61791 37372, 61791 37391, 62829 37389, 62646 37369) (75855 36625, 73095 36700, 73432 36717, 77272 36800, 78592 36838, 81427 36833, 83375 36783, 83647 36675, 82520 36562, 77812 36544) (61710 36590, 61927 36611, 62630 36763, 63717 36819, 64802 36815, 67397 36826, 69848 36738, 71926 36709, 68934 36630, 68174 36579, 63758 36531, 62535 36481, 61686 36436)), ((205778 119109, 205987 119234, 206013 119407, 205792 119551, 205127 119574, 201722 119647, 200168 119728, 199904 119765, 199243 119830, 199674 119897, 200927 119903, 205788 119634, 205993 119798, 205974 121057, 206022 121532, 205765 121705, 204810 121694, 202128 121739, 201775 121824, 202965 121862, 205712 121878, 205956 121996, 205607 122295, 205625 122797, 205598 122895, 205532 123295, 192237 123295, 192237 124540, 190905 124517, 178876 124558, 159393 124539, 158209 124574, 157063 124555, 156135 124515, 155319 124503, 153735 124370, 153171 124373, 152319 124434, 152058 124362, 150765 124355, 149679 124416, 149111 124485, 148316 124362, 147658 124621, 146550 124582, 144196 124557, 144140 124515, 144074 123740, 144067 123452, 144198 123357, 145263 123428, 145781 123478, 147239 123524, 149051 123409, 150294 123401, 154169 123313, 148637 123253, 147409 123252, 145707 123133, 144979 123162, 144332 123134, 144087 123027, 144093 120274, 144194 120184, 144328 120135, 145938 120218, 148580 120288, 149334 120206, 149218 120126, 147074 120020, 145100 120000, 144226 119975, 144067 119824, 144169 119166, 144505 119077, 144828 119070, 150787 119109, 154567 119111, 155054 119223, 155306 119225, 155885 119182, 157452 119193, 158182 119268, 158708 119181, 159547 119114, 159983 119109, 160851 119231, 161347 119159, 161742 119163, 163483 119218, 163875 119207, 164592 119111, 165320 119090, 166137 119105, 188291 119084, 197834 119110, 201545 119063) (176385 123260, 172711 123299, 176669 123323, 177543 123316, 179351 123250) (166823 121584, 171268 121591, 170324 121661, 174090 121680, 181957 121679, 187229 121624, 183469 121569) (151227 120838, 151342 120949, 155977 121273, 157233 121377, 159906 121496, 157527 121260, 156573 121176, 154595 120927, 152809 120863, 152361 120818, 151418 120794) (199267 120920, 196274 121018, 194175 121039, 196983 121073, 199763 121137, 202937 121099, 203503 120999, 202453 120939, 200958 120914)), ((143148 119097, 143547 119179, 143631 121509, 143591 121842, 143466 121931, 138992 122147, 138105 122149, 137126 122164, 137772 122230, 138051 122236, 139577 122311, 140471 122298, 141116 122254, 143489 122175, 143627 122202, 143623 123411, 143398 123583, 142565 123578, 139555 123513, 137831 123555, 137589 123625, 137661 123730, 141281 123730, 143392 123682, 143600 123826, 143597 124086, 143569 124473, 143360 124553, 139988 124563, 119514 124545, 114283 124584, 96359 124543, 85074 124545, 84915 123847, 85236 123697, 87764 123728, 89370 123707, 90081 123625, 89284 123532, 86950 123498, 85713 123516, 85089 123476, 84978 123386, 85013 121785, 84858 121668, 85212 121681, 89575 122119, 89822 122165, 90307 122276, 90826 122438, 92351 122488, 94952 122305, 94997 122208, 96652 121961, 99346 121623, 101330 121399, 103514 121324, 107521 121290, 108088 121294, 108641 121282, 111154 121192, 115754 121176, 116955 121162, 121904 121166, 123260 121181, 125557 121234, 127108 121304, 127660 121357, 129989 121226, 130331 121217, 130990 121023, 131270 121021, 131770 120921, 131547 120867, 131781 120805, 128759 120897, 127945 120960, 124988 121022, 118194 121058, 118590 121086, 116516 121092, 115530 121059, 110899 121015, 109944 121017, 108383 120970, 103722 121005, 101226 120960, 98350 121056, 95166 121068, 94591 121095, 94963 121149, 97652 121169, 100113 121317, 100158 121400, 96690 121838, 93910 122117, 91483 122208, 90044 122118, 85281 121593, 84841 121530, 84930 121469, 85060 121242, 85271 121078, 84984 120832, 85059 120467, 85014 119180, 85464 119099, 94016 119083, 134996 119075) (115136 123432, 114052 123516, 112864 123592, 111696 123683, 110614 123720, 102788 123724, 101179 123786, 102187 123903, 102902 123932, 105142 123925, 108014 123939, 109837 123995, 110561 124029, 112606 123998, 114791 123853, 115734 123804, 118799 123684, 127130 123645, 127814 123650, 128226 123617, 126750 123577, 126379 123551, 120397 123521, 118480 123423) (133432 123274, 132376 123508, 133110 123612, 133737 123386, 134282 123156, 134236 123049)), ((173969 113113, 174262 113216, 174263 114309, 174171 114437, 173569 114421, 171766 114337, 167935 114209, 164202 114215, 163813 114251, 160147 114268, 167252 114296, 170212 114483, 171734 114568, 172845 114579, 174129 114547, 174126 114654, 174280 114714, 174347 116125, 174157 116235, 173167 116107, 171485 116026, 168940 116051, 168504 116117, 164275 116147, 161175 116056, 164061 116212, 166553 116282, 169745 116291, 171465 116377, 172899 116356, 174150 116409, 174275 116478, 174219 117563, 174260 118146, 174092 118529, 173753 118587, 142657 118563, 135927 118572, 123063 118564, 118366 118615, 112463 118546, 112332 118099, 112301 117870, 112561 117761, 116313 117730, 118248 117747, 119806 117737, 120742 117667, 121240 117515, 115240 117534, 112673 117598, 112315 117502, 112262 116423, 112459 116370, 113078 116340, 115070 116360, 116056 116413, 121295 116786, 121946 116842, 125105 117168, 126308 117271, 128660 117418, 130467 117481, 133024 117532, 139049 117529, 141689 117541, 143185 117461, 147279 117486, 154045 117466, 157454 117433, 158145 117415, 157720 117386, 155443 117353, 152223 117329, 146215 117335, 143003 117361, 141721 117287, 135149 117265, 133665 117323, 131786 117306, 130373 117314, 127965 117218, 127234 117166, 122785 116802, 122338 116756, 117093 116345, 113983 116115, 112533 116095, 112261 115994, 112261 115785, 112372 115093, 112538 114987, 117238 114967, 119298 115039, 121025 115131, 122599 115167, 125398 115185, 130025 115197, 131482 115165, 136642 115150, 138285 115089, 138780 115008, 137312 114919, 129653 114887, 129045 114876, 125429 114880, 124883 114894, 122494 114908, 121049 114891, 117553 114745, 117100 114692, 113528 114688, 112632 114761, 112342 114646, 112456 113187, 113003 113086) (134946 116502, 133715 116560, 133491 116592, 138007 116639, 140364 116628, 142135 116552, 146506 116506, 145122 116444, 145136 116414, 143708 116402) (155424 116462, 159699 116532, 160425 116486, 160692 116428, 158777 116396) (149645 115695, 151936 115707, 154846 115808, 153938 115725, 151809 115677) (131482 114062, 129841 114102, 137313 114141, 141384 114140, 148260 114119, 154703 114218, 154676 114187, 152897 114105, 150653 114058, 140332 114029) (122961 113937, 124054 113980, 123870 113953, 123010 113928, 121838 113866)), ((159010 107145, 159234 107302, 159728 107797, 159606 107932, 159337 107965, 158955 108062, 159155 108163, 159240 108158, 160141 108237, 160194 108224, 160969 109024, 161322 109351, 161594 110167, 160604 110167, 159172 110098, 159048 110084, 156843 109975, 154846 110001, 154367 109977, 153100 109957, 151543 109994, 147973 109992, 146968 110032, 147665 110077, 147863 110122, 148150 110156, 153090 110144, 153806 110257, 154690 110313, 157283 110323, 157402 110337, 158734 110402, 159458 110485, 160228 110485, 161255 110409, 161532 110408, 161448 110517, 161443 110598, 161230 111032, 160312 111036, 159943 111139, 159893 111240, 160769 111348, 162255 111382, 162152 110133, 162116 109797, 162247 109757, 164034 109634, 164960 109508, 166153 109505, 168297 109461, 168198 109437, 165823 109371, 165557 109372, 164456 109324, 164027 109377, 162914 109398, 164004 108271, 164228 108124, 164740 108131, 165883 108177, 166864 108152, 166893 108065, 166681 107988, 165278 107959, 164359 107993, 164420 107854, 165118 107147, 167035 107145, 168449 107197, 173540 107159, 178307 107164, 184638 107207, 189131 107160, 189801 107829, 189824 107985, 188705 107960, 188202 108012, 188023 108072, 188161 108159, 189118 108167, 189975 108148, 190080 108262, 190442 108565, 191881 109878, 191566 109889, 188702 109362, 188432 109226, 188394 109184, 187542 109141, 186288 109329, 186436 109420, 185815 109625, 184514 109911, 183626 110121, 183224 110201, 182105 110240, 182000 110264, 180558 110296, 180147 110289, 179742 110306, 178668 110382, 174030 110395, 172202 110350, 171824 110331, 171002 110322, 170645 110247, 169387 110356, 169227 110533, 168956 110656, 169073 110697, 169011 110760, 170254 110644, 170626 110597, 171494 110573, 172048 110576, 176278 110544, 178712 110571, 179786 110617, 182057 110590, 183296 110637, 184470 110553, 188215 110534, 191836 110534, 191836 110744, 191749 111098, 191889 112076, 191903 112362, 191672 112435, 185409 112400, 167759 112410, 167716 112356, 167575 112354, 167609 112409, 162581 112379, 162331 112300, 162262 111470, 162200 111654, 162154 112127, 161658 112417, 152006 112419, 147443 112395, 138176 112449, 134654 112452, 132430 112478, 132213 112306, 132162 111936, 132213 111901, 133447 111837, 133288 111793, 133196 111702, 132899 111661, 132689 111520, 132593 111514, 132577 111281, 132416 110545, 132754 110541, 133602 110760, 134295 110871, 135496 110886, 137024 110825, 140133 110818, 140468 110876, 141545 110862, 142152 110832, 142365 110771, 143112 110736, 142973 110613, 143059 110590, 142030 110539, 140363 110617, 136668 110609, 135588 110523, 133818 110306, 132718 110113, 133318 109012, 133557 108779, 133734 108694, 133930 108783, 134575 108851, 135963 108854, 137324 108792, 138682 108775, 139880 108795, 140534 108870, 142303 108852, 143022 108778, 143288 108645, 144060 108498, 144001 108876, 144014 108912, 143745 109323, 141375 109312, 139839 109386, 138895 109459, 138266 109488, 137529 109581, 136714 109618, 136280 109720, 136760 109804, 138275 109763, 139817 109555, 140188 109535, 141688 109408, 142697 109432, 143752 109432, 143840 109377, 144286 109389, 144352 109447, 146389 109483, 147285 109392, 147522 109353, 149125 109270, 149851 109212, 153288 109206, 155163 109264, 155826 109217, 156626 109223, 157207 109171, 157232 109023, 155744 108946, 153846 108955, 152331 109028, 151614 109028, 150769 108951, 149390 108946, 148315 108982, 147094 109181, 145995 109270, 145163 109271, 145126 109248, 144506 109278, 144518 108863, 145073 108673, 145134 108715, 145257 108350, 145355 108416, 148996 108398, 150534 108409, 150631 108363, 150491 108334, 148483 108328, 146407 108288, 145276 108294, 145175 108258, 144676 108184, 144445 108196, 143973 108384, 143130 108479, 142442 108541, 140520 108583, 138917 108642, 138372 108642, 137210 108620, 136577 108542, 134321 108563, 133754 108673, 133793 108538, 135053 107302, 135294 107191, 136401 107145, 140012 107186, 142035 107141, 146145 107142, 151406 107184, 157701 107141) (152019 110746, 151366 110977, 150605 111286, 149841 111562, 150677 111382, 151978 111067, 152618 111043, 154278 111013, 154658 110914, 154450 110825, 153863 110735) (144211 110440, 144077 110740, 144397 110824, 144851 110909, 144939 110460, 144828 110334, 144597 110313) (176791 107863, 176491 107904, 175284 108001, 171031 108016, 169946 108119, 169283 108117, 169284 108059, 169146 108117, 168700 108156, 168391 108285, 168129 108467, 168088 108543, 169123 108183, 169927 108146, 174458 108180, 175129 108269, 176784 108261, 177351 108165, 177690 108125, 178255 108031, 178692 107977, 182178 107974, 183162 107908, 182216 107818, 181932 107777, 179155 107746, 178667 107685, 177815 107680)), ((98915 107130, 99146 107235, 100177 108242, 100253 108365, 99924 108342, 100094 108511, 100349 108500, 100455 108616, 100576 108635, 100908 108932, 101340 109634, 101521 109683, 101365 109676, 101459 109831, 101777 109811, 101754 109883, 101852 109946, 101744 110339, 101903 110365, 101880 110689, 102146 110584, 102154 110415, 102001 109761, 102055 109718, 102204 109714, 102269 109523, 102904 109169, 103409 108665, 103622 108630, 103947 108278, 103836 108211, 104823 107184, 105115 107133, 107978 107113, 111160 107132, 128883 107133, 129138 107284, 129173 107296, 131343 109462, 131644 109797, 131361 109854, 131401 109897, 131026 110115, 127214 110106, 125858 110135, 125947 110159, 127764 110204, 129488 110201, 130988 110164, 130998 110211, 131690 110198, 131647 110445, 131399 111203, 131794 111212, 131772 111674, 131873 111741, 131816 112323, 131653 112448, 128596 112449, 126602 112399, 120755 112437, 115849 112432, 109488 112389, 102207 112436, 102216 112325, 102047 112310, 101941 111290, 101931 110981, 101882 110954, 101881 111394, 102001 111870, 101953 112322, 101701 112336, 101644 112361, 93766 112371, 93180 112345, 90270 112356, 88684 112421, 80711 112399, 80169 112432, 79671 112358, 76805 112366, 76104 112346, 76077 112380, 75800 112402, 74788 112378, 73731 111335, 73755 111304, 74031 111310, 73685 110971, 73304 110932, 73269 110892, 73314 110609, 72973 110268, 73235 110264, 72989 109912, 72711 109904, 72594 109866, 72773 109607, 72635 109385, 73683 108277, 73859 108169, 74007 108179, 74199 107999, 74050 107988, 74133 107852, 74775 107236, 75001 107156, 75203 107153, 75383 107099) (125717 111185, 125194 111356, 125654 111424, 126049 111311, 126306 111111, 126133 111090) (74948 111341, 74614 111369, 75011 111381, 75589 111330) (87821 111146, 82785 111199, 80450 111194, 80558 111207, 87462 111220, 87858 111213, 87948 111226, 89158 111144, 88280 111133) (101881 110918, 102294 111011, 102229 110743, 101879 110689) (88984 109561, 88904 109585, 89077 109600, 91071 109624, 91564 109659, 92986 109641, 92678 109608, 90853 109534) (76264 108798, 76033 108929, 76226 108969, 77050 109045, 77709 109074, 78383 109091, 78011 108892, 77113 108854, 76893 108797)), ((188855 109509, 189201 109527, 191054 109895, 191689 110012, 191847 110125, 191828 110397, 191667 110471, 189050 110429, 185038 110418, 184491 110370, 184059 110257, 183994 110199, 187068 109513, 188137 109434)), ((132088 80351, 132100 80698, 131668 82937, 131570 83294, 131434 83512, 131392 83547, 131349 84410, 131537 85661, 131628 85512, 131833 86135, 132119 87435, 132329 88323, 132410 88724, 132451 89846, 132474 89949, 132505 91392, 132497 91803, 132514 92207, 132592 93280, 132603 97920, 132559 99748, 132541 100125, 132532 100946, 132456 101304, 132564 102563, 132742 102723, 132866 102993, 132908 102876, 132971 102937, 132853 101697, 132806 101324, 132781 100455, 132784 99901, 132754 95668, 132780 93237, 132827 92162, 132800 89891, 132847 88652, 132762 87479, 132742 84557, 132742 81104, 132953 81167, 133307 81537, 134284 82442, 134570 82722, 134644 82977, 134608 86909, 134618 103536, 134564 103579, 134562 103672, 134617 103645, 134587 106715, 134508 106965, 132343 109101, 132007 109405, 131965 109303, 131844 107913, 131716 106990, 131713 105797, 131669 103653, 131645 103752, 131579 106127, 131581 106393, 131535 107493, 131588 107920, 131606 109039, 130479 107944, 130332 107720, 130339 107208, 130388 106065, 130360 105084, 130275 105055, 130198 105267, 130169 106670, 130201 107590, 130062 107530, 129356 106833, 129355 104915, 129407 103501, 129367 98408, 129372 93641, 129415 87312, 129369 82818, 130048 82147, 130193 82123, 130185 82785, 130168 83243, 130220 83747, 130280 83926, 130367 83789, 130376 82791, 130356 81920, 130501 81687, 130773 81419, 132045 80344) (130028 89735, 129988 90019, 129969 92116, 129954 92794, 129893 93283, 129891 94134, 130071 95159, 130113 95459, 130209 96666, 130227 100918, 130329 102004, 130327 102664, 130269 102662, 130326 102800, 130364 103250, 130493 103558, 130675 103821, 130751 103862, 130394 102822, 130356 102023, 130390 97490, 130480 96819, 130470 95163, 130373 94597, 130334 94257, 130240 93694, 130187 93257, 130184 89773, 130118 88788)), ((162514 80880, 162638 81057, 162558 81767, 162517 82495, 162485 83800, 162499 85365, 162548 86299, 162564 92260, 162545 95954, 162523 96426, 162529 97064, 162578 97072, 162566 92262, 162603 85065, 162644 84157, 162754 82802, 162735 82077, 162655 81072, 162829 81158, 164387 82691, 164614 82943, 164605 87896, 164219 87649, 164178 87742, 164400 88225, 164012 88242, 163727 87669, 163575 87536, 163067 87302, 163024 87588, 163038 87749, 162985 90035, 162978 92695, 163204 95265, 163245 95456, 163240 96220, 163315 97903, 163327 99623, 163330 104516, 163310 105624, 163284 106464, 163219 106762, 162803 107018, 162309 107495, 162080 107602, 161747 107898, 161779 107977, 161784 108230, 161756 108271, 161802 108775, 161864 109009, 162044 109283, 161662 109211, 161427 108906, 160814 108383, 160613 108185, 160473 107965, 160292 107863, 160127 107626, 160166 103244, 160144 100619, 160129 100234, 160300 99798, 160314 99623, 160130 99240, 160150 98709, 160190 96160, 160286 94642, 160295 94381, 160412 93860, 160504 93302, 160711 92494, 160833 92221, 160896 91519, 160869 90235, 160815 90377, 160742 89793, 160695 90321, 160658 90241, 160550 92039, 160397 92632, 160224 93079, 159978 94043, 159950 94605, 160051 94812, 160054 97362, 160083 99295, 160218 99682, 160075 100157, 160057 102516, 160087 107587, 159939 107500, 159488 107071, 159407 106902, 159354 101060, 159576 100875, 159722 100716, 159718 100563, 159505 100233, 159396 99806, 159354 98442, 159375 96776, 159359 93507, 159418 84180, 159411 82884, 160611 81733, 160810 81657, 160758 81779, 160800 82029, 160788 86686, 160777 87518, 160791 88053, 160845 88268, 161104 90329, 161297 91487, 161344 91823, 161426 92165, 161448 96639, 161476 99983, 161464 100068, 161512 101339, 161588 101568, 161545 102732, 161525 102761, 161543 103460, 161637 103981, 161707 103987, 161780 103832, 161812 103083, 161829 102871, 161806 102457, 161783 102385, 161733 102023, 161653 101302, 161622 100681, 161552 99922, 161546 97115, 161556 93767, 161550 93426, 161494 92025, 161344 90663, 161127 89039, 160929 87718, 160921 81528, 161025 81337, 161664 80710, 161948 80647)), ((101982 94980, 102787 94938, 102896 94892, 102918 98067, 102954 101184, 102958 104691, 102978 105075, 102977 106241, 103011 108181, 102887 108404, 102116 109124, 102023 108988, 102144 106880, 102107 105872, 101995 104857, 101942 106962, 101821 107960, 101789 108501, 101799 108816, 101711 108809, 101531 108631, 101168 108300, 100963 108007, 101163 107419, 101190 107169, 101314 106857, 101421 103786, 101413 103667, 101407 101790, 101473 99485, 101424 98534, 101442 96445, 101472 96107, 101661 94816)), ((31584 108412, 35792 108665, 36397 108724, 38847 108856, 38447 108902, 37214 108990, 35497 109037, 34203 109018, 32537 109049, 31191 109043, 31191 108380)), ((70286 79814, 70527 80081, 70754 80006, 71579 79901, 72899 81068, 72977 81196, 72930 82540, 72914 82716, 73008 84778, 73091 84696, 73144 84286, 73148 83827, 73219 83388, 73211 81700, 73136 81385, 73239 81465, 73407 81676, 73610 81789, 74764 82969, 74744 95230, 74793 96104, 74793 96465, 74752 98120, 74780 102349, 74775 106961, 74682 107201, 74308 107524, 73755 108130, 73620 108162, 73535 107563, 73505 107251, 73451 107488, 73418 107884, 73430 108326, 73214 108626, 73051 108631, 73034 106166, 73078 104948, 73085 104496, 73189 103562, 73249 103194, 73245 102391, 73179 101498, 73040 102157, 72918 104625, 72887 105087, 72902 105742, 72927 108640, 72967 108656, 72962 108702, 72766 108937, 71932 109038, 71046 108578, 70835 108442, 70877 107978, 70845 105935, 70816 105430, 70791 105245, 70762 105336, 70711 106221, 70711 106747, 70792 108412, 70535 108167, 70165 107883, 70008 107646, 69776 107264, 69666 107235, 69495 106969, 69497 106308, 69530 106135, 69948 106309, 69953 106352, 69970 106328, 69932 105940, 69821 105305, 69756 105349, 69515 104618, 69501 103800, 69517 99441, 69534 97942, 69507 95158, 69529 92815, 69541 79951, 69611 79761) (71423 103241, 71403 103336, 71406 104048, 71461 105319, 71610 107272, 71704 107843, 71747 107585, 71757 107133, 71557 105220, 71498 102385) (69775 93625, 69692 93891, 69687 94937, 69757 96028, 69754 97698, 69774 98304, 69819 99010, 69825 102676, 69862 104020, 69875 103597, 69868 99038, 69859 98979, 69894 98438, 69917 97578, 69875 96176, 69953 95836, 69964 93752, 69880 93631, 69840 93230) (74082 95383, 74056 96106, 74057 97367, 74127 98634, 74162 100733, 74202 102239, 74228 100960, 74300 99277, 74301 98326, 74351 97499, 74348 95249, 74193 94847) (70840 97385, 70806 98878, 70811 99568, 70861 99912, 70906 99499, 70900 98719, 70861 97352, 70853 95478) (72206 89101, 72203 89896, 72222 92789, 72389 96033, 72433 98394, 72548 99048, 72635 98048, 72601 96638, 72472 95825, 72442 95507, 72263 92763, 72255 92409, 72259 89241, 72237 88998) (73370 91468, 73365 92491, 73399 92670, 73423 92474, 73437 92117, 73418 90084)), ((103884 81751, 104632 82462, 104728 82685, 104676 85904, 104671 95701, 104709 103114, 104672 106559, 104427 106874, 103489 107841, 103249 108074, 103045 108152, 103034 107866, 103074 97329, 103093 96375, 103138 94944, 103160 94555, 103267 94128, 103115 93811, 103203 92615, 103163 91729, 103138 90727, 103234 89932, 103291 89632, 103292 88813, 103448 87550, 103544 86203, 103709 84580, 103729 84488, 103720 82610, 103781 81697)), ((100628 81448, 100585 81797, 100574 82704, 100596 83749, 100654 84821, 100655 85564, 100611 85805, 100693 86455, 100883 87066, 101264 87838, 101479 88179, 101544 88423, 101672 89034, 101689 89293, 101698 89767, 101654 92971, 101631 93455, 101353 96330, 101349 96667, 101190 100623, 101149 102559, 101148 103282, 101032 104729, 100996 106188, 101003 107273, 100960 108006, 100823 107968, 99511 106683, 99471 106487, 99489 95678, 99488 89261, 99446 87738, 99429 82751, 99540 82499, 100601 81421) (100890 93175, 100849 93650, 100855 94403, 100908 94674, 100953 94651, 100992 94168, 100986 93400, 100949 93145)), ((164607 106391, 164641 106350, 164653 106781, 164517 107112, 164142 107479, 163739 107841, 163933 107383, 163897 107364, 163937 106859, 164158 106590, 164599 106346)), ((163391 89582, 163600 90326, 163989 90450, 164341 90540, 164375 90503, 164390 90577, 164642 90614, 164659 98032, 164641 104837, 164617 105828, 164638 106234, 164159 106583, 163994 106645, 163853 106767, 163582 106958, 163495 106500, 163466 105493, 163458 104441, 163477 97986, 163554 96295, 163485 95431, 163381 95042, 163191 93578, 163140 92300, 163156 88953, 163300 88931)), ((141712 105172, 143385 106869, 142215 106869, 141588 106217, 137152 101749, 137152 101762, 135007 99623, 135007 98462)), ((137650 102410, 140561 105306, 141865 106681, 142015 106869, 140218 106869, 139270 105973, 139208 105935, 139418 106164, 139427 106164, 140127 106869, 139234 106869, 137234 104821, 135007 102687, 135007 101031, 136167 102149, 136412 102267, 135715 101443, 135007 100749, 135007 99753)), ((135867 91710, 135562 91810, 135708 92040, 136068 92193, 136030 92683, 135672 92551, 135271 92682, 135058 92964, 135267 93203, 137381 95381, 139877 97890, 142359 100075, 142554 100220, 143276 100948, 144942 102513, 146460 104018, 149311 106869, 147276 106869, 146602 106364, 146072 105872, 145373 105271, 139674 99573, 138357 98332, 136990 97160, 135007 95490, 135007 93656, 135533 94107, 138405 96965, 135007 93543, 135007 91499, 135019 91219, 135007 90853) (142663 101249, 142992 101603, 143454 102059, 143496 102048, 140146 98709)), ((189007 91828, 185473 95408, 183327 97465, 182985 97541, 182818 97740, 182903 97788, 183008 97597, 183354 97568, 186289 94789, 189007 92104, 189007 94298, 188593 94629, 188089 95090, 187939 95270, 188007 95271, 188566 94867, 188592 94832, 189007 94523, 189007 96265, 188630 96748, 186604 99440, 186319 99763, 183281 102903, 180267 105905, 179999 106142, 180024 106142, 179167 106869, 176612 106869, 177259 106029, 177974 105214, 180550 102622, 180639 102383, 177483 105460, 176889 106088, 176904 106088, 176155 106869, 174441 106869, 174768 106676, 174901 106681, 175105 106527, 175358 106385, 176008 105640, 176891 104515, 177191 104254, 177311 104104, 177330 104005, 177192 103699, 176883 103699, 176775 103497, 177161 103102, 177824 102388, 178722 101542, 180848 99415, 181000 99186, 182098 98136, 182370 97887, 189007 91254) (182802 100710, 182932 100970, 183227 101276, 182914 101540, 182712 101734, 182436 101875, 182450 102065, 182201 102328, 181948 102258, 182057 102496, 181650 102922, 181326 103320, 181632 103104, 182570 102220, 182787 102004, 183136 101563, 183285 101289, 182994 100574, 183070 100512, 183915 100785, 183984 100701, 184114 100410, 183850 100721, 183370 100501, 183343 100531, 183024 100394) (186138 98465, 184252 100293, 184584 100105, 185094 99578, 186706 97969) (182015 98404, 181812 98488, 181390 98884, 181199 99169, 181142 99356, 180963 99826, 180678 100114, 180554 100282, 180682 100210, 181087 99828, 181338 99358, 181732 98795, 182373 98258, 182374 98193, 182492 98042) (186402 95726, 186101 95916, 185871 96130, 184811 97166, 184118 97887, 183671 98320, 182911 97778, 182840 97884, 182373 98273, 182369 98384, 182426 98456, 182508 98417, 182849 97994, 182824 97913, 183306 98144, 183737 98427, 184191 98043, 185095 97161, 186091 96087, 187205 94941)), ((135792 96382, 136482 96965, 138040 98207, 138421 98476, 142381 102393, 142467 102490, 145397 105383, 145461 105462, 146597 106532, 146936 106788, 147011 106869, 145157 106869, 144817 106353, 144664 106184, 144246 106000, 141275 102966, 139625 101178, 139199 100588, 138739 100005, 138145 99140, 138002 98849, 137395 98150, 136191 96983, 136270 97133, 135690 96651, 136100 97118, 135988 97054, 137584 98790, 138019 99427, 138305 99942, 139061 101023, 139594 101593, 139844 101719, 140053 101917, 142327 104187, 144259 106074, 144689 106328, 145014 106869, 144136 106869, 143061 105836, 141137 103859, 141106 103858, 138055 100837, 135007 97761, 135007 95770)), ((136478 94170, 136490 94079, 137145 94613, 137647 94934, 137917 95005, 138244 94593, 138136 94319, 138434 94540, 138533 94359, 145449 101273, 145434 101273, 151023 106869, 149510 106869, 149094 106475, 145168 102534, 143581 100839, 142708 100061, 142271 99762, 140787 98531, 139575 97386, 136953 94747, 136239 94053)), ((139545 87764, 140458 88792, 143138 91446, 144815 93040, 153086 101343, 153697 101909, 154437 102811, 155176 103768, 155866 104259, 155910 104390, 156556 104997, 156882 105338, 157171 105534, 157390 105921, 157854 106136, 158380 106574, 158667 106869, 157319 106869, 157139 106760, 156647 106322, 153456 103283, 150950 100779, 153473 103308, 156942 106869, 154067 106869, 153286 105813, 152455 104861, 151939 104191, 150938 102963, 149845 101829, 149013 100923, 142196 94037, 139717 91595, 139514 91531, 141364 93435, 149611 101638, 150901 103128, 151712 104139, 152100 104653, 152467 105335, 153301 106220, 153491 106481, 153842 106869, 151689 106869, 151540 106702, 151483 106417, 151126 106157, 150468 105482, 150225 105129, 149988 105006, 149641 104736, 149399 104567, 149149 104102, 148875 103976, 148732 103780, 148133 103107, 147890 102882, 147575 102677, 147339 102506, 140507 95647, 140491 95610, 138246 93352, 138222 93366, 135007 90228, 135007 87897, 135135 87968, 135925 88726, 136568 89367, 138533 91283, 138253 90976, 135007 87562, 135007 83246) (145008 94910, 149680 99510, 145388 95199, 145012 94832, 144933 94736, 143217 93188)), ((189007 105513, 188856 105669, 188602 106012, 188255 106416, 188781 106108, 189007 105884, 189007 106438, 188582 106869, 185141 106869, 187894 104407, 188719 103769, 189007 103506)), ((189007 87385, 188791 87601, 188615 87798, 187154 89256, 184679 91699, 183890 92543, 184284 92214, 184559 91998, 185288 91297, 187212 89328, 189007 87528, 189007 88782, 188619 89210, 187979 89678, 186928 90501, 186593 90849, 186340 91013, 185299 91920, 183835 93107, 183524 93410, 182528 94288, 181905 94859, 181074 95760, 181143 95860, 181526 95543, 182398 94683, 183695 93365, 184603 92634, 186107 91489, 186435 91225, 186944 90918, 187787 90316, 187886 90234, 188510 89772, 189007 89297, 189007 90561, 188777 90739, 184921 94630, 183783 95754, 182966 96254, 182865 96095, 182718 96169, 182686 95987, 182339 96377, 182136 96450, 181799 96770, 181705 97039, 181014 97762, 181227 98321, 179560 99994, 176872 102643, 173632 105887, 172953 106624, 172698 106869, 171139 106869, 171826 106181, 172653 105320, 172926 105049, 173500 104549, 173970 104124, 174469 103586, 174616 103351, 174874 103091, 175071 102787, 175104 102682, 174856 102818, 174778 102714, 175007 102392, 175598 101409, 175732 101057, 176911 99659, 179493 97009, 179619 96826, 179576 96841, 179047 97322, 176268 100093, 175335 101195, 175198 101421, 174988 101637, 174233 103187, 174338 103167, 174114 103447, 172960 104706, 172883 104807, 172025 105754, 170912 106869, 167560 106869, 168260 106172, 168912 105352, 169011 105214, 169545 104660, 169677 104457, 170671 103427, 173320 100756, 177090 97035, 177677 96513, 178399 95930, 179300 95291, 180386 94256, 181559 92974, 182790 91741, 185066 89413, 185081 89260, 184805 89515, 180656 93622, 179704 94477, 178826 95284, 178717 95352, 177102 96748, 176503 97297, 176536 97242, 176250 97514, 173104 100721, 171828 101987, 170167 103496, 169452 104130, 168827 104851, 168246 105594, 167945 106016, 167651 106375, 167129 106869, 165402 106869, 165885 106346, 167975 104243, 170717 101517, 174653 97576, 174662 97576, 189007 83298)), ((135659 103546, 136041 103874, 138773 106527, 139111 106869, 138084 106869, 137695 106484, 136436 105280, 135574 104373, 135488 104261, 135007 103774, 135007 102902)), ((174641 105965, 175104 106270, 174947 106425, 174684 106406, 174358 106663, 174119 106869, 173382 106869, 174408 105799)), ((135409 104419, 135525 104512, 136409 105354, 137869 106869, 136513 106869, 135718 106080, 135351 105762, 135007 105418, 135007 104058)), ((189007 99625, 187903 100672, 186370 102207, 185200 103276, 184287 104230, 184065 104559, 183962 104637, 183894 104788, 184239 104618, 186289 102553, 186582 102151, 187095 101623, 189007 99728, 189007 101043, 187470 102610, 188250 101834, 188937 101180, 189007 101171, 189007 103197, 187941 104265, 185111 106869, 181387 106869, 185304 102923, 188152 100108, 189007 99230)), ((189007 98574, 184481 103113, 180716 106869, 179264 106869, 179467 106699, 180295 105960, 181975 104291, 183301 102908, 184055 102221, 186204 100058, 186697 99522, 187435 98646, 187842 98077, 187842 98052, 188826 96670, 189007 96484)), ((129077 103720, 128692 104109, 127488 105370, 126581 106231, 126470 106317, 125984 106797, 125110 106797, 125754 106145, 126082 105764, 128735 103031, 129077 102693)), ((129077 101586, 128182 102534, 128145 102596, 128373 102386, 128373 102377, 129077 101677, 129076 102574, 127029 104574, 124897 106797, 123240 106797, 124359 105637, 124476 105392, 123655 106089, 122958 106797, 121960 106797, 124620 104154, 127514 101243, 128889 99941, 129077 99792)), ((129077 99589, 128426 100216, 123957 104652, 123970 104652, 121831 106797, 120672 106797, 127380 100092, 129077 98419)), ((129077 105292, 128290 106086, 127974 106453, 127629 106797, 126266 106797, 126630 106395, 126721 106279, 127563 105396, 129077 103935)), ((129077 84485, 128968 84666, 128534 85157, 125495 88348, 122988 90854, 125520 88331, 129077 84871, 129077 87737, 128025 88519, 127072 89352, 126401 89868, 125171 90866, 124037 91959, 123131 92791, 116247 99608, 113803 102087, 113739 102290, 115645 100441, 119278 96778, 123846 92193, 125336 90903, 126348 90096, 126862 89707, 127543 89339, 128428 88504, 128689 88313, 129077 87962, 129077 90102, 128914 90266, 128625 90321, 128365 90678, 127691 91336, 127339 91579, 127214 91816, 126945 92165, 126775 92406, 126311 92657, 126184 92929, 125988 93072, 125315 93671, 125090 93914, 124885 94230, 124714 94466, 117855 101297, 117818 101313, 115560 103558, 115574 103582, 112445 106797, 110107 106797, 110178 106670, 110935 105880, 111576 105237, 113495 103271, 113187 103551, 109773 106797, 105454 106797, 109974 102259, 111001 101349, 113681 98642, 115248 96989, 123552 88718, 124118 88108, 125023 87367, 125977 86632, 126468 85938, 126598 85895, 127207 85251, 127548 84924, 127745 84635, 128129 84414, 128344 83953, 128782 83425, 129077 83139) (117408 96419, 117041 96794, 116946 96872, 115396 98587, 117120 96798, 121718 92124)), ((76615 100711, 79026 103093, 81839 105941, 82719 106797, 82327 106797, 81278 105696, 79743 104160, 78674 102990, 77718 102078, 77389 101855, 77311 101752, 77161 101684, 77331 102029, 79397 104078, 79799 104372, 80327 104886, 82222 106797, 80907 106797, 79339 105263, 80114 106044, 80769 106727, 80780 106797, 78751 106797, 77683 105731, 75079 102898, 75079 99177)), ((75272 92559, 75267 92693, 75423 92895, 75565 93150, 76330 93818, 77434 94682, 77696 94983, 77846 95102, 77944 95121, 78249 94982, 78251 94674, 78452 94565, 78846 94951, 79560 95617, 80407 96513, 82534 98640, 82762 98792, 83814 99889, 84063 100162, 90696 106797, 90120 106797, 86540 103263, 84486 101119, 84409 100775, 84209 100611, 84161 100694, 84353 100798, 84384 101145, 87159 104081, 89846 106797, 87650 106797, 87322 106383, 86859 105879, 86679 105729, 86679 105798, 87083 106356, 87117 106382, 87426 106797, 85683 106797, 85201 106421, 82508 104396, 82186 104110, 79049 101071, 76043 98059, 75806 97791, 75806 97816, 75079 96958, 75079 94404, 75921 95051, 76736 95768, 79327 98341, 79567 98432, 76489 95274, 75860 94680, 75860 94694, 75079 93946, 75079 92234) (83492 100216, 83550 100339, 83990 100627, 84035 100614, 83805 101096, 83523 101527, 83906 101981, 84788 102885, 85862 103882, 87008 104997, 86222 104194, 86032 103895, 84782 102601, 84063 101908, 83630 101461, 84170 100703, 84066 100630, 83684 100175, 83564 100159) (81843 102376, 82370 102886, 83980 104498, 83483 103929, 81658 102044) (78846 99425, 79730 100360, 79946 100577, 80387 100927, 80661 101077, 81376 100787, 81438 100864, 81163 101708, 81247 101776, 81542 101906, 81227 101642, 81447 101160, 81417 101133, 81554 100814, 81238 100593, 80978 100723, 80673 101019, 80263 100545, 80216 100504, 80075 100227, 79884 100242, 79621 99994, 79692 99738, 79454 99848, 79028 99441, 78629 99117) (81739 98474, 82120 98879, 82590 99128, 83153 99523, 83695 100172, 83763 100173, 83907 100284, 83712 100018, 83544 99808, 83460 99605, 83064 99181, 82779 98991, 82593 98933, 82123 98755, 81834 98470, 81666 98345)), ((75602 83675, 77708 85764, 80431 88507, 84370 92445, 98651 106797, 94563 106797, 94347 106581, 94152 106405, 92694 104946, 90250 102469, 89406 101680, 89736 102076, 89950 102350, 90652 103078, 92624 105004, 94421 106797, 93167 106797, 92738 106409, 92270 105769, 91448 104719, 91100 104384, 90936 104132, 90029 103090, 88842 101625, 88540 101315, 87661 100320, 87089 99695, 86189 98864, 86088 98933, 86406 99317, 87266 100188, 88584 101485, 89315 102393, 90459 103899, 90724 104226, 91031 104735, 91634 105578, 92177 106302, 92651 106797, 91387 106797, 91211 106567, 87318 102711, 86195 101574, 85696 100756, 85853 100655, 85779 100508, 85961 100479, 85571 100129, 85498 99927, 85178 99592, 84909 99497, 84186 98804, 83627 99020, 81955 97353, 79307 94665, 76061 91421, 75325 90744, 75079 90495, 75079 88929, 75767 89618, 76628 90446, 76899 90720, 77824 91764, 78363 92261, 78597 92408, 78857 92665, 79162 92862, 79266 92894, 79131 92647, 79235 92569, 79557 92799, 80540 93390, 80893 93523, 82291 94703, 84939 97283, 85122 97409, 85108 97367, 84626 96838, 81855 94059, 80753 93128, 80528 92991, 80313 92778, 78761 92022, 78782 92128, 78503 91904, 77241 90749, 77141 90674, 76194 89817, 75079 88698, 75079 85351, 75778 86050, 76598 86703, 76738 86803, 77289 87336, 77492 87468, 79275 89201, 81192 91112, 84913 94881, 85437 95468, 86020 96189, 86658 97090, 87694 98178, 88976 99351, 90209 100582, 92537 102858, 92688 102873, 92433 102597, 88328 98447, 87473 97494, 86666 96616, 86598 96508, 85200 94894, 84651 94296, 84706 94330, 84434 94043, 81228 90894, 79961 89619, 78452 87959, 77818 87244, 77098 86618, 76356 86036, 75931 85734, 75574 85441, 75079 84921, 75079 83196)), ((129077 96647, 128561 96988, 128393 97140, 128208 97560, 125174 100529, 123386 102179, 122796 102605, 122214 103065, 121351 103659, 121035 103816, 120360 104409, 119192 105614, 119343 105535, 118859 106114, 119328 105704, 119264 105816, 120999 104220, 121636 103785, 122151 103499, 123231 102744, 123801 102210, 123927 101960, 124125 101752, 126395 99477, 128282 97546, 128536 97115, 129077 96790, 129077 97668, 128045 98743, 126070 100668, 126070 100698, 123042 103752, 119971 106797, 117978 106797, 118594 106013, 119176 105322, 120415 103764, 120684 103383, 124601 99423, 124698 99337, 127594 96408, 127674 96343, 128741 95208, 128997 94870, 129077 94795)), ((77541 105684, 78179 106509, 78442 106797, 76437 106797, 76281 106647, 75937 106392, 75532 106045, 75840 106573, 76064 106797, 75510 106797, 75079 106372, 75079 102934)), ((75249 97259, 75988 98087, 77658 99766, 79043 101091, 79728 101846, 81890 103996, 82426 104488, 83302 105228, 83872 105635, 83896 105635, 85280 106616, 85464 106797, 83375 106797, 78835 102271, 75079 98507, 75079 97056)), ((129077 94528, 128575 95202, 128084 95732, 127483 96431, 121781 102130, 120540 103448, 119368 104814, 117698 106797, 115864 106797, 116315 106271, 119173 103399, 115748 106797, 113060 106797, 113918 105937, 114018 106242, 114250 106097, 114405 105738, 114891 105778, 114761 106136, 114893 106536, 115172 106746, 115411 106537, 117591 104423, 120099 101927, 122285 99445, 122430 99250, 123158 98528, 124721 96862, 129077 92487) (120917 101658, 123457 99141, 123811 98812, 124267 98350, 124256 98308)), ((183845 83166, 183798 83199, 182709 84542, 182854 84525, 182347 85322, 181515 86562, 180626 87831, 179661 88851, 179593 88951, 178321 90266, 177978 90597, 177660 90939, 176753 91956, 175431 93333, 172135 96634, 170492 98223, 169972 98652, 169629 98891, 168550 100118, 168443 100477, 168235 100846, 168341 100794, 168288 100935, 169389 99677, 169713 99284, 170505 98458, 170981 97987, 174666 94253, 176945 92016, 177696 91302, 177959 91064, 179968 89019, 181125 87927, 182108 86824, 186028 82869, 188651 82869, 185098 86393, 167744 103756, 165007 106509, 165007 102504, 165315 102182, 165286 102190, 165479 101961, 165393 101955, 165007 102284, 165007 99307, 169716 94563, 169716 94544, 174416 89852, 180898 83425, 181439 82869, 184162 82869) (178607 86566, 178302 86817, 175577 89495, 175062 89927, 174213 90769, 173333 91898, 173071 92217, 171957 93469, 167925 97526, 166977 98627, 166318 99279, 166266 99272, 166219 99377, 165833 99811, 165705 100111, 165699 100362, 165758 100404, 166264 99399, 167011 98602, 171328 94340, 172056 93736, 173611 92170, 174084 91564, 174382 91210, 174862 90601, 175256 90133, 178612 86775, 179475 85821)), ((79767 83105, 79758 83076, 79987 83269, 79993 83185, 79666 82797, 82641 82797, 87385 87506, 87404 87507, 92096 92208, 98525 98688, 99079 99231, 99079 101952, 98784 101637, 98751 101590, 97406 100499, 97424 100644, 96628 100138, 95388 99305, 94119 98416, 93099 97451, 92998 97383, 91683 96112, 91351 95769, 91010 95451, 89994 94546, 88617 93224, 85314 89926, 83727 88282, 83298 87762, 83059 87419, 81832 86340, 81472 86233, 81102 86025, 81154 86132, 81013 86079, 82274 87181, 82665 87505, 83492 88297, 83962 88772, 87695 92458, 89934 94736, 90884 95751, 92916 97748, 94021 98917, 95124 99898, 99079 103820, 99079 106442, 95175 102507, 78194 85534, 75428 82797, 79444 82797) (81544 83551, 82551 84057, 83348 84802, 87608 89118, 88212 89846, 89778 91401, 90384 91875, 90738 92173, 91348 92654, 91817 93050, 95174 96402, 96127 97265, 95131 96094, 92454 93368, 92023 92853, 91179 92004, 90051 91122, 89733 90861, 88480 89748, 84422 85717, 83322 84769, 82669 84110, 82676 84058, 82571 84011, 82137 83625, 81837 83497, 81586 83490)), ((137921 82962, 138917 83910, 137933 82869, 142437 82869, 147773 88161, 147947 88683, 148722 89444, 148898 89524, 149398 89811, 158676 99074, 159007 99422, 159007 100720, 158649 100367, 159007 100771, 159007 104458, 158432 103880, 157431 102920, 154925 100363, 154639 100154, 155001 100589, 156617 102199, 157635 103244, 158785 104445, 159007 104659, 159007 106332, 156953 104299, 156014 103337, 155923 103052, 156042 102817, 156230 102661, 156327 102643, 156292 102526, 156164 102461, 156018 102529, 155758 102411, 155741 102362, 155556 102146, 155494 101994, 155671 101926, 155441 101869, 155292 101618, 155231 101309, 154980 101129, 154851 101154, 154766 101228, 154639 101203, 154538 101243, 154341 101155, 154046 101054, 153839 100862, 153769 100755, 153301 100565, 153377 100666, 137188 84471, 135555 82869, 137764 82869) (141672 84279, 142226 84903, 143531 86176, 144855 87210, 145304 87592, 148626 90290, 150302 91599, 153575 94499, 153997 94887, 158514 99368, 154060 94889, 153662 94501, 150413 91600, 149943 91211, 147453 89217, 145191 87307, 144544 86741, 144399 86630, 142591 84937, 141766 84248) (143975 87547, 144979 88454, 145637 89008, 146128 89385, 146247 89410, 145832 88999, 145230 88462, 144643 88005, 144244 87681, 143913 87458, 143173 86723) (141153 84673, 140135 83612, 139978 83494)), ((122577 83155, 122979 82797, 126666 82797, 126088 83372, 125128 84373, 122572 86881, 122363 87167, 122798 86806, 124407 85187, 125452 84169, 126653 83019, 126868 82797, 128540 82797, 126508 84851, 125546 85790, 125260 85882, 125025 85762, 124869 85574, 124851 85477, 124734 85512, 124670 85640, 124737 85786, 124621 86046, 124572 86063, 124355 86248, 124203 86310, 124134 86135, 124077 86363, 123826 86516, 123519 86575, 123339 86825, 123362 86954, 123436 87038, 123411 87165, 123451 87266, 123363 87463, 123263 87758, 123071 87965, 122965 88035, 122773 88503, 122874 88427, 106724 104570, 105081 106248, 105081 104040, 105173 103883, 106122 102887, 105081 103871, 105081 99367, 110369 94033, 110891 93859, 111652 93082, 111732 92906, 112021 92406, 121283 83128, 121632 82797, 122929 82797) (105823 101669, 105705 101827, 106883 100652) (117097 87744, 116709 88142, 113808 91391, 113419 91861, 111425 94351, 109516 96614, 108949 97262, 108838 97406, 107145 99213, 106457 100038, 106489 100132, 107111 99578, 108385 98276, 109418 96950, 109800 96500, 112498 93178, 113807 91502, 116707 88229, 117095 87808, 121579 83290) (111207 95972, 110670 96574, 110213 97161, 109889 97560, 109666 97891, 108931 98632, 109755 97829, 110664 96825, 111217 96167, 111594 95676, 111620 95557)), ((115888 105508, 115465 105785, 115001 105401, 115348 105085, 115911 105006)), ((129077 92296, 128683 92714, 124742 96636, 123049 98223, 122271 99095, 121970 99535, 120739 101017, 119594 102229, 116955 104851, 116261 105565, 116380 105326, 116291 105314, 116821 104659, 117145 104157, 117216 103887, 116801 103560, 116527 103668, 116748 103370, 116569 103271, 123481 96355, 123481 96370, 129077 90781)), ((115336 105062, 114995 105396, 114838 105171, 115434 104446)), ((96503 100221, 97853 101199, 98830 102069, 99079 102414, 99079 103724, 98238 102860, 95635 100233, 95155 99684, 94802 99179, 94759 99052)), ((147637 83544, 148660 84515, 148761 84584, 150078 85861, 150412 86205, 150754 86524, 151772 87437, 153153 88765, 156464 92072, 158058 93719, 158493 94239, 158813 94600, 159007 94770, 159007 97606, 158544 97164, 154240 92806, 153630 92079, 152058 90517, 151454 90038, 151101 89739, 150492 89252, 150023 88855, 146654 85490, 145699 84622, 146703 85793, 148737 87854, 149390 88527, 149825 89041, 150670 89893, 151797 90780, 152116 91044, 153370 92165, 157440 96214, 158540 97167, 159007 97693, 159007 98863, 153121 93030, 149770 89670, 143315 83167, 143007 82869, 146691 82869)), ((119376 83260, 115017 87567, 114287 88174, 112726 89747, 112247 90349, 111948 90703, 111462 91314, 111064 91783, 107698 95151, 106832 96106, 107699 95353, 108002 95101, 110736 92414, 111250 91979, 112101 91134, 112989 90007, 113254 89688, 114377 88434, 118422 84364, 119379 83264, 119903 82797, 121072 82797, 115239 88685, 111879 92034, 105375 98489, 105081 98797, 105081 95113, 105755 94167, 106724 93144, 106793 93044, 108069 91726, 108413 91392, 108733 91050, 109646 90034, 110973 88654, 114280 85340, 115928 83747, 116448 83312, 116809 82991, 116980 82797, 119815 82797)), ((175910 87849, 175381 88015, 174622 88789, 174546 88966, 174263 89468, 165290 98457, 165007 98723, 165007 98262, 169190 94105, 169577 93708, 172460 90461, 172845 89990, 174823 87495, 176717 85233, 177279 84586, 177327 84505, 178790 82869, 180845 82869)), ((87843 86984, 88240 87370, 91487 90252, 91958 90637, 94453 92613, 96719 94507, 97366 95070, 97446 95118, 99079 96581, 99079 98639, 94099 93702, 93935 93171, 93161 92413, 92982 92337, 92480 92055, 83491 83080, 83226 82797, 83686 82797)), ((178149 83295, 177829 83563, 176805 84890, 176426 85339, 173756 88666, 172458 90347, 169576 93618, 169190 94040, 168649 94596, 165007 98258, 165007 91516, 173650 82869, 178563 82869) (176521 83913, 176439 83982, 175536 84986, 174988 85645, 174615 86137, 174592 86258, 175003 85844, 175538 85243, 175989 84654, 176309 84254, 176528 83921, 177274 83170)), ((99079 91440, 99079 96356, 98654 95940, 98386 95619, 97058 94597, 96609 94218, 93282 91547, 91602 90250, 88330 87370, 87909 86984, 87352 86443, 83690 82797, 90435 82797) (96105 92793, 96706 93328, 97295 93779, 97694 94100, 98027 94318, 98778 95065, 98035 94311, 97966 94229, 96963 93328, 96304 92779, 95812 92407, 95691 92384)), ((102985 81273, 103431 81326, 103516 81457, 103409 82170, 103417 84258, 103491 84868, 103367 86192, 103305 86994, 103156 88168, 103015 88595, 102831 89952, 102807 90936, 102840 91021, 102948 91457, 103061 93165, 103024 93291, 103052 93312, 103086 93846, 102889 94144, 102837 94377, 102710 94466, 102635 94385, 102367 94487, 102090 94165, 101878 94135, 101736 94023, 101846 92478, 101891 91504, 101878 89698, 101849 88705, 101775 88202, 101651 87866, 101553 87316, 101356 86911, 101253 86671, 101054 86100, 100946 85652, 100886 85469, 100869 83843, 100908 82600, 100907 82133, 100978 81163, 101021 81075, 101844 80237)), ((159007 92011, 159007 94417, 158123 93563, 157816 93235, 154070 89536, 151825 87249, 150870 86233, 148819 84218, 147686 83018, 147456 82869, 149858 82869)), ((115771 83681, 115443 83989, 111744 87734, 109459 89982, 108441 90934, 106426 92985, 105236 94110, 105081 94349, 105081 91937, 114223 82797, 116627 82797)), ((136730 93148, 136798 93703, 136300 93678, 136018 93257, 136403 92789)), ((137358 93224, 136746 93128, 136408 92783, 136635 92630)), ((76149 92200, 75983 92433, 75679 92896, 75525 92741, 75544 92474, 75287 92150, 75079 91910, 75079 91175)), ((105081 91284, 105081 89262, 105864 88501, 106819 87638, 107698 86828, 107806 86759, 109422 85352, 110021 84799, 109987 84853, 110273 84580, 112055 82797, 113473 82797)), ((153303 83655, 154166 84610, 154979 85489, 155047 85598, 156452 87211, 157005 87812, 156951 87779, 157224 88065, 159007 89845, 159007 91265, 150520 82869, 152542 82869)), ((172405 83061, 171404 84178, 168684 86828, 165007 90484, 165007 88861, 168651 85230, 169018 84854, 169113 84777, 170837 82869, 172594 82869)), ((96719 86442, 97095 86808, 97173 86903, 99079 88628, 99070 88929, 99079 89093, 99079 90384, 98887 90195, 97770 89195, 95121 86476, 91465 82797, 93088 82797)), ((155450 83367, 155554 83302, 155200 82869, 156788 82869, 157348 83410, 157890 83213, 159007 84347, 159007 87183, 156650 84880, 156483 84794, 156967 85324, 157591 85935, 159007 87358, 159007 89551, 157805 88338, 157804 88314, 156734 87233, 156207 86646, 155620 85924, 154974 85025, 153932 83936, 153167 83249, 152796 82869, 154945 82869)), ((164460 88822, 164494 89151, 164293 88913, 164277 88689)), ((164208 88612, 164189 88920, 163820 89074, 163471 88653, 163581 88341)), ((107089 85157, 107002 85324, 107532 84840, 108143 84216, 109566 82797, 111759 82797, 110546 84000, 110523 84001, 109441 85071, 108854 85597, 108134 86184, 107236 86830, 106146 87875, 105460 88639, 105081 89008, 105081 86859, 105577 86354, 105513 86252, 105081 86604, 105081 85016, 105620 84456, 105423 83915, 106555 82797, 109392 82797)), ((170652 83063, 168937 84848, 165007 88846, 165007 86732, 165651 86103, 166987 84740, 168495 83251, 168919 82869, 170827 82869)), ((95846 83441, 97210 84777, 98697 86285, 99079 86708, 99079 88617, 98885 88442, 97102 86727, 93103 82797, 95216 82797)), ((132605 80942, 132679 81240, 132639 83885, 132626 86911, 132579 87457, 132468 87891, 132408 87955, 131721 84879, 131642 83865, 131717 83332, 131736 83090, 132223 80744, 132332 80573)), ((185068 83712, 182443 86315, 181894 86793, 181388 87146, 181262 87190, 182429 85447, 183409 84096, 184279 83118, 184620 82869, 185934 82869)), ((165668 85880, 165007 86517, 165007 83298, 165433 82869, 168633 82869)), ((99079 83223, 99079 86425, 96069 83458, 95431 82797, 98652 82797)), ((189382 77634, 189533 77902, 189432 77951, 189621 77992, 189859 78147, 190259 78566, 190297 78633, 190571 78957, 190300 79070, 187503 79152, 187480 79162, 190367 79269, 190451 79291, 190930 79332, 191126 79496, 191115 79588, 190925 79808, 190944 79902, 190723 80018, 190502 80042, 190207 80102, 190101 80069, 189896 80085, 189558 80254, 189480 80459, 189264 80559, 188835 80586, 188798 80658, 189144 80686, 189070 80817, 188721 81173, 188444 81377, 187634 82080, 187525 82189, 186916 82527, 186359 82610, 179792 82660, 179515 82396, 178753 82406, 178617 82481, 178227 82637, 166761 82652, 166518 82434, 166424 82332, 166024 81948, 165775 81641, 168140 81662, 168180 81654, 166510 81514, 165591 81354, 165127 81404, 164558 81322, 164278 81434, 163970 81485, 163174 80658, 163113 80549, 165122 80420, 165647 80415, 165898 80346, 164225 80293, 163542 80303, 163484 80329, 162931 80374, 162762 80259, 163298 78955, 163539 78757, 164001 78202, 164175 78019, 164399 77870, 164809 77837, 164747 77814, 164488 77781, 164603 77599, 164875 77395, 168390 77388, 168474 77531, 168358 77799, 168168 78060, 168062 78152, 168101 78217, 168242 78167, 168385 78007, 168585 77913, 168883 77942, 168769 78146, 168714 78116, 168745 78205, 168984 78069, 169140 78143, 169213 78339, 169485 78278, 169672 78042, 169884 77856, 170071 77773, 170347 77624, 170627 77643, 171092 77414, 186849 77418, 189060 77382) (183570 80945, 182236 81159, 181723 81216, 179273 81566, 178434 81696, 176909 81968, 173954 82244, 173486 82276, 167994 82306, 172463 82332, 173277 82385, 173908 82321, 176853 82064, 179673 81615, 181888 81355, 182602 81288, 182762 81260, 184628 81173, 185504 81069, 185646 80974, 185122 80895) (182672 80254, 181737 80310, 181038 80388, 180511 80478, 180415 80551, 180887 80548, 181555 80498, 182171 80402, 183547 80335, 183404 80292, 184320 80257, 182872 80234) (185857 80305, 186996 80307, 187879 80274, 186964 80281, 185356 80267) (164582 78676, 163640 78757, 164183 78859, 166471 78868, 166748 78852, 167131 78863, 169650 78821, 169954 78760, 169535 78704, 167814 78708, 165430 78653)), ((165215 81692, 165379 81780, 165353 81891, 165483 82027, 165383 82128, 165287 82130, 165123 82410, 165129 82581, 165090 82597, 164457 82001, 164242 81784, 164184 81691, 164710 81711, 164822 81570)), ((144475 80866, 145429 80884, 147249 80950, 147676 81059, 147995 80907, 149189 80995, 150078 80952, 151077 80929, 151703 81000, 152174 81080, 152991 81083, 154257 81240, 155601 81336, 157224 81501, 157316 81521, 159195 81511, 160107 81571, 160054 81676, 159342 82423, 159123 82520, 155899 82467, 146251 82463, 138690 82501, 135245 82464, 134930 82219, 133963 81280, 133730 81041, 133654 80833, 133940 80822)), ((92122 77157, 94146 77202, 97757 77158, 98867 77205, 99105 77316, 100366 78547, 100403 78678, 99837 78569, 97581 78550, 96948 78628, 95787 78649, 95242 78650, 93639 78588, 91715 78546, 91028 78485, 90186 78391, 89714 78206, 89483 78192, 88983 78266, 88882 78301, 87752 78298, 85672 78335, 83666 78341, 83527 78371, 83625 78416, 85160 78406, 88802 78424, 88900 78357, 89024 78721, 89087 78678, 89640 78870, 89647 79282, 89034 79251, 88998 79275, 88164 79272, 87065 79185, 85844 78988, 84768 78952, 83389 78957, 82545 79030, 81829 79032, 80314 78959, 78416 78951, 76924 79029, 76950 79176, 77531 79227, 78330 79221, 78995 79268, 80869 79210, 84307 79214, 85033 79272, 86635 79354, 86872 79394, 87769 79482, 89806 79457, 89860 79410, 90104 79373, 90330 79396, 90407 79446, 91356 79442, 92471 79410, 93971 79538, 94339 79556, 95881 79762, 97398 79804, 97877 79720, 97444 79618, 96630 79583, 95891 79489, 95264 79459, 94320 79391, 92901 79318, 90412 79329, 90145 78917, 90156 78879, 90099 78506, 90869 78649, 91135 78784, 91853 78857, 93623 78874, 94278 78799, 95687 78778, 96834 78800, 98195 78858, 99584 78857, 100227 78788, 100424 78700, 100601 78786, 100785 79017, 101357 80061, 101288 80116, 100287 80307, 98569 80520, 97490 80602, 93792 80625, 92135 80563, 91122 80624, 90920 80787, 91813 80813, 92020 80867, 92623 80888, 93694 80882, 94027 80822, 96539 80818, 97447 80882, 98470 80866, 99385 80755, 100797 80517, 100863 80539, 100184 81271, 99936 81505, 99734 81510, 98721 81651, 98279 81693, 98273 81782, 98213 81825, 99436 81888, 99470 81923, 99167 82280, 98876 82462, 97325 82438, 86733 82431, 82152 82405, 75266 82403, 74771 82121, 73976 81375, 75354 81341, 75916 81234, 75734 81133, 74690 81028, 73684 81024, 73160 80507, 73131 80406, 73461 80405, 74325 80482, 75449 80479, 75815 80413, 77367 80321, 79468 80312, 80350 80252, 81066 80141, 86007 80156, 86295 80121, 86495 80078, 87190 80032, 86184 79991, 82616 79990, 81058 79956, 79791 79976, 79312 80001, 77313 79974, 75111 80083, 73874 80163, 72874 80164, 72719 80055, 72952 79352, 73188 79028, 73966 78231, 74018 78245, 74915 78171, 75001 78175, 75203 78072, 74821 77975, 74553 77944, 74430 77809, 74923 77317, 75147 77158, 76457 77157, 82752 77198, 88012 77155) (79707 80819, 79499 80909, 79881 81005, 81539 81035, 82181 81060, 83479 81374, 84317 81550, 83552 81279, 82793 80972, 82138 80741, 80295 80729) (89334 80366, 89237 80481, 89289 81073, 90046 80861, 90283 81008, 90091 80707, 90039 80520, 89576 80344)), ((110104 77200, 109859 77585, 109951 77626, 110433 77405, 110450 77792, 109877 78077, 109745 78229, 109512 78737, 109800 78780, 109961 78766, 112243 78819, 114906 78826, 117476 78600, 117665 78560, 118428 78565, 120113 78490, 121833 78477, 126725 78475, 127832 78494, 128672 78520, 128970 78585, 129228 79001, 129703 79495, 129811 79724, 130106 80058, 130185 80026, 130438 80023, 130479 80050, 130986 80001, 131218 79940, 131494 79760, 131419 80142, 131114 80377, 130591 80990, 130394 81191, 130174 81334, 130073 81511, 129834 81677, 125453 81640, 122828 81660, 122442 81675, 122006 81504, 121831 81490, 121449 81673, 120917 81655, 118368 81614, 116850 81518, 116589 81509, 116069 81393, 115510 81300, 114702 81093, 114449 80980, 113729 80908, 112446 80938, 112586 80991, 112003 81066, 112529 81111, 112449 81148, 114248 81254, 114841 81408, 115287 81582, 116255 81826, 116813 81856, 117020 81753, 119571 81750, 121503 81721, 121890 81586, 122366 81729, 124725 81748, 126717 81743, 129795 81717, 129710 81868, 129279 82320, 129110 82399, 123268 82450, 123084 82228, 122924 82082, 122771 82086, 122441 82299, 122014 82410, 120650 82450, 118956 82429, 115719 82445, 106388 82388, 105093 82393, 103941 81195, 103867 80994, 103989 81046, 104239 81004, 108895 81016, 109727 81027, 110262 81013, 110476 80960, 112539 80702, 113698 80507, 114034 80460, 114374 80379, 118849 80356, 122191 80328, 122276 80340, 123547 80292, 123776 80218, 124941 80261, 124969 80280, 125670 80261, 126189 80170, 126195 80099, 126040 80025, 125082 79975, 124668 79998, 124596 80021, 123510 80152, 122889 80184, 122130 80252, 119325 80258, 115979 80248, 115638 80254, 114233 80310, 112873 80460, 111249 80677, 109926 80875, 103738 80883, 103545 80780, 102917 80138, 102854 79857, 103089 79292, 103267 79170, 103975 79246, 104704 79287, 106010 79319, 107575 79305, 108507 79256, 114470 79240, 118164 79263, 118636 79284, 119274 79278, 119282 79230, 114472 79238, 107273 79201, 106366 79161, 105012 79051, 104285 79069, 103282 79153, 103367 78976, 104898 77424, 105153 77190)), ((165705 81671, 165679 81794, 165514 81793, 165243 81676, 165631 81631)), ((159204 78697, 159671 78696, 160640 78770, 160729 78813, 161566 79634, 160532 80776, 160478 81223, 160347 81308, 159638 81201, 157550 81208, 156937 81283, 155613 81158, 154810 81095, 153636 80948, 153209 80806, 151853 80622, 150867 80598, 150783 80632, 150347 80740, 148643 80853, 148513 80816, 148492 80844, 147961 80878, 147661 80681, 147427 80628, 147338 80502, 147419 80427, 147317 80159, 147640 79882, 147669 79670, 147781 79527, 149327 79637, 150301 79683, 152108 79666, 153099 79639, 153604 79566, 153938 79441, 154487 79343, 154894 79145, 155134 79043, 155704 78845, 156154 78738, 156336 78678, 157961 78659)), ((134385 78952, 134635 78978, 134948 79102, 138022 79213, 138141 79205, 140016 79199, 142319 79263, 143270 79216, 145359 79233, 145698 79264, 146988 79453, 146825 79772, 146866 80579, 146912 80688, 143737 80708, 140620 80746, 137113 80750, 136730 80770, 135564 80767, 133624 80799, 133400 80674, 132680 79908, 132816 79814, 133900 79883, 134924 79936, 135932 79899, 136947 79787, 134842 79734, 133844 79613, 133303 79581, 132988 79590, 132995 79502, 133174 79323, 133504 78959, 133801 78755)), ((159305 77332, 160383 78391, 160356 78419, 160008 78377, 159123 78365, 158056 78388, 156983 78445, 156240 78446, 155999 78403, 155348 78483, 154738 78673, 153967 79053, 153625 79269, 153381 79336, 152773 79464, 152515 79480, 152040 79490, 148833 79446, 148349 79422, 145474 79145, 145137 79141, 141181 78982, 139245 78941, 138522 78940, 137076 78821, 135617 78787, 134531 78795, 133802 78752, 133836 78613, 135122 77304, 135317 77261, 146131 77280, 152543 77278, 154065 77237, 159056 77217) (147401 78645, 147130 78698, 147153 78743, 147636 78782, 148404 78777, 148661 78740, 148629 78681, 148154 78639)), ((72405 50527, 72323 50845, 72236 51628, 72263 52963, 72330 53108, 72347 55010, 72185 57403, 71998 58807, 71963 59128, 71887 60953, 71914 62820, 71939 62898, 71954 62726, 71976 60761, 72207 57556, 72384 56283, 72500 55341, 72520 55030, 72520 52606, 72601 52007, 72597 51351, 72653 50791, 72718 50811, 73748 51864, 74223 52278, 74409 52473, 74689 52801, 74718 74998, 74670 76696, 74054 77378, 73925 77404, 73895 75852, 73907 75089, 73897 74427, 73826 74074, 73716 74202, 73683 76490, 73696 76854, 73756 77582, 73665 77770, 72611 78839, 72618 78356, 72585 77672, 72660 76950, 72973 74647, 73077 74016, 73349 72626, 73467 71947, 73598 70975, 73713 69666, 73690 66704, 73704 65454, 73628 64796, 73643 62785, 73643 60040, 73620 58660, 73588 57805, 73553 58600, 73471 64517, 73479 65073, 73448 65260, 73448 68166, 73518 68961, 73477 70233, 73383 71317, 73317 71770, 73003 73660, 72929 74044, 72469 77224, 72377 77427, 72287 78034, 72257 79091, 72220 79209, 72056 79235, 71358 79066, 71261 79287, 71248 78286, 71259 76684, 71400 74777, 71429 74095, 71458 72925, 71477 70616, 71431 70084, 71424 69087, 71372 66703, 71274 66503, 71156 67205, 71136 70986, 71140 72671, 71176 74078, 71160 74793, 71105 76195, 71044 76888, 70981 77332, 70953 78776, 71035 79418, 71028 79456, 70943 79333, 70577 79329, 69556 79395, 69453 79327, 69482 52891, 69589 52660, 70593 51627, 70717 51551, 70519 54028, 70500 54173, 70483 54492, 70490 58439, 70338 61664, 70309 65729, 70328 71338, 70233 72949, 69788 77936, 69981 76642, 70273 73529, 70422 71805, 70442 65590, 70434 62644, 70558 59385, 70577 59247, 70602 55383, 70625 54521, 70859 52475, 70873 51954, 70854 51454, 70969 51348, 70995 51200, 72325 50391) (72596 57078, 72576 57754, 72621 59615, 72620 62514, 72589 64641, 72649 66523, 72686 68446, 72706 70168, 72721 68999, 72752 68139, 72794 68393, 72828 67015, 72820 66207, 72780 65823, 72722 62853, 72722 59701, 72746 58291, 72750 57395, 72722 56855)), ((162452 50745, 162776 50980, 163573 51755, 163559 51807, 163635 52707, 163631 52793, 163732 52995, 163829 52611, 163860 52345, 163995 52222, 164487 52715, 164645 52939, 164648 54248, 164607 60658, 164648 65801, 164647 69910, 164602 71938, 164645 75547, 164601 76656, 164490 76897, 163258 78155, 163126 78193, 163235 77629, 163254 75373, 163178 74740, 163155 73577, 163154 73032, 163216 71431, 163258 69506, 163320 68819, 163413 67977, 163598 67504, 163612 67274, 163539 66775, 163504 66674, 163507 65544, 163469 63462, 163463 61456, 163433 61317, 163388 61416, 163398 62950, 163381 66594, 163449 66688, 163083 66815, 163126 66878, 162934 67431, 162525 67439, 162553 66824, 162529 66788, 162532 65953, 162619 64853, 162816 63632, 162852 62560, 162847 61181, 162774 60337, 162772 59620, 162845 58103, 162853 56207, 162775 54716, 162631 54740, 162579 55322, 162586 56121, 162538 56787, 162595 58661, 162590 62099, 162532 62824, 162450 64427, 162410 64663, 162322 65561, 162347 67598, 162394 67652, 162431 67895, 162408 68122, 162358 68199, 162362 69148, 162394 70263, 162266 71763, 162248 72131, 162042 73673, 162000 75189, 162085 75667, 162186 75235, 162223 74422, 162317 73683, 162345 73056, 162413 72112, 162488 70691, 162475 68204, 162887 67936, 162925 67946, 163298 67891, 163155 68661, 163020 68927, 162947 69645, 162932 71415, 163006 72070, 163026 73477, 163006 74626, 162948 75985, 162947 77375, 163017 78019, 163104 78214, 163019 78393, 162786 78576, 161741 79146, 161688 79078, 161497 78077, 161287 76360, 161202 75281, 161181 71581, 161241 69927, 161181 68912, 161017 68712, 160991 69604, 160937 69811, 160916 70415, 160922 71486, 160982 71819, 160986 74331, 160923 75237, 160939 76261, 161049 77177, 161287 78587, 161265 78653, 160531 77974, 160299 77727, 160294 77526, 160156 76513, 160114 76071, 160025 76062, 159981 76001, 159915 77227, 159881 77261, 159524 76957, 159343 76667, 159366 75117, 159373 64522, 159403 59944, 159401 53058, 159674 52592, 159683 52562, 160432 51767, 160466 53146, 160572 53708, 160673 53525, 160776 52482, 160780 51476, 161297 50952, 161398 50923, 161399 51253, 161321 52117, 161324 53239, 161404 53719, 161483 55159, 161492 57260, 161551 58141, 161663 58858, 161652 63799, 161687 64086, 161727 64286, 161772 64982, 161813 63976, 161814 60408, 161848 58850, 161829 57581, 161803 57104, 161831 55105, 161721 52902, 161641 51666, 161640 50666, 161749 50511) (160731 67079, 160945 67838, 160798 68075, 161099 67883, 161284 67829, 161460 67367, 161438 67126, 161323 67029) (160799 57670, 160769 59330, 160744 59973, 160430 61271, 160254 62109, 160525 61343, 160832 60585, 161064 59931, 161075 58087, 160985 57497, 160897 57292)), ((101796 50689, 102016 50881, 102110 50861, 102227 51081, 102250 51302, 102310 51597, 102278 51705, 102294 51910, 102462 52246, 102667 52325, 102767 52542, 102794 52970, 102866 53008, 102894 52662, 103025 52734, 103381 53083, 103585 53360, 104291 54172, 104401 54281, 104738 54890, 104819 55437, 104869 62013, 104604 62289, 104617 63052, 104691 63188, 104845 63579, 104860 75043, 104644 75288, 104540 75382, 104159 75781, 103850 76029, 103870 73664, 103862 73624, 103724 75294, 103562 76213, 103612 76677, 103530 77248, 103643 77526, 103693 77833, 102869 78632, 102759 78693, 102633 76740, 102626 76158, 102556 75906, 102502 77579, 102514 78263, 102539 78320, 102582 78874, 102469 79042, 101166 78511, 100966 78269, 100410 77803, 100227 77629, 100078 77405, 100046 76995, 100022 77057, 99989 77316, 99807 77201, 99607 76929, 99596 73414, 99740 73330, 100007 73447, 100268 73636, 100360 73742, 100426 73703, 100376 73563, 100216 73420, 100122 73222, 100150 72921, 100356 73035, 100325 73090, 100415 73059, 100277 72822, 100351 72664, 100547 72591, 100487 72321, 100251 72132, 100064 71920, 99981 71733, 99832 71457, 99851 71177, 99624 70714, 99630 54991, 99591 52745, 99845 52421, 100110 52271, 100159 52373, 100200 52183, 100356 51945, 100778 51545, 100845 51507, 101167 51233, 101279 51504, 101360 54301, 101370 54324, 101479 51437, 101501 51353, 101540 50874, 101704 50678) (100912 72272, 100918 73991, 100862 76374, 100884 77223, 100965 78168, 101067 77621, 101076 75333, 101061 75056, 101071 74674, 101029 72157, 100968 71853) (103103 56686, 103153 58235, 103367 59568, 103424 60081, 103775 62533, 103906 63373, 104176 64896, 104452 67850, 104484 68318, 104484 69368, 104516 73810, 104541 69341, 104593 68528, 104529 67896, 104272 64951, 103825 62132, 103563 59916, 103496 59203, 103468 59042, 103379 57154, 103278 56300, 103182 56158) (102442 58936, 102462 59136, 102518 60068, 102600 60767, 102689 61294, 102762 61389, 102759 60917, 102709 60250, 102610 59634, 102543 58258, 102500 58403, 102465 57485) (102491 54840, 102476 56448, 102515 55948, 102517 54808, 102484 53925)), ((133527 51475, 133644 51663, 133568 52293, 133531 53296, 133598 53567, 133661 53974, 133765 52972, 133788 52232, 133817 51841, 133951 51922, 134573 52569, 134650 52795, 134663 54998, 134661 56693, 134485 56745, 134556 57088, 134544 57739, 134461 57981, 134547 58197, 134649 58771, 134526 58974, 134516 59062, 134611 59264, 134570 59416, 134512 60000, 134528 60248, 134665 60689, 134638 67296, 134596 67378, 134586 69545, 134641 69531, 134663 74825, 134658 76472, 134406 76808, 134232 76879, 134199 76512, 134130 75350, 134045 74537, 133942 74609, 133893 74789, 133865 75253, 134112 76994, 133975 77198, 132763 78420, 132220 78936, 132121 78931, 132151 78318, 132137 77191, 132099 77138, 132017 77273, 131963 77600, 131960 78094, 131984 78959, 131859 79019, 131478 78343, 131082 78006, 130405 77247, 130263 77276, 130027 77232, 129593 76780, 129443 76518, 129433 71558, 129471 70680, 129448 68059, 129383 66476, 129408 58501, 129374 57960, 129507 57046, 129665 56145, 129512 55674, 129580 55535, 129549 54961, 129559 54617, 129488 54432, 129617 54033, 129425 53866, 129402 53590, 129426 52580, 130469 51523, 130500 51548, 130491 51976, 130440 52252, 130423 52802, 130479 53465, 130596 56710, 130586 65222, 130594 65650, 130580 65747, 130697 67533, 130870 69811, 130710 67424, 130661 65613, 130605 60590, 130616 56489, 130678 53333, 130678 52663, 130793 51908, 130872 51097, 130912 51060, 131387 51135, 132409 50418) (132739 71982, 132714 74097, 132657 75584, 132707 77327, 132823 77552, 132921 77110, 132960 76039, 132947 74878, 132866 74092, 132864 73347, 132825 70941) (132655 54911, 132565 55842, 132444 56463, 132269 57649, 132236 58879, 132181 59830, 132150 63573, 132151 64629, 132131 66866, 132158 70737, 132173 70855, 132192 70806, 132277 70862, 132308 68659, 132277 59192, 132430 57635, 132581 56700, 132679 56240, 132914 55803, 132951 54903, 133007 54684, 133006 54053, 132875 53825)), ((127045 77163, 128036 77187, 128442 77166, 128791 77645, 128853 77810, 128976 77951, 129167 78222, 128709 78309, 127701 78340, 126649 78348, 120195 78327, 118505 78250, 117638 78320, 117250 78423, 115786 78613, 114508 78664, 111161 78648, 111141 78504, 111790 78413, 112536 78204, 112660 77815, 112750 77463, 112713 77429, 112787 77414, 112822 77162, 120240 77144)), ((111127 77617, 111283 77985, 110861 78333, 110550 78223, 110820 77596)), ((129325 77292, 129687 77663, 130049 78066, 129591 77874, 129572 77910, 129067 77867, 128799 77646, 128555 77205, 128599 77197, 128558 77163, 128989 77151)), ((104336 76421, 104338 76517, 104620 76683, 104792 76678, 104808 76717, 104210 77346, 103992 77562, 103900 77620, 103920 77095, 103780 76982, 103901 76590, 103990 76425, 104100 76451, 104235 76321)), ((111121 77512, 110897 77527, 111030 77344, 111359 77310)), ((159007 57236, 158699 57558, 158728 57550, 158535 57779, 158620 57785, 159007 57456, 159007 60433, 154298 65175, 154297 65195, 149595 69888, 143105 76329, 142575 76869, 139852 76869, 140167 76574, 140214 76541, 141306 75196, 141160 75215, 141666 74420, 142499 73178, 143388 71910, 144353 70890, 144421 70790, 145693 69475, 146036 69143, 146354 68802, 147261 67786, 148583 66409, 151878 63106, 153522 61518, 154042 61088, 154385 60849, 155464 59621, 155571 59262, 155779 58894, 155672 58946, 155725 58805, 154626 60063, 154301 60456, 153509 61282, 153033 61753, 149346 65487, 147069 67725, 146053 68676, 144008 70756, 142888 71813, 141906 72916, 137986 76869, 135363 76869, 139299 72965, 156270 55984, 159007 53220) (157749 60340, 157003 61140, 152686 65400, 151958 66004, 150404 67570, 149929 68174, 149631 68528, 149152 69140, 148757 69609, 145402 72965, 144539 73919, 145407 73173, 145711 72923, 148436 70246, 148952 69814, 149798 68972, 150680 67843, 150942 67524, 152057 66271, 156089 62214, 157037 61114, 157694 60461, 157746 60468, 157793 60363, 158179 59929, 158307 59629, 158314 59378, 158254 59336)), ((159007 68227, 150364 76869, 145449 76869, 145864 76445, 146185 76178, 147207 74849, 147586 74399, 150258 71073, 151555 69393, 154436 66121, 154822 65701, 155363 65144, 159007 61482) (149011 73896, 148476 74498, 148025 75087, 147704 75486, 147486 75817, 146739 76568, 147493 75825, 147575 75756, 148478 74755, 149026 74096, 149399 73603, 149422 73481)), ((141584 74295, 140605 75643, 139735 76620, 139394 76869, 138080 76869, 138944 76030, 141571 73426, 142121 72945, 142628 72593, 142752 72550)), ((159007 73008, 158363 73637, 157027 75000, 155519 76488, 155096 76869, 153187 76869, 153362 76677, 155077 74893, 159007 70892)), ((159007 61478, 154822 65635, 154435 66032, 151552 69279, 151167 69750, 149191 72245, 147297 74507, 146735 75155, 146687 75234, 145224 76869, 143167 76869, 148103 71891, 148633 71725, 149391 70951, 149467 70774, 149749 70272, 158724 61283, 159007 61018)), ((159007 76442, 158581 76869, 155380 76869, 158346 73859, 159007 73221)), ((165383 61425, 165384 61466, 165949 62044, 166186 62393, 166422 62514, 166767 62778, 167008 62944, 167250 63407, 167521 63528, 167661 63723, 168251 64389, 168493 64610, 168807 64809, 169041 64976, 169398 65326, 175777 71745, 175793 71782, 178009 74011, 178034 73996, 181001 76869, 178459 76869, 177680 76108, 178359 76869, 173866 76869, 173022 76038, 171991 75126, 170759 73849, 169199 72288, 169199 72264, 165007 68048, 165007 66449, 165574 67014, 165007 66440, 165007 64056, 165421 64593, 166496 65717, 167314 66610, 174040 73405, 176478 75805, 176667 75840, 174865 73994, 166728 65904, 165459 64431, 165007 63856, 165007 61178) (170847 72303, 171217 72664, 171294 72759, 172989 74284, 171223 72586, 166611 68054)), ((172819 76869, 166942 76869, 165812 76043, 165007 75331, 165007 69056)), ((166008 54094, 168719 56788, 170662 58752, 170806 59203, 170934 59529, 171086 59674, 171475 59772, 171934 60084, 171945 60084, 173282 61371, 175000 63120, 176147 64269, 178384 66476, 188706 76869, 186812 76869, 183571 73624, 182725 72749, 182245 72288, 182008 72119, 179866 70326, 178322 69106, 177945 68845, 174036 64983, 173950 64888, 171063 62032, 170999 61953, 169876 60902, 169667 60782, 168735 59794, 168647 59683, 168055 59118, 167569 58753, 167556 58831, 167676 59050, 168325 59741, 168487 59925, 168815 60225, 168878 60259, 169868 61068, 170392 61552, 171083 62144, 176457 67523, 178007 68990, 179361 70140, 180967 71459, 182392 72610, 186665 76869, 184541 76869, 183270 75621, 182406 74824, 177924 70363, 183389 75875, 183871 76392, 184287 76869, 181631 76869, 180370 75613, 180680 75504, 180540 75275, 180183 75128, 180232 74634, 180590 74758, 180996 74617, 181035 74123, 178926 71943, 176463 69467, 174007 67320, 173815 67177, 173103 66458, 171458 64917, 169959 63433, 165608 59084, 165007 58463, 165007 54136, 167404 56559, 168386 57569, 170986 60136, 171296 60430, 171667 61040, 171817 61208, 172252 61392, 175165 64380, 176789 66147, 177208 66731, 177658 67309, 178238 68168, 178390 68484, 178971 69150, 180162 70300, 180085 70151, 180656 70624, 180256 70162, 180368 70224, 178796 68509, 178372 67876, 178095 67362, 177357 66288, 176831 65726, 176582 65605, 176376 65411, 174131 63172, 172224 61310, 171795 61064, 171372 60445, 169064 58111, 165007 54091, 165007 53152) (172904 65356, 176211 68647, 173728 66143, 173403 65793, 172947 65343)), ((159007 70877, 155363 74511, 154996 74887, 154901 74964, 153177 76869, 151420 76869, 151609 76679, 152610 75561, 155331 72912, 159007 69256)), ((165807 76115, 165808 76134, 166068 76346, 166091 76346, 166754 76869, 165734 76869, 165007 76144, 165007 75406)), ((105269 69399, 106388 70400, 109036 73121, 112696 76797, 111071 76797, 107438 73153, 107062 72787, 106985 72691, 105081 70969, 105081 69212)), ((99079 63346, 98316 64124, 99079 63445, 99079 67938, 98246 68784, 97336 69814, 96059 71046, 94498 72604, 94473 72605, 90255 76797, 88661 76797, 89225 76230, 88652 76797, 86266 76797, 86801 76383, 87925 75308, 88820 74490, 95614 67764, 98013 65326, 98048 65137, 96203 66939, 88112 75076, 86639 76345, 86064 76797, 83386 76797, 83633 76421, 83675 76420, 84253 75855, 84602 75618, 84722 75382, 84986 75037, 85152 74796, 85615 74556, 85736 74284, 85931 74143, 86597 73553, 86818 73312, 87017 72998, 87185 72764, 93953 66027, 93990 66011, 96219 63799, 96204 63774, 99079 60804) (94795 70581, 90262 75193, 94513 70957, 94875 70587, 94969 70510, 96492 68815)), ((108983 57089, 125964 74060, 128728 76797, 124712 76797, 124390 76489, 124398 76519, 124169 76325, 124168 76417, 124493 76797, 121515 76797, 116775 72091, 116756 72091, 112060 67388, 105633 60906, 105081 60365, 105081 57642, 105376 57961, 105409 58008, 106752 59098, 106734 58952, 107532 59458, 108770 60290, 110039 61178, 111060 62143, 111160 62212, 112475 63484, 112808 63828, 113148 64147, 114165 65052, 115542 66373, 118842 69670, 120431 71314, 120860 71834, 121099 72178, 122328 73254, 122686 73362, 123054 73571, 123002 73464, 123145 73516, 121885 72416, 121492 72091, 120666 71301, 120195 70825, 116461 67138, 114225 64862, 113510 64108, 113272 63845, 111229 61838, 110135 60679, 109033 59696, 105081 55776, 105081 53168) (108777 63198, 109027 63503, 111054 65556, 111705 66227, 112135 66741, 112976 67590, 114107 68471, 114426 68733, 115678 69847, 119734 73879, 120835 74827, 121487 75486, 121480 75538, 121585 75585, 122020 75973, 122320 76101, 122570 76106, 122612 76047, 121607 75540, 120810 74793, 116549 70477, 115947 69749, 114379 68193, 113774 67720, 113421 67423, 112809 66942, 112341 66548, 108984 63192, 108029 62331)), ((110058 65894, 110223 66423, 110997 67182, 111175 67258, 111678 67541, 120665 76514, 120931 76797, 120472 76797, 116315 72614, 115918 72228, 112669 69345, 112198 68959, 109705 66981, 107441 65090, 106794 64528, 106714 64480, 105081 63015, 105081 60959)), ((105505 63655, 105772 63975, 107101 64999, 107551 65378, 110876 68048, 112555 69346, 115828 72228, 116249 72614, 116806 73155, 120468 76797, 113722 76797, 105081 68154, 105081 63241) (106125 65283, 106194 65365, 107195 66268, 107853 66819, 108345 67191, 108467 67214, 108052 66805, 107451 66270, 106464 65496, 106133 65276, 105382 64530)), ((95353 61995, 95445 62008, 94921 62659, 94607 63157, 94542 63427, 94967 63766, 95240 63663, 95024 63960, 95206 64062, 88370 70902, 88355 70902, 82456 76797, 80875 76797, 81524 76136, 87109 70576, 88784 69012, 89549 68149, 89842 67712, 91050 66245, 92178 65047, 94781 62462, 95465 61758)), ((108091 76140, 108729 76797, 105506 76797, 105081 76371, 105081 73171)), ((105271 71152, 107057 72867, 111056 76797, 108941 76797, 108311 76154, 106948 74820, 105462 73309, 105081 72886, 105081 70979)), ((99079 76070, 98352 76797, 97616 76797, 98323 75997, 98342 75996, 98554 75736, 98554 75713, 99079 75050)), ((99079 74862, 98251 75992, 97541 76797, 91266 76797, 99079 68985)), ((99079 54992, 95832 58233, 94958 59079, 94496 59559, 94327 59796, 92535 61939, 91317 63482, 91053 63860, 87191 67768, 87096 67854, 84240 70743, 84161 70807, 83110 71928, 82992 72139, 82002 73070, 81891 73157, 81326 73751, 80961 74235, 81039 74249, 81258 74128, 81949 73479, 82134 73317, 82433 72989, 82467 72926, 83278 71936, 83762 71412, 84352 70722, 89975 65102, 91198 63799, 92348 62446, 93667 60840, 94818 59412, 99079 55139, 99079 57263, 97829 58534, 97034 59402, 92571 63881, 98085 58418, 98602 57936, 99079 57517, 99079 60173, 97821 61434, 97712 61124, 97484 61266, 97337 61625, 96844 61572, 96968 61214, 96826 60808, 96331 60770, 94152 62880, 91675 65341, 89528 67797, 89385 67989, 88665 68701, 87125 70346, 85641 71845, 81294 76196, 80671 76797, 76348 76797, 78768 74400, 79777 73419, 82348 70818, 82641 70508, 83250 70137, 83418 69987, 83600 69552, 86588 66639, 88357 65016, 88939 64597, 89517 64147, 90377 63567, 90667 63428, 91360 62833, 92511 61641, 92360 61719, 92834 61148, 92370 61550, 92432 61439, 90717 63008, 90085 63432, 89572 63709, 88500 64447, 87933 64976, 87815 65222, 87620 65429, 85380 67673, 83518 69580, 83274 70009, 82657 70432, 80319 72740, 76303 76797, 75361 76797, 76306 75796, 78998 73085, 80960 71142, 81411 70998, 81737 70870, 81884 70718, 81984 70329, 82293 69871, 82292 69859, 83579 68522, 85329 66803, 86477 65657, 88672 63434, 99079 53101) (88351 68077, 88001 68401, 87551 68857, 87564 68900, 90855 65593)), ((104002 76127, 104002 76290, 103884 76562, 103839 76173, 103879 76099)), ((152188 53559, 151361 54420, 151088 54691, 150513 55191, 150043 55617, 149545 56151, 149398 56388, 149140 56649, 148942 56953, 148910 57058, 149157 56922, 149235 57026, 149006 57348, 148417 58330, 148282 58682, 147103 60081, 144521 62731, 144395 62914, 144437 62899, 144967 62418, 147745 59645, 148679 58545, 148816 58319, 149026 58103, 149782 56552, 149676 56573, 149900 56293, 151055 55031, 151131 54931, 151988 53986, 153102 52871, 156454 52871, 155753 53568, 155101 54387, 155002 54527, 154468 55081, 154336 55284, 152603 57066, 150692 58984, 146924 62705, 146337 63227, 145615 63810, 144714 64448, 143625 65485, 142453 66767, 141222 68001, 138946 70325, 138933 70480, 139209 70225, 143357 66120, 144310 65263, 145188 64457, 145296 64390, 146912 62992, 147511 62443, 147478 62498, 147764 62226, 150910 59020, 152185 57753, 153845 56245, 154562 55608, 155187 54889, 155653 54298, 156069 53722, 156363 53364, 156885 52871, 158610 52871, 158130 53394, 156040 55499, 153295 58224, 149355 62161, 135007 76442, 135007 72355, 135223 72139, 135399 71944, 136859 70486, 139335 68041, 140124 67197, 139456 67742, 138727 68443, 136800 70414, 135007 72212, 135007 70956, 135395 70530, 136035 70063, 137086 69239, 137420 68892, 137674 68728, 138715 67821, 140179 66634, 140490 66332, 141486 65452, 142109 64881, 142940 63980, 142871 63880, 142488 64198, 141616 65058, 140319 66376, 139411 67106, 137905 68251, 137578 68515, 137070 68821, 136227 69426, 136128 69508, 135501 69968, 135007 70443, 135007 69178, 135236 69000, 139093 65110, 140231 63986, 141048 63488, 141149 63643, 141296 63569, 141328 63751, 141675 63359, 141878 63288, 142215 62970, 142309 62701, 143000 61978, 142785 61419, 144452 59747, 147140 57099, 150382 53853, 151060 53116, 151311 52871, 152875 52871)), ((167953 53896, 168022 53989, 168269 54257, 171991 57970, 174923 61108, 178821 65042, 184148 70341, 185808 72167, 187829 74618, 188152 74988, 187699 74376, 185961 72247, 184563 70646, 178809 64860, 175937 62005, 172882 58773, 172791 58661, 169199 55034, 168513 54319, 167670 53300, 167596 53191, 167331 52871, 169404 52871, 170607 54050, 170622 54079, 170886 54347, 172904 56585, 174192 58174, 175655 59740, 177254 61302, 177316 61339, 177216 61225, 175575 59554, 172988 56650, 172396 55926, 171149 54433, 170714 53958, 169616 52871, 172579 52871, 175352 55586, 181021 61292, 183806 64073, 183806 64086, 189007 69267, 189007 70455, 188933 70397, 188868 70529, 189007 70704, 189007 71781, 188396 71004, 188395 70980, 188089 70575, 187144 69257, 186670 68626, 185906 67681, 184719 66344, 182005 63656, 180806 62435, 180127 61864, 178227 59942, 175689 57403, 174376 56124, 174240 56032, 174313 56144, 176572 58446, 180099 61940, 180720 62665, 183136 65113, 183957 65836, 185093 67028, 185992 68053, 186314 68459, 187686 70266, 187921 70593, 188697 71598, 189007 72031, 189007 73984, 188753 73728, 188045 72892, 187404 72156, 186821 71533, 185696 70374, 183780 68428, 183291 68005, 182400 67120, 180299 65090, 180056 64977, 180738 65789, 184007 69112, 185539 70638, 186678 71734, 187215 72289, 188007 73156, 188827 74110, 189007 74294, 189007 76406, 165455 52871, 167049 52871) (172685 55779, 172869 56006, 173281 56437, 174992 58079, 177365 60454, 179284 62420, 179613 62727, 182744 65744, 183867 66845, 183152 66114, 182455 65380, 182711 65574, 181552 64367, 180844 63671, 180464 63351, 177766 60732, 175042 58008, 173014 55940, 172545 55507)), ((109809 53013, 110006 53189, 111464 54650, 113907 57125, 114751 57915, 114422 57520, 114207 57246, 113506 56518, 111536 54592, 109736 52797, 110993 52797, 111418 53185, 111886 53825, 112709 54877, 113057 55211, 113222 55464, 114128 56505, 115316 57971, 115618 58281, 116497 59276, 117067 59903, 117969 60730, 118069 60662, 117752 60280, 116892 59408, 115573 58111, 114842 57201, 113698 55699, 113435 55371, 113128 54860, 112524 54018, 111982 53293, 111505 52797, 112771 52797, 112948 53027, 116838 56885, 117962 58024, 118462 58838, 118307 58939, 118381 59086, 118199 59118, 118589 59465, 118661 59668, 118980 60006, 119249 60101, 119970 60790, 120529 60578, 122202 62245, 124851 64932, 128096 68172, 128832 68852, 129077 69096, 129077 70665, 128390 69978, 127531 69151, 127260 68878, 126331 67833, 125798 67335, 125562 67188, 125300 66930, 124996 66733, 124891 66700, 125027 66948, 124922 67026, 124600 66797, 123617 66206, 123266 66072, 121867 64893, 119217 62311, 119034 62186, 119049 62228, 119530 62757, 122305 65537, 123404 66469, 123630 66606, 123845 66816, 125395 67571, 125375 67466, 125655 67690, 126919 68845, 127019 68921, 127962 69781, 129077 70895, 129077 74244, 128381 73545, 127560 72893, 127422 72793, 126868 72258, 126666 72128, 124882 70393, 122964 68484, 119243 64714, 118721 64127, 118138 63406, 117500 62507, 116463 61418, 115182 60245, 113949 59015, 111623 56740, 111468 56723, 111724 56999, 115830 61148, 116685 62100, 117492 62978, 117560 63087, 118957 64702, 119505 65301, 119450 65268, 119722 65554, 122929 68701, 124195 69977, 126364 72372, 127060 72976, 127651 73442, 128224 73860, 128584 74153, 129077 74675, 129077 76402, 128554 75919, 126128 73509, 123726 71088, 119786 67144, 105506 52797, 109594 52797)), ((92605 52871, 92737 52937, 92912 52797, 93990 52797, 93215 53410, 93190 53411, 92785 53716, 91466 54660, 90834 55134, 89889 55898, 88552 57087, 85864 59799, 84644 61000, 84072 61680, 82150 63579, 79611 66116, 78334 67428, 78242 67564, 78354 67491, 80655 65234, 84148 61708, 84874 61085, 87321 58668, 88044 57847, 89236 56711, 90264 55812, 90670 55491, 92476 54118, 92803 53883, 93806 53108, 94241 52797, 96195 52797, 95938 53051, 95100 53759, 94364 54400, 93742 54983, 92582 56108, 90637 58024, 90214 58513, 89329 59404, 87299 61505, 87186 61750, 88002 61064, 91321 57797, 92852 56258, 93942 55126, 94497 54589, 95364 53797, 96318 52977, 96503 52797, 98614 52797, 75079 76356, 75079 74755, 76104 73851, 76198 73783, 76465 73535, 80180 69813, 83316 66881, 87252 62983, 92549 57656, 94375 55997, 96828 53975, 97197 53655, 96584 54109, 94455 55843, 92854 57241, 87068 62995, 84213 65867, 80981 68922, 80870 69013, 77242 72605, 76527 73291, 75508 74135, 75399 74209, 75079 74476, 75079 72400, 76260 71197, 76288 71182, 76557 70918, 78793 68900, 80382 67612, 81948 66149, 83510 64552, 83547 64490, 83250 64764, 81762 66229, 78858 68816, 78135 69408, 76643 70655, 76167 71090, 75079 72188, 75079 69225, 77794 66452, 83500 60783, 86282 57997, 86295 57997, 91476 52797, 92663 52797) (88322 58654, 87588 59349, 87782 59095, 86575 60255, 85879 60962, 85559 61340, 82940 64038, 80216 66764, 78926 68019, 78148 68790, 77715 69260, 77987 69119, 78215 68935, 78645 68523, 80287 66812, 82662 64439, 84628 62520, 87952 59062, 89053 57939)), ((179518 74202, 179848 74539, 179618 74702, 178904 74118)), ((179980 73638, 180254 74056, 179853 74533, 179542 74188, 179476 73622)), ((165668 59316, 171228 64901, 172793 66576, 173653 67339, 174092 67633, 175559 68842, 176757 69970, 179342 72573, 180046 73257, 179809 73144, 179796 73235, 179145 72711, 178647 72397, 178377 72332, 178038 72757, 178141 73030, 177844 72814, 177742 72998, 170902 66161, 170902 66146, 165007 60246, 165007 58667)), ((37951 71858, 41421 71918, 48916 71936, 51320 71988, 51441 72160, 51370 72954, 37902 72987, 31191 72983, 31191 71677)), ((62510 65079, 63147 65094, 63581 65270, 63548 65301, 63613 65612, 63616 65836, 63568 65896, 63662 65937, 63858 65897, 63959 65752, 64183 65681, 64224 65584, 64389 65646, 64707 65664, 64873 65722, 64890 65860, 65055 65787, 65547 65881, 65887 66055, 66209 66013, 66297 65902, 66306 65769, 66452 65685, 66507 65580, 66754 65499, 66951 65369, 67534 65322, 67661 65346, 67909 65282, 68053 65200, 67740 65164, 67763 65085, 68386 65096, 69105 65095, 69105 70595, 59402 70598, 59465 70564, 59351 70342, 59383 70243, 59278 69993, 59177 69828, 59183 69492, 59607 69507, 62260 69504, 60562 69420, 59113 69226, 59113 68249, 59930 68170, 59113 68148, 59113 66598, 60926 66600, 62148 66558, 63955 66585, 66839 66569, 67225 66518, 66891 66439, 61888 66468, 59400 66415, 59113 66420, 59113 65062)), ((177610 54049, 181840 58298, 182096 58509, 182309 58663, 182350 58648, 182109 58350, 179000 55243, 177757 53955, 176652 52871, 177659 52871, 178399 53580, 180968 56154, 181582 56848, 182946 58326, 183124 58555, 183816 59359, 185600 61106, 185744 61145, 186020 61385, 186106 61315, 186175 61592, 187931 63378, 189007 64611, 189007 66110, 188421 65518, 186980 63997, 186027 63129, 186067 63188, 185848 63165, 186602 63956, 186770 64196, 187311 64769, 188288 65738, 188601 65969, 188814 66158, 189007 66350, 189007 68540, 180856 60404, 176258 55838, 173962 53525, 173355 52871, 176274 52871) (184438 61350, 184205 61884, 185074 62441, 185138 62077, 184822 61539, 184599 61345) (175609 53091, 175595 53210, 177123 54779, 177660 55347, 178568 56684, 179096 57403, 178704 56708, 178363 56022, 178237 55798, 178273 55819, 177930 55188, 176288 53529, 175720 53091)), ((146755 53712, 146040 54528, 143464 57118, 143375 57357, 146530 54280, 147124 53652, 147110 53652, 147858 52871, 149571 52871, 149245 53064, 149111 53059, 148909 53214, 148654 53357, 147991 54117, 147122 55225, 146821 55486, 146702 55636, 146683 55735, 146822 56041, 147130 56042, 147239 56242, 146853 56637, 146190 57351, 145292 58198, 143163 60326, 143012 60554, 141915 61604, 141643 61854, 135007 68488, 135007 67912, 138541 64332, 140685 62277, 141029 62199, 141194 62000, 141110 61952, 141006 62143, 140659 62174, 137723 64951, 135007 67637, 135007 65442, 135421 65113, 135925 64651, 136075 64471, 136007 64471, 135448 64875, 135422 64909, 135007 65217, 135007 63475, 135384 62991, 137408 60300, 137694 59978, 140737 56837, 143746 53835, 144014 53598, 143990 53598, 144846 52871, 147403 52871) (141505 61323, 141273 61608, 141177 61782, 141189 61828, 140708 61597, 140277 61313, 139823 61698, 138919 62580, 137922 63654, 136807 64800, 137610 64014, 137913 63824, 138143 63610, 139203 62574, 139896 61853, 140343 61420, 141102 61962, 141173 61855, 141634 61473, 141645 61356, 141588 61284) (139430 59635, 138920 60162, 137308 61772, 137876 61275, 139762 59447) (143330 59530, 142925 59912, 142676 60382, 142281 60945, 141631 61487, 141634 61555, 141527 61694, 141999 61335, 142201 61251, 142623 60856, 142814 60571, 142872 60384, 143050 59914, 143334 59626, 143459 59458) (142381 56638, 141444 57522, 141227 57738, 140877 58178, 140727 58451, 141018 59166, 140943 59228, 140097 58955, 140028 59039, 139900 59330, 140162 59019, 140644 59239, 140671 59208, 140990 59344, 141211 59030, 141081 58769, 140785 58464, 141259 58054, 141300 58007, 141577 57865, 141562 57674, 141812 57413, 142066 57484, 141957 57245, 142364 56820, 142688 56421)), ((87726 53383, 86205 54824, 85338 55780, 85397 55741, 85373 55957, 86166 55202, 86403 55035, 86977 54493, 87947 53516, 88177 53203, 88366 52990, 88558 52797, 90752 52797, 83488 60070, 78047 65544, 75733 67843, 75079 68449, 75079 65530, 76259 64194, 80508 59964, 80719 59708, 80871 59497, 80857 59457, 80558 59698, 77451 62805, 76163 64047, 75079 65154, 75079 64145, 75788 63405, 78363 60836, 79059 60222, 80536 58858, 80763 58680, 81567 57988, 83314 56204, 83353 56060, 83594 55784, 83523 55698, 83800 55629, 85588 53873, 86819 52797, 88324 52797) (78916 63100, 78230 63441, 78006 63567, 78027 63531, 77396 63876, 75739 65516, 75300 66083, 75300 66195, 75419 66208, 76987 64681, 77556 64144, 78892 63236, 79611 62708) (83748 56982, 83554 57205, 83561 57366, 84092 57599, 84649 56730, 84286 56668)), ((128633 66857, 128614 67120, 128871 67446, 129077 67685, 129077 68432, 128008 67398, 128175 67164, 128479 66700)), ((117618 56333, 119673 58477, 119749 58822, 119948 58984, 119997 58902, 119805 58799, 119776 58450, 116999 55515, 114312 52797, 116506 52797, 116835 53211, 117300 53715, 117478 53865, 117479 53797, 117075 53238, 117040 53212, 116731 52797, 118473 52797, 118959 53175, 121648 55200, 121971 55485, 125111 58527, 128113 61538, 128350 61806, 128350 61782, 129077 62639, 129077 65193, 128237 64545, 127422 63830, 124830 61254, 124589 61164, 127668 64322, 128296 64916, 128296 64901, 129077 65649, 129077 67363, 128884 67036, 128890 66904, 128736 66700, 128594 66447, 127945 65881, 127929 65858, 126726 64916, 126462 64615, 126312 64495, 126214 64476, 125909 64612, 125907 64922, 125708 65030, 125313 64643, 124597 63980, 123750 63081, 121624 60956, 121394 60804, 120344 59709, 120099 59438, 113462 52797, 114038 52797) (120446 59578, 120614 59789, 120698 59992, 121093 60415, 121378 60605, 121566 60662, 122034 60842, 122322 61127, 122490 61250, 122418 61122, 122036 60717, 121568 60466, 121005 60073, 120464 59424, 120395 59425, 120256 59317) (122929 57954, 122709 58434, 122740 58461, 122605 58780, 122918 59004, 123180 58873, 123484 58577, 123748 58890, 123943 59092, 124084 59368, 124276 59354, 124538 59603, 124466 59856, 124704 59748, 125130 60156, 125528 60478, 125312 60172, 124428 59234, 124212 59017, 123771 58668, 123497 58519, 122782 58810, 122720 58734, 122993 57889, 122909 57820, 122618 57690) (117936 55402, 118124 55703, 119376 56993, 120095 57686, 120528 58133, 119987 58895, 120095 58966, 120477 59424, 120592 59435, 120664 59378, 120625 59296, 120204 58953, 120123 58980, 120353 58499, 120635 58067, 120252 57613, 119370 56709, 118296 55713, 117150 54599) (120673 55668, 122501 57552, 122313 57220, 121786 56710, 120177 55098)), ((187250 61669, 187365 61970, 187941 62645, 188417 63085, 189007 63685, 189007 64405, 188330 63662, 186222 61571, 186351 61122, 186385 61116, 186666 60885)), ((84605 53694, 83968 54251, 83135 54953, 82835 55178, 81954 55968, 81881 56085, 80871 57091, 78916 59102, 77067 60961, 76980 61082, 77099 61017, 78561 59538, 81877 56246, 81920 56107, 82236 55758, 81980 56115, 82239 56277, 82267 56198, 82960 55799, 83234 56143, 82527 56761, 81783 57500, 80775 58391, 79550 59345, 78565 60284, 77334 61520, 76649 62307, 76070 62888, 75079 63859, 75079 61373, 78843 57522, 81560 54854, 83073 53341, 83662 52797, 85536 52797)), ((184284 56635, 186953 59352, 188466 60865, 189007 61450, 189007 63326, 188110 62397, 187553 61760, 186851 60925, 186627 60625, 185836 59746, 185719 59673, 184714 58663, 182703 56708, 180843 54855, 180722 54769, 180788 54887, 182267 56353, 185558 59668, 185697 59711, 186057 60036, 185689 59770, 185530 60030, 185610 60059, 186005 60752, 185661 61026, 185043 60318, 184306 59573, 183415 58567, 182459 57342, 181520 56354, 180284 55125, 179497 54441, 178911 53862, 177938 52871, 180433 52871)), ((144547 53041, 143718 53780, 142039 55450, 140716 56832, 139958 57520, 137808 59682, 137316 60218, 136579 61094, 136172 61663, 136172 61688, 135188 63070, 135007 63256, 135007 61167, 139533 56627, 143297 52871, 144750 52871)), ((96910 62186, 96326 62900, 96412 62286, 96749 61956)), ((125321 57323, 129077 61088, 129077 62540, 128907 62338, 128168 61511, 126499 59829, 125116 58506, 124429 57749, 122266 55600, 121730 55107, 120854 54369, 120285 53962, 120260 53962, 118880 52980, 118693 52797, 120782 52797)), ((96743 61951, 96398 62262, 95832 62328, 95846 61824, 96266 61554)), ((185247 53945, 185581 54313, 187922 57028, 188154 57258, 189007 58165, 189007 60670, 188765 60405, 185386 57071, 181232 52871, 184195 52871) (184785 54523, 185180 54972, 185862 55647, 186138 55852, 186144 55798, 185742 55343, 185063 54672, 184807 54465)), ((82617 53039, 79279 56418, 75079 60571, 75079 57609, 76153 56557, 76521 56223, 79237 53882, 79466 53650, 80373 52797, 82881 52797) (77551 56063, 76880 56742, 76673 56997, 76731 57019, 77180 56624, 77855 55942, 78060 55667, 78006 55660)), ((105920 56736, 108524 59361, 109004 59910, 109354 60418, 109398 60543, 107657 59376, 106306 58395, 105330 57525, 105081 57184, 105081 55870)), ((141086 54414, 138711 56817, 135831 59664, 135007 60510, 135007 60116, 136109 59069, 137644 57533, 138814 56466, 139728 55507, 139949 55180, 140052 55103, 140120 54953, 139775 55121, 137726 57186, 137432 57589, 136918 58117, 135007 60014, 135007 58697, 136543 57130, 135762 57906, 135077 58560, 135007 58570, 135007 56543, 136073 55475, 138903 52871, 142627 52871)), ((122880 53901, 124415 55436, 125484 56606, 126442 57517, 126771 57739, 126849 57842, 126999 57910, 126827 57568, 124761 55516, 124359 55223, 123831 54711, 121938 52797, 123251 52797, 124820 54334, 124044 53554, 123388 52867, 123379 52797, 125406 52797, 126473 53863, 129077 56697, 129077 60417, 127538 58880, 125132 56501, 122317 53657, 121439 52797, 121833 52797)), ((186313 53101, 186381 53180, 186893 53644, 186937 53773, 187298 54289, 187286 54632, 187033 54602, 186983 54730, 186521 54641, 186370 54745, 186800 55441, 187130 55377, 187419 55062, 187546 54796, 187594 54514, 187801 54811, 189007 56006, 189007 58050, 188155 57189, 188055 57054, 187813 56776, 186703 55393, 186336 54757, 186150 54750, 184935 53377, 184466 52871, 186046 52871)), ((79398 53649, 79262 53750, 78984 53991, 77604 55101, 76965 55468, 76958 55654, 75585 56872, 75079 57341, 75079 55758, 75311 55491, 75390 55423, 75852 54911, 75981 54867, 76499 54506, 76840 54518, 76810 54771, 76938 54821, 76849 55285, 76953 55435, 77652 55004, 77587 54674, 77272 54385, 77005 54258, 76725 54210, 77021 54003, 78214 52797, 80258 52797)), ((127878 52948, 128221 53202, 128626 53549, 128316 53024, 128095 52797, 128646 52797, 129077 53222, 129077 56663, 126841 54172, 126615 53910, 125978 53085, 125716 52797, 127721 52797)), ((136120 55333, 135295 55971, 135007 56234, 135007 54227, 135157 54071, 135412 53728, 135759 53324, 135231 53632, 135007 53853, 135016 53294, 135432 52871, 138870 52871)), ((189007 53607, 189007 55778, 187953 54656, 187710 54458, 187531 54250, 187362 54011, 187000 53674, 186884 53619, 186210 52871, 188280 52871)), ((76864 53851, 76668 54094, 76462 54273, 76220 54442, 75882 54804, 75827 54920, 75079 55594, 75079 53527, 75815 52797, 77987 52797)), ((85870 53476, 83779 55583, 83330 55455, 83324 55421, 83093 55140, 83877 54554, 84179 54439, 84854 53863, 85293 53387, 85893 52797, 86613 52797)), ((41362 51603, 44970 51632, 50644 51757, 51461 51798, 51461 54959, 31191 54979, 31191 53519, 34314 53534, 35148 53617, 34903 53497, 35351 53430, 33974 53235, 31191 53222, 31191 52634, 32475 52554, 32391 52545, 48553 52549, 49282 52519, 48721 52477, 31605 52431, 31191 52437, 31191 51613, 36010 51597)), ((149605 53940, 149372 53774, 148908 53471, 149067 53315, 149330 53335, 149656 53078, 149894 52871, 150632 52871)), ((151049 48205, 151509 48242, 154740 48581, 154801 48576, 156809 48682, 159295 48751, 161732 48700, 161583 48755, 161690 49948, 161471 50080, 160866 49988, 160817 49972, 160158 49933, 157516 49889, 157546 49917, 158531 50023, 158771 50021, 160084 50053, 160964 50120, 161312 50180, 161038 50354, 160373 51025, 160234 51081, 159784 51074, 158903 50955, 157379 50722, 157085 50640, 156464 50507, 156186 50372, 155381 50206, 154704 50172, 154610 50141, 154300 50134, 153236 50290, 152354 50360, 149370 50372, 149176 50487, 152687 50544, 153549 50512, 154782 50527, 155548 50608, 155756 50652, 156907 50853, 158400 51070, 159607 51296, 160022 51346, 159931 51471, 159382 51921, 158611 52197, 157966 52308, 157800 52249, 157099 52278, 156670 52311, 156350 52210, 155907 52090, 155472 51922, 154994 51819, 154613 51762, 154311 51626, 154295 51517, 153968 51409, 153061 51489, 152054 51649, 151737 51612, 151584 51667, 151359 52036, 151441 52258, 151314 52478, 150872 52486, 150236 52522, 149406 52486, 147343 52486, 147152 52543, 146249 52521, 146206 52495, 137251 52485, 136707 52453, 136419 52500, 136017 52490, 135730 52354, 135823 52307, 136148 52292, 136038 52152, 136198 52060, 142993 52041, 145134 52106, 145369 52301, 145544 52274, 145515 52170, 145379 52233, 145162 52004, 142246 51889, 136460 51885, 136111 51866, 135701 51684, 135499 51367, 135724 51206, 136658 51185, 138129 51120, 135683 51110, 135356 51015, 135026 50987, 134135 50492, 133869 50315, 133604 50287, 133898 50578, 134092 50847, 134100 50970, 134061 51046, 133896 51052, 133488 50986, 133055 50738, 132133 49845, 132089 49730, 132317 49594, 132554 49538, 132487 49335, 132762 49271, 132943 49166, 135556 49156, 138149 49126, 138487 49095, 138515 49083, 140253 48921, 140659 48895, 140973 48849, 141688 48777, 144334 48297, 144682 48268, 147939 48200) (147077 52166, 146761 52236, 146593 52289, 146010 52213, 145921 52304, 146281 52371, 146428 52460, 146825 52481, 147053 52416, 147179 52316, 147499 52111, 147813 52107, 147979 52072, 147875 52028, 147431 52009) (142770 51092, 141211 51120, 142343 51134, 142612 51213, 142960 51230, 144059 51243, 144792 51228, 145281 51239, 145515 52171, 145597 52146, 146014 52204, 146084 52108, 146089 51979, 145990 51935, 145632 52004, 145603 52105, 145427 51619, 145288 51107, 144833 51054, 143851 51040) (137547 49874, 139210 50134, 140251 50342, 140828 50372, 141012 50351, 140954 50299, 139596 50060, 138056 49849) (146352 49272, 146066 49406, 146444 49363, 146578 49862, 146612 49860, 146723 50187, 146807 50057, 146759 50049, 146445 49260) (147739 49201, 147320 49265, 147080 49353, 146898 49905, 147087 49592, 147124 49437, 147647 49460, 147909 49554, 148004 49401, 148290 49392, 148418 49639, 148445 49928, 148434 49626, 148557 49441, 148948 49362, 149352 49306, 149038 49240, 148072 49201) (144663 49291, 143187 49352, 146064 49406, 145685 49268)), ((154072 51890, 155300 52140, 155999 52339, 155730 52422, 154886 52479, 153571 52528, 153891 51698, 154059 51695)), ((191898 47272, 192121 47381, 192107 48385, 192233 48507, 191108 48420, 189084 48311, 188896 48292, 188333 48275, 183367 48281, 180143 48130, 176075 48101, 170466 48120, 169006 48023, 164040 47578, 165432 47773, 170003 48214, 176215 48234, 179161 48226, 182419 48346, 182557 48366, 187074 48394, 187986 48417, 189586 48566, 190813 48651, 191483 48665, 192157 48644, 191918 48761, 191953 48782, 191959 49076, 191728 50115, 191531 50195, 191278 50115, 190341 50028, 188895 50055, 188718 50122, 186794 50139, 184401 49976, 182997 49788, 182676 49753, 180851 49679, 178984 49705, 178906 49731, 179079 49746, 181043 49768, 184248 49999, 185521 50176, 186463 50292, 186775 50311, 189227 50311, 189861 50393, 190596 50389, 191190 50445, 191177 50491, 190044 51540, 189572 52014, 189356 52200, 189002 52481, 166806 52510, 165108 52461, 164415 51830, 164400 51717, 165953 51686, 166716 51697, 167377 51687, 167730 51617, 167602 51507, 165314 51472, 164950 51486, 164222 51548, 164024 51457, 162923 50403, 163407 50410, 164097 50374, 164825 50449, 167159 50765, 167790 50869, 169179 51141, 169858 51259, 170829 51390, 172142 51505, 175100 51482, 176350 51495, 177008 51420, 179019 51434, 181764 51434, 183144 51411, 183999 51380, 183204 51343, 177287 51262, 176731 51271, 176544 51240, 173638 51239, 172843 51310, 171571 51267, 170487 51174, 170034 51109, 168144 50795, 167762 50721, 165394 50376, 164531 50259, 164292 50168, 163653 50079, 162537 50048, 162413 50011, 162378 49848, 162398 49148, 162218 49051, 163254 49039, 164912 49050, 167015 49190, 167709 49220, 168879 49248, 171190 49269, 171721 49223, 172718 49216, 175101 49164, 175304 49066, 174599 48948, 170822 48928, 169133 48932, 167819 48965, 167077 48951, 165546 48897, 164798 48836, 164386 48773, 162857 48740, 162111 48831, 162265 48733, 162312 48368, 162165 47348, 162515 47241) (182189 50413, 179290 50412, 177163 50381, 175281 50440, 173358 50478, 171638 50498, 172806 50513, 173665 50544, 173412 50584, 174789 50618, 175597 50610, 175981 50572, 178953 50513, 182104 50514, 183514 50538, 184409 50540, 184949 50512, 184725 50388, 184050 50368)), ((159232 52189, 158997 52421, 158573 52475, 158182 52496, 158197 52371, 158652 52236, 159242 52028)), ((92995 50946, 93017 51091, 92367 51182, 91624 51390, 91499 51780, 91408 52133, 91446 52167, 91371 52182, 91335 52436, 83921 52450, 77113 52431, 76121 52407, 75716 52429, 75369 51951, 75305 51785, 75182 51644, 74991 51375, 75448 51289, 76455 51257, 77507 51250, 83963 51269, 85653 51346, 86517 51274, 86906 51172, 88372 50981, 89649 50933)), ((74567 51723, 74586 51687, 75091 51727, 75361 51950, 75603 52389, 75559 52397, 75600 52431, 75169 52443, 74836 52307, 74469 51932, 74109 51529)), ((105392 47155, 117427 47165, 122004 47193, 131981 47194, 131945 47468, 131972 47478, 131991 48234, 131181 48265, 130995 48263, 130404 48367, 130620 48467, 131431 48576, 131827 48584, 132056 49015, 132055 49099, 131976 49222, 131043 49112, 130053 49114, 129353 49194, 127101 49263, 126981 49276, 124690 49282, 123806 49340, 123091 49453, 118149 49442, 117862 49477, 117664 49517, 116968 49562, 117974 49603, 121542 49604, 123100 49638, 124368 49619, 124847 49594, 126847 49624, 129122 49511, 129247 49498, 130757 49436, 131993 49435, 131965 49545, 131426 50248, 131167 50567, 130292 51362, 130235 51349, 129281 51427, 129189 51423, 128958 51523, 129343 51620, 129609 51653, 129739 51788, 129295 52237, 129010 52437, 127898 52439, 121408 52398, 116148 52439, 112039 52438, 110010 52396, 106400 52437, 105291 52390, 105051 52280, 103669 51047, 103603 50918, 104238 51026, 106575 51046, 107209 50968, 108916 50947, 110519 51007, 112443 51049, 113132 51110, 113972 51207, 114446 51392, 114676 51405, 115173 51329, 115275 51295, 116404 51299, 118962 51258, 120492 51253, 120631 51223, 120532 51179, 119000 51191, 115354 51171, 115260 51239, 115134 50874, 115071 50917, 114518 50728, 114509 50315, 115126 50344, 115162 50320, 115995 50326, 117095 50411, 118316 50607, 119388 50642, 120768 50640, 121613 50567, 122330 50564, 123846 50635, 125744 50644, 127234 50569, 127209 50421, 126627 50369, 125829 50376, 125162 50329, 123287 50385, 119850 50380, 119125 50322, 117523 50242, 117287 50204, 116389 50113, 114354 50137, 114299 50185, 114053 50225, 113827 50199, 113751 50149, 112802 50153, 111687 50186, 110186 50056, 109817 50038, 108275 49832, 106758 49789, 106246 49874, 106716 49976, 107528 50013, 108267 50107, 108894 50136, 109838 50205, 111257 50278, 113745 50267, 114013 50677, 114002 50715, 114057 51092, 113288 50947, 113022 50814, 112303 50737, 110534 50723, 109879 50796, 108471 50818, 107325 50796, 105961 50739, 104443 50737, 103768 50805, 103575 50896, 103361 50809, 103148 50577, 102464 49533, 102521 49480, 103627 49289, 105500 49076, 106635 48994, 110367 48972, 112023 49035, 113035 48974, 113236 48807, 112345 48781, 112138 48727, 111533 48708, 110461 48714, 110129 48774, 107619 48779, 106706 48713, 105360 48729, 105056 48803, 104736 48843, 103282 49078, 103162 49055, 103608 48325, 103611 48113, 104743 47905, 104534 47771, 102306 47706, 102219 47663, 102134 48401, 102205 48600, 102098 48551, 101581 48593, 95401 48581, 94432 48570, 93896 48584, 93682 48638, 91619 48894, 90461 49089, 90125 49136, 89783 49216, 81967 49267, 81882 49254, 80609 49302, 80381 49378, 79216 49335, 79187 49316, 78490 49333, 77969 49428, 77962 49498, 78118 49571, 78865 49602, 79077 49619, 79491 49596, 79563 49574, 79926 49524, 80646 49444, 81267 49412, 82027 49342, 88522 49340, 89923 49284, 91285 49137, 92909 48921, 94233 48720, 102189 48712, 102033 48818, 102093 49457, 101994 49740, 101452 50303, 101216 50428, 100425 50350, 99609 50309, 98186 50279, 96585 50292, 95649 50340, 89688 50356, 85995 50335, 85524 50314, 84886 50319, 84878 50368, 89686 50358, 96884 50395, 97798 50436, 99207 50547, 100033 50527, 101194 50445, 101061 50620, 99262 52173, 99007 52404, 94053 52395, 94299 52009, 94206 51969, 93723 52192, 93706 51802, 94279 51520, 94412 51369, 94646 50857, 94360 50814, 94199 50829, 91913 50778, 89253 50768, 86684 50998, 86494 51038, 85728 51033, 84045 51105, 82325 51118, 77432 51121, 75485 51076, 75186 51009, 74930 50594, 74453 50102, 74346 49870, 74051 49537, 73973 49569, 73722 49574, 73680 49546, 73175 49593, 72940 49657, 72666 49837, 72738 49454, 73042 49221, 73566 48606, 73763 48407, 73984 48264, 74086 48083, 74322 47917, 78704 47956, 81331 47935, 81715 47919, 82151 48090, 82326 48105, 82710 47922, 83241 47940, 85790 47980, 87568 48086, 88088 48205, 88646 48298, 89455 48505, 89729 48626, 90431 48688, 91712 48658, 91572 48605, 92157 48532, 91629 48486, 91709 48450, 89910 48343, 89317 48188, 88870 48015, 87904 47767, 87344 47739, 87134 47842, 84587 47845, 82655 47874, 82268 48009, 81792 47865, 79432 47848, 77439 47853, 74361 47877, 74448 47729, 74879 47278, 75048 47197, 80890 47147, 81073 47370, 81232 47516, 81385 47511, 81717 47298, 82144 47188, 83507 47146, 85173 47167, 86272 47168, 88441 47149, 99647 47208, 102228 47205, 102269 47246, 102449 47133) (114110 48735, 113873 48588, 114065 48889, 114121 49076, 114583 49252, 114824 49232, 114921 49116, 114871 48524) (120605 48315, 121404 48640, 122019 48853, 123863 48869, 124451 48779, 124658 48687, 124278 48590, 122619 48561, 121977 48536, 120677 48220, 119841 48044)), ((93126 52250, 92797 52284, 93035 52083, 93259 52068)), ((93607 51371, 93336 52000, 93028 51979, 92874 51610, 93297 51263)), ((51461 49486, 51461 50723, 50634 50731, 51461 50734, 51461 51674, 50563 51620, 46517 51435, 43948 51387, 40815 51417, 33014 51458, 31191 51444, 31191 49484)), ((134408 51334, 134628 51483, 134788 51629, 134501 51638, 134228 51627, 134211 51539, 134060 51372, 134200 51294)), ((138713 47251, 138475 47456, 137963 48114, 137988 48328, 138093 48422, 138471 48422, 138420 48547, 138574 48622, 138878 48465, 139200 48539, 139460 48543, 139712 48586, 139986 48468, 140055 48630, 140236 48692, 140170 48877, 138439 49042, 138118 49065, 135607 49144, 132901 49111, 132576 49034, 132297 48953, 132212 48784, 132366 48667, 132747 48594, 132823 48360, 132544 48219, 135087 48221, 135754 48102, 135392 48022, 133270 48003, 132386 48010, 132178 47981, 132169 47794, 132370 47584, 132517 47473, 132593 47270, 133152 47195) (133086 47631, 133167 47684, 133386 47643, 133473 47552, 133443 47499, 133034 47498)), ((35792 48667, 36397 48725, 38847 48856, 38447 48902, 37214 48990, 35497 49036, 34203 49016, 32537 49048, 31191 49044, 31191 48382)), ((33077 47044, 34889 47199, 46662 47563, 49626 47665, 50322 47748, 50554 47796, 51223 47789, 51301 47940, 50952 48441, 51397 48714, 51364 48835, 51168 48976, 48223 49014, 47670 48878, 48396 48790, 46960 48848, 45422 48785, 40522 48839, 36730 48637, 34307 48419, 31910 48266, 31191 48163, 31191 46949)), ((142440 47210, 145614 47210, 154116 47260, 157083 47254, 161630 47207, 161824 47320, 161842 47902, 161871 48158, 161779 48503, 161043 48451, 159306 48453, 159087 48520, 154868 48543, 151700 48194, 151048 48133, 150723 48138, 148758 48118, 147910 48143, 147460 48112, 144928 48130, 144361 48163, 143508 48260, 141544 48674, 140713 48803, 140638 48716, 140273 48688, 140759 48515, 141078 48177, 141292 47878, 141306 47765, 141640 47461, 141735 47299, 142270 47178)), ((171926 41086, 174281 41112, 174335 41156, 174403 41928, 174409 42217, 174277 42312, 173213 42240, 172696 42190, 171239 42144, 169425 42259, 168182 42267, 164306 42355, 169841 42415, 171069 42417, 172770 42537, 173497 42508, 174142 42536, 174387 42641, 174381 45396, 174282 45486, 174150 45535, 172538 45451, 169896 45380, 169141 45462, 169258 45543, 171401 45649, 173378 45670, 174252 45695, 174410 45845, 174309 46500, 173969 46592, 173646 46598, 167947 46562, 163910 46559, 163422 46446, 163169 46443, 162591 46486, 161025 46475, 160296 46400, 159769 46487, 158929 46552, 158494 46559, 157627 46437, 157129 46510, 156733 46506, 154994 46450, 154603 46461, 153882 46557, 153155 46578, 152339 46563, 130010 46585, 120641 46560, 116929 46607, 112696 46559, 112487 46436, 112464 46261, 112684 46117, 113349 46095, 116755 46023, 118310 45942, 118573 45905, 119233 45840, 118803 45772, 117550 45767, 112688 46034, 112482 45871, 112505 44623, 112456 44136, 112711 43965, 113667 43976, 116349 43931, 116702 43845, 115511 43807, 112763 43792, 112519 43674, 112869 43373, 112850 42871, 112877 42773, 112967 42237, 112701 42142, 112726 41984, 112484 41699, 112468 41310, 112544 41191, 112743 41123, 125412 41113, 127569 41151, 139744 41110, 159082 41129, 160266 41095, 161412 41115, 162340 41154, 163156 41166, 164740 41297, 165304 41295, 166156 41236, 166418 41308, 167713 41314, 168799 41252, 169366 41183, 170158 41304, 170819 41048) (160948 44410, 161902 44494, 163882 44742, 165666 44807, 166113 44852, 167057 44875, 167247 44831, 167134 44719, 162498 44396, 161242 44292, 158568 44174) (115540 44571, 114975 44668, 116024 44730, 117518 44756, 119210 44749, 122202 44650, 124302 44629, 122324 44610, 118712 44532) (131247 44042, 135006 44098, 146494 44096, 151655 44086, 147210 44079, 148154 44008, 144387 43988, 136519 43987) (140933 42350, 139126 42416, 142091 42406, 145766 42368, 141807 42343)), ((107932 35347, 109743 35341, 109924 35295, 139376 35295, 139360 35427, 139491 35675, 139616 35842, 139607 36176, 139083 36161, 135802 36164, 137901 36250, 139571 36430, 140622 36385, 142593 36356, 143286 36308, 143354 36356, 143361 37203, 143242 37293, 139777 37413, 138686 37497, 140555 37538, 141775 37529, 141916 37507, 143266 37461, 143423 37512, 143379 38960, 143274 39151, 143406 39701, 143432 39935, 143203 40118, 143011 40126, 143200 40138, 143371 40361, 143358 40481, 143209 40594, 141553 40611, 135492 40589, 134704 40575, 134170 40398, 134211 40367, 134130 40056, 134126 39832, 134185 39772, 134069 39731, 133827 39772, 133702 39918, 133423 39989, 133372 40084, 133168 40023, 132777 40005, 132569 39947, 132548 39808, 132344 39883, 131736 39789, 131315 39613, 130905 39655, 130792 39766, 130775 39899, 130587 39983, 130518 40088, 130202 40169, 129951 40299, 129204 40346, 129041 40322, 128727 40386, 128544 40469, 128939 40504, 128908 40583, 128209 40575, 85022 40567, 84816 40420, 84777 40269, 85021 40002, 85125 39995, 85021 39990, 84758 39790, 84799 39282, 84922 38911, 85218 38885, 85773 38816, 87708 38820, 90026 38741, 85944 38664, 85574 38597, 84952 38560, 84873 38380, 85078 38252, 85826 38030, 85941 37960, 86207 37863, 86526 37811, 87040 37747, 87303 37780, 87712 37759, 87989 37607, 87975 37386, 88172 37292, 88823 37240, 88794 37183, 88195 37162, 87946 37021, 88206 36589, 88365 36441, 88963 35534, 89144 35448, 89372 35295, 107830 35295) (135939 39114, 133697 39084, 130096 39099, 129614 39150, 130029 39229, 136260 39203, 139341 39252, 141002 39230, 142204 39153, 141150 39073, 137451 39069) (105784 37299, 104654 37341, 103335 37454, 101848 37502, 102328 37568, 104017 37521, 105601 37434, 106460 37358, 106603 37296) (113920 35767, 108358 36171, 102831 36486, 102050 36522, 97340 36654, 95719 36746, 95685 36837, 96866 36884, 99117 36830, 103364 36582, 109963 36123, 113872 35800, 122305 35452, 122755 35451, 122324 35449)), ((206000 36515, 205872 36674, 206002 36783, 205990 38102, 205956 38164, 204385 38359, 203970 38395, 200934 38594, 198367 38680, 196289 38697, 193540 38700, 189908 38681, 186512 38625, 184500 38702, 184637 38729, 184389 38851, 186082 38916, 186430 38948, 190106 38937, 191082 38891, 196644 38882, 199168 38945, 201268 38930, 203252 38802, 205407 38611, 205517 38587, 205832 38570, 206070 38599, 205995 39612, 202862 39809, 202926 39827, 202880 39935, 205820 40000, 206027 40044, 206111 40294, 206109 40462, 205799 40587, 201358 40554, 175322 40543, 162606 40568, 152823 40561, 144643 40570, 144171 40289, 144070 39814, 144032 39448, 147479 39440, 149058 39325, 148458 39231, 146755 39140, 144130 39129, 144152 39065, 144103 38548, 144313 38450, 144877 38449, 146906 38532, 149180 38527, 150577 38462, 151022 38427, 153545 38326, 156048 38319, 158324 38354, 160137 38297, 162281 38166, 172945 38166, 174143 38122, 173212 38052, 162021 38011, 158117 38037, 154179 38010, 152211 38082, 152035 38079, 149446 38140, 149028 38160, 146288 38218, 144267 38219, 144134 38179, 144107 36193, 146124 36115, 146211 36019, 145656 35905, 144817 35907, 144121 35773, 144185 35295, 206005 35295) (158630 38900, 158095 38987, 158680 39114, 163979 39139, 166840 39459, 167325 39502, 166536 39355, 165165 39228, 164857 39074, 165046 39030, 163863 38828, 159933 38816) (180201 38403, 180036 38513, 180120 38680, 180388 38971, 182009 38830, 181457 38491, 180691 38383) (187577 37422, 191032 37592, 193942 37776, 197013 37820, 197834 37742, 197264 37652, 194294 37509, 192830 37479, 191086 37417, 188672 37371) (181067 37342, 179194 37305, 177395 37312, 175339 37236, 171932 37025, 170398 36971, 168510 37006, 164951 37042, 155751 37015, 152914 37056, 152871 37178, 154129 37227, 157088 37243, 165598 37207, 168936 37212, 171012 37238, 174599 37350, 175056 37386, 176691 37460, 181203 37435, 181711 37257, 181917 37268, 182040 37390, 182072 37250, 182483 37396, 184823 37390, 184504 37356, 182791 37357, 182517 37345, 182168 36984, 182036 36916, 181868 37112, 181544 37189, 181281 36879) (197854 36625, 195095 36700, 195431 36717, 199271 36800, 200587 36838, 203430 36833, 205380 36784, 205651 36675, 204519 36562, 199813 36543) (179470 36264, 171993 36332, 167653 36337, 167558 36347, 167642 36361, 172414 36344, 179371 36372, 179559 36316, 180507 36287, 181228 36308, 182131 36456, 183927 36611, 184628 36763, 185717 36819, 186802 36815, 189396 36826, 191848 36738, 193926 36709, 190936 36630, 190176 36579, 185758 36531, 184535 36480, 182417 36370, 181721 36259, 179761 36211) (179785 36497, 179813 36624, 181051 36792, 181204 36510, 180330 36445)), ((143407 35721, 143410 36018, 143307 36102, 142107 36088, 141770 36180, 141038 36122, 139775 36178, 139726 36155, 140066 36012, 140500 36005, 140562 36035, 140859 36111, 140681 36014, 141017 35886, 141003 35763, 141484 35648, 141686 35646, 142115 35542, 142699 35350, 142815 35295, 143312 35295)), ((51599 35727, 51435 35789, 50205 35720, 48107 35688, 37197 35751, 31191 35557, 31191 35295, 51581 35295))) \ No newline at end of file diff --git a/stress_benchmark/resources/060.settings b/stress_benchmark/resources/060.settings new file mode 100644 index 0000000000..9fd982aca1 --- /dev/null +++ b/stress_benchmark/resources/060.settings @@ -0,0 +1,627 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=10 +retraction_combing=noskin +material_bed_temperature=58 +ironing_inset=0.38 +speed_support_roof=40.0 +support_bottom_wall_count=0 +machine_max_feedrate_z=10 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=20.0 +ooze_shield_angle=60 +expand_skins_expand_distance=1.2000000000000002 +support_infill_rate=20 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=10 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=2 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=xy_overrides_z +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=8 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=500 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=8 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=True +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=4.2862637970157366e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=False +bridge_settings_enabled=False +material_final_print_temperature=202.0 +machine_max_feedrate_x=500 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=40.0 +wall_0_material_flow_roofing=100 +speed_travel=200.0 +machine_max_acceleration_z=100 +layer_height_0=0.1 +skin_preshrink=1.2000000000000002 +machine_depth=350 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=1.2000000000000002 +skirt_line_count=3 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.1 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.7000000000000001 +group_outer_walls=True +cool_fan_speed=100.0 +raft_base_jerk=8 +retraction_enable=True +jerk_support_bottom=8 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +infill_randomize_start_location=False +jerk_wall_x=8 +cool_min_layer_time=10 +speed_layer_0=20.0 +speed_wall_x_roofing=40.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.12 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=500 +material_print_temperature=202.0 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=500 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=175.0 +support_interface_material_flow=100 +support_enable=False +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=2.4000240002400024 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=500 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=7 +wipe_retraction_retract_speed=20.0 +material_anti_ooze_retracted_position=-4 +layer_height=0.1 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=40.0 +support_bottom_distance=0.2 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=8 +minimum_interface_area=10 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.30000000000000004 +meshfix_union_all_remove_holes=False +raft_interface_speed=30.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=500 +layer_start_x=0.0 +support_infill_sparse_thickness=0.1 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=8 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=30.0 +speed_support_infill=40.0 +support_offset=0.8 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=10.0 +material_break_speed=25 +machine_width=350 +raft_smoothing=5 +material_break_preparation_temperature=202.0 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=40.0 +wall_x_material_flow=100 +prime_tower_position_x=340.575 +acceleration_layer_0=500 +retraction_amount=1 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=320.575 +jerk_support=8 +jerk_skirt_brim=8 +support_roof_density=33.333 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=10 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=grid +xy_offset=0 +prime_tower_brim_enable=True +support_xy_distance=0.8 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=20.0 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=0.8 +infill_wipe_dist=0.0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=0 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=10 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +raft_margin=15 +speed_print_layer_0=20.0 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +ooze_shield_dist=2 +support_line_distance=2.0 +zig_zaggify_infill=False +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=8 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=2.0 +acceleration_enabled=False +smooth_spiralized_contours=True +travel_speed=200.0 +z_seam_corner=z_seam_corner_weighted +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=350 +acceleration_skirt_brim=500 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=58 +raft_surface_jerk=8 +machine_max_feedrate_y=500 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +support_interface_height=0.8 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.2 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +support_z_distance=0.2 +support_bottom_enable=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=400 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +coasting_enable=False +retraction_hop=0.2 +jerk_prime_tower=8 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=7 +wipe_retraction_prime_speed=20.0 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=40.0 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.25 +infill_offset_y=0 +cool_fan_speed_max=100.0 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +skirt_gap=10.0 +bridge_fan_speed=100 +bridge_skin_speed=20.0 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=8 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=0 +raft_base_line_spacing=1.6 +jerk_wall_0=8 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=3 +material_print_temperature_layer_0=202.0 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_max_feedrate_e=50 +wipe_retraction_amount=1 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=40.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=500 +brim_gap=0 +jerk_topbottom=8 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=500 +support_roof_height=0.8 +cool_fan_speed_min=100.0 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=4.0 +support_bottom_density=33.333 +print_temperature=210 +acceleration_wall=500 +wall_material_flow=100 +raft_acceleration=500 +raft_interface_thickness=0.15000000000000002 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=8 +raft_surface_speed=40.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.04 +small_feature_speed_factor=50 +wipe_hop_enable=False +support_xy_distance_overhang=0.4 +default_material_bed_temperature=60 +fill_outline_gaps=False +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.12 +support_tree_branch_diameter=5 +support_brim_width=4 +gradual_infill_steps=0 +top_skin_preshrink=1.2000000000000002 +jerk_wall_x_roofing=8 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5 +top_layers=7 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=500 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=202.0 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=202.0 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +speed_travel_layer_0=100.0 +speed_ironing=26.666666666666668 +gantry_height=25 +bottom_skin_expand_distance=1.2000000000000002 +min_feature_size=0.1 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=1.5 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=1 +raft_jerk=8 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.7000000000000001 +skirt_brim_extruder_nr=-1 +support_brim_line_count=10 +build_volume_temperature=28 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=80.0 +raft_surface_thickness=0.1 +retraction_hop_after_extruder_switch_height=0.2 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +support_top_distance=0.2 +infill=0 +bridge_skin_speed_3=20.0 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=58 +machine_acceleration=500 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=10 +retraction_retract_speed=20.0 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=20.0 +line_width=0.4 +acceleration_ironing=500 +bridge_wall_speed=20.0 +support_interface_density=33.333 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=10 +machine_extruder_count=1 +acceleration_infill=500 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.04 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=8 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=brim +speed_z_hop=5 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=4.0 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=500 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=500 +wall_line_width_x=0.4 +acceleration_support_interface=500 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +speed_wall_0=40.0 +meshfix_fluid_motion_angle=15 +speed_support_bottom=40.0 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=63 +top_bottom_pattern_0=lines +wall_thickness=1.2000000000000002 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=500 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=True +wipe_move_distance=20 +speed_print=80.0 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=42.0 +raft_speed=40.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +small_skin_width=0.8 +speed_roofing=40.0 +speed_prime_tower=40.0 +speed_support=40.0 +small_hole_max_size=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=4.0 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.25 +min_bead_width=0.34 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=8 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=0.7000000000000001 +material_guid=06e5377a-87df-4b2d-93fb-277e8b37f38a +platform_adhesion=0 +raft_base_speed=30.0 +jerk_travel_layer_0=8 +bridge_skin_material_flow_3=110 +wipe_hop_speed=5 +prime_tower_enable=False +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_wall_0_roofing=500 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=63 +support_tree_bp_diameter=7.5 +skirt_brim_speed=20.0 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=100 +jerk_infill=8 +infill_pattern=gyroid +adaptive_layer_height_variation_step=0.04 +acceleration_roofing=500 +raft_interface_jerk=8 +retraction_speed=20.0 +extruder_prime_pos_y=0 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/060.wkt b/stress_benchmark/resources/060.wkt new file mode 100644 index 0000000000..b11f88495c --- /dev/null +++ b/stress_benchmark/resources/060.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((154509 180190, 154892 180261, 155289 180256, 156229 180714, 156422 182869, 156875 182872, 156659 181573, 157335 181613, 157638 181851, 158114 181771, 158285 181576, 158383 181547, 158434 181291, 159101 181192, 159840 181300, 160175 181370, 160948 181772, 161003 181885, 161037 182887, 161493 182885, 161796 182521, 162119 182435, 162149 182255, 162386 181805, 162412 181703, 163178 181298, 163226 181239, 163578 181136, 164708 181173, 165538 181240, 166046 181168, 166171 181406, 166277 181665, 166277 181756, 166167 181890, 166163 182068, 166257 182563, 166253 182888, 168126 182892, 168106 182217, 168145 181980, 168277 181725, 168533 181642, 169371 181691, 170403 181784, 170618 182031, 170744 182031, 170870 181953, 171902 182195, 172160 182514, 172354 182503, 172733 182705, 173007 182878, 173154 183010, 173210 183187, 173287 183814, 173273 184285, 173788 184119, 174809 183914, 174674 183559, 174635 183292, 174674 183019, 174783 182934, 175036 183056, 175276 183033, 175569 183025, 175946 182631, 175933 182400, 176069 182286, 176449 182354, 176601 182330, 176973 182358, 176976 182279, 177321 182253, 177616 182285, 178012 182397, 178447 182473, 179356 183027, 179481 182973, 179541 183020, 179582 182972, 179925 183062, 179968 183030, 180626 183282, 180717 183402, 180751 183663, 180821 183846, 180918 183913, 180994 184043, 181256 184392, 181368 184620, 181592 185176, 181836 185079, 182919 184982, 183343 184972, 184412 185020, 184485 185012, 186415 185010, 187394 184829, 188025 184806, 188299 184681, 188664 184670, 188837 183559, 188930 183272, 189150 183093, 189158 181134, 189471 180981, 189797 180956, 190248 180977, 190905 180983, 191593 180914, 191856 180975, 192007 180917, 192417 180925, 192547 180948, 192751 180834, 193787 180860, 193355 182887, 193935 182885, 194111 180750, 194631 180459, 194970 180281, 196071 180210, 196489 180401, 196880 180762, 197144 181084, 196780 183724, 196685 184070, 196529 184460, 196846 185001, 196992 185300, 197680 186374, 198545 188061, 198598 188096, 198807 188370, 199326 187247, 199583 187131, 199935 187144, 200209 187233, 200398 187324, 200444 187441, 200551 187549, 200618 187562, 200769 187729, 200944 187736, 201522 188119, 201809 188278, 201915 188821, 201820 189752, 201481 190391, 201744 190423, 201937 190431, 202502 190586, 203153 191030, 203331 191118, 203452 191000, 203705 190855, 204932 189706, 206127 190034, 206987 190894, 207054 191085, 207159 191316, 207150 191796, 207104 192359, 206941 192738, 206656 193261, 204617 193429, 204601 193996, 206516 193587, 206526 194273, 206542 194626, 206427 194830, 206451 194958, 206457 195370, 206400 195521, 206463 195790, 206392 196469, 206399 197128, 206417 197578, 206397 197885, 206242 198216, 205460 198227, 204594 198222, 204592 198469, 205099 198474, 205604 198625, 205907 198839, 206080 199174, 206071 199774, 206177 200430, 206252 200741, 206777 201023, 206861 201246, 206905 201917, 206607 202658, 206459 203567, 206448 203750, 206343 204113, 205997 204638, 205904 204655, 205518 204890, 205411 205127, 205055 205138, 204597 205109, 204597 205492, 204869 205499, 205025 205527, 205517 205558, 205878 205629, 206048 205917, 206355 205955, 206542 206044, 206551 207247, 206570 207499, 206446 207651, 206143 207919, 206183 208027, 206493 208321, 206554 208498, 206455 209332, 206192 209870, 205947 210043, 205568 210095, 204600 210097, 204539 211001, 204500 211136, 204797 211225, 204998 211296, 205649 211460, 205826 211879, 205772 212220, 205473 212355, 205694 212743, 205668 213079, 205558 213405, 205172 214372, 204865 214921, 204306 216005, 204105 216165, 203845 216182, 203781 216197, 203519 216199, 202084 215771, 201984 216204, 201888 216444, 201058 218068, 201135 218437, 201073 218542, 201480 219050, 201577 219298, 201609 219555, 201725 219953, 201799 220438, 201913 220861, 202173 221432, 202597 221964, 202860 222328, 203031 222533, 203217 223461, 203164 224398, 203359 225948, 203550 226351, 205151 226355, 205490 226371, 205605 226427, 206005 227200, 206074 227532, 206185 228270, 206081 228943, 205827 228993, 205799 229090, 205603 229262, 205525 229740, 205761 230040, 205804 230716, 204603 230518, 204601 230971, 206238 231114, 206462 231223, 206912 231801, 207149 232397, 207194 233100, 206966 233517, 206215 234311, 204866 234703, 204501 234609, 204226 234437, 203550 233931, 203269 233663, 202967 233397, 202754 233608, 202951 233775, 202212 234517, 201914 234430, 201599 234722, 201667 235253, 200672 236173, 200267 236248, 200075 235788, 200142 235305, 200129 235033, 200270 234870, 200103 234751, 199471 234723, 199117 234975, 198596 235164, 198514 235249, 198121 236549, 198081 236705, 197654 237676, 197009 238126, 196995 238450, 196761 238762, 196795 239104, 196737 239371, 197306 238808, 197471 238894, 197788 239273, 197635 239528, 197344 239726, 196979 240029, 196636 240262, 196483 240089, 196360 240285, 196406 240496, 196616 240828, 197149 241389, 197626 241927, 197289 243241, 196954 243551, 196689 243877, 196322 244069, 196048 244181, 195518 244200, 195057 244143, 194680 243948, 194121 243640, 193969 241915, 193924 241508, 193485 241502, 193702 242817, 193305 242798, 193027 242774, 192725 242537, 192248 242615, 192079 242812, 191981 242840, 191928 243095, 191259 243195, 190521 243086, 190187 243016, 189416 242616, 189359 242503, 189341 242162, 189330 241498, 188866 241506, 188566 241868, 188242 241964, 188215 242133, 187976 242583, 187950 242685, 187186 243090, 187138 243148, 186786 243252, 185656 243213, 184824 243146, 184316 243218, 184191 242982, 184085 242723, 184085 242632, 184195 242498, 184199 242319, 184100 241801, 184103 241510, 183609 241508, 183638 242016, 183554 242250, 183129 242251, 183177 242698, 183082 243146, 182944 243301, 182476 243398, 182142 243451, 181004 243482, 180812 243255, 180587 243290, 180431 243396, 179897 243310, 179567 243060, 179451 242871, 179331 243018, 179190 243099, 178856 242964, 178604 242424, 178422 242091, 178398 241494, 178331 241494, 178252 242077, 178219 242414, 178105 242762, 177962 243090, 177659 243250, 177429 243350, 176643 243466, 176335 243433, 176158 243550, 176128 243635, 175883 243703, 175615 243727, 175360 243657, 175290 243653, 175053 243440, 174964 243396, 174767 243741, 174156 243621, 174135 243565, 173941 243354, 173797 243086, 173479 242734, 173378 242486, 173344 242257, 173356 241467, 172734 241471, 172591 241879, 172360 242061, 171868 242163, 171250 242151, 170718 242088, 170431 241672, 170213 241863, 169959 241983, 169655 241954, 168608 241819, 168522 241775, 168474 241644, 168493 241374, 168389 241276, 168191 241217, 168202 240964, 168189 240906, 168250 240314, 168322 239956, 167684 239792, 166923 239773, 166735 239663, 165427 239050, 165398 239027, 163899 238476, 163609 238141, 163476 237905, 163229 237672, 163159 237748, 163084 237645, 162919 237852, 162261 237815, 162241 237344, 162058 237355, 161377 237777, 160668 238244, 160447 238363, 159626 238866, 158867 239589, 158503 240055, 158225 240600, 157942 240981, 157406 241295, 157050 241393, 156393 241772, 156239 243121, 156088 243563, 156113 243707, 155320 244145, 154130 244158, 154034 244121, 153711 243805, 153046 243205, 152759 242102, 152897 241335, 153004 241053, 153976 239978, 153081 239104, 152832 238200, 152763 238089, 152730 237925, 152836 236551, 153108 235879, 153042 235593, 152844 235165, 152543 234972, 152270 234667, 151858 234439, 151075 234082, 150561 233790, 149859 233526, 148098 233703, 147720 233534, 147144 233324, 145813 234195, 145751 234269, 144999 234537, 144185 234329, 143121 233062, 143267 232060, 143736 231125, 144870 231030, 145472 230934, 145552 230970, 145749 230953, 145747 230395, 143848 230801, 143838 230106, 143822 229761, 143935 229558, 143911 229430, 143906 229018, 143962 228867, 143902 228597, 143970 227919, 143965 227258, 143946 226811, 143966 226503, 144120 226172, 144921 226163, 145774 226178, 145774 225924, 145265 225914, 144759 225763, 144453 225548, 144282 225212, 144293 224614, 144185 223957, 144110 223646, 143583 223365, 143501 223141, 143450 222490, 143755 221730, 143904 220819, 143915 220637, 144020 220275, 144366 219750, 144460 219733, 144834 219502, 144963 219252, 145516 219255, 146031 219295, 146924 219302, 147007 219378, 147011 220312, 147906 220164, 148725 220129, 148994 219968, 149774 218989, 150223 218351, 150431 217992, 150443 217801, 150348 217379, 150242 217165, 149215 217177, 148929 217081, 147657 216697, 147247 216418, 146981 216008, 146904 213562, 146940 212519, 146960 212238, 146741 210401, 146669 210039, 146436 209373, 145951 207702, 145775 206171, 145778 204178, 146015 203442, 145065 203400, 144828 203084, 144370 201413, 144318 201097, 144471 200910, 144415 200444, 144451 200291, 144520 199631, 144703 199373, 144822 199302, 145079 199078, 145192 198913, 145468 198703, 145826 198573, 145813 198298, 145813 198037, 145213 198031, 144874 198016, 144759 197959, 144357 197187, 144289 196852, 144179 196113, 144283 195443, 144535 195395, 144563 195298, 144759 195126, 144839 194649, 144600 194348, 144554 193674, 145793 193877, 145759 193415, 144984 193354, 144295 193281, 143368 193221, 143705 193220, 143242 192301, 143152 191285, 143390 190880, 144189 190047, 145154 189802, 146476 190280, 146849 190471, 147439 190874, 147849 190876, 148664 190971, 148809 190948, 149227 191053, 150360 191391, 151254 191386, 151608 190965, 151657 190766, 151582 189507, 151616 189230, 151713 188625, 152536 187574, 152602 187368, 152810 187038, 152988 186732, 153421 186197, 153683 185715, 153952 185457, 154054 185230, 154062 184700, 154046 184603, 154211 184023, 153266 183011, 153074 182834, 152733 182466, 152939 181587, 153158 180966, 153514 180717, 153833 180418, 154261 180175) (165182 233311, 174738 233272, 174286 233252, 173993 233224, 165211 233147) (165789 190760, 165532 190830, 164757 191002, 164883 191084, 164916 191534, 164530 191679, 164576 192005, 164986 192247, 165040 192748, 164608 192843, 164627 193190, 164891 193340, 164775 193459, 165120 193560, 165052 193926, 164575 194039, 164474 193753, 164265 193696, 164157 194031, 163443 194020, 163228 193751, 163068 194047, 162705 194037, 162538 193779, 162482 193827, 162351 194048, 161891 194032, 161753 193795, 161287 193758, 161112 194033, 160688 194039, 160427 194032, 160250 193675, 159915 193660, 159475 194112, 159436 194010, 158069 195371, 156464 196997, 156500 197207, 156444 197735, 156022 197791, 155988 198032, 156225 198299, 156250 198410, 156350 198487, 156269 199171, 155838 199179, 155793 199507, 156025 199683, 155865 199769, 156190 199945, 156074 200877, 155574 200932, 155541 201384, 155794 201619, 155618 201739, 155950 201896, 155956 202355, 155918 202437, 155822 202503, 155392 202543, 155282 202209, 154986 202049, 155009 204208, 154697 204731, 154597 204860, 154531 206345, 154531 206730, 154709 206890, 155004 207068, 155009 207867, 154568 208431, 154545 208856, 154783 209174, 155011 209149, 155009 210406, 154533 210922, 154539 211550, 154791 211679, 154693 211937, 155010 211971, 155015 213167, 154937 213436, 154523 214012, 154527 214767, 154815 214866, 154713 215124, 154852 215122, 154963 215175, 155008 215365, 155009 215788, 154852 216096, 154772 216378, 154655 216592, 154553 216663, 154481 217189, 154244 217355, 154057 218987, 153841 220139, 153475 221047, 153403 221373, 153567 222095, 153723 222436, 153880 222880, 154096 222863, 154372 222401, 154731 222376, 154845 222882, 154971 222942, 155173 222850, 155551 222731, 155744 222967, 155312 223228, 155308 223543, 155405 223582, 155748 223618, 155732 223942, 155483 224069, 155477 224114, 155343 224179, 155311 224412, 155725 224452, 155753 224707, 155296 225001, 155279 225195, 155734 225229, 155775 225494, 155279 225747, 155239 226258, 155275 226340, 155712 226411, 155746 226570, 155725 227034, 155272 227212, 155278 227720, 155363 227871, 154323 227897, 154163 227982, 154169 228196, 154476 228539, 154915 228085, 155888 228364, 157161 230041, 157507 229587, 158877 230906, 160240 232270, 160344 232092, 160296 231663, 160606 231375, 160669 231847, 160976 231848, 161188 231608, 161240 231472, 161602 231517, 161651 231932, 161911 231996, 162092 231574, 162362 231570, 162437 231709, 162482 232029, 162698 232064, 162885 231652, 163175 231649, 163273 232141, 163865 232250, 164094 231772, 164735 231870, 164804 232287, 164910 232295, 165033 231337, 165439 231329, 169258 231373, 170473 231460, 171810 231408, 174058 231460, 175321 231605, 175129 231896, 174828 232009, 174968 232232, 175020 232209, 175125 232269, 175228 232581, 175497 232793, 175752 233034, 175728 233086, 175775 233201, 176965 233216, 177551 233300, 178382 233280, 178578 233247, 178520 233047, 178444 232999, 178276 232982, 178151 232860, 178187 232850, 178088 232168, 179635 231816, 180018 231703, 181038 231578, 181535 231546, 181639 231365, 181448 231279, 185311 231282, 185425 230864, 185578 230824, 185944 230811, 185983 230970, 186101 231025, 186197 231168, 186304 230815, 186522 230789, 186862 230790, 187039 231044, 187162 231076, 187267 230784, 187633 230781, 187831 231036, 187981 230787, 188412 230775, 188553 231031, 189176 231068, 189291 230769, 190052 230769, 190307 231131, 191701 229720, 192655 228776, 193858 227623, 194404 227423, 194370 227064, 194018 226996, 193864 227214, 193773 227044, 193630 227356, 193226 227140, 193285 226307, 193688 226267, 193741 225950, 193503 225712, 193382 225511, 193482 224863, 193907 224855, 193948 224492, 193707 224366, 193845 224246, 193562 224090, 193682 223142, 194162 223098, 194218 222656, 193973 222429, 194157 222309, 193823 222131, 193815 221656, 193849 221574, 193966 221510, 194375 221470, 194489 221844, 194741 221958, 195016 221952, 195170 221637, 195436 221683, 195475 218291, 195477 209363, 195411 208350, 195416 203449, 195476 203452, 195476 201644, 195360 201614, 194835 201851, 194587 201578, 195013 201349, 195076 201090, 195055 201011, 194954 200951, 194636 200918, 194625 200592, 194801 200518, 195029 200336, 195043 200155, 194635 200108, 194596 199816, 195041 199603, 195078 199354, 194651 199338, 194574 199037, 194850 198881, 195100 198765, 195131 198371, 195093 198180, 194643 198119, 194606 197952, 194634 197495, 195036 197337, 195069 197203, 195003 197000, 191865 193845, 190130 192124, 190184 192679, 189886 192865, 189824 192730, 189773 192441, 189481 192409, 189316 192609, 189244 192807, 188889 192763, 188862 192502, 188794 192343, 188574 192297, 188393 192710, 188126 192715, 188019 192445, 187982 192218, 187771 192197, 187591 192640, 187303 192638, 187216 192155, 186614 192025, 186395 192497, 186255 192512, 185742 192435, 185704 192003, 185471 191952, 185331 193050, 184924 193057, 181106 193013, 179889 192926, 178553 192979, 176934 192966, 176688 192943, 175830 192922, 174794 192957, 174004 192910, 172749 192891, 172129 192894, 170629 193022, 170246 193085, 169757 191998, 169619 191415, 168929 191401, 168742 191409, 168150 191363, 167796 191396, 167938 191206, 167356 190987, 167048 190813, 166687 190550, 166266 190539) (159586 233271, 159967 233240, 160003 232967, 159924 232909) (165376 232489, 165314 232763, 167115 232710, 172995 232597, 170111 232431, 168709 232415) (195016 227564, 195990 228478, 196157 228311, 196232 227898, 196224 227711, 196092 227851, 195623 227764, 195539 227347, 195263 227297) (194314 228000, 194327 228019, 194864 227610, 194718 227579) (159481 191755, 159444 191550, 159139 191415) (178731 186109, 178897 186247, 179107 186318, 179534 186141, 179832 186169, 178460 185933)), ((204427 220837, 205250 221810, 205317 222313, 205215 222564, 204679 222605, 204583 222622, 203384 222713, 203336 222551, 203370 220240, 203486 220091))) \ No newline at end of file From 2e21232a06919970bebffccd9729e4fd997b97ef Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 5 Dec 2023 08:33:33 +0100 Subject: [PATCH 149/218] Add more stress benchmark test cases --- stress_benchmark/resources/061.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/061.wkt | 1 + stress_benchmark/resources/062.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/062.wkt | 1 + stress_benchmark/resources/063.settings | 630 +++++++++++++++++++++++ stress_benchmark/resources/063.wkt | 1 + stress_benchmark/resources/064.settings | 626 +++++++++++++++++++++++ stress_benchmark/resources/064.wkt | 1 + stress_benchmark/resources/065.settings | 631 ++++++++++++++++++++++++ stress_benchmark/resources/065.wkt | 1 + stress_benchmark/resources/066.settings | 631 ++++++++++++++++++++++++ stress_benchmark/resources/066.wkt | 1 + stress_benchmark/resources/067.settings | 629 +++++++++++++++++++++++ stress_benchmark/resources/067.wkt | 1 + 14 files changed, 4412 insertions(+) create mode 100644 stress_benchmark/resources/061.settings create mode 100644 stress_benchmark/resources/061.wkt create mode 100644 stress_benchmark/resources/062.settings create mode 100644 stress_benchmark/resources/062.wkt create mode 100644 stress_benchmark/resources/063.settings create mode 100644 stress_benchmark/resources/063.wkt create mode 100644 stress_benchmark/resources/064.settings create mode 100644 stress_benchmark/resources/064.wkt create mode 100644 stress_benchmark/resources/065.settings create mode 100644 stress_benchmark/resources/065.wkt create mode 100644 stress_benchmark/resources/066.settings create mode 100644 stress_benchmark/resources/066.wkt create mode 100644 stress_benchmark/resources/067.settings create mode 100644 stress_benchmark/resources/067.wkt diff --git a/stress_benchmark/resources/061.settings b/stress_benchmark/resources/061.settings new file mode 100644 index 0000000000..3a05b93091 --- /dev/null +++ b/stress_benchmark/resources/061.settings @@ -0,0 +1,629 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=0 +retraction_combing=noskin +material_bed_temperature=65 +ironing_inset=0.07999999999999999 +speed_support_roof=13.333333333333334 +support_bottom_wall_count=0 +machine_max_feedrate_z=299792458000 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=10 +ooze_shield_angle=60 +expand_skins_expand_distance=1.6 +support_infill_rate=0 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=1.0 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=0.0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=z_overrides_xy +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=20 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=concentric +acceleration_print=3000 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=20 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=False +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=3.91886975727153e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=False +bridge_settings_enabled=True +material_final_print_temperature=195 +machine_max_feedrate_x=299792458000 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=13.333333333333334 +wall_0_material_flow_roofing=100 +speed_travel=150 +machine_max_acceleration_z=100 +layer_height_0=0.3 +skin_preshrink=1.6 +machine_depth=220 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=1.6 +skirt_line_count=3 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.16 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.8 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=20 +retraction_enable=True +jerk_support_bottom=20 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +infill_randomize_start_location=False +jerk_wall_x=20 +cool_min_layer_time=5 +speed_layer_0=10.0 +speed_wall_x_roofing=25 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.36 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=3000 +material_print_temperature=210 +machine_disallowed_areas=[] +retract_at_layer_change=True +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=5000.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=110.0 +support_interface_material_flow=100 +support_enable=False +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=0.4 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=3000 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=4 +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.16 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=10.0 +support_bottom_distance=0 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=20 +minimum_interface_area=1.0 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.3 +meshfix_union_all_remove_holes=False +raft_interface_speed=7.5 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=3000 +layer_start_x=0.0 +support_infill_sparse_thickness=0.16 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=30 +support_tree_top_rate=10 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=33 +speed_support_infill=20 +support_offset=0.8 +magic_fuzzy_skin_outside_only=True +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=5 +material_break_speed=25 +machine_width=220 +raft_smoothing=5 +material_break_preparation_temperature=210 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=10.0 +wall_x_material_flow=100 +prime_tower_position_x=214.375 +acceleration_layer_0=3000 +retraction_amount=5 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=194.375 +jerk_support=20 +jerk_skirt_brim=20 +support_roof_density=100 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=1.0 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=concentric +xy_offset=0 +prime_tower_brim_enable=False +support_xy_distance=0.7 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=45 +roofing_pattern=concentric +machine_nozzle_size=0.4 +support_bottom_height=1 +infill_wipe_dist=0.1 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=2 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=10 +bridge_skin_density_2=75 +acceleration_support_bottom=3000 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +quality_name=Draft +raft_margin=15 +speed_print_layer_0=10.0 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=0 +zig_zaggify_infill=False +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=20 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0 +acceleration_enabled=False +smooth_spiralized_contours=True +travel_speed=120 +z_seam_corner=z_seam_corner_inner +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=220 +acceleration_skirt_brim=3000 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=65 +raft_surface_jerk=20 +machine_max_feedrate_y=299792458000 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +support_interface_height=1 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=True +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=buildplate +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +support_z_distance=0.1 +support_bottom_enable=True +retraction_combing_max_distance=0 +conical_overhang_enabled=True +remove_empty_first_layers=True +machine_height=250 +acceleration_topbottom=3000 +extruder_prime_pos_x=0 +coasting_enable=True +retraction_hop=1 +jerk_prime_tower=20 +cool_lift_head=False +support_tree_rest_preference=buildplate +material_brand=empty_brand +initial_bottom_layers=4 +wipe_retraction_prime_speed=45 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=10.0 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.8 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +machine_name=Unknown +skirt_gap=3 +bridge_fan_speed=100 +bridge_skin_speed=10 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=1 +raft_base_line_spacing=1.6 +jerk_wall_0=20 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=4 +material_print_temperature_layer_0=210 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=5 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=25 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=3000 +brim_gap=0 +jerk_topbottom=20 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=1 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=100 +print_temperature=210 +acceleration_wall=3000 +wall_material_flow=100 +raft_acceleration=3000 +raft_interface_thickness=0.24 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=1.6 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=20 +raft_surface_speed=10.0 +support_pattern=lines +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.02 +small_feature_speed_factor=50 +wipe_hop_enable=True +support_xy_distance_overhang=0.2 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=3000 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=3000 +infill_overlap_mm=0.132 +support_tree_branch_diameter=5 +support_brim_width=1.2000000000000002 +gradual_infill_steps=0 +top_skin_preshrink=1.6 +jerk_wall_x_roofing=20 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=True +machine_max_jerk_e=5.0 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=9000 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=200 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=210 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +speed_travel_layer_0=75.0 +speed_ironing=6.666666666666667 +gantry_height=30.1 +bottom_skin_expand_distance=1.6 +min_feature_size=0.1 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=1 +raft_jerk=20 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.6 +skirt_brim_extruder_nr=-1 +support_brim_line_count=3 +build_volume_temperature=28 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=20 +raft_surface_thickness=0.16 +retraction_hop_after_extruder_switch_height=1 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=False +support_top_distance=0.1 +infill=0 +bridge_skin_speed_3=10 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=65 +machine_acceleration=4000 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=20 +retraction_retract_speed=45 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +line_width=0.4 +acceleration_ironing=3000 +bridge_wall_speed=10 +support_interface_density=100 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=1 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=20.0 +machine_extruder_count=1 +acceleration_infill=3000 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.1 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=20 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=skirt +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=8.0 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=3000 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=3000 +wall_line_width_x=0.4 +acceleration_support_interface=3000 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=5 +speed_wall_0=10.0 +meshfix_fluid_motion_angle=15 +speed_support_bottom=13.333333333333334 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=50 +top_bottom_pattern_0=lines +wall_thickness=1.2 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=3000 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=True +wipe_move_distance=20 +speed_print=20 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=33.333333333333336 +raft_speed=10.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +small_skin_width=0.8 +speed_roofing=10.0 +speed_prime_tower=20 +speed_support=20 +small_hole_max_size=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=8.0 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.5 +min_bead_width=0.34 +support_interface_enable=False +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=20 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=7.5 +jerk_travel_layer_0=30.0 +bridge_skin_material_flow_3=110 +wipe_hop_speed=10 +prime_tower_enable=False +acceleration_wall_x_roofing=3000 +support_roof_enable=False +acceleration_wall_0_roofing=3000 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.16 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=50 +support_tree_bp_diameter=7.5 +skirt_brim_speed=10.0 +support_interface_skip_height=0.16 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=90 +jerk_infill=20 +infill_pattern=grid +adaptive_layer_height_variation_step=0.01 +acceleration_roofing=3000 +raft_interface_jerk=20 +retraction_speed=45 +extruder_prime_pos_y=0 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/061.wkt b/stress_benchmark/resources/061.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/061.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/062.settings b/stress_benchmark/resources/062.settings new file mode 100644 index 0000000000..d6c59d5fec --- /dev/null +++ b/stress_benchmark/resources/062.settings @@ -0,0 +1,629 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=0 +retraction_combing=noskin +material_bed_temperature=60 +ironing_inset=0.38 +speed_support_roof=40.0 +support_bottom_wall_count=0 +machine_max_feedrate_z=299792458000 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=15.0 +ooze_shield_angle=60 +expand_skins_expand_distance=1.2000000000000002 +support_infill_rate=0 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=1.0 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=0.0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=z_overrides_xy +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=20 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=3000 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=20 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=False +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=7.83773951454306e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=False +bridge_settings_enabled=False +material_final_print_temperature=205 +machine_max_feedrate_x=299792458000 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=40.0 +wall_0_material_flow_roofing=100 +speed_travel=120 +machine_max_acceleration_z=100 +layer_height_0=0.28 +skin_preshrink=1.2000000000000002 +machine_depth=235.0 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=1.2000000000000002 +skirt_line_count=1 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.32 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=1.2 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=20 +retraction_enable=True +jerk_support_bottom=20 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=10000 +infill_randomize_start_location=False +jerk_wall_x=20 +cool_min_layer_time=5 +speed_layer_0=30.0 +speed_wall_x_roofing=60.0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.336 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=3000 +material_print_temperature=205 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=5000.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=117.5 +support_interface_material_flow=100 +support_enable=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=0.4 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=3000 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=4 +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.32 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30.0 +support_bottom_distance=0.1 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=20 +minimum_interface_area=1.0 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.28 +meshfix_union_all_remove_holes=False +raft_interface_speed=22.5 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=3000 +layer_start_x=0.0 +support_infill_sparse_thickness=0.32 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=30 +support_tree_top_rate=10 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=10 +speed_support_infill=60 +support_offset=0.0 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=5 +material_break_speed=25 +machine_width=235 +raft_smoothing=5 +material_break_preparation_temperature=205 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=30.0 +wall_x_material_flow=100 +prime_tower_position_x=234 +acceleration_layer_0=3000 +retraction_amount=5 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=214.0 +jerk_support=20 +jerk_skirt_brim=20 +support_roof_density=100 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=1.0 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=concentric +xy_offset=0 +prime_tower_brim_enable=False +support_xy_distance=0.7 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=45 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=1 +infill_wipe_dist=0.1 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=0 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=15 +bridge_skin_density_2=75 +acceleration_support_bottom=3000 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +raft_margin=15 +speed_print_layer_0=30.0 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=0 +zig_zaggify_infill=False +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=20 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0 +acceleration_enabled=False +smooth_spiralized_contours=True +travel_speed=120 +z_seam_corner=z_seam_corner_inner +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=235.0 +acceleration_skirt_brim=3000 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=60 +raft_surface_jerk=20 +machine_max_feedrate_y=299792458000 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +support_interface_height=1 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +support_z_distance=0.1 +support_bottom_enable=False +retraction_combing_max_distance=10 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=285.0 +acceleration_topbottom=3000 +extruder_prime_pos_x=0 +coasting_enable=False +retraction_hop=1 +jerk_prime_tower=20 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=4 +wipe_retraction_prime_speed=45 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0.3 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=30.0 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.8 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +machine_name=Unknown +skirt_gap=3 +quality_changes_name=Armor +bridge_fan_speed=100 +bridge_skin_speed=15.0 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=1 +raft_base_line_spacing=1.6 +jerk_wall_0=20 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=3 +material_print_temperature_layer_0=205 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=True +inset_direction=inside_out +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_max_feedrate_e=299792458000 +wipe_retraction_amount=5 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=60.0 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=3000 +brim_gap=0 +jerk_topbottom=20 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=1 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=100 +print_temperature=210 +acceleration_wall=3000 +wall_material_flow=100 +raft_acceleration=3000 +raft_interface_thickness=0.48 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=1.2000000000000002 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=20 +raft_surface_speed=30.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.02 +small_feature_speed_factor=50 +wipe_hop_enable=True +support_xy_distance_overhang=0.2 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=3000 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=3000 +infill_overlap_mm=0.04 +support_tree_branch_diameter=5 +support_brim_width=1.2000000000000002 +gradual_infill_steps=0 +top_skin_preshrink=1.2000000000000002 +jerk_wall_x_roofing=20 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5.0 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=9000 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=205 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=205 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3000 +speed_travel_layer_0=60.0 +speed_ironing=20.0 +gantry_height=285.0 +bottom_skin_expand_distance=1.2000000000000002 +min_feature_size=0.1 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=1 +raft_jerk=20 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=1.2 +skirt_brim_extruder_nr=-1 +support_brim_line_count=3 +build_volume_temperature=28 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=60 +raft_surface_thickness=0.32 +retraction_hop_after_extruder_switch_height=1 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=False +support_top_distance=0.1 +infill=0 +bridge_skin_speed_3=15.0 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60 +machine_acceleration=4000 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=20 +retraction_retract_speed=45 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +line_width=0.4 +acceleration_ironing=3000 +bridge_wall_speed=15.0 +support_interface_density=100 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=1 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=20.0 +machine_extruder_count=1 +acceleration_infill=3000 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.1 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=20 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=none +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=8.0 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=3000 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=3000 +wall_line_width_x=0.4 +acceleration_support_interface=3000 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=5 +speed_wall_0=30.0 +meshfix_fluid_motion_angle=15 +speed_support_bottom=40.0 +material_id=empty_material +raft_surface_layers=1 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=50 +top_bottom_pattern_0=lines +wall_thickness=1.2 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=3000 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=60 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=33.333333333333336 +raft_speed=30.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +small_skin_width=0.8 +speed_roofing=30.0 +speed_prime_tower=60 +speed_support=60 +small_hole_max_size=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=8.0 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.5 +min_bead_width=0.34 +support_interface_enable=False +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=20 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=1.2 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=22.5 +jerk_travel_layer_0=30.0 +bridge_skin_material_flow_3=110 +wipe_hop_speed=10 +prime_tower_enable=False +acceleration_wall_x_roofing=3000 +support_roof_enable=False +acceleration_wall_0_roofing=3000 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.32 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=50 +support_tree_bp_diameter=7.5 +skirt_brim_speed=30.0 +support_interface_skip_height=0.32 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=90 +jerk_infill=20 +infill_pattern=cubic +adaptive_layer_height_variation_step=0.01 +acceleration_roofing=3000 +raft_interface_jerk=20 +retraction_speed=45 +extruder_prime_pos_y=0 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/062.wkt b/stress_benchmark/resources/062.wkt new file mode 100644 index 0000000000..e175d28303 --- /dev/null +++ b/stress_benchmark/resources/062.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((117731 159004, 118355 159216, 119096 159772, 119579 160364, 119988 161000, 120285 161602, 120591 162374, 120839 163186, 121007 164009, 121112 164827, 121135 165660, 121123 166475, 121064 167310, 120920 168160, 120772 168872, 120505 169745, 120087 170769, 119554 171662, 119032 172264, 118534 172693, 117932 172994, 117761 173021, 117503 172994, 117246 173022, 117075 172993, 116473 172692, 115948 172236, 115276 171409, 114901 170662, 114564 169932, 114256 168983, 114043 167998, 113942 167317, 113869 166505, 113867 165659, 113914 164837, 113997 164018, 114180 163180, 114413 162375, 114719 161603, 115020 161002, 115428 160366, 115903 159780, 116650 159212, 117241 158991))) \ No newline at end of file diff --git a/stress_benchmark/resources/063.settings b/stress_benchmark/resources/063.settings new file mode 100644 index 0000000000..4757dbfedc --- /dev/null +++ b/stress_benchmark/resources/063.settings @@ -0,0 +1,630 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=0 +retraction_combing=off +material_bed_temperature=60 +ironing_inset=0.355 +speed_support_roof=100.0 +support_bottom_wall_count=0 +machine_max_feedrate_z=10 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0.025000000000000022 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=37.5 +ooze_shield_angle=60 +expand_skins_expand_distance=1.15 +support_infill_rate=0 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=1.0 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=0.0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=z_overrides_xy +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=5 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=500 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=5 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=False +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=4.898587196589413e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=True +bridge_settings_enabled=False +material_final_print_temperature=185 +machine_max_feedrate_x=500 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=100.0 +wall_0_material_flow_roofing=100 +speed_travel=200 +machine_max_acceleration_z=100 +layer_height_0=0.3 +skin_preshrink=1.15 +machine_depth=220 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=1.15 +skirt_line_count=3 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.2 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.8 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=5 +retraction_enable=True +jerk_support_bottom=5 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +infill_randomize_start_location=False +jerk_wall_x=5 +cool_min_layer_time=5 +speed_layer_0=75.0 +speed_wall_x_roofing=30 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.36 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=500 +material_print_temperature=185 +machine_disallowed_areas=[] +retract_at_layer_change=True +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=1000 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=110.0 +support_interface_material_flow=100 +support_enable=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=0.4 +initial_layer_line_width_factor=150 +conical_overhang_angle=50 +acceleration_support_infill=500 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=4 +wipe_retraction_retract_speed=30 +material_anti_ooze_retracted_position=-4 +layer_height=0.2 +support_roof_pattern=concentric +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=75.0 +support_bottom_distance=0 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=5 +minimum_interface_area=1.0 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.3 +meshfix_union_all_remove_holes=False +raft_interface_speed=56.25 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=500 +layer_start_x=0.0 +support_infill_sparse_thickness=0.2 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=5 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=30.0 +speed_support_infill=150 +support_offset=0.0 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=10.0 +material_break_speed=25 +machine_width=220 +raft_smoothing=5 +material_break_preparation_temperature=185 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=75.0 +wall_x_material_flow=100 +prime_tower_position_x=217.575 +acceleration_layer_0=500 +retraction_amount=0.5 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=197.575 +jerk_support=5 +jerk_skirt_brim=5 +support_roof_density=100 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=1.0 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=concentric +xy_offset=0 +prime_tower_brim_enable=False +support_xy_distance=0.7 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=30 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=1 +infill_wipe_dist=0.0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=0 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=15 +bridge_skin_density_2=75 +acceleration_support_bottom=500 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +quality_name=Draft +raft_margin=15 +speed_print_layer_0=75.0 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=0 +zig_zaggify_infill=True +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=5 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=120 +z_seam_corner=z_seam_corner_weighted +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=220 +acceleration_skirt_brim=500 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=60 +raft_surface_jerk=5 +machine_max_feedrate_y=500 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +support_interface_height=1 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=buildplate +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.1 +support_roof_line_distance=0.4 +zig_zaggify_support=False +support_z_distance=0.1 +support_bottom_enable=True +retraction_combing_max_distance=0 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=250 +acceleration_topbottom=500 +extruder_prime_pos_x=0 +coasting_enable=False +retraction_hop=0.4 +jerk_prime_tower=5 +cool_lift_head=False +support_tree_rest_preference=buildplate +material_brand=empty_brand +initial_bottom_layers=4 +wipe_retraction_prime_speed=30 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=25 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.6666666666666666 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +machine_name=SV01 +skirt_gap=0 +quality_changes_name=SV06 +bridge_fan_speed=100 +bridge_skin_speed=37.5 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=5 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=1 +raft_base_line_spacing=1.6 +jerk_wall_0=5 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=3 +material_print_temperature_layer_0=185 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=5 +machine_max_feedrate_e=50 +wipe_retraction_amount=0.5 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=30 +infill_line_width=0.4 +wall_line_width_0=0.35 +acceleration_print_layer_0=500 +brim_gap=0 +jerk_topbottom=5 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=1000 +support_roof_height=1 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=100 +print_temperature=210 +acceleration_wall=500 +wall_material_flow=100 +raft_acceleration=500 +raft_interface_thickness=0.30000000000000004 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=1.15 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=5 +raft_surface_speed=75.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.04 +small_feature_speed_factor=50 +wipe_hop_enable=True +support_xy_distance_overhang=0.2 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=500 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=500 +infill_overlap_mm=0.12 +support_tree_branch_diameter=5 +support_brim_width=1.7999999999999998 +gradual_infill_steps=0 +top_skin_preshrink=1.15 +jerk_wall_x_roofing=5 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=500 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=185 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=185 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500 +speed_travel_layer_0=100.0 +speed_ironing=50.0 +gantry_height=250 +bottom_skin_expand_distance=1.15 +min_feature_size=0.0875 +z_seam_type=back +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.7 +extruders_enabled_count=1 +raft_jerk=5 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.8 +skirt_brim_extruder_nr=-1 +support_brim_line_count=3 +build_volume_temperature=28 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=150 +raft_surface_thickness=0.2 +retraction_hop_after_extruder_switch_height=0.4 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +support_top_distance=0.1 +infill=0 +bridge_skin_speed_3=37.5 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60 +machine_acceleration=500 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=14 +retraction_retract_speed=30 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=30 +line_width=0.4 +acceleration_ironing=500 +bridge_wall_speed=12.5 +support_interface_density=100 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.4 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=10 +machine_extruder_count=1 +acceleration_infill=500 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.1 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=5 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=skirt +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=2.6666666666666665 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=500 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=500 +wall_line_width_x=0.4 +acceleration_support_interface=500 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=0.5 +speed_wall_0=25 +meshfix_fluid_motion_angle=15 +speed_support_bottom=100.0 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=50 +top_bottom_pattern_0=lines +wall_thickness=0.8 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=500 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=150 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=33.333333333333336 +raft_speed=75.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +small_skin_width=0.8 +speed_roofing=75.0 +speed_prime_tower=150 +speed_support=150 +small_hole_max_size=0 +jerk_wall=5 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=2.6666666666666665 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.5 +min_bead_width=0.34 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=5 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=0.8 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=56.25 +jerk_travel_layer_0=5 +bridge_skin_material_flow_3=110 +wipe_hop_speed=10 +prime_tower_enable=False +acceleration_wall_x_roofing=500 +support_roof_enable=True +acceleration_wall_0_roofing=500 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.2 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=50 +support_tree_bp_diameter=7.5 +skirt_brim_speed=75.0 +support_interface_skip_height=0.2 +machine_nozzle_head_distance=3 +support_bottom_pattern=concentric +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=90 +jerk_infill=5 +infill_pattern=lines +adaptive_layer_height_variation_step=0.01 +acceleration_roofing=500 +raft_interface_jerk=5 +retraction_speed=30 +extruder_prime_pos_y=0 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/063.wkt b/stress_benchmark/resources/063.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/063.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/064.settings b/stress_benchmark/resources/064.settings new file mode 100644 index 0000000000..ad14e390a1 --- /dev/null +++ b/stress_benchmark/resources/064.settings @@ -0,0 +1,626 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=20 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=10 +retraction_combing=noskin +material_bed_temperature=65 +ironing_inset=0.3 +speed_support_roof=25.0 +support_bottom_wall_count=0 +machine_max_feedrate_z=10 +wall_transition_angle=30 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=0 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=12.5 +ooze_shield_angle=60 +expand_skins_expand_distance=0.4 +support_infill_rate=20 +ironing_flow=14 +cool_fan_enabled=True +minimum_bottom_area=2 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=85 +minimum_support_area=0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=xy_overrides_z +material_no_load_move_factor=0.940860215 +material_flow=90 +jerk_roofing=8 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=concentric +acceleration_print=400 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=8 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=True +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=9.797174393178826e-18 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=False +bridge_settings_enabled=False +material_final_print_temperature=185 +machine_max_feedrate_x=500 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=25.0 +wall_0_material_flow_roofing=85.0 +speed_travel=100 +machine_max_acceleration_z=100 +layer_height_0=0.28 +skin_preshrink=0.4 +machine_depth=235 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=0.4 +skirt_line_count=3 +skin_monotonic=True +skin_line_width=0.4 +material_break_preparation_speed=2 +infill_sparse_thickness=0.16 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.4 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=8 +retraction_enable=True +jerk_support_bottom=8 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +infill_randomize_start_location=False +jerk_wall_x=8 +cool_min_layer_time=10 +speed_layer_0=10 +speed_wall_x_roofing=25 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.336 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=400 +material_print_temperature=185 +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=250 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=117.5 +support_interface_material_flow=90 +support_enable=False +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=2.4000240002400024 +initial_layer_line_width_factor=150 +conical_overhang_angle=50 +acceleration_support_infill=400 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=2 +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.04 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25.0 +support_bottom_distance=0.08 +material_shrinkage_percentage=100.0 +wall_distribution_count=2 +jerk_layer_0=2 +minimum_interface_area=2 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=2 +meshfix_union_all_remove_holes=False +raft_interface_speed=18.75 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_feeder_wheel_diameter=10.0 +skin_material_flow=85 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=400 +layer_start_x=0.0 +support_infill_sparse_thickness=0.04 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=8 +support_tree_top_rate=30 +ironing_monotonic=True +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=False +infill_overlap=30.0 +speed_support_infill=40 +support_offset=0.0 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=10.0 +material_break_speed=25 +machine_width=235 +raft_smoothing=5 +material_break_preparation_temperature=185 +material_alternate_walls=True +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=25.0 +wall_x_material_flow=85.0 +prime_tower_position_x=226.0 +acceleration_layer_0=400 +retraction_amount=5 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=206.0 +jerk_support=8 +jerk_skirt_brim=8 +support_roof_density=33.333 +roofing_line_width=0.4 +material_flow_layer_0=85 +minimum_roof_area=2 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=grid +xy_offset=0 +prime_tower_brim_enable=True +support_xy_distance=0.0 +acceleration_travel_enabled=True +brim_outside_only=False +retraction_prime_speed=45 +roofing_pattern=concentric +machine_nozzle_size=0.4 +support_bottom_height=0.16 +infill_wipe_dist=0.0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=1 +support_infill_extruder_nr=0 +alternate_carve_order=False +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=100 +bridge_skin_density_2=75 +acceleration_support_bottom=400 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +raft_margin=15 +speed_print_layer_0=10 +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=45 +ooze_shield_dist=2 +support_line_distance=2.0 +zig_zaggify_infill=True +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=8 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=2.0 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=235 +acceleration_skirt_brim=400 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=65 +raft_surface_jerk=8 +machine_max_feedrate_y=500 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +support_interface_height=0.16 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.8 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=1.4 +support_roof_line_distance=2.4000240002400024 +zig_zaggify_support=False +support_z_distance=0.08 +support_bottom_enable=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=250 +acceleration_topbottom=400 +extruder_prime_pos_x=0 +coasting_enable=True +retraction_hop=0.2 +jerk_prime_tower=8 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=2 +wipe_retraction_prime_speed=45 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=20 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.25 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +skirt_gap=10.0 +bridge_fan_speed=100 +bridge_skin_speed=12.5 +infill_mesh_order=0 +support_roof_material_flow=90 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=2 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=80 +alternate_extra_perimeter=True +wall_0_material_flow_layer_0=85 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=0 +raft_base_line_spacing=1.6 +jerk_wall_0=8 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=1 +material_print_temperature_layer_0=185 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=False +inset_direction=outside_in +wall_x_material_flow_roofing=85.0 +support_tree_tip_diameter=0.8 +jerk_ironing=8 +machine_max_feedrate_e=50 +wipe_retraction_amount=5 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=25 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=400 +brim_gap=0.8 +jerk_topbottom=8 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=250 +support_roof_height=0.16 +cool_fan_speed_min=100 +support_material_flow=90 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.1 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=33.333 +print_temperature=210 +acceleration_wall=400 +wall_material_flow=85.0 +raft_acceleration=400 +raft_interface_thickness=0.06 +support_meshes_present=True +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=0.4 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=8 +raft_surface_speed=25.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0 +small_feature_speed_factor=50 +wipe_hop_enable=False +support_xy_distance_overhang=0.4 +default_material_bed_temperature=50 +fill_outline_gaps=False +acceleration_wall_0=400 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=90 +prime_tower_flow=90 +acceleration_wall_x=400 +infill_overlap_mm=0 +support_tree_branch_diameter=5 +support_brim_width=4 +gradual_infill_steps=0 +top_skin_preshrink=0.4 +jerk_wall_x_roofing=8 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5 +top_layers=4 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=500 +support_roof_offset=0.0 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=185 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=185 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=400 +speed_travel_layer_0=50 +speed_ironing=10 +gantry_height=25 +bottom_skin_expand_distance=0.4 +min_feature_size=0 +z_seam_type=shortest +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=1.5 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=1 +raft_jerk=8 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.4 +skirt_brim_extruder_nr=-1 +support_brim_line_count=7 +build_volume_temperature=28 +wall_0_wipe_dist=0.0 +switch_extruder_prime_speed=20 +speed_infill=75 +raft_surface_thickness=0.04 +retraction_hop_after_extruder_switch_height=0.2 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +support_top_distance=0.2 +infill=0 +bridge_skin_speed_3=12.5 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=70 +machine_acceleration=500 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=90 +brim_line_count=14 +retraction_retract_speed=45 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=concentric +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +line_width=0.4 +acceleration_ironing=400 +bridge_wall_speed=10 +support_interface_density=33.333 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=10 +machine_extruder_count=1 +acceleration_infill=400 +roofing_material_flow=85 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.06 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=8 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=brim +speed_z_hop=5 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=0.4 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.01 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=inclusive +mesh_position_z=0 +raft_surface_acceleration=400 +anti_overhang_mesh=False +infill_material_flow=90 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.0 +raft_base_acceleration=400 +wall_line_width_x=0.4 +acceleration_support_interface=400 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +speed_wall_0=20 +meshfix_fluid_motion_angle=15 +speed_support_bottom=25.0 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=60 +top_bottom_pattern_0=concentric +wall_thickness=0.8 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=400 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=True +wipe_move_distance=20 +speed_print=50 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=40.0 +raft_speed=25.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +small_skin_width=0.8 +speed_roofing=25.0 +speed_prime_tower=25.0 +speed_support=40 +small_hole_max_size=0 +jerk_wall=8 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=180 +cross_infill_pocket_size=0.4 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.25 +min_bead_width=0.2 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=8 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=0.4 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=18.75 +jerk_travel_layer_0=8 +bridge_skin_material_flow_3=110 +wipe_hop_speed=5 +prime_tower_enable=False +acceleration_wall_x_roofing=400 +support_roof_enable=True +acceleration_wall_0_roofing=400 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.04 +support=0 +support_mesh=True +machine_firmware_retract=False +support_tree_angle=60 +support_tree_bp_diameter=7.5 +skirt_brim_speed=30 +support_interface_skip_height=0.04 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=100 +jerk_infill=8 +infill_pattern=concentric +adaptive_layer_height_variation_step=0.02 +acceleration_roofing=400 +raft_interface_jerk=8 +retraction_speed=45 +extruder_prime_pos_y=0 +wall_0_material_flow=85.0 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/064.wkt b/stress_benchmark/resources/064.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/064.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file diff --git a/stress_benchmark/resources/065.settings b/stress_benchmark/resources/065.settings new file mode 100644 index 0000000000..e82e8ae600 --- /dev/null +++ b/stress_benchmark/resources/065.settings @@ -0,0 +1,631 @@ +material_maximum_park_duration=7200 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=True +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=40 +retraction_combing=no_outer_surfaces +material_bed_temperature=60 +ironing_inset=0.2375 +speed_support_roof=20 +support_bottom_wall_count=1 +machine_max_feedrate_z=40 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0.015 +xy_offset_layer_0=-0.010000000000000002 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=20 +ooze_shield_angle=60 +expand_skins_expand_distance=0.75 +support_infill_rate=80 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=1.0 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=95.0 +minimum_support_area=0.0 +support_roof_wall_count=1 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=z_overrides_xy +material_no_load_move_factor=0.91 +material_flow=100 +jerk_roofing=20 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=3500 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=20 +support_tower_diameter=3.0 +carve_multiple_volumes=True +travel_avoid_supports=False +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=4.898587196589413e-17 +material_break_temperature=60 +support_extruder_nr=1 +jerk_enabled=True +bridge_settings_enabled=True +material_final_print_temperature=175 +machine_max_feedrate_x=300 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=20 +wall_0_material_flow_roofing=100 +speed_travel=150 +machine_max_acceleration_z=100 +layer_height_0=0.2 +skin_preshrink=0.75 +machine_depth=240 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=0.75 +skirt_line_count=1 +skin_monotonic=False +skin_line_width=0.25 +material_break_preparation_speed=50 +infill_sparse_thickness=0.1 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=False +brim_replaces_support=False +skirt_brim_minimal_length=2000 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=0.72 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=20 +retraction_enable=True +jerk_support_bottom=20 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=4 +travel_avoid_distance=0.4 +cool_min_layer_time_fan_speed_max=5 +machine_max_acceleration_e=10000 +infill_randomize_start_location=False +jerk_wall_x=20 +cool_min_layer_time=0 +speed_layer_0=10.0 +speed_wall_x_roofing=25 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.3 +retraction_hop_only_when_collides=True +infill_support_angle=40 +acceleration_prime_tower=2000 +material_print_temperature=190 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=0.4 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=1 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=1428.5714285714287 +material_bed_temp_wait=True +support_tower_roof_angle=0 +raft_interface_fan_speed=25.0 +z_seam_x=165.0 +support_interface_material_flow=95.0 +support_enable=True +extruder_prime_pos_z=2 +machine_heated_build_volume=True +support_bottom_line_distance=0.4 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=2000 +min_wall_line_width=0.2125 +draft_shield_height_limitation=full +bottom_layers=8 +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.1 +support_roof_pattern=zigzag +raft_interface_extruder_nr=1 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=25 +support_bottom_distance=0 +material_shrinkage_percentage=100.2 +wall_distribution_count=1 +jerk_layer_0=20 +minimum_interface_area=1.0 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +raft_interface_speed=17.5 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_feeder_wheel_diameter=10.0 +skin_material_flow=95.0 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=2000 +layer_start_x=330.0 +support_infill_sparse_thickness=0.2 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=20 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.8 +z_seam_position=back +raft_surface_fan_speed=50 +support_mesh_drop_down=True +infill_overlap=10 +speed_support_infill=25 +machine_gcode_flavor=Griffin +support_offset=0.8 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=20 +material_break_speed=25 +machine_width=330 +raft_smoothing=5 +material_break_preparation_temperature=210 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0.4 +speed_topbottom=20 +wall_x_material_flow=100 +prime_tower_position_x=301.2 +acceleration_layer_0=1000 +retraction_amount=6.5 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=213.2 +jerk_support=20 +jerk_skirt_brim=20 +support_roof_density=100 +roofing_line_width=0.25 +material_flow_layer_0=100 +minimum_roof_area=1.0 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=zigzag +xy_offset=-0.010000000000000002 +prime_tower_brim_enable=True +support_xy_distance=0.7 +acceleration_travel_enabled=False +brim_outside_only=True +retraction_prime_speed=45 +roofing_pattern=lines +machine_nozzle_size=0.25 +support_bottom_height=0.2 +infill_wipe_dist=0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=1 +support_infill_extruder_nr=1 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=20 +bridge_skin_density_2=100 +acceleration_support_bottom=100 +bridge_skin_density=80 +raft_airgap=0 +mold_angle=40 +quality_name=Fine +raft_margin=15 +speed_print_layer_0=10.0 +roofing_angles=[] +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=0.5 +zig_zaggify_infill=True +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.2 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0 +jerk_support_interface=20 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0.5 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=150 +z_seam_corner=z_seam_corner_none +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=240 +acceleration_skirt_brim=1000 +skin_no_small_gaps_heuristic=False +wall_line_width=0.25 +gradual_support_infill_steps=2 +machine_heated_bed=True +print_bed_temperature=60 +raft_surface_jerk=20 +machine_max_feedrate_y=300 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +support_interface_height=0.2 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.6000000000000001 +material_shrinkage_percentage_xy=100.2 +wipe_pause=0 +speed_slowdown_layers=1 +bridge_wall_min_length=2.1 +support_roof_line_distance=0.4 +zig_zaggify_support=True +support_z_distance=0 +support_bottom_enable=True +retraction_combing_max_distance=15 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=300 +acceleration_topbottom=1000 +extruder_prime_pos_x=-3 +coasting_enable=False +retraction_hop=0.2 +jerk_prime_tower=20 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=8 +wipe_retraction_prime_speed=45 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +prime_tower_size=20 +speed_wall_0_roofing=20 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.5 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=1 +skirt_gap=3 +quality_changes_name=empty +bridge_fan_speed=100 +bridge_skin_speed=20 +infill_mesh_order=0 +support_roof_material_flow=95.0 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=95 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=110.00000000000001 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=0 +raft_base_line_spacing=1.6 +jerk_wall_0=20 +machine_nozzle_heat_up_speed=1.4 +cool_fan_speed_0=100 +wall_line_count=3 +material_print_temperature_layer_0=190 +raft_surface_extruder_nr=1 +relative_extrusion=False +infill_before_walls=True +inset_direction=outside_in +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_max_feedrate_e=45 +wipe_retraction_amount=6.5 +support_use_towers=True +support_bottom_offset=0.8 +speed_wall_x=25 +infill_line_width=0.25 +wall_line_width_0=0.25 +acceleration_print_layer_0=1000 +brim_gap=0.14 +jerk_topbottom=20 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=0.2 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=1 +brim_width=3 +support_bottom_density=100 +print_temperature=200 +acceleration_wall=1500 +wall_material_flow=100 +raft_acceleration=3500 +raft_interface_thickness=0.2 +support_meshes_present=False +dual=0 +jerk_travel_enabled=False +support_interface_wall_count=1 +bridge_wall_material_flow=100 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=0.75 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.25 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=20 +raft_surface_speed=20 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.25 +skin_overlap_mm=0.05 +small_feature_speed_factor=50 +wipe_hop_enable=True +support_xy_distance_overhang=0.2 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=1500 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=95.0 +material_anti_ooze_retraction_speed=50 +support_bottom_material_flow=95.0 +prime_tower_flow=100 +acceleration_wall_x=1500 +infill_overlap_mm=0.025 +support_tree_branch_diameter=5 +support_brim_width=1.2000000000000002 +gradual_infill_steps=0 +top_skin_preshrink=0.75 +jerk_wall_x_roofing=20 +machine_min_cool_heat_time_window=15 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5.0 +top_layers=8 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=100 +machine_max_acceleration_x=9000 +support_roof_offset=0.8 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=180 +layer_0_z_overlap=0.0 +material_adhesion_tendency=0 +cool_min_temperature=180 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3500 +speed_travel_layer_0=150 +speed_ironing=13.333333333333334 +gantry_height=55 +bottom_skin_expand_distance=0.75 +min_feature_size=0.0625 +z_seam_type=sharpest_corner +prime_tower_base_size=3 +material_print_temp_wait=True +retraction_min_travel=0.7 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.5 +extruders_enabled_count=2 +raft_jerk=20 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=0.72 +skirt_brim_extruder_nr=1 +support_brim_line_count=3 +build_volume_temperature=28 +wall_0_wipe_dist=0.25 +switch_extruder_prime_speed=20 +speed_infill=30 +raft_surface_thickness=0.1 +retraction_hop_after_extruder_switch_height=0.2 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=True +support_top_distance=0 +infill=0 +bridge_skin_speed_3=20 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60 +machine_acceleration=3000 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.25 +skirt_brim_material_flow=100 +brim_line_count=8 +retraction_retract_speed=45 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +line_width=0.25 +acceleration_ironing=1000 +bridge_wall_speed=20 +support_interface_density=100 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=20.0 +machine_extruder_count=2 +acceleration_infill=3500 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.1 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +jerk_support_infill=20 +infill_offset_x=0 +min_odd_wall_line_width=0.2125 +adhesion_type=brim +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=1 +speed_equalize_flow_width_factor=110.0 +infill_line_distance=2.5 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=0 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=3500 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=0.8 +raft_base_acceleration=3500 +wall_line_width_x=0.25 +acceleration_support_interface=1500 +layer_start_y=228.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=100 +retraction_extrusion_window=1 +speed_wall_0=20 +meshfix_fluid_motion_angle=15 +speed_support_bottom=20 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.0625 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=1 +interlocking_enable=False +material_diameter=2.85 +bridge_enable_more_layers=False +lightning_infill_prune_angle=40 +resolution=0 +support_angle=45 +top_bottom_pattern_0=lines +wall_thickness=0.75 +wall_transition_length=0.25 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=1500 +support_tree_max_diameter=25 +min_even_wall_line_width=0.2125 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=30 +infill_wall_line_count=0 +bridge_fan_speed_3=100 +support_tree_angle_slow=30.0 +raft_speed=15 +support_bottom_extruder_nr=1 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +small_skin_width=0.5 +speed_roofing=20 +speed_prime_tower=20 +speed_support=25 +small_hole_max_size=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=0.9 +material_standby_temperature=100 +cross_infill_pocket_size=2.5 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.5 +min_bead_width=0.2125 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=20 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=1 +infill_support_enabled=False +top_bottom_thickness=0.72 +material_guid=506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9 +platform_adhesion=0 +raft_base_speed=15 +jerk_travel_layer_0=20.0 +bridge_skin_material_flow_3=95.0 +wipe_hop_speed=10 +prime_tower_enable=True +acceleration_wall_x_roofing=1500 +support_roof_enable=True +acceleration_wall_0_roofing=1500 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=95.0 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=0.65 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=45 +skin_angles=[] +support_tree_bp_diameter=7.5 +skirt_brim_speed=12.5 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=zigzag +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=25 +jerk_infill=20 +infill_pattern=grid +adaptive_layer_height_variation_step=0.01 +acceleration_roofing=1000 +raft_interface_jerk=20 +retraction_speed=45 +extruder_prime_pos_y=6 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/065.wkt b/stress_benchmark/resources/065.wkt new file mode 100644 index 0000000000..2bd28248dc --- /dev/null +++ b/stress_benchmark/resources/065.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((274498 215057, 273516 215059, 273386 154809, 274368 154807))) \ No newline at end of file diff --git a/stress_benchmark/resources/066.settings b/stress_benchmark/resources/066.settings new file mode 100644 index 0000000000..3b324482ff --- /dev/null +++ b/stress_benchmark/resources/066.settings @@ -0,0 +1,631 @@ +material_maximum_park_duration=7200 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=True +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=40 +retraction_combing=no_outer_surfaces +material_bed_temperature=60 +ironing_inset=0.38 +speed_support_roof=20 +support_bottom_wall_count=1 +machine_max_feedrate_z=40 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=-0.09 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=35 +ooze_shield_angle=60 +expand_skins_expand_distance=0.8 +support_infill_rate=80 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=1.0 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=95.0 +minimum_support_area=0.0 +support_roof_wall_count=1 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=z_overrides_xy +material_no_load_move_factor=0.93 +material_flow=100 +jerk_roofing=20 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=3500 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=20 +support_tower_diameter=3.0 +carve_multiple_volumes=True +travel_avoid_supports=False +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=7.34788079488412e-17 +material_break_temperature=60 +support_extruder_nr=1 +jerk_enabled=True +bridge_settings_enabled=True +material_final_print_temperature=195 +machine_max_feedrate_x=300 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=20 +wall_0_material_flow_roofing=100 +speed_travel=150 +machine_max_acceleration_z=100 +layer_height_0=0.2 +skin_preshrink=0.8 +machine_depth=240 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=0.8 +skirt_line_count=1 +skin_monotonic=False +skin_line_width=0.4 +material_break_preparation_speed=50 +infill_sparse_thickness=0.1 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=False +brim_replaces_support=True +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=215 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=1.2 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=20 +retraction_enable=True +jerk_support_bottom=20 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=6 +travel_avoid_distance=3 +cool_min_layer_time_fan_speed_max=11 +machine_max_acceleration_e=10000 +infill_randomize_start_location=False +jerk_wall_x=20 +cool_min_layer_time=6 +speed_layer_0=16.0 +speed_wall_x_roofing=40 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.3 +retraction_hop_only_when_collides=True +infill_support_angle=40 +acceleration_prime_tower=2000 +material_print_temperature=210 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.4 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=0.4 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=1428.5714285714287 +material_bed_temp_wait=True +support_tower_roof_angle=0 +raft_interface_fan_speed=50.0 +z_seam_x=165.0 +support_interface_material_flow=95.0 +support_enable=True +extruder_prime_pos_z=2 +machine_heated_build_volume=True +support_bottom_line_distance=0.4 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=2000 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=12 +wipe_retraction_retract_speed=45 +material_anti_ooze_retracted_position=-4 +layer_height=0.1 +support_roof_pattern=zigzag +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=40 +support_bottom_distance=0 +material_shrinkage_percentage=100.3 +wall_distribution_count=1 +jerk_layer_0=20 +minimum_interface_area=1.0 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=True +cool_fan_full_at_height=0.2 +meshfix_union_all_remove_holes=False +raft_interface_speed=25.0 +support_tree_branch_reach_limit=30 +support_structure=normal +machine_feeder_wheel_diameter=10.0 +skin_material_flow=95.0 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=2000 +layer_start_x=330.0 +support_infill_sparse_thickness=0.2 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=20 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.8 +z_seam_position=back +raft_surface_fan_speed=100 +support_mesh_drop_down=True +infill_overlap=10 +speed_support_infill=25 +machine_gcode_flavor=Griffin +support_offset=0.8 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=20 +material_break_speed=25 +machine_width=330 +raft_smoothing=5 +material_break_preparation_temperature=230 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0.4 +speed_topbottom=35 +wall_x_material_flow=100 +prime_tower_position_x=300.8 +acceleration_layer_0=1000 +retraction_amount=6.5 +material_break_preparation_retracted_position=-14 +prime_tower_position_y=212.8 +jerk_support=20 +jerk_skirt_brim=20 +support_roof_density=100 +roofing_line_width=0.4 +material_flow_layer_0=100 +minimum_roof_area=1.0 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=zigzag +xy_offset=-0.010000000000000002 +prime_tower_brim_enable=False +support_xy_distance=0.7 +acceleration_travel_enabled=False +brim_outside_only=True +retraction_prime_speed=45 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=0.2 +infill_wipe_dist=0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=1 +support_infill_extruder_nr=1 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=15 +bridge_skin_density_2=100 +acceleration_support_bottom=100 +bridge_skin_density=80 +raft_airgap=0.3 +mold_angle=40 +quality_name=Fine +raft_margin=15 +speed_print_layer_0=16.0 +roofing_angles=[] +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=2 +ooze_shield_dist=2 +support_line_distance=0.5 +zig_zaggify_infill=True +support_interface_line_width=0.4 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.3 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0 +jerk_support_interface=20 +raft_surface_line_width=0.4 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0.5 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=150 +z_seam_corner=z_seam_corner_none +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=240 +acceleration_skirt_brim=1000 +skin_no_small_gaps_heuristic=False +wall_line_width=0.4 +gradual_support_infill_steps=2 +machine_heated_bed=True +print_bed_temperature=60 +raft_surface_jerk=20 +machine_max_feedrate_y=300 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=True +wall_0_extruder_nr=-1 +support_interface_height=0.2 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=everywhere +raft_interface_line_width=0.6000000000000001 +material_shrinkage_percentage_xy=100.3 +wipe_pause=0 +speed_slowdown_layers=1 +bridge_wall_min_length=2.1 +support_roof_line_distance=0.4 +zig_zaggify_support=True +support_z_distance=0 +support_bottom_enable=True +retraction_combing_max_distance=15 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=300 +acceleration_topbottom=1000 +extruder_prime_pos_x=-3 +coasting_enable=False +retraction_hop=2 +jerk_prime_tower=20 +cool_lift_head=False +support_tree_rest_preference=graceful +material_brand=empty_brand +initial_bottom_layers=12 +wipe_retraction_prime_speed=45 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +prime_tower_size=20 +speed_wall_0_roofing=32 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.8 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=True +adhesion_extruder_nr=-1 +skirt_gap=3 +quality_changes_name=empty +bridge_fan_speed=100 +bridge_skin_speed=35 +infill_mesh_order=0 +support_roof_material_flow=95.0 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=95 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=110.00000000000001 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=0 +raft_base_line_spacing=1.6 +jerk_wall_0=20 +machine_nozzle_heat_up_speed=1.6 +cool_fan_speed_0=100 +wall_line_count=2 +material_print_temperature_layer_0=210 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=True +inset_direction=outside_in +wall_x_material_flow_roofing=100 +support_tree_tip_diameter=0.8 +jerk_ironing=20 +machine_max_feedrate_e=45 +wipe_retraction_amount=6.5 +support_use_towers=True +support_bottom_offset=0.8 +speed_wall_x=40 +infill_line_width=0.4 +wall_line_width_0=0.4 +acceleration_print_layer_0=1000 +brim_gap=0.14 +jerk_topbottom=20 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=5000 +support_roof_height=0.2 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=1 +brim_width=7 +support_bottom_density=100 +print_temperature=200 +acceleration_wall=1500 +wall_material_flow=100 +raft_acceleration=3500 +raft_interface_thickness=0.2 +support_meshes_present=False +dual=0 +jerk_travel_enabled=False +support_interface_wall_count=1 +bridge_wall_material_flow=100 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=0.8 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.4 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=20 +raft_surface_speed=35 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.4 +skin_overlap_mm=0.08 +small_feature_speed_factor=50 +wipe_hop_enable=True +support_xy_distance_overhang=0.2 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=1500 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=95.0 +material_anti_ooze_retraction_speed=50 +support_bottom_material_flow=95.0 +prime_tower_flow=100 +acceleration_wall_x=1500 +infill_overlap_mm=0.04 +support_tree_branch_diameter=5 +support_brim_width=1.2000000000000002 +gradual_infill_steps=0 +top_skin_preshrink=0.8 +jerk_wall_x_roofing=20 +machine_min_cool_heat_time_window=15 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5.0 +top_layers=12 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=100 +machine_max_acceleration_x=9000 +support_roof_offset=0.8 +support_bottom_line_width=0.4 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=200 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=200 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=3500 +speed_travel_layer_0=150 +speed_ironing=23.333333333333332 +gantry_height=55 +bottom_skin_expand_distance=0.8 +min_feature_size=0.1 +z_seam_type=sharpest_corner +prime_tower_base_size=3 +material_print_temp_wait=True +retraction_min_travel=0.8 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.8 +extruders_enabled_count=2 +raft_jerk=20 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=1.2 +skirt_brim_extruder_nr=-1 +support_brim_line_count=3 +build_volume_temperature=24 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=45 +raft_surface_thickness=0.1 +retraction_hop_after_extruder_switch_height=2 +machine_max_acceleration_y=9000 +optimize_wall_printing_order=True +support_top_distance=0 +infill=0 +bridge_skin_speed_3=35 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60 +machine_acceleration=3000 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.4 +skirt_brim_material_flow=100 +brim_line_count=18 +retraction_retract_speed=45 +raft_surface_line_spacing=0.4 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=45 +line_width=0.4 +acceleration_ironing=1000 +bridge_wall_speed=35 +support_interface_density=100 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=20.0 +machine_extruder_count=2 +acceleration_infill=3500 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.1 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=4 +ironing_line_spacing=0.1 +jerk_support_infill=20 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=skirt +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=110.0 +infill_line_distance=8.0 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.04 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=0 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=3500 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=0.8 +raft_base_acceleration=3500 +wall_line_width_x=0.4 +acceleration_support_interface=1500 +layer_start_y=228.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=100 +retraction_extrusion_window=1 +speed_wall_0=32 +meshfix_fluid_motion_angle=15 +speed_support_bottom=20 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=1 +interlocking_enable=False +material_diameter=2.85 +bridge_enable_more_layers=False +lightning_infill_prune_angle=40 +resolution=0 +support_angle=45 +top_bottom_pattern_0=lines +wall_thickness=0.8 +wall_transition_length=0.4 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=1500 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=True +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=45 +infill_wall_line_count=0 +bridge_fan_speed_3=100 +support_tree_angle_slow=30.0 +raft_speed=15 +support_bottom_extruder_nr=1 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=False +small_skin_width=0.8 +speed_roofing=35 +speed_prime_tower=35 +speed_support=25 +small_hole_max_size=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=0.75 +material_standby_temperature=115 +cross_infill_pocket_size=8.0 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.5 +min_bead_width=0.34 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=20 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=1 +infill_support_enabled=False +top_bottom_thickness=1.2 +material_guid=851427a0-0c9a-4d7c-a9a8-5cc92f84af1f +platform_adhesion=0 +raft_base_speed=15 +jerk_travel_layer_0=20.0 +bridge_skin_material_flow_3=95.0 +wipe_hop_speed=10 +prime_tower_enable=False +acceleration_wall_x_roofing=1500 +support_roof_enable=True +acceleration_wall_0_roofing=1500 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=95.0 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1.0 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.1 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=45 +skin_angles=[] +support_tree_bp_diameter=7.5 +skirt_brim_speed=16.0 +support_interface_skip_height=0.1 +machine_nozzle_head_distance=3 +support_bottom_pattern=zigzag +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.4 +bridge_sparse_infill_max_density=0 +retraction_count_max=25 +jerk_infill=20 +infill_pattern=triangles +adaptive_layer_height_variation_step=0.01 +acceleration_roofing=1000 +raft_interface_jerk=20 +retraction_speed=45 +extruder_prime_pos_y=6 +wall_0_material_flow=100 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/066.wkt b/stress_benchmark/resources/066.wkt new file mode 100644 index 0000000000..d6e42e98b8 --- /dev/null +++ b/stress_benchmark/resources/066.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((165244 101743, 166738 102904, 168150 104230, 169007 105191, 169408 105703, 170133 106774, 170747 107915, 171234 109121, 171233 109121, 171566 110378, 171739 111665, 171739 112964, 171566 114255, 171420 114890, 171007 116119, 170456 117295, 170134 117856, 169408 118928, 169007 119437, 168148 120402, 166736 121725, 165241 122886, 163055 124308, 160799 125534, 159056 126359, 154895 128035, 151213 129265, 151213 127699, 154394 126638, 158466 124997, 158467 124997, 160131 124206, 162297 123030, 162298 123029, 164381 121675, 165773 120594, 165775 120593, 167084 119362, 167868 118486, 167869 118485, 168206 118053, 168874 117070, 168875 117069, 169138 116606, 169627 115567, 169627 115565, 169988 114484, 170105 113988, 170106 113986, 170256 112867, 170256 111761, 170108 110664, 170108 110662, 169823 109589, 169822 109588, 169403 108545, 169403 108544, 168863 107543, 168862 107542, 168206 106577, 167869 106146, 167868 106145, 167083 105265, 165773 104035, 165772 104034, 164378 102952, 163199 102179, 163200 100401))) \ No newline at end of file diff --git a/stress_benchmark/resources/067.settings b/stress_benchmark/resources/067.settings new file mode 100644 index 0000000000..8fead7495b --- /dev/null +++ b/stress_benchmark/resources/067.settings @@ -0,0 +1,629 @@ +material_maximum_park_duration=300 +support_bottom_stair_step_min_slope=10.0 +wipe_brush_pos_x=100 +extruder_prime_pos_abs=False +machine_scale_fan_speed_zero_to_one=False +support_zag_skip_count=0 +retraction_combing=noskin +material_bed_temperature=60.0 +ironing_inset=0.4275 +speed_support_roof=45 +support_bottom_wall_count=0 +machine_max_feedrate_z=10 +wall_transition_angle=10 +coasting_min_volume=0.8 +wall_0_inset=0 +xy_offset_layer_0=-0.15 +support_tree_limit_branch_reach=True +bridge_skin_speed_2=22.5 +ooze_shield_angle=60 +expand_skins_expand_distance=1.45 +support_infill_rate=0 +ironing_flow=10.0 +cool_fan_enabled=True +minimum_bottom_area=10 +skirt_height=3 +material_extrusion_cool_down_speed=0.7 +wall_x_material_flow_layer_0=100 +minimum_support_area=0 +support_roof_wall_count=0 +lightning_infill_overhang_angle=40 +support_xy_overrides_z=xy_overrides_z +material_no_load_move_factor=0.940860215 +material_flow=100 +jerk_roofing=20 +material_is_support_material=False +support_fan_enable=False +machine_buildplate_type=glass +ironing_pattern=zigzag +acceleration_print=500.0 +machine_minimum_feedrate=0.0 +material_surface_energy=100 +jerk_wall_0_roofing=20 +support_tower_diameter=3.0 +carve_multiple_volumes=False +travel_avoid_supports=True +interlocking_beam_layer_count=2 +min_skin_width_for_expansion=5.143516556418884e-17 +material_break_temperature=50 +support_extruder_nr=0 +jerk_enabled=True +bridge_settings_enabled=False +material_final_print_temperature=205.0 +machine_max_feedrate_x=500 +clean_between_layers=False +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +speed_support_interface=45 +wall_0_material_flow_roofing=90 +speed_travel=150.0 +machine_max_acceleration_z=100 +layer_height_0=0.28 +skin_preshrink=1.45 +machine_depth=235 +small_skin_on_surface=False +nozzle_disallowed_areas=[] +bottom_skin_preshrink=1.45 +skirt_line_count=3 +skin_monotonic=False +skin_line_width=0.45 +material_break_preparation_speed=2 +infill_sparse_thickness=0.3 +wipe_retraction_extra_prime_amount=0 +coasting_speed=90 +nozzle_offsetting_for_disallowed_areas=True +brim_replaces_support=False +skirt_brim_minimal_length=250 +cooling=0 +default_material_print_temperature=200 +meshfix_maximum_extrusion_area_deviation=50000 +top_thickness=1.12 +group_outer_walls=True +cool_fan_speed=100 +raft_base_jerk=20 +retraction_enable=True +jerk_support_bottom=20 +skin_outline_count=1 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +cool_min_speed=10 +travel_avoid_distance=0.625 +cool_min_layer_time_fan_speed_max=10 +machine_max_acceleration_e=5000 +infill_randomize_start_location=False +jerk_wall_x=20 +cool_min_layer_time=10 +speed_layer_0=25 +speed_wall_x_roofing=65 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +raft_base_thickness=0.336 +retraction_hop_only_when_collides=False +infill_support_angle=40 +acceleration_prime_tower=500.0 +material_print_temperature=205.0 +machine_disallowed_areas=[] +retract_at_layer_change=False +support_roof_line_width=0.45 +travel=0 +meshfix_union_all=True +gradual_support_infill_step_height=1 +machine_steps_per_mm_e=1600 +raft_interface_layers=1 +raft_base_extruder_nr=0 +wipe_retraction_enable=True +switch_extruder_retraction_amount=16 +acceleration_travel_layer_0=500.0 +material_bed_temp_wait=True +support_tower_roof_angle=65 +raft_interface_fan_speed=0 +z_seam_x=117.5 +support_interface_material_flow=100 +support_enable=True +extruder_prime_pos_z=0 +machine_heated_build_volume=False +support_bottom_line_distance=2.7000270002700026 +initial_layer_line_width_factor=100.0 +conical_overhang_angle=50 +acceleration_support_infill=500.0 +min_wall_line_width=0.34 +draft_shield_height_limitation=full +bottom_layers=3 +wipe_retraction_retract_speed=35.0 +material_anti_ooze_retracted_position=-4 +layer_height=0.28 +support_roof_pattern=grid +raft_interface_extruder_nr=0 +mesh_position_x=0 +meshfix_extensive_stitching=False +speed_wall=30.0 +support_bottom_distance=0 +material_shrinkage_percentage=100.0 +wall_distribution_count=1 +jerk_layer_0=8 +minimum_interface_area=10 +command_line_settings=0 +prime_tower_raft_base_line_spacing=1.6 +material_bed_temp_prepend=False +cool_fan_full_at_height=0.8400000000000001 +meshfix_union_all_remove_holes=False +raft_interface_speed=22.5 +support_tree_branch_reach_limit=30 +support_structure=tree +machine_feeder_wheel_diameter=10.0 +skin_material_flow=100 +cutting_mesh=False +support_tower_maximum_supported_diameter=3.0 +material_name=empty +acceleration_support=500.0 +layer_start_x=0.0 +support_infill_sparse_thickness=0.28 +magic_spiralize=False +wall_transition_filter_distance=100 +jerk_travel=20 +support_tree_top_rate=30 +ironing_monotonic=False +support_interface_offset=0.0 +z_seam_position=back +raft_surface_fan_speed=0 +support_mesh_drop_down=True +infill_overlap=0 +speed_support_infill=50 +support_offset=0.0 +magic_fuzzy_skin_outside_only=False +interlocking_boundary_avoidance=2 +coasting_volume=0.064 +skin_overlap=30.0 +material_break_speed=25 +machine_width=235 +raft_smoothing=5 +material_break_preparation_temperature=205.0 +material_alternate_walls=False +retraction_extra_prime_amount=0 +skin_edge_support_thickness=0 +speed_topbottom=45 +wall_x_material_flow=90 +prime_tower_position_x=223.025 +acceleration_layer_0=500.0 +retraction_amount=1.4 +material_break_preparation_retracted_position=-16 +prime_tower_position_y=203.025 +jerk_support=20 +jerk_skirt_brim=8 +support_roof_density=33.333 +roofing_line_width=0.45 +material_flow_layer_0=100 +minimum_roof_area=10 +blackmagic=0 +raft_remove_inside_corners=False +support_interface_pattern=grid +xy_offset=0 +prime_tower_brim_enable=False +support_xy_distance=0.9 +acceleration_travel_enabled=True +brim_outside_only=True +retraction_prime_speed=35.0 +roofing_pattern=lines +machine_nozzle_size=0.4 +support_bottom_height=1.12 +infill_wipe_dist=0.0 +raft_fan_speed=0 +machine_endstop_positive_direction_z=True +support_join_distance=2.0 +interlocking_orientation=22.5 +mold_width=5 +interlocking_depth=2 +roofing_layer_count=1 +support_infill_extruder_nr=0 +alternate_carve_order=True +hole_xy_offset=0 +magic_fuzzy_skin_point_density=1.25 +infill_sparse_density=20.0 +bridge_skin_density_2=75 +acceleration_support_bottom=500.0 +bridge_skin_density=100 +raft_airgap=0.3 +mold_angle=40 +raft_margin=15 +speed_print_layer_0=25 +roofing_angles=[45,135] +hole_xy_offset_max_diameter=0 +cool_fan_full_layer=4 +ooze_shield_dist=2 +support_line_distance=0 +zig_zaggify_infill=False +support_interface_line_width=0.45 +magic_mesh_surface_mode=normal +material_shrinkage_percentage_z=100.0 +machine_nozzle_expansion_angle=45 +multiple_mesh_overlap=0.15 +jerk_support_interface=20 +raft_surface_line_width=0.45 +support_supported_skin_fan_speed=100 +support_initial_layer_line_distance=0 +acceleration_enabled=True +smooth_spiralized_contours=True +travel_speed=150.0 +z_seam_corner=z_seam_corner_weighted +meshfix_fluid_motion_enabled=True +machine_show_variants=False +wall_overhang_angle=90 +z_seam_y=235 +acceleration_skirt_brim=500.0 +skin_no_small_gaps_heuristic=False +wall_line_width=0.45 +gradual_support_infill_steps=0 +machine_heated_bed=True +print_bed_temperature=60.0 +raft_surface_jerk=20 +machine_max_feedrate_y=500 +meshfix=0 +prime_tower_wipe_enabled=True +retraction_hop_enabled=False +wall_0_extruder_nr=-1 +support_interface_height=1.12 +wall_extruder_nr=-1 +adaptive_layer_height_enabled=False +material_type=empty +support_skip_zag_per_mm=20 +speed=0 +day=Mon +support_bottom_stair_step_width=5.0 +support_type=buildplate +raft_interface_line_width=0.9 +material_shrinkage_percentage_xy=100.0 +wipe_pause=0 +speed_slowdown_layers=2 +bridge_wall_min_length=2.3 +support_roof_line_distance=2.7000270002700026 +zig_zaggify_support=False +support_z_distance=0.28 +support_bottom_enable=True +retraction_combing_max_distance=30 +conical_overhang_enabled=False +remove_empty_first_layers=True +machine_height=250 +acceleration_topbottom=500.0 +extruder_prime_pos_x=0 +coasting_enable=True +retraction_hop=0.2 +jerk_prime_tower=20 +cool_lift_head=False +support_tree_rest_preference=buildplate +material_brand=empty_brand +initial_bottom_layers=3 +wipe_retraction_prime_speed=35.0 +wall_overhang_speed_factor=100 +machine_heat_zone_length=16 +support_bottom_stair_step_height=0 +machine_nozzle_id=unknown +prime_tower_size=20 +speed_wall_0_roofing=50 +machine_always_write_active_tool=False +raft_base_fan_speed=0 +ooze_shield_enabled=False +max_skin_angle_for_expansion=90 +meshfix_maximum_travel_resolution=0.25 +infill_offset_y=0 +cool_fan_speed_max=100 +material_print_temp_prepend=False +adhesion_extruder_nr=-1 +skirt_gap=10.0 +bridge_fan_speed=100 +bridge_skin_speed=22.5 +infill_mesh_order=0 +support_roof_material_flow=100 +prime_tower_base_curve_magnitude=4 +jerk_print_layer_0=8 +infill_extruder_nr=-1 +wipe_repeat_count=5 +skin_material_flow_layer_0=100 +alternate_extra_perimeter=False +wall_0_material_flow_layer_0=100 +roofing_monotonic=True +machine_center_is_zero=False +support_wall_count=1 +raft_base_line_spacing=1.6 +jerk_wall_0=20 +machine_nozzle_heat_up_speed=2.0 +cool_fan_speed_0=0 +wall_line_count=3 +material_print_temperature_layer_0=205.0 +raft_surface_extruder_nr=0 +relative_extrusion=False +infill_before_walls=False +inset_direction=inside_out +wall_x_material_flow_roofing=90 +support_tree_tip_diameter=0.9 +jerk_ironing=20 +machine_max_feedrate_e=50 +wipe_retraction_amount=1.4 +support_use_towers=True +support_bottom_offset=0.0 +speed_wall_x=65 +infill_line_width=0.57 +wall_line_width_0=0.45 +acceleration_print_layer_0=500.0 +brim_gap=0 +jerk_topbottom=20 +center_object=False +connect_infill_polygons=False +material_flush_purge_speed=0.5 +acceleration_travel=500.0 +support_roof_height=1.12 +cool_fan_speed_min=100 +support_material_flow=100 +bridge_skin_support_threshold=50 +adaptive_layer_height_threshold=0.2 +support_extruder_nr_layer_0=0 +brim_width=8.0 +support_bottom_density=33.333 +print_temperature=210 +acceleration_wall=500.0 +wall_material_flow=90 +raft_acceleration=500.0 +raft_interface_thickness=0.42000000000000004 +support_meshes_present=False +dual=0 +jerk_travel_enabled=True +support_interface_wall_count=0 +bridge_wall_material_flow=50 +lightning_infill_straightening_angle=40 +z_seam_relative=False +top_skin_expand_distance=1.45 +switch_extruder_extra_prime_amount=0 +prime_tower_line_width=0.45 +meshfix_fluid_motion_small_distance=0.01 +machine_endstop_positive_direction_y=False +mold_enabled=False +magic_fuzzy_skin_enabled=False +print_sequence=all_at_once +date=04-12-2023 +jerk_support_roof=20 +raft_surface_speed=30.0 +support_pattern=zigzag +switch_extruder_retraction_speeds=20 +sub_div_rad_add=0.5 +skin_overlap_mm=0.1425 +small_feature_speed_factor=50 +wipe_hop_enable=False +support_xy_distance_overhang=0.45 +default_material_bed_temperature=60 +fill_outline_gaps=True +acceleration_wall_0=500.0 +support_interface_priority=interface_area_overwrite_support_area +bridge_skin_material_flow_2=100 +material_anti_ooze_retraction_speed=5 +support_bottom_material_flow=100 +prime_tower_flow=100 +acceleration_wall_x=500.0 +infill_overlap_mm=0.0 +support_tree_branch_diameter=5 +support_brim_width=4 +gradual_infill_steps=0 +top_skin_preshrink=1.45 +jerk_wall_x_roofing=20 +machine_min_cool_heat_time_window=50.0 +machine_nozzle_temp_enabled=True +infill_enable_travel_optimization=False +machine_max_jerk_e=5 +top_layers=3 +meshfix_fluid_motion_shift_distance=0.1 +support_connect_zigzags=True +bridge_skin_density_3=80 +machine_max_acceleration_x=500 +support_roof_offset=0.0 +support_bottom_line_width=0.45 +machine_max_jerk_z=0.4 +switch_extruder_retraction_speed=20 +machine_settings=0 +flow_rate_extrusion_offset_factor=100 +material_initial_print_temperature=205.0 +layer_0_z_overlap=0.15 +material_adhesion_tendency=0 +cool_min_temperature=205.0 +material_end_of_filament_purge_length=20 +raft_interface_acceleration=500.0 +speed_travel_layer_0=125.0 +speed_ironing=30.0 +gantry_height=25 +bottom_skin_expand_distance=1.45 +min_feature_size=0.1125 +z_seam_type=sharpest_corner +prime_tower_base_size=8.0 +material_print_temp_wait=True +retraction_min_travel=1.5 +machine_extruders_shared_nozzle_initial_retraction=0 +interlocking_beam_width=0.9 +extruders_enabled_count=1 +raft_jerk=20 +max_extrusion_before_wipe=10 +draft_shield_height=10 +bottom_thickness=1.12 +skirt_brim_extruder_nr=-1 +support_brim_line_count=9 +build_volume_temperature=28 +wall_0_wipe_dist=0.2 +switch_extruder_prime_speed=20 +speed_infill=60.0 +raft_surface_thickness=0.28 +retraction_hop_after_extruder_switch_height=0.2 +machine_max_acceleration_y=500 +optimize_wall_printing_order=True +support_top_distance=0.28 +infill=0 +bridge_skin_speed_3=22.5 +machine_steps_per_mm_x=50 +material_bed_temperature_layer_0=60.0 +machine_acceleration=500 +machine_steps_per_mm_z=50 +skirt_brim_line_width=0.45 +skirt_brim_material_flow=100 +brim_line_count=18 +retraction_retract_speed=35.0 +raft_surface_line_spacing=0.45 +material=0 +material_crystallinity=False +top_bottom_pattern=lines +material_end_of_filament_purge_speed=0.5 +prime_tower_min_volume=6 +wipe_retraction_speed=35.0 +line_width=0.45 +acceleration_ironing=500.0 +bridge_wall_speed=25.0 +support_interface_density=33.333 +support_brim_enable=True +small_feature_speed_factor_0=50 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +travel_avoid_other_parts=True +flow_rate_max_extrusion_offset=0 +connect_skin_polygons=False +wipe_hop_amount=0.2 +mesh_position_y=0 +retraction_hop_after_extruder_switch=True +machine_max_jerk_xy=10 +machine_extruder_count=1 +acceleration_infill=500.0 +roofing_material_flow=100 +gradual_infill_step_height=1.5 +adaptive_layer_height_variation=0.04 +small_feature_max_length=0.0 +material_break_retracted_position=-50 +skin_edge_support_layers=0 +ironing_line_spacing=0.1 +jerk_support_infill=20 +infill_offset_x=0 +min_odd_wall_line_width=0.34 +adhesion_type=skirt +speed_z_hop=10 +brim_inside_margin=2.5 +wall_x_extruder_nr=-1 +initial_extruder_nr=0 +speed_equalize_flow_width_factor=100.0 +infill_line_distance=8.549999999999999 +lightning_infill_support_angle=40 +meshfix_maximum_deviation=0.025 +support_skip_some_zags=False +material_flush_purge_length=60 +support_conical_angle=30 +shell=0 +support_conical_min_width=5.0 +bridge_wall_coast=100 +slicing_tolerance=middle +mesh_position_z=0 +raft_surface_acceleration=500.0 +anti_overhang_mesh=False +infill_material_flow=100 +conical_overhang_hole_size=0 +roofing_extruder_nr=-1 +machine_extruders_share_heater=False +minimum_polygon_circumference=1.0 +draft_shield_enabled=False +raft_interface_line_spacing=1.1 +raft_base_acceleration=500.0 +wall_line_width_x=0.5 +acceleration_support_interface=500.0 +layer_start_y=0.0 +magic_fuzzy_skin_thickness=0.3 +support_conical_enabled=False +bridge_fan_speed_2=0 +retraction_extrusion_window=10 +speed_wall_0=50 +meshfix_fluid_motion_angle=15 +speed_support_bottom=45 +material_id=empty_material +raft_surface_layers=2 +experimental=0 +wall_transition_filter_deviation=0.1 +meshfix_keep_open_polygons=False +support_roof_extruder_nr=0 +interlocking_enable=False +material_diameter=1.75 +bridge_enable_more_layers=True +lightning_infill_prune_angle=40 +resolution=0 +support_angle=38 +top_bottom_pattern_0=lines +wall_thickness=0.9 +wall_transition_length=0.45 +ironing_only_highest_layer=False +raft_base_line_width=0.8 +acceleration_support_roof=500.0 +support_tree_max_diameter=25 +min_even_wall_line_width=0.34 +prime_blob_enable=False +top_bottom_extruder_nr=-1 +support_tree_min_height_to_model=3 +ironing_enabled=False +wipe_move_distance=20 +speed_print=60.0 +infill_wall_line_count=0 +bridge_fan_speed_3=0 +support_tree_angle_slow=25.333333333333332 +raft_speed=30.0 +support_bottom_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +travel_retract_before_outer_wall=True +small_skin_width=0.9 +speed_roofing=50 +speed_prime_tower=45 +speed_support=50 +small_hole_max_size=0 +jerk_wall=20 +machine_nozzle_cool_down_speed=2.0 +material_standby_temperature=175 +cross_infill_pocket_size=8.549999999999999 +machine_shape=rectangular +infill_multiplier=1 +top_bottom=0 +draft_shield_dist=10 +machine_extruders_share_nozzle=False +meshfix_maximum_resolution=0.25 +min_bead_width=0.34 +support_interface_enable=True +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +magic_fuzzy_skin_point_dist=0.8 +jerk_print=20 +brim_smart_ordering=True +machine_use_extruder_offset_to_offset_coords=True +support_interface_extruder_nr=0 +infill_support_enabled=False +top_bottom_thickness=1.12 +material_guid=0ff92885-617b-4144-a03c-9989872454bc +platform_adhesion=0 +raft_base_speed=22.5 +jerk_travel_layer_0=5 +bridge_skin_material_flow_3=110 +wipe_hop_speed=10 +prime_tower_enable=False +acceleration_wall_x_roofing=500.0 +support_roof_enable=True +acceleration_wall_0_roofing=500.0 +machine_endstop_positive_direction_x=False +infill_mesh=False +bridge_skin_material_flow=60 +mold_roof_height=0.5 +machine_nozzle_tip_outer_diameter=1 +support_tree_branch_diameter_angle=7 +prime_tower_base_height=0.28 +support=0 +support_mesh=False +machine_firmware_retract=False +support_tree_angle=38 +skin_angles=[45,135] +support_tree_bp_diameter=7.5 +skirt_brim_speed=25.0 +support_interface_skip_height=0.28 +machine_nozzle_head_distance=3 +support_bottom_pattern=grid +raft_base_wall_count=1 +min_infill_area=0 +support_line_width=0.45 +bridge_sparse_infill_max_density=0 +retraction_count_max=100 +jerk_infill=20 +infill_pattern=cubic +adaptive_layer_height_variation_step=0.04 +acceleration_roofing=500.0 +raft_interface_jerk=20 +retraction_speed=35.0 +extruder_prime_pos_y=0 +wall_0_material_flow=90 +machine_steps_per_mm_y=50 diff --git a/stress_benchmark/resources/067.wkt b/stress_benchmark/resources/067.wkt new file mode 100644 index 0000000000..4c7c9843c2 --- /dev/null +++ b/stress_benchmark/resources/067.wkt @@ -0,0 +1 @@ +MULTIPOLYGON () \ No newline at end of file From 8f9d3d0441a209daff885583b0355abe2905cf77 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 5 Dec 2023 08:34:57 +0100 Subject: [PATCH 150/218] Fix stress benchmark build --- stress_benchmark/stress_benchmark.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index 62502c1c5f..ad2e205e48 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -80,7 +80,7 @@ struct Resource cura::Polygon outer; for (const auto& point : boost_polygon.outer()) { - outer.add(cura::Point(point.x(), point.y())); + outer.add(cura::Point2LL(point.x(), point.y())); } polygon.add(outer); @@ -89,7 +89,7 @@ struct Resource cura::Polygon inner; for (const auto& point : hole) { - inner.add(cura::Point(point.x(), point.y())); + inner.add(cura::Point2LL(point.x(), point.y())); } polygon.add(inner); } From 489f487193056360770c349a6411f9e09499c8af Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 5 Dec 2023 10:13:29 +0100 Subject: [PATCH 151/218] Use CURA-10831 GRPC definitions Contributes to CURA-10831 --- conandata.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conandata.yml b/conandata.yml index 63534b7175..933e432bef 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,5 +1,5 @@ version: "5.7.0-alpha.0" requirements: - "arcus/5.3.0" - - "curaengine_grpc_definitions/(latest)@ultimaker/testing" + - "curaengine_grpc_definitions/(latest)@ultimaker/cura_10831" - "scripta/0.1.0@ultimaker/testing" \ No newline at end of file From 3732ef643551cc8a8f62b62ca851a2e1b9da62c0 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 5 Dec 2023 15:28:20 +0100 Subject: [PATCH 152/218] Add engine processing timeout (and some logging) --- stress_benchmark/stress_benchmark.cpp | 45 ++++++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/stress_benchmark/stress_benchmark.cpp b/stress_benchmark/stress_benchmark.cpp index ad2e205e48..c2dc5614bf 100644 --- a/stress_benchmark/stress_benchmark.cpp +++ b/stress_benchmark/stress_benchmark.cpp @@ -140,7 +140,7 @@ std::vector getResources() } } return resources; -}; +} void handleChildProcess(const auto& shapes, const auto& settings) { @@ -162,7 +162,11 @@ size_t checkCrashCount(size_t crashCount, int status, const auto& resource) if (WIFSIGNALED(status)) { ++crashCount; - spdlog::error("Crash detected for: {}", resource.stem()); + spdlog::error("# Crash detected for: {}", resource.stem()); + } + else + { + spdlog::info("+ Test case {} processed normally", resource.stem()); } return crashCount; } @@ -227,25 +231,42 @@ int main(int argc, const char** argv) const auto& shapes = resource.polygons(); const auto& settings = resource.settings(); - pid_t pid = fork(); - if (pid == -1) + spdlog::critical("Starting test case {}", resource.stem()); + pid_t engine_pid = fork(); + if (engine_pid == -1) { - spdlog::critical("Unable to fork"); + spdlog::critical("Unable to fork - engine"); return EXIT_FAILURE; } - if (pid == 0) + else if (engine_pid == 0) { handleChildProcess(shapes, settings); + return EXIT_SUCCESS; } else { - int status; - waitpid(pid, &status, 0); - const auto old_crash_count = crash_count; - crash_count = checkCrashCount(crash_count, status, resource); - if (old_crash_count != crash_count) + pid_t waiter_pid = fork(); + if (waiter_pid == -1) + { + spdlog::critical("Unable to fork - waiter"); + return EXIT_FAILURE; + } + else if (waiter_pid == 0) + { + sleep(30); + kill(engine_pid, SIGKILL); + return EXIT_SUCCESS; + } + else { - extra_infos.emplace_back(resource.stem()); + int status; + waitpid(engine_pid, &status, 0); + const auto old_crash_count = crash_count; + crash_count = checkCrashCount(crash_count, status, resource); + if (old_crash_count != crash_count) + { + extra_infos.emplace_back(resource.stem()); + } } } } From 4bd604fa3c287830687fd788c0d20c19cb892109 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 6 Dec 2023 13:08:14 +0100 Subject: [PATCH 153/218] Fix building on mac --- src/gcodeExport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 8372ba1656..1978972862 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -1429,7 +1429,7 @@ void GCodeExport::writeFanCommand(double speed) else if (speed > 0) { const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); - *output_stream_ << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? 2u : 1u), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; + *output_stream_ << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? static_cast(2): static_cast(1)), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; if (fan_number_) { *output_stream_ << " P" << fan_number_; From 92cea6575abe9680fe333f496fd03bb0d9ebe361 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 6 Dec 2023 12:08:47 +0000 Subject: [PATCH 154/218] Applied clang-format. --- src/gcodeExport.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 1978972862..cb906927aa 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -1429,7 +1429,9 @@ void GCodeExport::writeFanCommand(double speed) else if (speed > 0) { const bool should_scale_zero_to_one = Application::getInstance().current_slice_->scene.settings.get("machine_scale_fan_speed_zero_to_one"); - *output_stream_ << "M106 S" << PrecisionedDouble{ (should_scale_zero_to_one ? static_cast(2): static_cast(1)), (should_scale_zero_to_one ? speed : speed * 255) / 100 }; + *output_stream_ << "M106 S" + << PrecisionedDouble{ (should_scale_zero_to_one ? static_cast(2) : static_cast(1)), + (should_scale_zero_to_one ? speed : speed * 255) / 100 }; if (fan_number_) { *output_stream_ << " P" << fan_number_; From 2276568f5923ec8f3ec02f57df5934528c4bbb01 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 8 Dec 2023 14:33:12 +0100 Subject: [PATCH 155/218] Apply suggestions from code review Co-authored-by: Casper Lamboo --- .github/workflows/benchmark.yml | 7 +++---- .github/workflows/conan-package.yml | 10 +++++----- .github/workflows/gcodeanalyzer.yml | 11 ++++------- .github/workflows/stress_benchmark.yml | 7 +++---- conandata.yml | 2 +- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index eaf23c8faa..adb24aa2ff 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -31,23 +31,22 @@ env: CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} -# FIXME: Use `main` instead of `CURA-10831` once merged jobs: check_actor: - uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@main secrets: inherit conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main with: project_name: curaengine benchmark: needs: [ conan-recipe-version ] - uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} conan_extra_args: "-o curaengine:enable_benchmarks=True" diff --git a/.github/workflows/conan-package.yml b/.github/workflows/conan-package.yml index fa8f3f77e9..76060d3063 100644 --- a/.github/workflows/conan-package.yml +++ b/.github/workflows/conan-package.yml @@ -22,13 +22,13 @@ on: jobs: conan-recipe-version: - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main with: project_name: curaengine conan-package-export: needs: [ conan-recipe-version ] - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-export.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-export.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} @@ -37,7 +37,7 @@ jobs: conan-package-create-macos: needs: [ conan-recipe-version, conan-package-export ] if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-macos.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} secrets: inherit @@ -45,7 +45,7 @@ jobs: conan-package-create-windows: needs: [ conan-recipe-version, conan-package-export ] if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-windows.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} secrets: inherit @@ -53,7 +53,7 @@ jobs: conan-package-create-linux: needs: [ conan-recipe-version, conan-package-export ] if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} - uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-package-create-linux.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} secrets: inherit diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index f5bbcf0a7f..b73d5900ad 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -27,18 +27,17 @@ env: CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} -# FIXME: Use `main` instead of `CURA-10831` once merged # TODO: Make cura-workflows/benchmark.yml generic enough to fit the gcodeanalyzer benchmark jobs: check_actor: - uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@main secrets: inherit conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main with: project_name: curaengine @@ -103,9 +102,8 @@ jobs: resources/definitions resources/extruders - # FIXME: point to `main` once merged - name: Sync pip requirements - run: curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/.github/workflows/requirements-runner.txt + run: curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/main/.github/workflows/requirements-runner.txt working-directory: CuraEngine/.github/workflows - name: Setup Python and pip @@ -122,12 +120,11 @@ jobs: pip install git+https://github.com/ultimaker/libcharon@CURA-9495_analyzer_requisites#egg=charon pip install pytest pytest-benchmark - # FIXME: point to `main` once merged - name: Install Linux system requirements for building run: | mkdir runner_scripts cd runner_scripts - curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/CURA-10831/runner_scripts/ubuntu_setup.sh + curl -O https://raw.githubusercontent.com/Ultimaker/cura-workflows/main/runner_scripts/ubuntu_setup.sh chmod +x ubuntu_setup.sh sudo ./ubuntu_setup.sh diff --git a/.github/workflows/stress_benchmark.yml b/.github/workflows/stress_benchmark.yml index 166ffe44e6..3911302b5d 100644 --- a/.github/workflows/stress_benchmark.yml +++ b/.github/workflows/stress_benchmark.yml @@ -30,23 +30,22 @@ env: CONAN_LOGIN_USERNAME: ${{ secrets.CONAN_USER }} CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} -# FIXME: Use `main` instead of `CURA-10831` once merged jobs: check_actor: - uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/check-actor.yml@main secrets: inherit conan-recipe-version: needs: [ check_actor ] if: ${{ needs.check_actor.outputs.proceed == 'true' }} - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main with: project_name: curaengine benchmark: needs: [ conan-recipe-version ] - uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/benchmark.yml@main with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} conan_extra_args: "-o curaengine:enable_benchmarks=True" diff --git a/conandata.yml b/conandata.yml index 933e432bef..63534b7175 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,5 +1,5 @@ version: "5.7.0-alpha.0" requirements: - "arcus/5.3.0" - - "curaengine_grpc_definitions/(latest)@ultimaker/cura_10831" + - "curaengine_grpc_definitions/(latest)@ultimaker/testing" - "scripta/0.1.0@ultimaker/testing" \ No newline at end of file From 4b713f554a5f6856449817f04cf081101b403378 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 8 Dec 2023 15:05:26 +0100 Subject: [PATCH 156/218] point to main Contributes to CURA-10831 --- .github/workflows/unit-test-post.yml | 3 +-- .github/workflows/unit-test.yml | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml index 5f21bcb3ef..d916418dd4 100644 --- a/.github/workflows/unit-test-post.yml +++ b/.github/workflows/unit-test-post.yml @@ -6,9 +6,8 @@ on: types: [ completed ] jobs: - # FIXME: Use `main` instead of `CURA-10831` once merged publish-test-results: - uses: ultimaker/cura-workflows/.github/workflows/unit-test-post.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/unit-test-post.yml@main with: event: ${{ github.event.workflow_run.event }} conclusion: ${{ github.event.workflow_run.conclusion }} diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 26e03c8659..8879bb28a1 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -40,15 +40,13 @@ env: CONAN_PASSWORD: ${{ secrets.CONAN_PASS }} jobs: - # FIXME: Change to `main` instead of `CURA-10831` once merged conan-recipe-version: - uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main with: project_name: curaengine - # FIXME: Change to `main` instead of `CURA-10831` once merged testing: - uses: ultimaker/cura-workflows/.github/workflows/unit-test.yml@CURA-10831 + uses: ultimaker/cura-workflows/.github/workflows/unit-test.yml@main needs: [ conan-recipe-version ] with: recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }} From 8134f05c995238733eadea212ac3f43e65ff98de Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 8 Dec 2023 15:04:09 +0100 Subject: [PATCH 157/218] Add examples that still go wrong even if boost-input is fixed. These are likely errors (or oversights) in _our own_ code, rather than a failure to deal with how finicky the boost-voronoi stuff can be. done as part of CURA-11360 --- stress_benchmark/resources/068.settings | 645 ++++++++++++++++++++++++ stress_benchmark/resources/068.wkt | 1 + stress_benchmark/resources/069.settings | 280 ++++++++++ stress_benchmark/resources/069.wkt | 1 + 4 files changed, 927 insertions(+) create mode 100644 stress_benchmark/resources/068.settings create mode 100644 stress_benchmark/resources/068.wkt create mode 100644 stress_benchmark/resources/069.settings create mode 100644 stress_benchmark/resources/069.wkt diff --git a/stress_benchmark/resources/068.settings b/stress_benchmark/resources/068.settings new file mode 100644 index 0000000000..36584c9dc7 --- /dev/null +++ b/stress_benchmark/resources/068.settings @@ -0,0 +1,645 @@ +support_interface_line_width=0.4 +machine_max_acceleration_y=9000 +gradual_infill_steps=0 +machine_height=300 +material_break_preparation_retracted_position=-16 +wall_0_wipe_dist=0.2 +speed_ironing=20.0 +prime_tower_brim_enable=True +travel_speed=250 +bridge_skin_density_3=100 +draft_shield_dist=10 +infill_support_enabled=False +material_flush_purge_length=60 +jerk_travel_enabled=False +raft_interface_line_width=0.6000000000000001 +group_outer_walls=True +wall_transition_length=0.4 +acceleration_travel=5000 +wall_overhang_speed_factor=100 +machine_nozzle_temp_enabled=True +material_break_speed=25 +wipe_retraction_retract_speed=25 +extruder_prime_pos_z=2 +retraction_prime_speed=25 +print_sequence=all_at_once +flow_rate_extrusion_offset_factor=100 +prime_tower_enable=True +_plugin__curaenginetiledinfill__0_2_0__tile_size=8.2 +support_roof_line_distance=0.4 +machine_nozzle_head_distance=3 +support_bottom_distance=0 +brim_width=7 +speed_support_interface=20 +small_feature_speed_factor=50 +cutting_mesh=False +material_adhesion_tendency=0 +small_feature_max_length=0.0 +material_no_load_move_factor=0.91 +mesh_position_x=0 +zig_zaggify_support=True +inset_direction=outside_in +wall_extruder_nr=-1 +jerk_wall=20 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall=100 +meshfix_union_all_remove_holes=False +meshfix_maximum_deviation=0.04 +material_is_support_material=False +speed_equalize_flow_width_factor=110.0 +lightning_infill_overhang_angle=40 +wall_0_extruder_nr=-1 +top_bottom_thickness=1 +support_tree_top_rate=30 +machine_extruders_share_nozzle=False +machine_steps_per_mm_z=50 +quality_name=Fine +speed_print=70 +prime_tower_line_width=0.4 +roofing_monotonic=True +wall_x_material_flow_roofing=100 +skirt_height=3 +machine_feeder_wheel_diameter=10.0 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +bridge_sparse_infill_max_density=0 +jerk_layer_0=20 +meshfix_maximum_extrusion_area_deviation=50000 +material_bed_temp_prepend=True +acceleration_wall_x_roofing=1500 +roofing_extruder_nr=-1 +speed_travel_layer_0=250 +support_bottom_enable=True +support_extruder_nr_layer_0=1 +support_tower_roof_angle=0 +support_supported_skin_fan_speed=100 +infill_sparse_thickness=0.1 +support_tower_maximum_supported_diameter=3.0 +machine_endstop_positive_direction_y=False +wall_overhang_angle=90 +machine_minimum_feedrate=0.0 +line_width=0.4 +top_bottom_extruder_nr=-1 +ironing_inset=0.38 +machine_acceleration=3000 +z_seam_x=116.5 +draft_shield_height_limitation=full +speed_wall_0_roofing=20 +raft_surface_jerk=20 +switch_extruder_retraction_speed=20 +skirt_brim_material_flow=100 +infill_mesh_order=0 +acceleration_prime_tower=2000 +infill_multiplier=1 +raft_surface_thickness=0.1 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support_interface=50 +jerk_support_bottom=20 +jerk_support_interface=20 +raft_interface_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +bridge_wall_coast=0 +z_seam_corner=z_seam_corner_none +machine_max_feedrate_z=40 +speed_topbottom=30 +small_skin_on_surface=False +machine_firmware_retract=False +center_object=False +wipe_retraction_speed=25 +support_tree_max_diameter=25 +bridge_skin_density_2=100 +support_bottom_line_width=0.4 +ooze_shield_angle=60 +initial_layer_line_width_factor=100.0 +layer_height_0=0.2 +retraction_count_max=25 +retraction_combing_max_distance=15 +z_seam_relative=False +skin_outline_count=1 +support_interface_wall_count=1 +infill_sparse_density=20 +infill_overlap=0 +bridge_skin_speed_3=30 +mold_width=5 +material_final_print_temperature=185 +support_tree_rest_preference=graceful +raft_acceleration=3500 +skin_preshrink=0.8 +infill_offset_y=0 +support_interface_pattern=zigzag +infill_before_walls=True +machine_steps_per_mm_e=1600 +sub_div_rad_add=0.4 +magic_spiralize=False +fill_outline_gaps=True +infill_pattern=triangles +support_skip_zag_per_mm=20 +support_roof_extruder_nr=1 +ironing_enabled=False +interlocking_orientation=22.5 +initial_bottom_layers=10 +machine_center_is_zero=False +skirt_brim_extruder_nr=-1 +raft_base_extruder_nr=0 +connect_skin_polygons=False +magic_fuzzy_skin_point_density=1.25 +speed_support_roof=20 +speed_wall_x_roofing=30 +acceleration_travel_layer_0=1428.5714285714287 +coasting_min_volume=0.8 +material_print_temperature_layer_0=200 +brim_outside_only=True +slicing_tolerance=middle +adaptive_layer_height_threshold=0.2 +machine_nozzle_size=0.4 +raft_base_jerk=20 +wall_line_width_0=0.4 +acceleration_support_roof=1500 +skin_line_width=0.4 +raft_base_fan_speed=0 +machine_heated_bed=True +machine_max_feedrate_e=45 +meshfix_fluid_motion_shift_distance=0.1 +conical_overhang_hole_size=0 +jerk_travel=20 +retraction_combing=no_outer_surfaces +material_shrinkage_percentage=100.0 +infill_line_distance=6.0 +bridge_settings_enabled=True +ironing_flow=10.0 +material_initial_print_temperature=190 +machine_max_jerk_xy=20.0 +bottom_skin_preshrink=0.8 +wipe_repeat_count=5 +support_roof_line_width=0.4 +support_bottom_density=100 +infill_offset_x=0 +roofing_pattern=lines +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_up_time=0.5 +support_extruder_nr=1 +conical_overhang_angle=50 +speed_print_layer_0=10.0 +cool_fan_speed_0=100 +support_tree_branch_diameter_angle=7 +support_bottom_offset=0.8 +raft_interface_line_spacing=0.8 +meshfix_union_all=True +support_line_distance=0.5 +min_bead_width=0.34 +wipe_hop_speed=10 +wall_x_material_flow_layer_0=95.0 +support_enable=True +raft_base_speed=15 +speed_travel=250 +blackmagic=0 +bridge_skin_material_flow=95.0 +acceleration_wall_0_roofing=429 +machine_max_jerk_e=5.0 +mesh_position_y=0 +gantry_height=60 +alternate_carve_order=True +adaptive_layer_height_variation_step=0.01 +support_xy_distance_overhang=0.2 +cool_min_layer_time=6 +material_extrusion_cool_down_speed=0.7 +bottom_layers=10 +support_tower_diameter=3.0 +day=Fri +support_mesh_drop_down=True +raft_base_acceleration=3500 +raft_surface_line_spacing=0.4 +raft_interface_acceleration=3500 +speed_support_infill=25 +mesh_position_z=0 +wipe_move_distance=20 +layer_0_z_overlap=0.15 +jerk_roofing=20 +minimum_roof_area=1.0 +extruder_prime_pos_abs=True +quality_changes_name=empty +prime_tower_wipe_enabled=False +speed_wall_x=30 +support_offset=0.8 +speed_roofing=30 +support_pattern=zigzag +skin_edge_support_thickness=0.4 +raft_jerk=20 +support_xy_distance=0.7 +support_brim_width=1.2000000000000002 +support_bottom_stair_step_width=5.0 +material_crystallinity=False +retraction_hop_only_when_collides=True +dual=0 +bottom_skin_expand_distance=0.8 +skin_overlap_mm=0.04 +raft_surface_speed=30 +cool_min_layer_time_fan_speed_max=11 +prime_blob_enable=True +support_roof_density=100 +speed=0 +brim_gap=0 +zig_zaggify_infill=True +support_bottom_wall_count=1 +meshfix_fluid_motion_angle=15 +switch_extruder_prime_speed=20 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +small_skin_width=0.8 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_x=100 +jerk_wall_x=20 +coasting_volume=0.064 +min_odd_wall_line_width=0.34 +cool_fan_speed=100 +skin_material_flow=95.0 +speed_wall=30 +xy_offset_layer_0=-0.010000000000000002 +cool_min_temperature=190 +magic_fuzzy_skin_outside_only=False +roofing_material_flow=100 +travel_avoid_supports=False +support_zag_skip_count=40 +infill_mesh=False +support_join_distance=2.0 +retraction_amount=6.5 +support_interface_density=100 +machine_max_acceleration_z=100 +acceleration_support_bottom=100 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +acceleration_wall_x=1500 +speed_layer_0=10.0 +top_thickness=1 +raft_smoothing=5 +machine_max_acceleration_x=9000 +machine_max_jerk_z=0.4 +raft_base_line_spacing=1.6 +support_roof_enable=True +acceleration_enabled=True +speed_slowdown_layers=1 +acceleration_roofing=1000 +top_bottom_pattern_0=lines +machine_min_cool_heat_time_window=15 +machine_extruders_shared_nozzle_initial_retraction=0 +support_fan_enable=False +prime_tower_position_y=188.2 +support_interface_skip_height=0.1 +max_extrusion_before_wipe=10 +acceleration_travel_enabled=False +infill_enable_travel_optimization=False +acceleration_support=2000 +bridge_skin_speed_2=30 +min_skin_width_for_expansion=6.123233995736766e-17 +bridge_fan_speed_3=100 +max_skin_angle_for_expansion=90 +switch_extruder_retraction_speeds=20 +jerk_support_infill=20 +support_conical_angle=30 +relative_extrusion=False +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_skin=100 +ironing_pattern=zigzag +wall_x_material_flow=100 +min_wall_line_width=0.34 +infill_wipe_dist=0 +bottom_thickness=1 +adaptive_layer_height_enabled=False +raft_base_wall_count=1 +jerk_wall_0=20 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_0=100 +_plugin__curaenginetiledinfill__0_2_0__absolute_tiles=True +cool_fan_speed_max=100 +retract_at_layer_change=False +print_bed_temperature=60 +travel=0 +infill_material_flow=100 +wall_0_material_flow_layer_0=110.00000000000001 +skin_no_small_gaps_heuristic=False +speed_z_hop=10 +support_tree_min_height_to_model=3 +retraction_hop_enabled=True +extruders_enabled_count=2 +interlocking_beam_width=0.8 +support_tree_max_diameter_increase_by_merges_when_support_to_model=1 +jerk_print=20 +min_even_wall_line_width=0.34 +switch_extruder_extra_prime_amount=0 +magic_fuzzy_skin_enabled=False +material_shrinkage_percentage_z=100.0 +retraction_enable=True +retraction_extra_prime_amount=0 +magic_mesh_surface_mode=normal +layer_start_x=213.0 +support_interface_material_flow=95.0 +meshfix_maximum_travel_resolution=0.8 +machine_max_feedrate_y=300 +top_bottom=0 +connect_infill_polygons=False +jerk_support_roof=20 +default_material_bed_temperature=60 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_infill=100 +jerk_infill=20 +cross_infill_pocket_size=6.0 +support_use_towers=True +support_angle=45 +support=0 +magic_fuzzy_skin_thickness=0.3 +support_skip_some_zags=False +bridge_skin_speed=30 +wall_thickness=0.8 +material_end_of_filament_purge_speed=0.5 +material_print_temperature=200 +layer_start_y=198.0 +_plugin__curaenginetiledinfill__0_2_0__tile_shape=hexagon +_plugin__curaenginetiledinfill__0_2_0__maximum_size=10 +extruder_prime_pos_y=6 +min_infill_area=0 +prime_tower_position_x=185 +lightning_infill_support_angle=40 +retraction_speed=25 +prime_tower_base_curve_magnitude=4 +speed_support=25 +small_feature_speed_factor_0=50 +acceleration_topbottom=1000 +raft_base_line_width=0.8 +acceleration_print=3500 +wall_0_inset=0 +layer_height=0.1 +meshfix_keep_open_polygons=False +raft_fan_speed=0 +support_interface_priority=interface_area_overwrite_support_area +skin_edge_support_layers=4 +wipe_pause=0 +material_maximum_park_duration=7200 +support_interface_height=0.2 +support_roof_pattern=zigzag +raft_surface_line_width=0.4 +draft_shield_height=10 +material_end_of_filament_purge_length=20 +mold_roof_height=0.5 +material=0 +support_infill_rate=80 +acceleration_wall_0=429 +support_tree_tip_diameter=0.8 +coasting_enable=False +machine_steps_per_mm_x=50 +acceleration_wall=1500 +meshfix_maximum_resolution=0.5 +jerk_wall_x_roofing=20 +material_diameter=2.85 +raft_interface_speed=22.5 +acceleration_support_interface=1500 +machine_nozzle_cool_down_speed=0.75 +min_feature_size=0.1 +support_tree_branch_diameter=5 +lightning_infill_straightening_angle=40 +z_seam_y=215 +material_flow_layer_0=100 +raft_surface_fan_speed=100 +roofing_layer_count=1 +support_bottom_pattern=zigzag +cool_min_speed=4 +resolution=0 +machine_nozzle_heat_up_speed=1.6 +machine_nozzle_expansion_angle=45 +material_break_temperature=60 +skirt_brim_line_width=0.4 +bridge_wall_speed=30 +support_interface_extruder_nr=1 +lightning_infill_prune_angle=40 +material_standby_temperature=100 +_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 +acceleration_layer_0=1000 +wipe_retraction_amount=6.5 +clean_between_layers=False +raft_remove_inside_corners=False +material_break_retracted_position=-50 +support_interface_offset=0.8 +draft_shield_enabled=False +speed_wall_0=20 +brim_line_count=18 +support_bottom_material_flow=95.0 +cool_fan_enabled=True +platform_adhesion=0 +wall_0_material_flow_roofing=100 +support_tree_bp_diameter=7.5 +bridge_wall_material_flow=100 +minimum_polygon_circumference=1.0 +retraction_retract_speed=25 +support_top_distance=0 +infill_overlap_mm=0.0 +jerk_skirt_brim=20 +retraction_min_travel=0.8 +support_bottom_extruder_nr=1 +bridge_skin_density=80 +bridge_skin_material_flow_2=95.0 +prime_tower_min_volume=6 +raft_airgap=0.3 +speed_support_bottom=20 +material_break_preparation_speed=50 +machine_scale_fan_speed_zero_to_one=False +_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 +gradual_infill_step_height=1.5 +machine_steps_per_mm_y=50 +ooze_shield_dist=2 +support_roof_offset=0.8 +mold_enabled=False +acceleration_support_infill=2000 +anti_overhang_mesh=False +machine_max_acceleration_e=10000 +support_roof_wall_count=1 +support_brim_line_count=3 +travel_avoid_distance=3 +alternate_extra_perimeter=False +material_bed_temperature_layer_0=60 +support_connect_zigzags=True +ironing_line_spacing=0.1 +support_infill_extruder_nr=1 +interlocking_beam_layer_count=2 +skirt_line_count=1 +meshfix_fluid_motion_small_distance=0.01 +cool_fan_full_layer=2 +support_meshes_present=False +jerk_travel_layer_0=20.0 +wall_line_width=0.4 +z_seam_position=back +machine_heated_build_volume=False +raft_speed=15 +raft_surface_extruder_nr=0 +roofing_line_width=0.4 +multiple_mesh_overlap=0 +infill_support_angle=40 +machine_endstop_positive_direction_z=True +cool_fan_full_at_height=0.2 +material_brand=empty_brand +extruder_prime_pos_x=9 +wipe_brush_pos_x=100 +machine_shape=rectangular +support_conical_enabled=False +material_alternate_walls=False +bridge_fan_speed_2=100 +prime_tower_flow=100 +speed_infill=70 +skin_monotonic=False +bridge_skin_material_flow_3=95.0 +support_wall_count=0 +raft_interface_jerk=20 +shell=0 +material_print_temp_wait=True +carve_multiple_volumes=True +support_roof_material_flow=95.0 +support_brim_enable=True +command_line_settings=0 +raft_base_thickness=0.3 +support_bottom_stair_step_min_slope=10.0 +bridge_wall_min_length=2.1 +wall_0_material_flow=100 +coasting_speed=90 +support_z_distance=0 +raft_surface_layers=2 +minimum_bottom_area=1.0 +build_volume_temperature=28 +material_bed_temperature=60 +cool_lift_head=False +brim_smart_ordering=True +wipe_retraction_extra_prime_amount=0 +acceleration_skirt_brim=1000 +machine_buildplate_type=glass +top_skin_preshrink=0.8 +hole_xy_offset=0 +infill=0 +wipe_hop_enable=True +skin_material_flow_layer_0=95 +bridge_fan_speed=100 +raft_surface_acceleration=3500 +raft_interface_thickness=0.2 +prime_tower_base_size=3 +material_guid=0e01be8c-e425-4fb1-b4a3-b79f255f1db9 +support_bottom_height=0.2 +support_tree_angle=45 +machine_width=233 +expand_skins_expand_distance=0.8 +machine_depth=215 +support_mesh=False +meshfix_extensive_stitching=False +mold_angle=40 +infill_line_width=0.4 +support_material_flow=100 +interlocking_depth=2 +ooze_shield_enabled=False +wall_distribution_count=1 +prime_tower_base_height=0.1 +xy_offset=-0.010000000000000002 +support_bottom_line_distance=0.4 +material_shrinkage_percentage_xy=100.0 +material_bed_temp_wait=True +support_initial_layer_line_distance=0.5 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support=50 +jerk_support=20 +optimize_wall_printing_order=True +bridge_enable_more_layers=False +infill_randomize_start_location=False +skin_overlap=10 +retraction_extrusion_window=1 +support_type=everywhere +support_roof_height=0.2 +wall_x_extruder_nr=-1 +retraction_hop_after_extruder_switch_height=2 +material_name=empty +support_tree_limit_branch_reach=True +z_seam_type=sharpest_corner +wall_line_width_x=0.4 +cooling=0 +machine_endstop_positive_direction_x=False +adhesion_extruder_nr=-1 +interlocking_boundary_avoidance=2 +meshfix_fluid_motion_enabled=True +jerk_enabled=True +experimental=0 +retraction_hop=2 +small_hole_max_size=0 +retraction_hop_after_extruder_switch=True +skirt_gap=3 +switch_extruder_retraction_amount=16 +adaptive_layer_height_variation=0.1 +travel_avoid_other_parts=True +machine_show_variants=False +top_layers=10 +adhesion_type=brim +infill_wall_line_count=0 +jerk_topbottom=20 +material_anti_ooze_retracted_position=-4 +jerk_wall_0_roofing=20 +skirt_brim_minimal_length=250 +machine_settings=0 +support_tree_angle_slow=30.0 +conical_overhang_enabled=False +raft_margin=15 +machine_extruders_share_heater=False +material_print_temp_prepend=True +material_id=empty_material +machine_gcode_flavor=Griffin +flow_rate_max_extrusion_offset=0 +support_bottom_stair_step_height=0 +support_line_width=0.4 +acceleration_infill=3500 +machine_nozzle_tip_outer_diameter=1.0 +material_surface_energy=100 +smooth_spiralized_contours=True +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_down_time=0.5 +support_xy_overrides_z=z_overrides_xy +wipe_retraction_enable=True +jerk_ironing=20 +wipe_retraction_prime_speed=25 +speed_prime_tower=30 +support_structure=normal +remove_empty_first_layers=True +machine_heat_zone_length=16 +travel_retract_before_outer_wall=False +wall_transition_filter_deviation=0.1 +default_material_print_temperature=200 +bridge_skin_support_threshold=50 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_time=0.5 +skin_angles=[] +wall_transition_filter_distance=100 +skirt_brim_speed=10.0 +minimum_interface_area=1.0 +brim_replaces_support=True +wall_line_count=2 +wipe_hop_amount=2 +prime_tower_size=20 +gradual_support_infill_step_height=0.4 +support_infill_sparse_thickness=0.2 +interlocking_enable=False +machine_max_feedrate_x=300 +top_bottom_pattern=lines +wall_material_flow=100 +ironing_only_highest_layer=False +material_flow=100 +material_flush_purge_speed=0.5 +acceleration_ironing=1000 +hole_xy_offset_max_diameter=0 +ironing_monotonic=False +raft_interface_layers=1 +roofing_angles=[] +brim_inside_margin=2.5 +acceleration_print_layer_0=1000 +raft_interface_fan_speed=50.0 +support_tree_branch_reach_limit=30 +support_conical_min_width=5.0 +gradual_support_infill_steps=2 +meshfix=0 +support_interface_enable=True +minimum_support_area=0.0 +material_anti_ooze_retraction_speed=50 +magic_fuzzy_skin_point_dist=0.8 +prime_tower_raft_base_line_spacing=1.6 +_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 +wall_transition_angle=10 +top_skin_expand_distance=0.8 +jerk_prime_tower=20 +machine_extruder_count=2 +nozzle_disallowed_areas=[] +material_break_preparation_temperature=210 +machine_always_write_active_tool=False +time=13:56:09 +material_type=empty +print_temperature=200 +date=08-12-2023 +initial_extruder_nr=0 +nozzle_offsetting_for_disallowed_areas=True diff --git a/stress_benchmark/resources/068.wkt b/stress_benchmark/resources/068.wkt new file mode 100644 index 0000000000..e54c3c5036 --- /dev/null +++ b/stress_benchmark/resources/068.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((116557 108997, 116571 109003, 116623 108979, 116612 109036, 116622 109048, 116681 109050, 116647 109098, 116650 109113, 116701 109140, 116651 109165, 116647 109180, 116682 109228, 116623 109230, 116613 109242, 116624 109299, 116571 109275, 116557 109281, 116542 109339, 116505 109295, 116489 109295, 116453 109339, 116437 109282, 116423 109276, 116369 109299, 116380 109243, 116370 109231, 116311 109229, 116347 109181, 116343 109166, 116291 109140, 116344 109113, 116347 109098, 116311 109050, 116370 109048, 116380 109036, 116369 108980, 116423 109003, 116437 108997, 116452 108940, 116489 108984, 116505 108984, 116541 108940)))15662 115271, 115650 115271, 114975 115775, 114576 115027, 114565 115022, 113569 115192, 113073 114302, 113062 114297, 112221 114451, 112189 113629, 112182 113619, 111222 113332, 111152 112331, 111145 112322, 110329 112100, 110673 111319, 110671 111308, 109924 110623, 110310 109694, 110307 109682, 109664 109147, 110306 108588, 110308 108576, 109921 107630, 110668 106945, 110670 106934, 110324 106151, 111138 105927, 111145 105918, 111214 104918, 112175 104630, 112182 104620, 112211 103797, 113051 103949, 113062 103944, 113559 103054, 114556 103223, 114567 103218, 114963 102469, 115638 102970, 115650 102970, 116492 102383))) \ No newline at end of file diff --git a/stress_benchmark/resources/069.settings b/stress_benchmark/resources/069.settings new file mode 100644 index 0000000000..f44800ff2a --- /dev/null +++ b/stress_benchmark/resources/069.settings @@ -0,0 +1,280 @@ +support_interface_line_width=0.4 +machine_max_acceleration_y=9000 +gradual_infill_steps=0 +machine_height=205 +material_break_preparation_retracted_position=-16 +wall_0_wipe_dist=0.2 +speed_ironing=13.333333333333334 +prime_tower_brim_enable=True +travel_speed=120 +bridge_skin_density_3=100 +draft_shield_dist=10 +infill_support_enabled=False +material_flush_purge_length=60 +jerk_travel_enabled=False +raft_interface_line_width=0.6000000000000001 +group_outer_walls=True +wall_transition_length=0.4 +acceleration_travel=5000 +wall_overhang_speed_factor=100 +machine_nozzle_temp_enabled=False +material_break_speed=25 +wipe_retraction_retract_speed=25 +extruder_prime_pos_z=0 +retraction_prime_speed=25 +print_sequence=all_at_once +flow_rate_extrusion_offset_factor=100 +prime_tower_enable=False +_plugin__curaenginetiledinfill__0_2_0__tile_size=500 +support_roof_line_distance=0.4 +machine_nozzle_head_distance=5 +support_bottom_distance=0.1 +brim_width=8.0 +speed_support_interface=20.0 +small_feature_speed_factor=50 +cutting_mesh=False +material_adhesion_tendency=0 +small_feature_max_length=0.0 +material_no_load_move_factor=0.91 +mesh_position_x=0 +zig_zaggify_support=True +inset_direction=outside_in +wall_extruder_nr=-1 +jerk_wall=20 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall=100 +meshfix_union_all_remove_holes=False +meshfix_maximum_deviation=10.0 +material_is_support_material=False +speed_equalize_flow_width_factor=110.0 +lightning_infill_overhang_angle=40 +wall_0_extruder_nr=-1 +top_bottom_thickness=0.8 +support_tree_top_rate=10 +machine_extruders_share_nozzle=False +machine_steps_per_mm_z=50 +quality_name=Fine +speed_print=50 +prime_tower_line_width=0.4 +roofing_monotonic=True +wall_x_material_flow_roofing=100 +skirt_height=3 +machine_feeder_wheel_diameter=10.0 +jerk_print_layer_0=20 +infill_extruder_nr=-1 +bridge_sparse_infill_max_density=0 +jerk_layer_0=20 +meshfix_maximum_extrusion_area_deviation=50000 +material_bed_temp_prepend=True +acceleration_wall_x_roofing=3000 +roofing_extruder_nr=-1 +speed_travel_layer_0=120 +support_bottom_enable=False +support_extruder_nr_layer_0=0 +support_tower_roof_angle=65 +support_supported_skin_fan_speed=100 +infill_sparse_thickness=0.1 +support_tower_maximum_supported_diameter=3.0 +machine_endstop_positive_direction_y=False +wall_overhang_angle=90 +machine_minimum_feedrate=0.0 +line_width=0.4 +top_bottom_extruder_nr=-1 +ironing_inset=0.38 +machine_acceleration=3000 +z_seam_x=111.5 +draft_shield_height_limitation=full +speed_wall_0_roofing=30.0 +raft_surface_jerk=20 +switch_extruder_retraction_speed=20 +skirt_brim_material_flow=100 +infill_mesh_order=0 +acceleration_prime_tower=3000 +infill_multiplier=1 +raft_surface_thickness=0.1 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support_interface=100 +jerk_support_bottom=20 +jerk_support_interface=20 +raft_interface_extruder_nr=0 +_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False +bridge_wall_coast=0 +z_seam_corner=z_seam_corner_none +machine_max_feedrate_z=40 +speed_topbottom=20 +small_skin_on_surface=False +machine_firmware_retract=True +center_object=False +wipe_retraction_speed=25 +support_tree_max_diameter=25 +bridge_skin_density_2=100 +support_bottom_line_width=0.4 +ooze_shield_angle=60 +initial_layer_line_width_factor=100.0 +layer_height_0=0.27 +retraction_count_max=25 +retraction_combing_max_distance=15 +z_seam_relative=False +skin_outline_count=1 +support_interface_wall_count=1 +infill_sparse_density=0 +infill_overlap=10 +bridge_skin_speed_3=20 +mold_width=5 +material_final_print_temperature=185 +support_tree_rest_preference=graceful +raft_acceleration=3000 +skin_preshrink=0.8 +infill_offset_y=0 +support_interface_pattern=zigzag +infill_before_walls=True +machine_steps_per_mm_e=1600 +sub_div_rad_add=0.4 +magic_spiralize=False +fill_outline_gaps=True +infill_pattern=grid +support_skip_zag_per_mm=20 +support_roof_extruder_nr=0 +ironing_enabled=False +interlocking_orientation=22.5 +initial_bottom_layers=8 +machine_center_is_zero=False +skirt_brim_extruder_nr=-1 +raft_base_extruder_nr=0 +connect_skin_polygons=False +magic_fuzzy_skin_point_density=1.25 +speed_support_roof=20.0 +speed_wall_x_roofing=40.0 +acceleration_travel_layer_0=5000.0 +coasting_min_volume=0.8 +material_print_temperature_layer_0=200 +brim_outside_only=True +slicing_tolerance=middle +adaptive_layer_height_threshold=0.2 +machine_nozzle_size=0.4 +raft_base_jerk=20 +wall_line_width_0=0.4 +acceleration_support_roof=3000 +skin_line_width=0.4 +raft_base_fan_speed=0 +machine_heated_bed=True +machine_max_feedrate_e=45 +meshfix_fluid_motion_shift_distance=0.1 +conical_overhang_hole_size=0 +jerk_travel=20 +retraction_combing=no_outer_surfaces +material_shrinkage_percentage=100.0 +infill_line_distance=0 +bridge_settings_enabled=True +ironing_flow=10.0 +material_initial_print_temperature=190 +machine_max_jerk_xy=20.0 +bottom_skin_preshrink=0.8 +wipe_repeat_count=5 +support_roof_line_width=0.4 +support_bottom_density=100 +infill_offset_x=0 +roofing_pattern=lines +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_up_time=0.5 +support_extruder_nr=0 +conical_overhang_angle=50 +speed_print_layer_0=30 +cool_fan_speed_0=0 +support_tree_branch_diameter_angle=7 +support_bottom_offset=0.8 +raft_interface_line_spacing=0.8 +meshfix_union_all=True +support_line_distance=2.6666666666666665 +min_bead_width=0.34 +wipe_hop_speed=10 +wall_x_material_flow_layer_0=95.0 +support_enable=False +raft_base_speed=15 +speed_travel=120 +blackmagic=0 +bridge_skin_material_flow=95.0 +acceleration_wall_0_roofing=3000 +machine_max_jerk_e=5.0 +mesh_position_y=0 +gantry_height=52 +alternate_carve_order=True +adaptive_layer_height_variation_step=0.01 +support_xy_distance_overhang=0.2 +cool_min_layer_time=5 +material_extrusion_cool_down_speed=0.7 +bottom_layers=8 +support_tower_diameter=3.0 +day=Fri +support_mesh_drop_down=True +raft_base_acceleration=3000 +raft_surface_line_spacing=0.4 +raft_interface_acceleration=3000 +speed_support_infill=30.0 +mesh_position_z=0 +wipe_move_distance=20 +layer_0_z_overlap=0.15 +jerk_roofing=20 +minimum_roof_area=1.0 +extruder_prime_pos_abs=False +quality_changes_name=empty +prime_tower_wipe_enabled=True +speed_wall_x=40.0 +support_offset=0.8 +speed_roofing=20 +support_pattern=zigzag +skin_edge_support_thickness=0.4 +raft_jerk=20 +support_xy_distance=0.7 +support_brim_width=1.2000000000000002 +support_bottom_stair_step_width=5.0 +material_crystallinity=False +retraction_hop_only_when_collides=False +dual=0 +bottom_skin_expand_distance=0.8 +skin_overlap_mm=0.08 +raft_surface_speed=20 +cool_min_layer_time_fan_speed_max=10 +prime_blob_enable=False +support_roof_density=100 +speed=0 +brim_gap=0 +zig_zaggify_infill=False +support_bottom_wall_count=1 +meshfix_fluid_motion_angle=15 +switch_extruder_prime_speed=20 +_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 +small_skin_width=0.8 +_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_x=100 +jerk_wall_x=20 +coasting_volume=0.064 +min_odd_wall_line_width=0.34 +cool_fan_speed=100 +skin_material_flow=95.0 +speed_wall=40.0 +xy_offset_layer_0=-0.09 +cool_min_temperature=190 +magic_fuzzy_skin_outside_only=False +roofing_material_flow=100 +travel_avoid_supports=False +support_zag_skip_count=8 +infill_mesh=False +support_join_distance=2.0 +retraction_amount=6.5 +support_interface_density=100 +machine_max_acceleration_z=100 +acceleration_support_bottom=3000 +cool_fan_speed_min=100 +machine_use_extruder_offset_to_offset_coords=True +acceleration_wall_x=3000 +speed_layer_0=30 +top_thickness=0.8 +raft_smoothing=5 +machine_max_acceleration_x=9000 +machine_max_jerk_z=0.4 +raft_base_line_spacing=1.6 +support_roof_enable=False +acceleration_enabled=False +speed_slowdown_layers=2 +acceleration_roofing=3000 +top_bottom_pattern_0=lines +machine_min_cool_heat_time_window=50.0 +machine_extruders_shared_nozzle_initial_retraction=0 +support_fan_enable=False diff --git a/stress_benchmark/resources/069.wkt b/stress_benchmark/resources/069.wkt new file mode 100644 index 0000000000..1480fbd502 --- /dev/null +++ b/stress_benchmark/resources/069.wkt @@ -0,0 +1 @@ +MULTIPOLYGON (((112630 86900, 113828 86992, 114805 87104, 115775 87255, 116739 87445, 117693 87673, 118639 87940, 119573 88242, 120711 88662, 122084 89266, 123167 89821, 124238 90425, 125477 91226, 126463 91950, 127232 92562, 127231 92563, 127973 93205, 128871 94047, 129713 94936, 130359 95676, 130975 96441, 131561 97231, 132114 98041, 132634 98874, 133120 99726, 133573 100598, 133990 101487, 134464 102611, 134465 102611, 134876 103776, 135166 104714, 135482 105909, 135481 105909, 135723 107104, 135879 108074, 135996 109049, 136074 110029, 136113 111009, 136113 111993, 136074 112972, 135996 113953, 135879 114927, 135723 115897, 135481 117092, 135165 118287, 134875 119225, 134462 120396, 134463 120396, 133989 121515, 133464 122634, 132744 123950, 132112 124961, 131560 125772, 130974 126560, 130358 127326, 129712 128065, 128872 128952, 127973 129796, 127231 130438, 126461 131050, 125671 131632, 124855 132180, 124021 132698, 123166 133180, 122293 133627, 121401 134040, 120494 134418, 119573 134759, 119573 134758, 118639 135060, 117693 135327, 116738 135555, 115774 135745, 114563 135934, 113338 136050, 112358 136104, 111375 136119, 110395 136094, 109414 136031, 108438 135928, 107466 135787, 106500 135606, 105542 135387, 104595 135131, 103657 134837, 102733 134505, 101822 134136, 100928 133735, 100049 133295, 99190 132821, 98348 132312, 97528 131770, 96732 131198, 95744 130425, 94663 129471, 93790 128602, 93121 127881, 92327 126954, 91582 125971, 91021 125164, 90491 124337, 89874 123278, 89207 121961, 88719 120837, 88365 119920, 88047 118991, 88048 118991, 87768 118050, 87525 117097, 87268 115888, 87050 114430, 86940 113218, 86892 112237, 86880 111016, 86940 109782, 87029 108803, 87156 107830, 87321 106862, 87525 105902, 87768 104949, 88048 104007, 88047 104007, 88365 103078, 88719 102162, 89218 101013, 89219 101013, 89875 99720, 90492 98662, 90491 98662, 91021 97835, 91582 97028, 92330 96041, 92331 96042, 93122 95119, 93791 94398, 94655 93537, 94654 93537, 95581 92719, 96532 91945, 97530 91228, 98350 90686, 99191 90178, 100049 89705, 100928 89265, 101824 88862, 102735 88493, 103658 88162, 104596 87868, 105542 87612, 105542 87613, 106501 87394, 107467 87213, 108439 87072, 109415 86969, 110396 86906, 111378 86881))) \ No newline at end of file From 5b6c91c1f25a025c25ca9920c14a6198cf24b327 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 8 Dec 2023 17:53:29 +0100 Subject: [PATCH 158/218] Revert "Add examples that still go wrong even if boost-input is fixed." This reverts commit 8134f05c995238733eadea212ac3f43e65ff98de. --- stress_benchmark/resources/068.settings | 645 ------------------------ stress_benchmark/resources/068.wkt | 1 - stress_benchmark/resources/069.settings | 280 ---------- stress_benchmark/resources/069.wkt | 1 - 4 files changed, 927 deletions(-) delete mode 100644 stress_benchmark/resources/068.settings delete mode 100644 stress_benchmark/resources/068.wkt delete mode 100644 stress_benchmark/resources/069.settings delete mode 100644 stress_benchmark/resources/069.wkt diff --git a/stress_benchmark/resources/068.settings b/stress_benchmark/resources/068.settings deleted file mode 100644 index 36584c9dc7..0000000000 --- a/stress_benchmark/resources/068.settings +++ /dev/null @@ -1,645 +0,0 @@ -support_interface_line_width=0.4 -machine_max_acceleration_y=9000 -gradual_infill_steps=0 -machine_height=300 -material_break_preparation_retracted_position=-16 -wall_0_wipe_dist=0.2 -speed_ironing=20.0 -prime_tower_brim_enable=True -travel_speed=250 -bridge_skin_density_3=100 -draft_shield_dist=10 -infill_support_enabled=False -material_flush_purge_length=60 -jerk_travel_enabled=False -raft_interface_line_width=0.6000000000000001 -group_outer_walls=True -wall_transition_length=0.4 -acceleration_travel=5000 -wall_overhang_speed_factor=100 -machine_nozzle_temp_enabled=True -material_break_speed=25 -wipe_retraction_retract_speed=25 -extruder_prime_pos_z=2 -retraction_prime_speed=25 -print_sequence=all_at_once -flow_rate_extrusion_offset_factor=100 -prime_tower_enable=True -_plugin__curaenginetiledinfill__0_2_0__tile_size=8.2 -support_roof_line_distance=0.4 -machine_nozzle_head_distance=3 -support_bottom_distance=0 -brim_width=7 -speed_support_interface=20 -small_feature_speed_factor=50 -cutting_mesh=False -material_adhesion_tendency=0 -small_feature_max_length=0.0 -material_no_load_move_factor=0.91 -mesh_position_x=0 -zig_zaggify_support=True -inset_direction=outside_in -wall_extruder_nr=-1 -jerk_wall=20 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall=100 -meshfix_union_all_remove_holes=False -meshfix_maximum_deviation=0.04 -material_is_support_material=False -speed_equalize_flow_width_factor=110.0 -lightning_infill_overhang_angle=40 -wall_0_extruder_nr=-1 -top_bottom_thickness=1 -support_tree_top_rate=30 -machine_extruders_share_nozzle=False -machine_steps_per_mm_z=50 -quality_name=Fine -speed_print=70 -prime_tower_line_width=0.4 -roofing_monotonic=True -wall_x_material_flow_roofing=100 -skirt_height=3 -machine_feeder_wheel_diameter=10.0 -jerk_print_layer_0=20 -infill_extruder_nr=-1 -bridge_sparse_infill_max_density=0 -jerk_layer_0=20 -meshfix_maximum_extrusion_area_deviation=50000 -material_bed_temp_prepend=True -acceleration_wall_x_roofing=1500 -roofing_extruder_nr=-1 -speed_travel_layer_0=250 -support_bottom_enable=True -support_extruder_nr_layer_0=1 -support_tower_roof_angle=0 -support_supported_skin_fan_speed=100 -infill_sparse_thickness=0.1 -support_tower_maximum_supported_diameter=3.0 -machine_endstop_positive_direction_y=False -wall_overhang_angle=90 -machine_minimum_feedrate=0.0 -line_width=0.4 -top_bottom_extruder_nr=-1 -ironing_inset=0.38 -machine_acceleration=3000 -z_seam_x=116.5 -draft_shield_height_limitation=full -speed_wall_0_roofing=20 -raft_surface_jerk=20 -switch_extruder_retraction_speed=20 -skirt_brim_material_flow=100 -infill_mesh_order=0 -acceleration_prime_tower=2000 -infill_multiplier=1 -raft_surface_thickness=0.1 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support_interface=50 -jerk_support_bottom=20 -jerk_support_interface=20 -raft_interface_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -bridge_wall_coast=0 -z_seam_corner=z_seam_corner_none -machine_max_feedrate_z=40 -speed_topbottom=30 -small_skin_on_surface=False -machine_firmware_retract=False -center_object=False -wipe_retraction_speed=25 -support_tree_max_diameter=25 -bridge_skin_density_2=100 -support_bottom_line_width=0.4 -ooze_shield_angle=60 -initial_layer_line_width_factor=100.0 -layer_height_0=0.2 -retraction_count_max=25 -retraction_combing_max_distance=15 -z_seam_relative=False -skin_outline_count=1 -support_interface_wall_count=1 -infill_sparse_density=20 -infill_overlap=0 -bridge_skin_speed_3=30 -mold_width=5 -material_final_print_temperature=185 -support_tree_rest_preference=graceful -raft_acceleration=3500 -skin_preshrink=0.8 -infill_offset_y=0 -support_interface_pattern=zigzag -infill_before_walls=True -machine_steps_per_mm_e=1600 -sub_div_rad_add=0.4 -magic_spiralize=False -fill_outline_gaps=True -infill_pattern=triangles -support_skip_zag_per_mm=20 -support_roof_extruder_nr=1 -ironing_enabled=False -interlocking_orientation=22.5 -initial_bottom_layers=10 -machine_center_is_zero=False -skirt_brim_extruder_nr=-1 -raft_base_extruder_nr=0 -connect_skin_polygons=False -magic_fuzzy_skin_point_density=1.25 -speed_support_roof=20 -speed_wall_x_roofing=30 -acceleration_travel_layer_0=1428.5714285714287 -coasting_min_volume=0.8 -material_print_temperature_layer_0=200 -brim_outside_only=True -slicing_tolerance=middle -adaptive_layer_height_threshold=0.2 -machine_nozzle_size=0.4 -raft_base_jerk=20 -wall_line_width_0=0.4 -acceleration_support_roof=1500 -skin_line_width=0.4 -raft_base_fan_speed=0 -machine_heated_bed=True -machine_max_feedrate_e=45 -meshfix_fluid_motion_shift_distance=0.1 -conical_overhang_hole_size=0 -jerk_travel=20 -retraction_combing=no_outer_surfaces -material_shrinkage_percentage=100.0 -infill_line_distance=6.0 -bridge_settings_enabled=True -ironing_flow=10.0 -material_initial_print_temperature=190 -machine_max_jerk_xy=20.0 -bottom_skin_preshrink=0.8 -wipe_repeat_count=5 -support_roof_line_width=0.4 -support_bottom_density=100 -infill_offset_x=0 -roofing_pattern=lines -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_up_time=0.5 -support_extruder_nr=1 -conical_overhang_angle=50 -speed_print_layer_0=10.0 -cool_fan_speed_0=100 -support_tree_branch_diameter_angle=7 -support_bottom_offset=0.8 -raft_interface_line_spacing=0.8 -meshfix_union_all=True -support_line_distance=0.5 -min_bead_width=0.34 -wipe_hop_speed=10 -wall_x_material_flow_layer_0=95.0 -support_enable=True -raft_base_speed=15 -speed_travel=250 -blackmagic=0 -bridge_skin_material_flow=95.0 -acceleration_wall_0_roofing=429 -machine_max_jerk_e=5.0 -mesh_position_y=0 -gantry_height=60 -alternate_carve_order=True -adaptive_layer_height_variation_step=0.01 -support_xy_distance_overhang=0.2 -cool_min_layer_time=6 -material_extrusion_cool_down_speed=0.7 -bottom_layers=10 -support_tower_diameter=3.0 -day=Fri -support_mesh_drop_down=True -raft_base_acceleration=3500 -raft_surface_line_spacing=0.4 -raft_interface_acceleration=3500 -speed_support_infill=25 -mesh_position_z=0 -wipe_move_distance=20 -layer_0_z_overlap=0.15 -jerk_roofing=20 -minimum_roof_area=1.0 -extruder_prime_pos_abs=True -quality_changes_name=empty -prime_tower_wipe_enabled=False -speed_wall_x=30 -support_offset=0.8 -speed_roofing=30 -support_pattern=zigzag -skin_edge_support_thickness=0.4 -raft_jerk=20 -support_xy_distance=0.7 -support_brim_width=1.2000000000000002 -support_bottom_stair_step_width=5.0 -material_crystallinity=False -retraction_hop_only_when_collides=True -dual=0 -bottom_skin_expand_distance=0.8 -skin_overlap_mm=0.04 -raft_surface_speed=30 -cool_min_layer_time_fan_speed_max=11 -prime_blob_enable=True -support_roof_density=100 -speed=0 -brim_gap=0 -zig_zaggify_infill=True -support_bottom_wall_count=1 -meshfix_fluid_motion_angle=15 -switch_extruder_prime_speed=20 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -small_skin_width=0.8 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_x=100 -jerk_wall_x=20 -coasting_volume=0.064 -min_odd_wall_line_width=0.34 -cool_fan_speed=100 -skin_material_flow=95.0 -speed_wall=30 -xy_offset_layer_0=-0.010000000000000002 -cool_min_temperature=190 -magic_fuzzy_skin_outside_only=False -roofing_material_flow=100 -travel_avoid_supports=False -support_zag_skip_count=40 -infill_mesh=False -support_join_distance=2.0 -retraction_amount=6.5 -support_interface_density=100 -machine_max_acceleration_z=100 -acceleration_support_bottom=100 -cool_fan_speed_min=100 -machine_use_extruder_offset_to_offset_coords=True -acceleration_wall_x=1500 -speed_layer_0=10.0 -top_thickness=1 -raft_smoothing=5 -machine_max_acceleration_x=9000 -machine_max_jerk_z=0.4 -raft_base_line_spacing=1.6 -support_roof_enable=True -acceleration_enabled=True -speed_slowdown_layers=1 -acceleration_roofing=1000 -top_bottom_pattern_0=lines -machine_min_cool_heat_time_window=15 -machine_extruders_shared_nozzle_initial_retraction=0 -support_fan_enable=False -prime_tower_position_y=188.2 -support_interface_skip_height=0.1 -max_extrusion_before_wipe=10 -acceleration_travel_enabled=False -infill_enable_travel_optimization=False -acceleration_support=2000 -bridge_skin_speed_2=30 -min_skin_width_for_expansion=6.123233995736766e-17 -bridge_fan_speed_3=100 -max_skin_angle_for_expansion=90 -switch_extruder_retraction_speeds=20 -jerk_support_infill=20 -support_conical_angle=30 -relative_extrusion=False -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_skin=100 -ironing_pattern=zigzag -wall_x_material_flow=100 -min_wall_line_width=0.34 -infill_wipe_dist=0 -bottom_thickness=1 -adaptive_layer_height_enabled=False -raft_base_wall_count=1 -jerk_wall_0=20 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_0=100 -_plugin__curaenginetiledinfill__0_2_0__absolute_tiles=True -cool_fan_speed_max=100 -retract_at_layer_change=False -print_bed_temperature=60 -travel=0 -infill_material_flow=100 -wall_0_material_flow_layer_0=110.00000000000001 -skin_no_small_gaps_heuristic=False -speed_z_hop=10 -support_tree_min_height_to_model=3 -retraction_hop_enabled=True -extruders_enabled_count=2 -interlocking_beam_width=0.8 -support_tree_max_diameter_increase_by_merges_when_support_to_model=1 -jerk_print=20 -min_even_wall_line_width=0.34 -switch_extruder_extra_prime_amount=0 -magic_fuzzy_skin_enabled=False -material_shrinkage_percentage_z=100.0 -retraction_enable=True -retraction_extra_prime_amount=0 -magic_mesh_surface_mode=normal -layer_start_x=213.0 -support_interface_material_flow=95.0 -meshfix_maximum_travel_resolution=0.8 -machine_max_feedrate_y=300 -top_bottom=0 -connect_infill_polygons=False -jerk_support_roof=20 -default_material_bed_temperature=60 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_infill=100 -jerk_infill=20 -cross_infill_pocket_size=6.0 -support_use_towers=True -support_angle=45 -support=0 -magic_fuzzy_skin_thickness=0.3 -support_skip_some_zags=False -bridge_skin_speed=30 -wall_thickness=0.8 -material_end_of_filament_purge_speed=0.5 -material_print_temperature=200 -layer_start_y=198.0 -_plugin__curaenginetiledinfill__0_2_0__tile_shape=hexagon -_plugin__curaenginetiledinfill__0_2_0__maximum_size=10 -extruder_prime_pos_y=6 -min_infill_area=0 -prime_tower_position_x=185 -lightning_infill_support_angle=40 -retraction_speed=25 -prime_tower_base_curve_magnitude=4 -speed_support=25 -small_feature_speed_factor_0=50 -acceleration_topbottom=1000 -raft_base_line_width=0.8 -acceleration_print=3500 -wall_0_inset=0 -layer_height=0.1 -meshfix_keep_open_polygons=False -raft_fan_speed=0 -support_interface_priority=interface_area_overwrite_support_area -skin_edge_support_layers=4 -wipe_pause=0 -material_maximum_park_duration=7200 -support_interface_height=0.2 -support_roof_pattern=zigzag -raft_surface_line_width=0.4 -draft_shield_height=10 -material_end_of_filament_purge_length=20 -mold_roof_height=0.5 -material=0 -support_infill_rate=80 -acceleration_wall_0=429 -support_tree_tip_diameter=0.8 -coasting_enable=False -machine_steps_per_mm_x=50 -acceleration_wall=1500 -meshfix_maximum_resolution=0.5 -jerk_wall_x_roofing=20 -material_diameter=2.85 -raft_interface_speed=22.5 -acceleration_support_interface=1500 -machine_nozzle_cool_down_speed=0.75 -min_feature_size=0.1 -support_tree_branch_diameter=5 -lightning_infill_straightening_angle=40 -z_seam_y=215 -material_flow_layer_0=100 -raft_surface_fan_speed=100 -roofing_layer_count=1 -support_bottom_pattern=zigzag -cool_min_speed=4 -resolution=0 -machine_nozzle_heat_up_speed=1.6 -machine_nozzle_expansion_angle=45 -material_break_temperature=60 -skirt_brim_line_width=0.4 -bridge_wall_speed=30 -support_interface_extruder_nr=1 -lightning_infill_prune_angle=40 -material_standby_temperature=100 -_plugin__curaenginegradualflow__0_1_0__layer_0_max_flow_acceleration=1 -acceleration_layer_0=1000 -wipe_retraction_amount=6.5 -clean_between_layers=False -raft_remove_inside_corners=False -material_break_retracted_position=-50 -support_interface_offset=0.8 -draft_shield_enabled=False -speed_wall_0=20 -brim_line_count=18 -support_bottom_material_flow=95.0 -cool_fan_enabled=True -platform_adhesion=0 -wall_0_material_flow_roofing=100 -support_tree_bp_diameter=7.5 -bridge_wall_material_flow=100 -minimum_polygon_circumference=1.0 -retraction_retract_speed=25 -support_top_distance=0 -infill_overlap_mm=0.0 -jerk_skirt_brim=20 -retraction_min_travel=0.8 -support_bottom_extruder_nr=1 -bridge_skin_density=80 -bridge_skin_material_flow_2=95.0 -prime_tower_min_volume=6 -raft_airgap=0.3 -speed_support_bottom=20 -material_break_preparation_speed=50 -machine_scale_fan_speed_zero_to_one=False -_plugin__curaenginegradualflow__0_1_0__gradual_flow_discretisation_step_size=0.2 -gradual_infill_step_height=1.5 -machine_steps_per_mm_y=50 -ooze_shield_dist=2 -support_roof_offset=0.8 -mold_enabled=False -acceleration_support_infill=2000 -anti_overhang_mesh=False -machine_max_acceleration_e=10000 -support_roof_wall_count=1 -support_brim_line_count=3 -travel_avoid_distance=3 -alternate_extra_perimeter=False -material_bed_temperature_layer_0=60 -support_connect_zigzags=True -ironing_line_spacing=0.1 -support_infill_extruder_nr=1 -interlocking_beam_layer_count=2 -skirt_line_count=1 -meshfix_fluid_motion_small_distance=0.01 -cool_fan_full_layer=2 -support_meshes_present=False -jerk_travel_layer_0=20.0 -wall_line_width=0.4 -z_seam_position=back -machine_heated_build_volume=False -raft_speed=15 -raft_surface_extruder_nr=0 -roofing_line_width=0.4 -multiple_mesh_overlap=0 -infill_support_angle=40 -machine_endstop_positive_direction_z=True -cool_fan_full_at_height=0.2 -material_brand=empty_brand -extruder_prime_pos_x=9 -wipe_brush_pos_x=100 -machine_shape=rectangular -support_conical_enabled=False -material_alternate_walls=False -bridge_fan_speed_2=100 -prime_tower_flow=100 -speed_infill=70 -skin_monotonic=False -bridge_skin_material_flow_3=95.0 -support_wall_count=0 -raft_interface_jerk=20 -shell=0 -material_print_temp_wait=True -carve_multiple_volumes=True -support_roof_material_flow=95.0 -support_brim_enable=True -command_line_settings=0 -raft_base_thickness=0.3 -support_bottom_stair_step_min_slope=10.0 -bridge_wall_min_length=2.1 -wall_0_material_flow=100 -coasting_speed=90 -support_z_distance=0 -raft_surface_layers=2 -minimum_bottom_area=1.0 -build_volume_temperature=28 -material_bed_temperature=60 -cool_lift_head=False -brim_smart_ordering=True -wipe_retraction_extra_prime_amount=0 -acceleration_skirt_brim=1000 -machine_buildplate_type=glass -top_skin_preshrink=0.8 -hole_xy_offset=0 -infill=0 -wipe_hop_enable=True -skin_material_flow_layer_0=95 -bridge_fan_speed=100 -raft_surface_acceleration=3500 -raft_interface_thickness=0.2 -prime_tower_base_size=3 -material_guid=0e01be8c-e425-4fb1-b4a3-b79f255f1db9 -support_bottom_height=0.2 -support_tree_angle=45 -machine_width=233 -expand_skins_expand_distance=0.8 -machine_depth=215 -support_mesh=False -meshfix_extensive_stitching=False -mold_angle=40 -infill_line_width=0.4 -support_material_flow=100 -interlocking_depth=2 -ooze_shield_enabled=False -wall_distribution_count=1 -prime_tower_base_height=0.1 -xy_offset=-0.010000000000000002 -support_bottom_line_distance=0.4 -material_shrinkage_percentage_xy=100.0 -material_bed_temp_wait=True -support_initial_layer_line_distance=0.5 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support=50 -jerk_support=20 -optimize_wall_printing_order=True -bridge_enable_more_layers=False -infill_randomize_start_location=False -skin_overlap=10 -retraction_extrusion_window=1 -support_type=everywhere -support_roof_height=0.2 -wall_x_extruder_nr=-1 -retraction_hop_after_extruder_switch_height=2 -material_name=empty -support_tree_limit_branch_reach=True -z_seam_type=sharpest_corner -wall_line_width_x=0.4 -cooling=0 -machine_endstop_positive_direction_x=False -adhesion_extruder_nr=-1 -interlocking_boundary_avoidance=2 -meshfix_fluid_motion_enabled=True -jerk_enabled=True -experimental=0 -retraction_hop=2 -small_hole_max_size=0 -retraction_hop_after_extruder_switch=True -skirt_gap=3 -switch_extruder_retraction_amount=16 -adaptive_layer_height_variation=0.1 -travel_avoid_other_parts=True -machine_show_variants=False -top_layers=10 -adhesion_type=brim -infill_wall_line_count=0 -jerk_topbottom=20 -material_anti_ooze_retracted_position=-4 -jerk_wall_0_roofing=20 -skirt_brim_minimal_length=250 -machine_settings=0 -support_tree_angle_slow=30.0 -conical_overhang_enabled=False -raft_margin=15 -machine_extruders_share_heater=False -material_print_temp_prepend=True -material_id=empty_material -machine_gcode_flavor=Griffin -flow_rate_max_extrusion_offset=0 -support_bottom_stair_step_height=0 -support_line_width=0.4 -acceleration_infill=3500 -machine_nozzle_tip_outer_diameter=1.0 -material_surface_energy=100 -smooth_spiralized_contours=True -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_down_time=0.5 -support_xy_overrides_z=z_overrides_xy -wipe_retraction_enable=True -jerk_ironing=20 -wipe_retraction_prime_speed=25 -speed_prime_tower=30 -support_structure=normal -remove_empty_first_layers=True -machine_heat_zone_length=16 -travel_retract_before_outer_wall=False -wall_transition_filter_deviation=0.1 -default_material_print_temperature=200 -bridge_skin_support_threshold=50 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_time=0.5 -skin_angles=[] -wall_transition_filter_distance=100 -skirt_brim_speed=10.0 -minimum_interface_area=1.0 -brim_replaces_support=True -wall_line_count=2 -wipe_hop_amount=2 -prime_tower_size=20 -gradual_support_infill_step_height=0.4 -support_infill_sparse_thickness=0.2 -interlocking_enable=False -machine_max_feedrate_x=300 -top_bottom_pattern=lines -wall_material_flow=100 -ironing_only_highest_layer=False -material_flow=100 -material_flush_purge_speed=0.5 -acceleration_ironing=1000 -hole_xy_offset_max_diameter=0 -ironing_monotonic=False -raft_interface_layers=1 -roofing_angles=[] -brim_inside_margin=2.5 -acceleration_print_layer_0=1000 -raft_interface_fan_speed=50.0 -support_tree_branch_reach_limit=30 -support_conical_min_width=5.0 -gradual_support_infill_steps=2 -meshfix=0 -support_interface_enable=True -minimum_support_area=0.0 -material_anti_ooze_retraction_speed=50 -magic_fuzzy_skin_point_dist=0.8 -prime_tower_raft_base_line_spacing=1.6 -_plugin__curaenginegradualflow__0_1_0__reset_flow_duration=2.0 -wall_transition_angle=10 -top_skin_expand_distance=0.8 -jerk_prime_tower=20 -machine_extruder_count=2 -nozzle_disallowed_areas=[] -material_break_preparation_temperature=210 -machine_always_write_active_tool=False -time=13:56:09 -material_type=empty -print_temperature=200 -date=08-12-2023 -initial_extruder_nr=0 -nozzle_offsetting_for_disallowed_areas=True diff --git a/stress_benchmark/resources/068.wkt b/stress_benchmark/resources/068.wkt deleted file mode 100644 index e54c3c5036..0000000000 --- a/stress_benchmark/resources/068.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON (((116557 108997, 116571 109003, 116623 108979, 116612 109036, 116622 109048, 116681 109050, 116647 109098, 116650 109113, 116701 109140, 116651 109165, 116647 109180, 116682 109228, 116623 109230, 116613 109242, 116624 109299, 116571 109275, 116557 109281, 116542 109339, 116505 109295, 116489 109295, 116453 109339, 116437 109282, 116423 109276, 116369 109299, 116380 109243, 116370 109231, 116311 109229, 116347 109181, 116343 109166, 116291 109140, 116344 109113, 116347 109098, 116311 109050, 116370 109048, 116380 109036, 116369 108980, 116423 109003, 116437 108997, 116452 108940, 116489 108984, 116505 108984, 116541 108940)))15662 115271, 115650 115271, 114975 115775, 114576 115027, 114565 115022, 113569 115192, 113073 114302, 113062 114297, 112221 114451, 112189 113629, 112182 113619, 111222 113332, 111152 112331, 111145 112322, 110329 112100, 110673 111319, 110671 111308, 109924 110623, 110310 109694, 110307 109682, 109664 109147, 110306 108588, 110308 108576, 109921 107630, 110668 106945, 110670 106934, 110324 106151, 111138 105927, 111145 105918, 111214 104918, 112175 104630, 112182 104620, 112211 103797, 113051 103949, 113062 103944, 113559 103054, 114556 103223, 114567 103218, 114963 102469, 115638 102970, 115650 102970, 116492 102383))) \ No newline at end of file diff --git a/stress_benchmark/resources/069.settings b/stress_benchmark/resources/069.settings deleted file mode 100644 index f44800ff2a..0000000000 --- a/stress_benchmark/resources/069.settings +++ /dev/null @@ -1,280 +0,0 @@ -support_interface_line_width=0.4 -machine_max_acceleration_y=9000 -gradual_infill_steps=0 -machine_height=205 -material_break_preparation_retracted_position=-16 -wall_0_wipe_dist=0.2 -speed_ironing=13.333333333333334 -prime_tower_brim_enable=True -travel_speed=120 -bridge_skin_density_3=100 -draft_shield_dist=10 -infill_support_enabled=False -material_flush_purge_length=60 -jerk_travel_enabled=False -raft_interface_line_width=0.6000000000000001 -group_outer_walls=True -wall_transition_length=0.4 -acceleration_travel=5000 -wall_overhang_speed_factor=100 -machine_nozzle_temp_enabled=False -material_break_speed=25 -wipe_retraction_retract_speed=25 -extruder_prime_pos_z=0 -retraction_prime_speed=25 -print_sequence=all_at_once -flow_rate_extrusion_offset_factor=100 -prime_tower_enable=False -_plugin__curaenginetiledinfill__0_2_0__tile_size=500 -support_roof_line_distance=0.4 -machine_nozzle_head_distance=5 -support_bottom_distance=0.1 -brim_width=8.0 -speed_support_interface=20.0 -small_feature_speed_factor=50 -cutting_mesh=False -material_adhesion_tendency=0 -small_feature_max_length=0.0 -material_no_load_move_factor=0.91 -mesh_position_x=0 -zig_zaggify_support=True -inset_direction=outside_in -wall_extruder_nr=-1 -jerk_wall=20 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall=100 -meshfix_union_all_remove_holes=False -meshfix_maximum_deviation=10.0 -material_is_support_material=False -speed_equalize_flow_width_factor=110.0 -lightning_infill_overhang_angle=40 -wall_0_extruder_nr=-1 -top_bottom_thickness=0.8 -support_tree_top_rate=10 -machine_extruders_share_nozzle=False -machine_steps_per_mm_z=50 -quality_name=Fine -speed_print=50 -prime_tower_line_width=0.4 -roofing_monotonic=True -wall_x_material_flow_roofing=100 -skirt_height=3 -machine_feeder_wheel_diameter=10.0 -jerk_print_layer_0=20 -infill_extruder_nr=-1 -bridge_sparse_infill_max_density=0 -jerk_layer_0=20 -meshfix_maximum_extrusion_area_deviation=50000 -material_bed_temp_prepend=True -acceleration_wall_x_roofing=3000 -roofing_extruder_nr=-1 -speed_travel_layer_0=120 -support_bottom_enable=False -support_extruder_nr_layer_0=0 -support_tower_roof_angle=65 -support_supported_skin_fan_speed=100 -infill_sparse_thickness=0.1 -support_tower_maximum_supported_diameter=3.0 -machine_endstop_positive_direction_y=False -wall_overhang_angle=90 -machine_minimum_feedrate=0.0 -line_width=0.4 -top_bottom_extruder_nr=-1 -ironing_inset=0.38 -machine_acceleration=3000 -z_seam_x=111.5 -draft_shield_height_limitation=full -speed_wall_0_roofing=30.0 -raft_surface_jerk=20 -switch_extruder_retraction_speed=20 -skirt_brim_material_flow=100 -infill_mesh_order=0 -acceleration_prime_tower=3000 -infill_multiplier=1 -raft_surface_thickness=0.1 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_support_interface=100 -jerk_support_bottom=20 -jerk_support_interface=20 -raft_interface_extruder_nr=0 -_plugin__curaenginegradualflow__0_1_0__gradual_flow_enabled=False -bridge_wall_coast=0 -z_seam_corner=z_seam_corner_none -machine_max_feedrate_z=40 -speed_topbottom=20 -small_skin_on_surface=False -machine_firmware_retract=True -center_object=False -wipe_retraction_speed=25 -support_tree_max_diameter=25 -bridge_skin_density_2=100 -support_bottom_line_width=0.4 -ooze_shield_angle=60 -initial_layer_line_width_factor=100.0 -layer_height_0=0.27 -retraction_count_max=25 -retraction_combing_max_distance=15 -z_seam_relative=False -skin_outline_count=1 -support_interface_wall_count=1 -infill_sparse_density=0 -infill_overlap=10 -bridge_skin_speed_3=20 -mold_width=5 -material_final_print_temperature=185 -support_tree_rest_preference=graceful -raft_acceleration=3000 -skin_preshrink=0.8 -infill_offset_y=0 -support_interface_pattern=zigzag -infill_before_walls=True -machine_steps_per_mm_e=1600 -sub_div_rad_add=0.4 -magic_spiralize=False -fill_outline_gaps=True -infill_pattern=grid -support_skip_zag_per_mm=20 -support_roof_extruder_nr=0 -ironing_enabled=False -interlocking_orientation=22.5 -initial_bottom_layers=8 -machine_center_is_zero=False -skirt_brim_extruder_nr=-1 -raft_base_extruder_nr=0 -connect_skin_polygons=False -magic_fuzzy_skin_point_density=1.25 -speed_support_roof=20.0 -speed_wall_x_roofing=40.0 -acceleration_travel_layer_0=5000.0 -coasting_min_volume=0.8 -material_print_temperature_layer_0=200 -brim_outside_only=True -slicing_tolerance=middle -adaptive_layer_height_threshold=0.2 -machine_nozzle_size=0.4 -raft_base_jerk=20 -wall_line_width_0=0.4 -acceleration_support_roof=3000 -skin_line_width=0.4 -raft_base_fan_speed=0 -machine_heated_bed=True -machine_max_feedrate_e=45 -meshfix_fluid_motion_shift_distance=0.1 -conical_overhang_hole_size=0 -jerk_travel=20 -retraction_combing=no_outer_surfaces -material_shrinkage_percentage=100.0 -infill_line_distance=0 -bridge_settings_enabled=True -ironing_flow=10.0 -material_initial_print_temperature=190 -machine_max_jerk_xy=20.0 -bottom_skin_preshrink=0.8 -wipe_repeat_count=5 -support_roof_line_width=0.4 -support_bottom_density=100 -infill_offset_x=0 -roofing_pattern=lines -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_spin_up_time=0.5 -support_extruder_nr=0 -conical_overhang_angle=50 -speed_print_layer_0=30 -cool_fan_speed_0=0 -support_tree_branch_diameter_angle=7 -support_bottom_offset=0.8 -raft_interface_line_spacing=0.8 -meshfix_union_all=True -support_line_distance=2.6666666666666665 -min_bead_width=0.34 -wipe_hop_speed=10 -wall_x_material_flow_layer_0=95.0 -support_enable=False -raft_base_speed=15 -speed_travel=120 -blackmagic=0 -bridge_skin_material_flow=95.0 -acceleration_wall_0_roofing=3000 -machine_max_jerk_e=5.0 -mesh_position_y=0 -gantry_height=52 -alternate_carve_order=True -adaptive_layer_height_variation_step=0.01 -support_xy_distance_overhang=0.2 -cool_min_layer_time=5 -material_extrusion_cool_down_speed=0.7 -bottom_layers=8 -support_tower_diameter=3.0 -day=Fri -support_mesh_drop_down=True -raft_base_acceleration=3000 -raft_surface_line_spacing=0.4 -raft_interface_acceleration=3000 -speed_support_infill=30.0 -mesh_position_z=0 -wipe_move_distance=20 -layer_0_z_overlap=0.15 -jerk_roofing=20 -minimum_roof_area=1.0 -extruder_prime_pos_abs=False -quality_changes_name=empty -prime_tower_wipe_enabled=True -speed_wall_x=40.0 -support_offset=0.8 -speed_roofing=20 -support_pattern=zigzag -skin_edge_support_thickness=0.4 -raft_jerk=20 -support_xy_distance=0.7 -support_brim_width=1.2000000000000002 -support_bottom_stair_step_width=5.0 -material_crystallinity=False -retraction_hop_only_when_collides=False -dual=0 -bottom_skin_expand_distance=0.8 -skin_overlap_mm=0.08 -raft_surface_speed=20 -cool_min_layer_time_fan_speed_max=10 -prime_blob_enable=False -support_roof_density=100 -speed=0 -brim_gap=0 -zig_zaggify_infill=False -support_bottom_wall_count=1 -meshfix_fluid_motion_angle=15 -switch_extruder_prime_speed=20 -_plugin__curaenginegradualflow__0_1_0__max_flow_acceleration=1 -small_skin_width=0.8 -_plugin__curaenginefanspeedbyfeaturetype__0_1_0__cool_fan_speed_wall_x=100 -jerk_wall_x=20 -coasting_volume=0.064 -min_odd_wall_line_width=0.34 -cool_fan_speed=100 -skin_material_flow=95.0 -speed_wall=40.0 -xy_offset_layer_0=-0.09 -cool_min_temperature=190 -magic_fuzzy_skin_outside_only=False -roofing_material_flow=100 -travel_avoid_supports=False -support_zag_skip_count=8 -infill_mesh=False -support_join_distance=2.0 -retraction_amount=6.5 -support_interface_density=100 -machine_max_acceleration_z=100 -acceleration_support_bottom=3000 -cool_fan_speed_min=100 -machine_use_extruder_offset_to_offset_coords=True -acceleration_wall_x=3000 -speed_layer_0=30 -top_thickness=0.8 -raft_smoothing=5 -machine_max_acceleration_x=9000 -machine_max_jerk_z=0.4 -raft_base_line_spacing=1.6 -support_roof_enable=False -acceleration_enabled=False -speed_slowdown_layers=2 -acceleration_roofing=3000 -top_bottom_pattern_0=lines -machine_min_cool_heat_time_window=50.0 -machine_extruders_shared_nozzle_initial_retraction=0 -support_fan_enable=False diff --git a/stress_benchmark/resources/069.wkt b/stress_benchmark/resources/069.wkt deleted file mode 100644 index 1480fbd502..0000000000 --- a/stress_benchmark/resources/069.wkt +++ /dev/null @@ -1 +0,0 @@ -MULTIPOLYGON (((112630 86900, 113828 86992, 114805 87104, 115775 87255, 116739 87445, 117693 87673, 118639 87940, 119573 88242, 120711 88662, 122084 89266, 123167 89821, 124238 90425, 125477 91226, 126463 91950, 127232 92562, 127231 92563, 127973 93205, 128871 94047, 129713 94936, 130359 95676, 130975 96441, 131561 97231, 132114 98041, 132634 98874, 133120 99726, 133573 100598, 133990 101487, 134464 102611, 134465 102611, 134876 103776, 135166 104714, 135482 105909, 135481 105909, 135723 107104, 135879 108074, 135996 109049, 136074 110029, 136113 111009, 136113 111993, 136074 112972, 135996 113953, 135879 114927, 135723 115897, 135481 117092, 135165 118287, 134875 119225, 134462 120396, 134463 120396, 133989 121515, 133464 122634, 132744 123950, 132112 124961, 131560 125772, 130974 126560, 130358 127326, 129712 128065, 128872 128952, 127973 129796, 127231 130438, 126461 131050, 125671 131632, 124855 132180, 124021 132698, 123166 133180, 122293 133627, 121401 134040, 120494 134418, 119573 134759, 119573 134758, 118639 135060, 117693 135327, 116738 135555, 115774 135745, 114563 135934, 113338 136050, 112358 136104, 111375 136119, 110395 136094, 109414 136031, 108438 135928, 107466 135787, 106500 135606, 105542 135387, 104595 135131, 103657 134837, 102733 134505, 101822 134136, 100928 133735, 100049 133295, 99190 132821, 98348 132312, 97528 131770, 96732 131198, 95744 130425, 94663 129471, 93790 128602, 93121 127881, 92327 126954, 91582 125971, 91021 125164, 90491 124337, 89874 123278, 89207 121961, 88719 120837, 88365 119920, 88047 118991, 88048 118991, 87768 118050, 87525 117097, 87268 115888, 87050 114430, 86940 113218, 86892 112237, 86880 111016, 86940 109782, 87029 108803, 87156 107830, 87321 106862, 87525 105902, 87768 104949, 88048 104007, 88047 104007, 88365 103078, 88719 102162, 89218 101013, 89219 101013, 89875 99720, 90492 98662, 90491 98662, 91021 97835, 91582 97028, 92330 96041, 92331 96042, 93122 95119, 93791 94398, 94655 93537, 94654 93537, 95581 92719, 96532 91945, 97530 91228, 98350 90686, 99191 90178, 100049 89705, 100928 89265, 101824 88862, 102735 88493, 103658 88162, 104596 87868, 105542 87612, 105542 87613, 106501 87394, 107467 87213, 108439 87072, 109415 86969, 110396 86906, 111378 86881))) \ No newline at end of file From b7a7a878cdefd08539bc8b8d71410228fde446b6 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 8 Dec 2023 18:11:00 +0100 Subject: [PATCH 159/218] Use breakpad for sentry Contribute to CURA-11443 --- conanfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conanfile.py b/conanfile.py index 242bd2b8af..ba8d10794b 100644 --- a/conanfile.py +++ b/conanfile.py @@ -73,6 +73,8 @@ def configure(self): self.options["arcus"].shared = True if self.settings.os == "Linux": self.options["openssl"].shared = True + if self.options.get_safe("enable_sentry", False): + self.options["sentry-native"].backend = "breakpad" def validate(self): if self.settings.compiler.get_safe("cppstd"): From 2c1ac2860e67d31169caf7b306dff6371a058773 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sun, 10 Dec 2023 15:11:52 +0100 Subject: [PATCH 160/218] Integrate Sentry for better error tracking Sentry has been included to improve error tracking. It has been set to tag plugins, Cura version and machine names, allowing more specific and convenient debugging. The actual CuraEngine version has now been set as the Sentry release. Contributes to CURA-11443 --- CMakeLists.txt | 5 +++++ src/Slice.cpp | 11 ++++++++++- src/communication/ArcusCommunication.cpp | 8 ++++++++ src/main.cpp | 20 +++++++++----------- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ddb79f5353..9ae99709be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -225,8 +225,13 @@ target_link_libraries(_CuraEngine asio-grpc::asio-grpc grpc::grpc protobuf::libprotobuf + $<$:sentry::sentry> $<$:GTest::gtest>) +target_compile_definitions(_CuraEngine PRIVATE + $<$:SENTRY_URL=\"${SENTRY_URL}\"> +) + if (NOT WIN32) add_executable(CuraEngine src/main.cpp) # Then compile main.cpp as separate executable, and link the library to it. else () diff --git a/src/Slice.cpp b/src/Slice.cpp index eb92ae1d68..8b9defa7ad 100644 --- a/src/Slice.cpp +++ b/src/Slice.cpp @@ -1,9 +1,12 @@ -// Copyright (c) 2022 Ultimaker B.V. +// Copyright (c) 2023 UltiMaker // CuraEngine is released under the terms of the AGPLv3 or higher #include "Slice.h" #include +#ifdef SENTRY_URL +#include +#endif #include "ExtruderTrain.h" @@ -18,6 +21,12 @@ Slice::Slice(const size_t num_mesh_groups) void Slice::compute() { spdlog::info("All settings: {}", scene.getAllSettingsString()); +#ifdef SENTRY_URL + { + sentry_set_tag("cura.machine_name", scene.settings.get("machine_name").c_str()); + } +#endif + for (std::vector::iterator mesh_group = scene.mesh_groups.begin(); mesh_group != scene.mesh_groups.end(); mesh_group++) { scene.current_mesh_group = mesh_group; diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index f715e3cfe7..73ec403cfc 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -11,6 +11,9 @@ #include //The socket to communicate to. #include #include +#ifdef SENTRY_URL +#include +#endif #include "Application.h" //To get and set the current slice command. #include "ExtruderTrain.h" @@ -521,6 +524,11 @@ void ArcusCommunication::sliceNext() #ifdef ENABLE_PLUGINS for (const auto& plugin : slice_message->engine_plugins()) { +#ifdef SENTRY_URL + { + sentry_set_tag(fmt::format("plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); + } +#endif const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); } diff --git a/src/main.cpp b/src/main.cpp index 1965a329cb..b372ee39a2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -84,23 +84,21 @@ int main(int argc, char** argv) { // Not a production build sentry_options_set_environment(options, "development"); - sentry_options_set_release( - options, - fmt::format( - "curaengine@{}.{}.{}-{}.{}", - version.major, - version.minor, - version.patch, - version.prerelease_type == semver::prerelease::alpha ? "alpha" : "beta", - version.prerelease_number) - .c_str()); } else { sentry_options_set_environment(options, "production"); - sentry_options_set_release(options, fmt::format("curaengine@{}", version.to_string()).c_str()); } + + // Set the actual CuraEngine version + sentry_options_set_release(options, fmt::format("curaengine@{}", cura_engine_version).c_str()); sentry_init(options); + + // Set the presumed Cura version as a Sentry tag (this is unknown at the time of compiling + auto prerelease = version.prerelease_type == semver::prerelease::none + ? "" + : fmt::format("-{}.{}", version.prerelease_type == semver::prerelease::alpha ? "alpha" : "beta", version.prerelease_number); + sentry_set_tag("cura.version", fmt::format("{}.{}.{}{}", version.major, version.minor, version.patch, prerelease).c_str()); } #endif From 1bfb7869c527529f7b37553114f901fe30a5c4b0 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 11 Dec 2023 08:14:18 +0100 Subject: [PATCH 161/218] Don't use Sentry in Arcus communication logic Fails to compile due to WinSock.h already being included. Contribute to CURA-11443 --- src/communication/ArcusCommunication.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 73ec403cfc..f715e3cfe7 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -11,9 +11,6 @@ #include //The socket to communicate to. #include #include -#ifdef SENTRY_URL -#include -#endif #include "Application.h" //To get and set the current slice command. #include "ExtruderTrain.h" @@ -524,11 +521,6 @@ void ArcusCommunication::sliceNext() #ifdef ENABLE_PLUGINS for (const auto& plugin : slice_message->engine_plugins()) { -#ifdef SENTRY_URL - { - sentry_set_tag(fmt::format("plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); - } -#endif const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); } From ba4d80e5d5508d1013e28184233d6933c9b89252 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Mon, 11 Dec 2023 09:05:31 +0100 Subject: [PATCH 162/218] Package pdb if comnpiled with RelWithDebInfo Contribute to CURA-11443 --- conanfile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conanfile.py b/conanfile.py index ba8d10794b..0747a81d19 100644 --- a/conanfile.py +++ b/conanfile.py @@ -165,6 +165,8 @@ def package(self): copy(self, f"CuraEngine{ext}", src=self.build_folder, dst=path.join(self.package_folder, "bin")) copy(self, f"_CuraEngine.*", src=self.build_folder, dst=path.join(self.package_folder, "lib")) copy(self, "LICENSE*", src=self.source_folder, dst=path.join(self.package_folder, "license")) + if self.settings.os == "Windows" and self.settings.build_type == "RelWithDebInfo": + copy(self, "CuraEngine.pdb", src=self.build_folder, dst=path.join(self.package_folder, "bin")) def package_info(self): ext = ".exe" if self.settings.os == "Windows" else "" From 5ad98f09c787355b849b6fec67a3092c8ec98123 Mon Sep 17 00:00:00 2001 From: "saumya.jain" Date: Mon, 11 Dec 2023 15:57:35 +0100 Subject: [PATCH 163/218] G-code addition in case of print process reporting CURA-11392 --- include/gcodeExport.h | 1 + src/gcodeExport.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/gcodeExport.h b/include/gcodeExport.h index b3b4ef6fe4..ae04e9dd3b 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -167,6 +167,7 @@ class GCodeExport : public NoCopy Temperature bed_temperature_; //!< Current build plate temperature. Temperature build_volume_temperature_; //!< build volume temperature bool machine_heated_build_volume_; //!< does the machine have the ability to control/stabilize build-volume-temperature + bool ppr_enable_; //! if the print process reporting is enabled protected: /*! diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index cb906927aa..2e9a1962ee 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -61,6 +61,7 @@ GCodeExport::GCodeExport() bed_temperature_ = 0; build_volume_temperature_ = 0; machine_heated_build_volume_ = false; + ppr_enable_ = false; fan_number_ = 0; use_extruder_offset_to_offset_coords_ = false; @@ -84,6 +85,7 @@ void GCodeExport::preSetup(const size_t start_extruder) setFlavor(mesh_group->settings.get("machine_gcode_flavor")); use_extruder_offset_to_offset_coords_ = mesh_group->settings.get("machine_use_extruder_offset_to_offset_coords"); const size_t extruder_count = Application::getInstance().current_slice_->scene.extruders.size(); + ppr_enable_ = mesh_group->settings.get("ppr_enable"); for (size_t extruder_nr = 0; extruder_nr < extruder_count; extruder_nr++) { @@ -263,6 +265,27 @@ std::string GCodeExport::getFileHeader( prefix << ";PRINT.SIZE.MAX.Y:" << INT2MM(total_bounding_box_.max_.y_) << new_line_; prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box_.max_.z_) << new_line_; prefix << ";SLICE_UUID:" << slice_uuid_ << new_line_; + + if(ppr_enable_) + { + prefix << ";PPR_ENABLE:TRUE" << new_line_; + + for (size_t extr_nr = 0; extr_nr < extruder_count; extr_nr++) + { + if (! extruder_is_used[extr_nr]) + { + continue; + } + const Settings& extruder_settings = Application::getInstance().current_slice_->scene.extruders[extr_nr].settings_; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_FLOW_WARNING:" << extruder_settings.get("flow_warn_limit") << new_line_; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_FLOW_LIMIT:" << extruder_settings.get("flow_anomaly_limit") << new_line_; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_PRINTING_TEMPERATURE_WARNING:" << extruder_settings.get("print_temp_warn_limit") << new_line_; + prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_PRINTING_TEMPERATURE_LIMIT:" << extruder_settings.get("print_temp_anomaly_limit") << new_line_; + + } + prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_WARNING:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_warn_limit") << new_line_; + prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_LIMIT:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_anomaly_limit") << new_line_; + } prefix << ";END_OF_HEADER" << new_line_; break; default: From bcb30d7deb2510f1cef2e28af4756250866ff76e Mon Sep 17 00:00:00 2001 From: saumyaj3 Date: Mon, 11 Dec 2023 14:58:10 +0000 Subject: [PATCH 164/218] Applied clang-format. --- src/gcodeExport.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gcodeExport.cpp b/src/gcodeExport.cpp index 2e9a1962ee..3df5147dde 100644 --- a/src/gcodeExport.cpp +++ b/src/gcodeExport.cpp @@ -266,9 +266,9 @@ std::string GCodeExport::getFileHeader( prefix << ";PRINT.SIZE.MAX.Z:" << INT2MM(total_bounding_box_.max_.z_) << new_line_; prefix << ";SLICE_UUID:" << slice_uuid_ << new_line_; - if(ppr_enable_) + if (ppr_enable_) { - prefix << ";PPR_ENABLE:TRUE" << new_line_; + prefix << ";PPR_ENABLE:TRUE" << new_line_; for (size_t extr_nr = 0; extr_nr < extruder_count; extr_nr++) { @@ -281,10 +281,11 @@ std::string GCodeExport::getFileHeader( prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_FLOW_LIMIT:" << extruder_settings.get("flow_anomaly_limit") << new_line_; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_PRINTING_TEMPERATURE_WARNING:" << extruder_settings.get("print_temp_warn_limit") << new_line_; prefix << ";EXTRUDER_TRAIN." << extr_nr << ".PPR_PRINTING_TEMPERATURE_LIMIT:" << extruder_settings.get("print_temp_anomaly_limit") << new_line_; - } - prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_WARNING:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_warn_limit") << new_line_; - prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_LIMIT:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_anomaly_limit") << new_line_; + prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_WARNING:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_warn_limit") + << new_line_; + prefix << ";PPR_BUILD_VOLUME_TEMPERATURE_LIMIT:" << Application::getInstance().current_slice_->scene.extruders[0].settings_.get("bv_temp_anomaly_limit") + << new_line_; } prefix << ";END_OF_HEADER" << new_line_; break; From 818140174347078802673403d1ff15ff7dee20df Mon Sep 17 00:00:00 2001 From: "saumya.jain" Date: Mon, 11 Dec 2023 16:54:18 +0100 Subject: [PATCH 165/218] Comment fixing CURA-11392 --- include/gcodeExport.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/gcodeExport.h b/include/gcodeExport.h index ae04e9dd3b..950fe50824 100644 --- a/include/gcodeExport.h +++ b/include/gcodeExport.h @@ -167,7 +167,7 @@ class GCodeExport : public NoCopy Temperature bed_temperature_; //!< Current build plate temperature. Temperature build_volume_temperature_; //!< build volume temperature bool machine_heated_build_volume_; //!< does the machine have the ability to control/stabilize build-volume-temperature - bool ppr_enable_; //! if the print process reporting is enabled + bool ppr_enable_; //!< if the print process reporting is enabled protected: /*! From 6f72a62607e0de2034f0217c1c8bbb4b26b9f610 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 12 Dec 2023 16:08:47 +0100 Subject: [PATCH 166/218] Fix build CURA-11098 --- src/support.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support.cpp b/src/support.cpp index c1e653c77a..d669cf38e2 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -898,7 +898,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st for (auto [current_point_idx, current_point] : current_poly | ranges::views::enumerate) { auto min_dist2 = std::numeric_limits::max(); - Point min_point; + Point2LL min_point; for (auto delta_poly : layer_delta) { From 90416fb4966d22267f3d0f0212bf5374865dcaf6 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 12 Dec 2023 15:09:26 +0000 Subject: [PATCH 167/218] Applied clang-format. --- src/support.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/support.cpp b/src/support.cpp index d669cf38e2..078c8847bf 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -41,11 +41,6 @@ #include "utils/math.h" #include "utils/views/get.h" -#include // sqrt, round -#include -#include // ifstream.good() -#include // pair - namespace cura { From 3ad538ac69d77ac8690ed4485eddd8688e177807 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 15 Dec 2023 16:54:34 +0100 Subject: [PATCH 168/218] Add Sentry breadcrumb logging Integrated Sentry breadcrumbs into CuraEngine through a new sentry_sink utility. This allows Sentry to collect breadcrumb logs, which can be useful for debugging. The sentry_sink utility is included in Application.cpp and is only used when the SENTRY_URL is defined, ensuring that breadcrumb logging is an opt-in feature. Contribute to CURA-11482 --- include/utils/sentry_sink.h | 38 +++++++++++++++++++++++++++++++++++++ src/Application.cpp | 8 ++++++++ 2 files changed, 46 insertions(+) create mode 100644 include/utils/sentry_sink.h diff --git a/include/utils/sentry_sink.h b/include/utils/sentry_sink.h new file mode 100644 index 0000000000..1a283c9e4b --- /dev/null +++ b/include/utils/sentry_sink.h @@ -0,0 +1,38 @@ +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher + +#ifndef CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H +#define CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H + +#include + +#include +#include + +template +class SentryBreadcrumbSink : public spdlog::sinks::base_sink +{ +protected: + void sink_it_(const spdlog::details::log_msg& msg) override + { + sentry_value_t crumb = sentry_value_new_breadcrumb("debug", msg.payload.data()); + sentry_value_set_by_key(crumb, "category", sentry_value_new_string(msg.logger_name.data())); + sentry_value_set_by_key(crumb, "level", sentry_value_new_string(spdlog::level::to_short_c_str(msg.level))); + + auto duration = msg.time.time_since_epoch(); + auto timestamp = std::chrono::duration_cast(duration).count(); + sentry_value_set_by_key(crumb, "timestamp", sentry_value_new_int32(timestamp)); + + sentry_add_breadcrumb(crumb); + } + void flush_() override + { + // The sink doesn't buffer or cache anything, so there's nothing to flush + } +}; + +// Convenience typedefs +using SentryBreadcrumbSink_mt = SentryBreadcrumbSink; +using SentryBreadcrumbSink_st = SentryBreadcrumbSink; + +#endif // CURAENGINE_INCLUDE_UTILS_SENTRY_SINK_H diff --git a/src/Application.cpp b/src/Application.cpp index 440bb09f3c..23e599cd96 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -24,6 +24,9 @@ #include "plugins/slots.h" #include "progress/Progress.h" #include "utils/ThreadPool.h" +#ifdef SENTRY_URL +#include "utils/sentry_sink.h" +#endif #include "utils/string.h" //For stringcasecompare. namespace cura @@ -36,6 +39,11 @@ Application::Application() auto base_sink = std::make_shared(); dup_sink->add_sink(base_sink); +#ifdef SENTRY_URL + auto sentry_sink = std::make_shared(); + dup_sink->add_sink(sentry_sink); +#endif + spdlog::default_logger()->sinks() = std::vector>{ dup_sink }; // replace default_logger sinks with the duplicating filtering sink to avoid spamming From 2f60a5927b409a7ec6714ae6b51be4988f4c4ec8 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 15 Dec 2023 17:19:17 +0100 Subject: [PATCH 169/218] Refactor sentry environment handling and logging level The environment variable checking for enabling sentry has been changed to use spdlog's OS GETENV method, reducing the code complexity. Introduced fetching of "CURAENGINE_SENTRY_USER" to set it as a user in Sentry. Also improved visibility by utilizing spdlog's TO_STRING_VIEW method in sentry_sink's logging level. Contribute to CURA-11482 --- include/utils/sentry_sink.h | 2 +- src/main.cpp | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/utils/sentry_sink.h b/include/utils/sentry_sink.h index 1a283c9e4b..9757eee5a7 100644 --- a/include/utils/sentry_sink.h +++ b/include/utils/sentry_sink.h @@ -17,7 +17,7 @@ class SentryBreadcrumbSink : public spdlog::sinks::base_sink { sentry_value_t crumb = sentry_value_new_breadcrumb("debug", msg.payload.data()); sentry_value_set_by_key(crumb, "category", sentry_value_new_string(msg.logger_name.data())); - sentry_value_set_by_key(crumb, "level", sentry_value_new_string(spdlog::level::to_short_c_str(msg.level))); + sentry_value_set_by_key(crumb, "level", sentry_value_new_string(spdlog::level::to_string_view(msg.level).data())); auto duration = msg.time.time_since_epoch(); auto timestamp = std::chrono::duration_cast(duration).count(); diff --git a/src/main.cpp b/src/main.cpp index b372ee39a2..4f04690850 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -53,15 +54,7 @@ int main(int argc, char** argv) // Want to set the sentry URL? Use '-c user.curaengine:sentry_url= -o curaengine:enable_sentry=True' with conan install #ifdef SENTRY_URL - bool use_sentry = true; - if (const char* use_sentry_env = std::getenv("use_sentry")) - { - if (std::strcmp(use_sentry_env, "0") == 0) - { - use_sentry = false; - } - } - if (use_sentry) + if (const auto use_sentry = spdlog::details::os::getenv("use_sentry"); ! use_sentry.empty() && use_sentry == "1") { // Setup sentry error handling. sentry_options_t* options = sentry_options_new(); @@ -99,13 +92,20 @@ int main(int argc, char** argv) ? "" : fmt::format("-{}.{}", version.prerelease_type == semver::prerelease::alpha ? "alpha" : "beta", version.prerelease_number); sentry_set_tag("cura.version", fmt::format("{}.{}.{}{}", version.major, version.minor, version.patch, prerelease).c_str()); + + if (const auto sentry_user = spdlog::details::os::getenv("CURAENGINE_SENTRY_USER"); ! sentry_user.empty()) + { + sentry_value_t user = sentry_value_new_object(); + sentry_value_set_by_key(user, "email", sentry_value_new_string(sentry_user.c_str())); + sentry_set_user(user); + } } #endif cura::Application::getInstance().run(argc, argv); #ifdef SENTRY_URL - if (use_sentry) + if (const auto use_sentry = spdlog::details::os::getenv("use_sentry"); ! use_sentry.empty() && use_sentry == "1") { sentry_close(); } From 3fa2d52f95c1350f1ab042598f9b3aa4b20fe338 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 15 Dec 2023 16:20:43 +0000 Subject: [PATCH 170/218] Applied clang-format. --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 4f04690850..93a4f8b7a0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,11 +11,11 @@ #include #include #include -#include #include #include #include +#include #include "utils/format/filesystem_path.h" #endif From bf5e4bd4d267b1e09f15600151aeab2ac9a3da19 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Fri, 15 Dec 2023 18:12:10 +0100 Subject: [PATCH 171/218] Add Sentry tracking data to slice requests Two new fields, 'sentry_id' and 'cura_version', have been added to the slice request message. The 'sentry_id' corresponds to the anonymized Sentry user ID while 'cura_version' represents the version of Cura that requested the slice. These fields will allow for tracking and analyzing usage data in a more detailed and user-specific manner. Contribute to CURA-11482 --- Cura.proto | 2 ++ include/communication/ArcusCommunication.h | 8 ++++++-- src/communication/ArcusCommunication.cpp | 12 ++++++++++++ src/main.cpp | 12 ------------ 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Cura.proto b/Cura.proto index 960396c5a8..32e09769ac 100644 --- a/Cura.proto +++ b/Cura.proto @@ -37,6 +37,8 @@ message Slice repeated Extruder extruders = 3; // The settings sent to each extruder object repeated SettingExtruder limit_to_extruder = 4; // From which stack the setting would inherit if not defined per object repeated EnginePlugin engine_plugins = 5; + string sentry_id = 6; // The anonymized Sentry user id that requested the slice + string cura_version = 7; // The version of Cura that requested the slice } message Extruder diff --git a/include/communication/ArcusCommunication.h b/include/communication/ArcusCommunication.h index ebc687deb4..ea8f40dd08 100644 --- a/include/communication/ArcusCommunication.h +++ b/include/communication/ArcusCommunication.h @@ -1,10 +1,14 @@ -// Copyright (c) 2022 Ultimaker B.V. -// CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2023 UltiMaker +// CuraEngine is released under the terms of the AGPLv3 or higher #ifndef ARCUSCOMMUNICATION_H #define ARCUSCOMMUNICATION_H #ifdef ARCUS +#ifdef SENTRY_URL +#include +#endif + #ifdef BUILD_TESTS #include #endif diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index f715e3cfe7..348993a2d8 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -11,6 +11,7 @@ #include //The socket to communicate to. #include #include +#include #include "Application.h" //To get and set the current slice command. #include "ExtruderTrain.h" @@ -518,6 +519,17 @@ void ArcusCommunication::sliceNext() } spdlog::debug("Received a Slice message."); +#ifdef SENTRY_URL + sentry_value_t user = sentry_value_new_object(); + sentry_value_set_by_key(user, "id", sentry_value_new_string(slice_message->sentry_id().c_str())); + if (const auto sentry_user = spdlog::details::os::getenv("CURAENGINE_SENTRY_USER"); ! sentry_user.empty()) + { + sentry_value_set_by_key(user, "email", sentry_value_new_string(sentry_user.c_str())); + } + sentry_set_user(user); + sentry_set_tag("cura.version", slice_message->cura_version().c_str()); +#endif + #ifdef ENABLE_PLUGINS for (const auto& plugin : slice_message->engine_plugins()) { diff --git a/src/main.cpp b/src/main.cpp index 93a4f8b7a0..ec1412760f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -87,18 +87,6 @@ int main(int argc, char** argv) sentry_options_set_release(options, fmt::format("curaengine@{}", cura_engine_version).c_str()); sentry_init(options); - // Set the presumed Cura version as a Sentry tag (this is unknown at the time of compiling - auto prerelease = version.prerelease_type == semver::prerelease::none - ? "" - : fmt::format("-{}.{}", version.prerelease_type == semver::prerelease::alpha ? "alpha" : "beta", version.prerelease_number); - sentry_set_tag("cura.version", fmt::format("{}.{}.{}{}", version.major, version.minor, version.patch, prerelease).c_str()); - - if (const auto sentry_user = spdlog::details::os::getenv("CURAENGINE_SENTRY_USER"); ! sentry_user.empty()) - { - sentry_value_t user = sentry_value_new_object(); - sentry_value_set_by_key(user, "email", sentry_value_new_string(sentry_user.c_str())); - sentry_set_user(user); - } } #endif From c7755fcce8483c1dbfc21c472f668065aca79864 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Fri, 15 Dec 2023 17:12:41 +0000 Subject: [PATCH 172/218] Applied clang-format. --- src/communication/ArcusCommunication.cpp | 2 +- src/main.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 348993a2d8..61bc315594 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -10,8 +10,8 @@ #include //The socket to communicate to. #include -#include #include +#include #include "Application.h" //To get and set the current slice command. #include "ExtruderTrain.h" diff --git a/src/main.cpp b/src/main.cpp index ec1412760f..adba786e85 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -86,7 +86,6 @@ int main(int argc, char** argv) // Set the actual CuraEngine version sentry_options_set_release(options, fmt::format("curaengine@{}", cura_engine_version).c_str()); sentry_init(options); - } #endif From d3f575656f294c8b63ab3a79f8940acd187fca27 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sun, 17 Dec 2023 16:57:19 +0100 Subject: [PATCH 173/218] Add preprocessor directives for Windows in ArcusCommunication.h and main.cpp The changes define NOMINMAX and WIN32_LEAN_AND_MEAN in ArcusCommunication.h and main.cpp. These preprocessor directives prevent the inclusion of conflicting or unused features in the Win32 API, ensuring compatibility and optimization for the Windows platform. Contribute to CURA-11482 --- include/communication/ArcusCommunication.h | 4 ---- src/communication/ArcusCommunication.cpp | 12 ++++++++++++ src/main.cpp | 8 ++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/communication/ArcusCommunication.h b/include/communication/ArcusCommunication.h index ea8f40dd08..6a1fa1c3f0 100644 --- a/include/communication/ArcusCommunication.h +++ b/include/communication/ArcusCommunication.h @@ -5,10 +5,6 @@ #define ARCUSCOMMUNICATION_H #ifdef ARCUS -#ifdef SENTRY_URL -#include -#endif - #ifdef BUILD_TESTS #include #endif diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 61bc315594..f59ab0e09c 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -5,6 +5,18 @@ #include "communication/ArcusCommunication.h" +#ifdef SENTRY_URL +#ifdef _WIN32 +#if ! defined(NOMINMAX) +#define NOMINMAX +#endif +#if ! defined(WIN32_LEAN_AND_MEAN) +#define WIN32_LEAN_AND_MEAN +#endif +#endif +#include +#endif + #include //To sleep while waiting for the connection. #include //To map settings to their extruder numbers for limit_to_extruder. diff --git a/src/main.cpp b/src/main.cpp index adba786e85..b1381244ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,14 @@ #endif #ifdef SENTRY_URL +#ifdef _WIN32 +#if ! defined(NOMINMAX) +#define NOMINMAX +#endif +#if ! defined(WIN32_LEAN_AND_MEAN) +#define WIN32_LEAN_AND_MEAN +#endif +#endif #include #include #include From fb98c23c2c9ecec37a1edf86df8585877289eddd Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sun, 17 Dec 2023 17:03:30 +0100 Subject: [PATCH 174/218] Add Sentry tagging for engine plugins The change introduces Sentry tagging for engine plugins in the ArcusCommunication module. This enhancement aids in better tracking and debugging by attaching the plugin's name and version as tags for Sentry logging. This tagging will be enabled only when the SENTRY_URL is defined. Contribute to CURA-11482 --- src/communication/ArcusCommunication.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index f59ab0e09c..263259b7b9 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -547,6 +547,9 @@ void ArcusCommunication::sliceNext() { const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); +#ifdef SENTRY_URL + sentry_set_tag(fmt::format("engine_plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); +#endif } #endif // ENABLE_PLUGINS From 0c3339ade2f77a88aa92b4f2c8b12fede96997bf Mon Sep 17 00:00:00 2001 From: jellespijker Date: Sun, 17 Dec 2023 16:04:02 +0000 Subject: [PATCH 175/218] Applied clang-format. --- src/communication/ArcusCommunication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 263259b7b9..256ebb85db 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -548,7 +548,7 @@ void ArcusCommunication::sliceNext() const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); #ifdef SENTRY_URL - sentry_set_tag(fmt::format("engine_plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); + sentry_set_tag(fmt::format("engine_plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); #endif } #endif // ENABLE_PLUGINS From c97b060e1e5c3f45fc59cfc99f7a0707a909f4cd Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Sun, 17 Dec 2023 17:04:46 +0100 Subject: [PATCH 176/218] Update Sentry tag formatting in ArcusCommunication Changed the way plugin information is formatted when setting tags in Sentry in ArcusCommunication.cpp. The plugin name now precedes 'version' to make identifying plugins in Sentry easier. Contribute to CURA-11482 --- src/communication/ArcusCommunication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 256ebb85db..072347d463 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -548,7 +548,7 @@ void ArcusCommunication::sliceNext() const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); #ifdef SENTRY_URL - sentry_set_tag(fmt::format("engine_plugin.{}", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); + sentry_set_tag(fmt::format("plugin_{}.version", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); #endif } #endif // ENABLE_PLUGINS From d4eef220e7628bebaac287c4bc7d29b49727b2d0 Mon Sep 17 00:00:00 2001 From: jellespijker Date: Sun, 17 Dec 2023 16:06:06 +0000 Subject: [PATCH 177/218] Applied clang-format. --- src/communication/ArcusCommunication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/communication/ArcusCommunication.cpp b/src/communication/ArcusCommunication.cpp index 072347d463..e26718b300 100644 --- a/src/communication/ArcusCommunication.cpp +++ b/src/communication/ArcusCommunication.cpp @@ -548,7 +548,7 @@ void ArcusCommunication::sliceNext() const auto slot_id = static_cast(plugin.id()); slots::instance().connect(slot_id, plugin.plugin_name(), plugin.plugin_version(), utils::createChannel({ plugin.address(), plugin.port() })); #ifdef SENTRY_URL - sentry_set_tag(fmt::format("plugin_{}.version", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); + sentry_set_tag(fmt::format("plugin_{}.version", plugin.plugin_name()).c_str(), plugin.plugin_version().c_str()); #endif } #endif // ENABLE_PLUGINS From 6951d644ba90d6ed4032dec15ed42a224b8cc8b9 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 18 Dec 2023 23:04:26 +0100 Subject: [PATCH 178/218] Clamp ratio between 0.0 and 1.0 CURA-11098 --- src/support.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support.cpp b/src/support.cpp index 078c8847bf..a8cc47399c 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -920,7 +920,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto min_dist = std::sqrt(min_dist2); const auto slope = min_dist / delta_z; const auto wall_angle = std::atan(std::abs(slope)); - const auto ratio = wall_angle / overhang_angle; + const auto ratio = std::max(0.0, std::min(1.0, wall_angle / overhang_angle)); const auto xy_distance_varying = std::lerp(xy_distance, xy_distance_natural, ratio); const poly_point_key key = { current_poly_idx, current_point_idx }; From 0d3e13d35bf18f1f4ffd322b358b080c7e6b074b Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 18 Dec 2023 23:05:46 +0100 Subject: [PATCH 179/218] Fix getting minimum xy-distance CURA-11098 --- src/support.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support.cpp b/src/support.cpp index a8cc47399c..236c0f16ae 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -1075,7 +1075,7 @@ void AreaSupport::generateSupportAreasForMesh( // we also want to use the min XY distance when the support is resting on a sloped surface so we calculate the area of the // layer below that protrudes beyond the current layer's area and combine it with the current layer's overhang disallowed area - Polygons minimum_xy_disallowed_areas = xy_disallowed_per_layer[layer_idx].offset(xy_distance_overhang); + Polygons minimum_xy_disallowed_areas = mesh.layers[layer_idx].getOutlines().offset(xy_distance_overhang); Polygons varying_xy_disallowed_areas = generateVaryingXYDisallowedArea(mesh, layer_idx); xy_disallowed_per_layer[layer_idx] = minimum_xy_disallowed_areas.unionPolygons(varying_xy_disallowed_areas); scripta::log("support_xy_disallowed_areas", xy_disallowed_per_layer[layer_idx], SectionType::SUPPORT, layer_idx); From b33c2e52f6f34fc83ad43c56d19f5fc91207e8cd Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 18 Dec 2023 23:05:58 +0100 Subject: [PATCH 180/218] Fix build CURA-11098 --- include/TreeSupportSettings.h | 2 +- src/TreeSupportTipGenerator.cpp | 4 +-- src/sliceDataStorage.cpp | 34 ++++++++++++++++++------- src/support.cpp | 44 ++++++++++++++++++++++++++++++--- 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 78be092694..1b2446805a 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -34,7 +34,7 @@ struct TreeSupportSettings max_radius(mesh_group_settings.get("support_tree_max_diameter") / 2) , maximum_move_distance((angle < TAU / 4) ? std::llround(tan(angle) * layer_height) : std::numeric_limits::max()) , maximum_move_distance_slow((angle_slow < TAU / 4) ? std::llround(tan(angle_slow) * layer_height) : std::numeric_limits::max()) - , support_bottom_layers(mesh_group_settings.get("support_bottom_enable") ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) + , support_bottom_layers((false && mesh_group_settings.get("support_bottom_enable")) ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) , tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)) , // Ensure lines always stack nicely even if layer height is large diameter_angle_scale_factor(sin(mesh_group_settings.get("support_tree_branch_diameter_angle")) * layer_height / branch_radius) diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index a908d06d71..a26a99b67f 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -30,12 +30,12 @@ namespace cura TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, TreeModelVolumes& volumes_s) : config_(mesh.settings) - , use_fake_roof_(! mesh.settings.get("support_roof_enable")) + , use_fake_roof_(! (false && mesh.settings.get("support_roof_enable"))) , volumes_(volumes_s) , minimum_support_area_(mesh.settings.get("minimum_support_area")) , minimum_roof_area_(! use_fake_roof_ ? mesh.settings.get("minimum_roof_area") : std::max(SUPPORT_TREE_MINIMUM_FAKE_ROOF_AREA, minimum_support_area_)) , support_roof_layers_( - mesh.settings.get("support_roof_enable") ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) + (false && mesh.settings.get("support_roof_enable")) ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS : 0) , connect_length_( diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 94e2ccf16f..aa7884a3bc 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -387,11 +387,11 @@ std::vector SliceDataStorage::getExtrudersUsed() const { ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_] = true; ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_] = true; - if (mesh_group_settings.get("support_roof_enable")) + if (false && mesh_group_settings.get("support_roof_enable")) { ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_] = true; } - if (mesh_group_settings.get("support_bottom_enable")) + if (false && mesh_group_settings.get("support_bottom_enable")) { ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_] = true; } @@ -729,13 +729,29 @@ void SupportLayer::fillInfillParts( = (layer_nr + 1) >= support_fill_per_layer.size() || layer_nr <= 0 ? Polygons() : support_fill_per_layer[layer_nr + 1].offset(grow_layer_above); const auto all_support_areas_in_layer = { support_this_layer.difference(support_layer_above), support_this_layer.intersection(support_layer_above) }; bool use_fractional_config = true; - for (auto& support_areas : all_support_areas_in_layer) - { - for (const PolygonsPart& island_outline : support_areas.splitIntoParts(unionAll)) - { - support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count, custom_line_distance); - } - use_fractional_config = false; + +// AABB aabb; +// for (const auto& support_areas : all_support_areas_in_layer) +// { +// aabb.include(support_areas); +// } +// aabb.expand(1000); +// SVG svg(fmt::format("support_area_{}_.svg", layer_nr), aabb); +// +// for (const auto support_areas : all_support_areas_in_layer) +// { +// svg.writePolygons(support_areas); +// +// for (const PolygonsPart& island_outline : support_areas.splitIntoParts(true)) +// { +//// support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); +// } +// use_fractional_config = false; +// } + + for (const PolygonsPart& island_outline : support_this_layer.splitIntoParts(true)) + { + support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); } } diff --git a/src/support.cpp b/src/support.cpp index 236c0f16ae..444e60ab71 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -683,6 +683,15 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) support_areas = support_areas.unionPolygons(); } + for (auto [idx, support_area] : global_support_areas_per_layer | ranges::views::enumerate) + { + AABB aabb; + aabb.include(support_area); + aabb.expand(1000); + SVG svg(fmt::format("support_area_{}.svg", idx), aabb); + svg.writePolygons(support_area); + } + // handle support interface for (auto& mesh : storage.meshes) { @@ -691,11 +700,11 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) continue; } - if (mesh->settings.get("support_roof_enable")) + if (false && mesh->settings.get("support_roof_enable")) { generateSupportRoof(storage, *mesh, global_support_areas_per_layer); } - if (mesh->settings.get("support_bottom_enable")) + if (false && mesh->settings.get("support_bottom_enable")) { generateSupportBottom(storage, *mesh, global_support_areas_per_layer); } @@ -881,6 +890,8 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st } } + spdlog::info("test"); + for (const auto& z_delta_poly : z_distances_layer_deltas) { const auto support_distance = z_delta_poly.support_distance; @@ -888,6 +899,11 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto layer_delta = z_delta_poly.layer_delta; const auto xy_distance_natural = support_distance * std::tan(overhang_angle); + spdlog::info("xy_distance_natural: {}", xy_distance_natural); + spdlog::info("support_distance: {}", support_distance); + spdlog::info("overhang_angle: {}", overhang_angle); + + for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { for (auto [current_point_idx, current_point] : current_poly | ranges::views::enumerate) @@ -953,6 +969,14 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st offset_dist = commutative_offset / static_cast(n); } + if (offset_dist < 0.0) + { + spdlog::warn("varying offset dist is negative: {}", offset_dist); + offset_dist = 0.0; + } + + spdlog::debug("varying offset dist: {}", offset_dist); + varying_offsets.push_back(static_cast(offset_dist)); } } @@ -1009,7 +1033,7 @@ void AreaSupport::generateSupportAreasForMesh( // early out const coord_t layer_thickness = mesh_group_settings.get("layer_height"); - const coord_t z_distance_top = ((mesh.settings.get("support_roof_enable")) ? roof_settings : infill_settings).get("support_top_distance"); + const coord_t z_distance_top = ((false && mesh.settings.get("support_roof_enable")) ? roof_settings : infill_settings).get("support_top_distance"); const size_t layer_z_distance_top = (z_distance_top / layer_thickness) + 1; if (layer_z_distance_top + 1 > layer_count) { @@ -1099,7 +1123,7 @@ void AreaSupport::generateSupportAreasForMesh( const coord_t max_tower_supported_diameter = infill_settings.get("support_tower_maximum_supported_diameter"); const bool use_towers = infill_settings.get("support_use_towers") && max_tower_supported_diameter > 0; - const coord_t z_distance_bottom = ((mesh.settings.get("support_bottom_enable")) ? bottom_settings : infill_settings).get("support_bottom_distance"); + const coord_t z_distance_bottom = ((false && mesh.settings.get("support_bottom_enable")) ? bottom_settings : infill_settings).get("support_bottom_distance"); const size_t bottom_empty_layer_count = round_up_divide(z_distance_bottom, layer_thickness); // number of empty layers between support and model const coord_t bottom_stair_step_height = std::max(static_cast(0), mesh.settings.get("support_bottom_stair_step_height")); const size_t bottom_stair_step_layer_count @@ -1328,6 +1352,17 @@ void AreaSupport::generateSupportAreasForMesh( } } + for (auto [idx, support_area] : support_areas | ranges::views::enumerate) + { + { + AABB aabb; + aabb.include(support_area); + aabb.expand(1000); + SVG svg(fmt::format("support_area_{}_.svg", idx), aabb); + svg.writePolygons(support_area); + } + } + storage.support.generated = true; } @@ -1776,6 +1811,7 @@ void AreaSupport::generateSupportInterfaceLayer( const double minimum_interface_area, Polygons& interface_polygons) { + spdlog::info("Generating support interface layer"); Polygons model = colliding_mesh_outlines.unionPolygons(); interface_polygons = support_areas.offset(safety_offset / 2).intersection(model); interface_polygons = interface_polygons.offset(safety_offset).intersection(support_areas); // Make sure we don't generate any models that are not printable. From 55101514bd87850b30b2e04b5b4dc11e7baeb8f5 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 18 Dec 2023 22:06:30 +0000 Subject: [PATCH 181/218] Applied clang-format. --- include/TreeSupportSettings.h | 3 ++- src/TreeSupportTipGenerator.cpp | 4 ++-- src/sliceDataStorage.cpp | 36 ++++++++++++++++----------------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 1b2446805a..476292d4d7 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -34,7 +34,8 @@ struct TreeSupportSettings max_radius(mesh_group_settings.get("support_tree_max_diameter") / 2) , maximum_move_distance((angle < TAU / 4) ? std::llround(tan(angle) * layer_height) : std::numeric_limits::max()) , maximum_move_distance_slow((angle_slow < TAU / 4) ? std::llround(tan(angle_slow) * layer_height) : std::numeric_limits::max()) - , support_bottom_layers((false && mesh_group_settings.get("support_bottom_enable")) ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) + , support_bottom_layers( + (false && mesh_group_settings.get("support_bottom_enable")) ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) , tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)) , // Ensure lines always stack nicely even if layer height is large diameter_angle_scale_factor(sin(mesh_group_settings.get("support_tree_branch_diameter_angle")) * layer_height / branch_radius) diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index a26a99b67f..0e1fa4252e 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -36,8 +36,8 @@ TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, T , minimum_roof_area_(! use_fake_roof_ ? mesh.settings.get("minimum_roof_area") : std::max(SUPPORT_TREE_MINIMUM_FAKE_ROOF_AREA, minimum_support_area_)) , support_roof_layers_( (false && mesh.settings.get("support_roof_enable")) ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) - : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS - : 0) + : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS + : 0) , connect_length_( (config_.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) + std::max(2 * config_.min_radius - 1.0 * config_.support_line_width, 0.0)) , support_tree_branch_distance_((config_.support_pattern == EFillMethod::TRIANGLES ? 3 : (config_.support_pattern == EFillMethod::GRID ? 2 : 1)) * connect_length_) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index aa7884a3bc..4b32bbfa04 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -730,24 +730,24 @@ void SupportLayer::fillInfillParts( const auto all_support_areas_in_layer = { support_this_layer.difference(support_layer_above), support_this_layer.intersection(support_layer_above) }; bool use_fractional_config = true; -// AABB aabb; -// for (const auto& support_areas : all_support_areas_in_layer) -// { -// aabb.include(support_areas); -// } -// aabb.expand(1000); -// SVG svg(fmt::format("support_area_{}_.svg", layer_nr), aabb); -// -// for (const auto support_areas : all_support_areas_in_layer) -// { -// svg.writePolygons(support_areas); -// -// for (const PolygonsPart& island_outline : support_areas.splitIntoParts(true)) -// { -//// support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); -// } -// use_fractional_config = false; -// } + // AABB aabb; + // for (const auto& support_areas : all_support_areas_in_layer) + // { + // aabb.include(support_areas); + // } + // aabb.expand(1000); + // SVG svg(fmt::format("support_area_{}_.svg", layer_nr), aabb); + // + // for (const auto support_areas : all_support_areas_in_layer) + // { + // svg.writePolygons(support_areas); + // + // for (const PolygonsPart& island_outline : support_areas.splitIntoParts(true)) + // { + //// support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); + // } + // use_fractional_config = false; + // } for (const PolygonsPart& island_outline : support_this_layer.splitIntoParts(true)) { From 5910dede0aaaea95f32c5676f3281a3fe123656d Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 19 Dec 2023 10:49:55 +0100 Subject: [PATCH 182/218] Revert "Fix build" This reverts commit b33c2e52 --- include/TreeSupportSettings.h | 3 +-- src/TreeSupportTipGenerator.cpp | 8 +++--- src/sliceDataStorage.cpp | 34 +++++++------------------ src/support.cpp | 44 +++------------------------------ 4 files changed, 18 insertions(+), 71 deletions(-) diff --git a/include/TreeSupportSettings.h b/include/TreeSupportSettings.h index 476292d4d7..78be092694 100644 --- a/include/TreeSupportSettings.h +++ b/include/TreeSupportSettings.h @@ -34,8 +34,7 @@ struct TreeSupportSettings max_radius(mesh_group_settings.get("support_tree_max_diameter") / 2) , maximum_move_distance((angle < TAU / 4) ? std::llround(tan(angle) * layer_height) : std::numeric_limits::max()) , maximum_move_distance_slow((angle_slow < TAU / 4) ? std::llround(tan(angle_slow) * layer_height) : std::numeric_limits::max()) - , support_bottom_layers( - (false && mesh_group_settings.get("support_bottom_enable")) ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) + , support_bottom_layers(mesh_group_settings.get("support_bottom_enable") ? round_divide(mesh_group_settings.get("support_bottom_height"), layer_height) : 0) , tip_layers(std::max((branch_radius - min_radius) / (support_line_width / 3), branch_radius / layer_height)) , // Ensure lines always stack nicely even if layer height is large diameter_angle_scale_factor(sin(mesh_group_settings.get("support_tree_branch_diameter_angle")) * layer_height / branch_radius) diff --git a/src/TreeSupportTipGenerator.cpp b/src/TreeSupportTipGenerator.cpp index 0e1fa4252e..a908d06d71 100644 --- a/src/TreeSupportTipGenerator.cpp +++ b/src/TreeSupportTipGenerator.cpp @@ -30,14 +30,14 @@ namespace cura TreeSupportTipGenerator::TreeSupportTipGenerator(const SliceMeshStorage& mesh, TreeModelVolumes& volumes_s) : config_(mesh.settings) - , use_fake_roof_(! (false && mesh.settings.get("support_roof_enable"))) + , use_fake_roof_(! mesh.settings.get("support_roof_enable")) , volumes_(volumes_s) , minimum_support_area_(mesh.settings.get("minimum_support_area")) , minimum_roof_area_(! use_fake_roof_ ? mesh.settings.get("minimum_roof_area") : std::max(SUPPORT_TREE_MINIMUM_FAKE_ROOF_AREA, minimum_support_area_)) , support_roof_layers_( - (false && mesh.settings.get("support_roof_enable")) ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) - : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS - : 0) + mesh.settings.get("support_roof_enable") ? round_divide(mesh.settings.get("support_roof_height"), config_.layer_height) + : use_fake_roof_ ? SUPPORT_TREE_MINIMUM_FAKE_ROOF_LAYERS + : 0) , connect_length_( (config_.support_line_width * 100 / mesh.settings.get("support_tree_top_rate")) + std::max(2 * config_.min_radius - 1.0 * config_.support_line_width, 0.0)) , support_tree_branch_distance_((config_.support_pattern == EFillMethod::TRIANGLES ? 3 : (config_.support_pattern == EFillMethod::GRID ? 2 : 1)) * connect_length_) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 4b32bbfa04..94e2ccf16f 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -387,11 +387,11 @@ std::vector SliceDataStorage::getExtrudersUsed() const { ret[mesh_group_settings.get("support_extruder_nr_layer_0").extruder_nr_] = true; ret[mesh_group_settings.get("support_infill_extruder_nr").extruder_nr_] = true; - if (false && mesh_group_settings.get("support_roof_enable")) + if (mesh_group_settings.get("support_roof_enable")) { ret[mesh_group_settings.get("support_roof_extruder_nr").extruder_nr_] = true; } - if (false && mesh_group_settings.get("support_bottom_enable")) + if (mesh_group_settings.get("support_bottom_enable")) { ret[mesh_group_settings.get("support_bottom_extruder_nr").extruder_nr_] = true; } @@ -729,29 +729,13 @@ void SupportLayer::fillInfillParts( = (layer_nr + 1) >= support_fill_per_layer.size() || layer_nr <= 0 ? Polygons() : support_fill_per_layer[layer_nr + 1].offset(grow_layer_above); const auto all_support_areas_in_layer = { support_this_layer.difference(support_layer_above), support_this_layer.intersection(support_layer_above) }; bool use_fractional_config = true; - - // AABB aabb; - // for (const auto& support_areas : all_support_areas_in_layer) - // { - // aabb.include(support_areas); - // } - // aabb.expand(1000); - // SVG svg(fmt::format("support_area_{}_.svg", layer_nr), aabb); - // - // for (const auto support_areas : all_support_areas_in_layer) - // { - // svg.writePolygons(support_areas); - // - // for (const PolygonsPart& island_outline : support_areas.splitIntoParts(true)) - // { - //// support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); - // } - // use_fractional_config = false; - // } - - for (const PolygonsPart& island_outline : support_this_layer.splitIntoParts(true)) - { - support_infill_parts.emplace_back(island_outline, support_line_width, false, wall_line_count, custom_line_distance); + for (auto& support_areas : all_support_areas_in_layer) + { + for (const PolygonsPart& island_outline : support_areas.splitIntoParts(unionAll)) + { + support_infill_parts.emplace_back(island_outline, support_line_width, use_fractional_config, wall_line_count, custom_line_distance); + } + use_fractional_config = false; } } diff --git a/src/support.cpp b/src/support.cpp index 444e60ab71..236c0f16ae 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -683,15 +683,6 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) support_areas = support_areas.unionPolygons(); } - for (auto [idx, support_area] : global_support_areas_per_layer | ranges::views::enumerate) - { - AABB aabb; - aabb.include(support_area); - aabb.expand(1000); - SVG svg(fmt::format("support_area_{}.svg", idx), aabb); - svg.writePolygons(support_area); - } - // handle support interface for (auto& mesh : storage.meshes) { @@ -700,11 +691,11 @@ void AreaSupport::generateSupportAreas(SliceDataStorage& storage) continue; } - if (false && mesh->settings.get("support_roof_enable")) + if (mesh->settings.get("support_roof_enable")) { generateSupportRoof(storage, *mesh, global_support_areas_per_layer); } - if (false && mesh->settings.get("support_bottom_enable")) + if (mesh->settings.get("support_bottom_enable")) { generateSupportBottom(storage, *mesh, global_support_areas_per_layer); } @@ -890,8 +881,6 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st } } - spdlog::info("test"); - for (const auto& z_delta_poly : z_distances_layer_deltas) { const auto support_distance = z_delta_poly.support_distance; @@ -899,11 +888,6 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto layer_delta = z_delta_poly.layer_delta; const auto xy_distance_natural = support_distance * std::tan(overhang_angle); - spdlog::info("xy_distance_natural: {}", xy_distance_natural); - spdlog::info("support_distance: {}", support_distance); - spdlog::info("overhang_angle: {}", overhang_angle); - - for (auto [current_poly_idx, current_poly] : layer_current | ranges::views::enumerate) { for (auto [current_point_idx, current_point] : current_poly | ranges::views::enumerate) @@ -969,14 +953,6 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st offset_dist = commutative_offset / static_cast(n); } - if (offset_dist < 0.0) - { - spdlog::warn("varying offset dist is negative: {}", offset_dist); - offset_dist = 0.0; - } - - spdlog::debug("varying offset dist: {}", offset_dist); - varying_offsets.push_back(static_cast(offset_dist)); } } @@ -1033,7 +1009,7 @@ void AreaSupport::generateSupportAreasForMesh( // early out const coord_t layer_thickness = mesh_group_settings.get("layer_height"); - const coord_t z_distance_top = ((false && mesh.settings.get("support_roof_enable")) ? roof_settings : infill_settings).get("support_top_distance"); + const coord_t z_distance_top = ((mesh.settings.get("support_roof_enable")) ? roof_settings : infill_settings).get("support_top_distance"); const size_t layer_z_distance_top = (z_distance_top / layer_thickness) + 1; if (layer_z_distance_top + 1 > layer_count) { @@ -1123,7 +1099,7 @@ void AreaSupport::generateSupportAreasForMesh( const coord_t max_tower_supported_diameter = infill_settings.get("support_tower_maximum_supported_diameter"); const bool use_towers = infill_settings.get("support_use_towers") && max_tower_supported_diameter > 0; - const coord_t z_distance_bottom = ((false && mesh.settings.get("support_bottom_enable")) ? bottom_settings : infill_settings).get("support_bottom_distance"); + const coord_t z_distance_bottom = ((mesh.settings.get("support_bottom_enable")) ? bottom_settings : infill_settings).get("support_bottom_distance"); const size_t bottom_empty_layer_count = round_up_divide(z_distance_bottom, layer_thickness); // number of empty layers between support and model const coord_t bottom_stair_step_height = std::max(static_cast(0), mesh.settings.get("support_bottom_stair_step_height")); const size_t bottom_stair_step_layer_count @@ -1352,17 +1328,6 @@ void AreaSupport::generateSupportAreasForMesh( } } - for (auto [idx, support_area] : support_areas | ranges::views::enumerate) - { - { - AABB aabb; - aabb.include(support_area); - aabb.expand(1000); - SVG svg(fmt::format("support_area_{}_.svg", idx), aabb); - svg.writePolygons(support_area); - } - } - storage.support.generated = true; } @@ -1811,7 +1776,6 @@ void AreaSupport::generateSupportInterfaceLayer( const double minimum_interface_area, Polygons& interface_polygons) { - spdlog::info("Generating support interface layer"); Polygons model = colliding_mesh_outlines.unionPolygons(); interface_polygons = support_areas.offset(safety_offset / 2).intersection(model); interface_polygons = interface_polygons.offset(safety_offset).intersection(support_areas); // Make sure we don't generate any models that are not printable. From afab09646ac0f97d8cb4542e4bb6c4e15c30d6e4 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 20 Dec 2023 15:32:22 +0100 Subject: [PATCH 183/218] Optimize wall ordering Quick optimization we could make; we were checking if one polygon was the child of another polygon. We were doing this for contour parallel tool paths. These tool paths have one property we can exploit, the polygons are never intersecting. A logical consequence from this property is that if one point of the child polygon is inside the parent polygon then all points are inside. The child-parent check is simplified by chekcing a single point. CURA-11352 --- src/InsetOrderOptimizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 63d8c4f82c..3e42c3899f 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -187,7 +187,7 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& std::vector erase; for (const auto& root : roots) { - if (root->poly.inside(locator->poly)) + if (root->poly.inside(locator->poly[0], false)) { // The root polygon is inside the location polygon. It is no longer a root in the graph we are building. // Add this relationship (locator <-> root) to the graph, and remove root from roots. From c04523c675008ec649721bcd2411f6fa75af0372 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Wed, 20 Dec 2023 15:34:19 +0100 Subject: [PATCH 184/218] Simplify wall ordering code This also resolves some bugs CURA-11352 --- include/InsetOrderOptimizer.h | 2 +- src/InsetOrderOptimizer.cpp | 153 +++++++++++++--------------------- 2 files changed, 59 insertions(+), 96 deletions(-) diff --git a/include/InsetOrderOptimizer.h b/include/InsetOrderOptimizer.h index eadde17b9a..e813a134af 100644 --- a/include/InsetOrderOptimizer.h +++ b/include/InsetOrderOptimizer.h @@ -72,7 +72,7 @@ class InsetOrderOptimizer * * \param outer_to_inner Whether the wall polygons with a lower inset_idx should go before those with a higher one. */ - static value_type getRegionOrder(const auto& input, const bool outer_to_inner); + static value_type getRegionOrder(const std::vector& input, const bool outer_to_inner); /*! * Get the order constraints of the insets when printing walls per inset. diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 3e42c3899f..b89f21609c 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -3,13 +3,11 @@ #include "InsetOrderOptimizer.h" -#include #include #include #include #include -#include #include #include #include @@ -19,8 +17,7 @@ #include #include #include -#include -#include +#include #include "ExtruderTrain.h" #include "FffGcodeWriter.h" @@ -138,7 +135,7 @@ bool InsetOrderOptimizer::addToLayer() return added_something; } -InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& input, const bool outer_to_inner) +InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::vector& input, const bool outer_to_inner) { if (input.empty()) // Early out { @@ -150,44 +147,46 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& { const ExtrusionLine* line; Polygon poly; - double area; + coord_t area; + bool is_outer; }; - auto poly_views = input | views::convert(&ExtrusionLine::toPolygon); - auto pointer_view = input | rv::addressof; - auto locator_view = rv::zip(pointer_view, poly_views) - | rv::transform( - [](const auto& locator) - { - const auto poly = std::get<1>(locator); - const auto line = std::get<0>(locator); - return LineLoc{ - .line = line, - .poly = poly, - .area = line->is_closed_ ? poly.area() : 0.0, - }; - }) - | rg::to_vector; + + size_t min_inset_idx = std::numeric_limits::max(); + for (const auto& line : input) + { + min_inset_idx = std::min(min_inset_idx, line.inset_idx_); + } + + auto locator_view + = input + | rv::addressof + | rv::transform([&min_inset_idx](const ExtrusionLine* extrusion_line) { + const auto poly = extrusion_line->toPolygon(); + AABB aabb; + aabb.include(poly); + return LineLoc { + .line = extrusion_line, + .poly = poly, + .area = aabb.area(), + .is_outer = extrusion_line->inset_idx_ == min_inset_idx, + }; + }) + | rg::to_vector; // Sort polygons by increasing area, we are building the graph from the leaves (smallest area) upwards. - rg::sort( - locator_view, - [](const auto& lhs, const auto& rhs) - { - return std::abs(lhs) < std::abs(rhs); - }, - &LineLoc::area); + rg::sort(locator_view, [](const auto& lhs, const auto& rhs) { return lhs < rhs; }, &LineLoc::area); // Create a bi-direction directed acyclic graph (Tree). Where polygon B is a child of A if B is inside A. The root of the graph is // the polygon that contains all other polygons. The leaves are polygons that contain no polygons. // We need a bi-directional graph as we are performing a dfs from the root down and from each of the hole (which are leaves in the graph) up the tree std::unordered_multimap graph; - std::unordered_set roots{ &rg::front(locator_view) }; - for (const auto& locator : locator_view | rv::addressof | rv::drop(1)) + std::unordered_set roots; + for (const auto& locator : locator_view | rv::addressof) { std::vector erase; for (const auto& root : roots) { - if (root->poly.inside(locator->poly[0], false)) + if (locator->poly.inside(root->poly[0], false)) { // The root polygon is inside the location polygon. It is no longer a root in the graph we are building. // Add this relationship (locator <-> root) to the graph, and remove root from roots. @@ -207,84 +206,48 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const auto& std::unordered_multimap order; - for (const LineLoc* root : roots) + // find for each line the closest outer line + std::unordered_map min_depth; + std::unordered_map min_node; + for (const LineLoc* root_node : locator_view | rv::filter([](const auto& locator) { return locator.is_outer; }) | rv::addressof) { - std::map min_depth; - std::map min_node; - std::vector hole_roots; - - // Responsible for the following initialization - // - initialize all reachable nodes to root - // - mark all reachable nodes with their depth from the root - // - find hole roots, these are the innermost polygons enclosing a hole + const std::function update_nodes = [&root_node, &min_depth, &min_node](const auto& current_node, auto depth) { - const std::function initialize_nodes - = [graph, root, &hole_roots, &min_node, &min_depth](const auto current_node, const auto depth) + if (min_depth.find(current_node) == min_depth.end() || depth < min_depth[current_node]) { - min_node[current_node] = root; min_depth[current_node] = depth; - - // find hole roots (defined by a positive area in clipper1), these are leaves of the tree structure - // as odd walls are also leaves we filter them out by adding a non-zero area check - if (current_node != root && graph.count(current_node) == 1 && current_node->line->is_closed_ && current_node->area > 0) - { - hole_roots.push_back(current_node); - } - }; - - actions::dfs_depth_state(root, graph, initialize_nodes); - }; - - // For each hole root perform a dfs, and keep track of depth from hole root - // if the depth to a node is smaller than a depth calculated from another root update - // min_depth and min_node - { - for (auto& hole_root : hole_roots) - { - const std::function update_nodes = [hole_root, &min_depth, &min_node](const auto& current_node, auto depth) - { - if (depth < min_depth[current_node]) - { - min_depth[current_node] = depth; - min_node[current_node] = hole_root; - } - }; - - actions::dfs_depth_state(hole_root, graph, update_nodes); + min_node[current_node] = root_node; } }; - // perform a dfs from the root and all hole roots $r$ and set the order constraints for each polyline for which - // the depth is closest to root $r$ + actions::dfs_depth_state(root_node, graph, update_nodes); + } + + // perform a dfs from the root and all hole roots $r$ and set the order constraints for each polyline for which + // the depth is closest to root $r$ + for (const LineLoc* root_node : locator_view | rv::filter([](const auto& locator) { return locator.is_outer; }) | rv::addressof) + { + const std::function set_order_constraints + = [&order, &min_node, &root_node, &outer_to_inner](const auto& current_node, const auto& parent_node) { - const LineLoc* root_ = root; - const std::function set_order_constraints - = [&order, &min_node, &root_, graph, outer_to_inner](const auto& current_node, const auto& parent_node) + // if parent root is n + if (min_node[current_node] == root_node && parent_node != nullptr) { - if (min_node[current_node] == root_ && parent_node != nullptr) + // flip the key values if we want to print from inner to outer walls + if (outer_to_inner) { - if (outer_to_inner) - { - order.insert(std::make_pair(parent_node->line, current_node->line)); - } - else - { - order.insert(std::make_pair(current_node->line, parent_node->line)); - } + order.insert(std::make_pair(parent_node->line, current_node->line)); + } + else + { + order.insert(std::make_pair(current_node->line, parent_node->line)); } - }; - - actions::dfs_parent_state(root, graph, set_order_constraints); - - for (auto& hole_root : hole_roots) - { - root_ = hole_root; - actions::dfs_parent_state(hole_root, graph, set_order_constraints); } - } + }; + + actions::dfs_parent_state(root_node, graph, set_order_constraints); } - // flip the key values if we want to print from inner to outer walls return order; } From 6dba6273661b97eef723de5370c5250656718c1f Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Wed, 20 Dec 2023 14:35:51 +0000 Subject: [PATCH 185/218] Applied clang-format. --- src/InsetOrderOptimizer.cpp | 56 ++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index b89f21609c..f7a01d2272 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -12,12 +12,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include "ExtruderTrain.h" #include "FffGcodeWriter.h" @@ -157,24 +157,30 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v min_inset_idx = std::min(min_inset_idx, line.inset_idx_); } - auto locator_view - = input - | rv::addressof - | rv::transform([&min_inset_idx](const ExtrusionLine* extrusion_line) { - const auto poly = extrusion_line->toPolygon(); - AABB aabb; - aabb.include(poly); - return LineLoc { - .line = extrusion_line, - .poly = poly, - .area = aabb.area(), - .is_outer = extrusion_line->inset_idx_ == min_inset_idx, - }; - }) - | rg::to_vector; + auto locator_view = input | rv::addressof + | rv::transform( + [&min_inset_idx](const ExtrusionLine* extrusion_line) + { + const auto poly = extrusion_line->toPolygon(); + AABB aabb; + aabb.include(poly); + return LineLoc{ + .line = extrusion_line, + .poly = poly, + .area = aabb.area(), + .is_outer = extrusion_line->inset_idx_ == min_inset_idx, + }; + }) + | rg::to_vector; // Sort polygons by increasing area, we are building the graph from the leaves (smallest area) upwards. - rg::sort(locator_view, [](const auto& lhs, const auto& rhs) { return lhs < rhs; }, &LineLoc::area); + rg::sort( + locator_view, + [](const auto& lhs, const auto& rhs) + { + return lhs < rhs; + }, + &LineLoc::area); // Create a bi-direction directed acyclic graph (Tree). Where polygon B is a child of A if B is inside A. The root of the graph is // the polygon that contains all other polygons. The leaves are polygons that contain no polygons. @@ -209,7 +215,13 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v // find for each line the closest outer line std::unordered_map min_depth; std::unordered_map min_node; - for (const LineLoc* root_node : locator_view | rv::filter([](const auto& locator) { return locator.is_outer; }) | rv::addressof) + for (const LineLoc* root_node : locator_view + | rv::filter( + [](const auto& locator) + { + return locator.is_outer; + }) + | rv::addressof) { const std::function update_nodes = [&root_node, &min_depth, &min_node](const auto& current_node, auto depth) { @@ -225,7 +237,13 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v // perform a dfs from the root and all hole roots $r$ and set the order constraints for each polyline for which // the depth is closest to root $r$ - for (const LineLoc* root_node : locator_view | rv::filter([](const auto& locator) { return locator.is_outer; }) | rv::addressof) + for (const LineLoc* root_node : locator_view + | rv::filter( + [](const auto& locator) + { + return locator.is_outer; + }) + | rv::addressof) { const std::function set_order_constraints = [&order, &min_node, &root_node, &outer_to_inner](const auto& current_node, const auto& parent_node) From 37a8bdafedda15774945c4cfea7783a531564ee3 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 16:10:31 +0100 Subject: [PATCH 186/218] Simplify wall ordering code and add documentation CURA-11352 --- include/utils/ExtrusionLine.h | 54 +++++++++++ src/InsetOrderOptimizer.cpp | 165 ++++++++++++++++------------------ 2 files changed, 133 insertions(+), 86 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index e1f2437666..908e1c79aa 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -5,6 +5,14 @@ #ifndef UTILS_EXTRUSION_LINE_H #define UTILS_EXTRUSION_LINE_H +#include +#include +//#include +//#include +//#include +//#include +#include + #include "ExtrusionJunction.h" #include "polygon.h" @@ -57,6 +65,16 @@ struct ExtrusionLine return junctions_.size(); } + /*! + * Gets the vertex at the given index. + * \param idx The index of the vertex to get. + * \return The vertex at the given index. + */ + bool is_outer_wall() const + { + return inset_idx_ == 0; + } + /*! * Whether there are no junctions. */ @@ -215,6 +233,42 @@ struct ExtrusionLine return ret; } + /*! + * Create a true-extrosion area polygo + * + * When this path is not closed the returned Polygon should be handled as a polyline, rather than a polygon. + */ + Polygons toExtrusionPolygons() const + { + Polygon poly; + + const auto add_line_direction = [&poly](const auto iterator){ + const auto window = iterator | ranges::views::sliding(2); + + for (const auto& element : iterator | ranges::views::sliding(2)) + { + const ExtrusionJunction& j1 = element[0]; + const ExtrusionJunction& j2 = element[1]; + + const auto dir = j2.p_ - j1.p_; + const auto normal = turn90CCW(dir); + const auto mag = vSize(normal); + poly.emplace_back(j1.p_ + normal * j1.w_ / mag); + poly.emplace_back(j2.p_ + normal * j2.w_ / mag); + } + }; + + // forward pass + add_line_direction(junctions_); + // backward pass + add_line_direction(junctions_ | ranges::views::reverse); + + Polygons paths; + paths.emplace_back(poly.poly); + ClipperLib::SimplifyPolygons(paths.paths, ClipperLib::pftNonZero); + return paths; + } + /*! * Get the minimal width of this path */ diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index f7a01d2272..8c30d21a0a 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -4,6 +4,7 @@ #include "InsetOrderOptimizer.h" #include +#include #include #include @@ -135,135 +136,127 @@ bool InsetOrderOptimizer::addToLayer() return added_something; } -InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::vector& input, const bool outer_to_inner) +InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::vector& extrusion_lines, const bool outer_to_inner) { - if (input.empty()) // Early out + if (extrusion_lines.empty()) { + // Early out return {}; } - // Cache the polygons and get the signed area of each extrusion line and store them mapped against the pointers for those lines - struct LineLoc - { - const ExtrusionLine* line; - Polygon poly; - coord_t area; - bool is_outer; - }; - - size_t min_inset_idx = std::numeric_limits::max(); - for (const auto& line : input) - { - min_inset_idx = std::min(min_inset_idx, line.inset_idx_); - } - - auto locator_view = input | rv::addressof - | rv::transform( - [&min_inset_idx](const ExtrusionLine* extrusion_line) - { - const auto poly = extrusion_line->toPolygon(); - AABB aabb; - aabb.include(poly); - return LineLoc{ - .line = extrusion_line, - .poly = poly, - .area = aabb.area(), - .is_outer = extrusion_line->inset_idx_ == min_inset_idx, - }; - }) - | rg::to_vector; - - // Sort polygons by increasing area, we are building the graph from the leaves (smallest area) upwards. - rg::sort( - locator_view, - [](const auto& lhs, const auto& rhs) + // view on the extrusion lines, sorted by area + const auto sorted_extrusion_lines = [&extrusion_lines](){ + auto extrusion_lines_area + = extrusion_lines + | ranges::views::addressof + | ranges::views::transform([](const ExtrusionLine* line) { + const auto poly = line->toPolygon(); + AABB aabb; + aabb.include(poly); + return std::make_pair(line, aabb.area()); + }) + | ranges::to_vector; + + ranges::sort(extrusion_lines_area, [](const auto& lhs, const auto& rhs) { - return lhs < rhs; - }, - &LineLoc::area); - - // Create a bi-direction directed acyclic graph (Tree). Where polygon B is a child of A if B is inside A. The root of the graph is - // the polygon that contains all other polygons. The leaves are polygons that contain no polygons. - // We need a bi-directional graph as we are performing a dfs from the root down and from each of the hole (which are leaves in the graph) up the tree - std::unordered_multimap graph; - std::unordered_set roots; - for (const auto& locator : locator_view | rv::addressof) + return std::get<1>(lhs) < std::get<1>(rhs); + }); + + return extrusion_lines_area | ranges::views::transform([](const auto& pair) { return std::get<0>(pair); }); + }(); + + // graph will contain the parent-child relationships between the extrusion lines + // an edge is added for both the parent to child and child to parent relationship + std::unordered_multimap graph; + // during the loop we maintain a list of invariant parents; these are the parents + // that we have found so far + std::unordered_set invariant_outer_parents; + for (const auto& extrusion_line : sorted_extrusion_lines) { - std::vector erase; - for (const auto& root : roots) + // Create a polygon representing the inner area of the extrusion line; any + // point inside this polygon is considered to the child of the extrusion line. + Polygons hole_polygons; + for (const auto& poly : extrusion_line->toExtrusionPolygons().splitIntoParts()) + { + for (const auto& hole : poly.paths | ranges::views::drop(1)) + { + hole_polygons.emplace_back(hole | ranges::views::reverse | ranges::to_vector); + } + } + // increase the size of the hole polygons by 10um to make sure we don't miss any invariant parents + hole_polygons.offset(10); + + // go through all the invariant parents and see if they are inside the hole polygon + // if they are, then that means we have found a child for this extrusion line + std::vector removed_parent_invariants; + for (const ExtrusionLine* invariant_parent : invariant_outer_parents) { - if (locator->poly.inside(root->poly[0], false)) + if (hole_polygons.inside(invariant_parent->junctions_[0].p_, false)) { // The root polygon is inside the location polygon. It is no longer a root in the graph we are building. // Add this relationship (locator <-> root) to the graph, and remove root from roots. - graph.emplace(locator, root); - graph.emplace(root, locator); - erase.emplace_back(root); + graph.emplace(extrusion_line, invariant_parent); + graph.emplace(invariant_parent, extrusion_line); + removed_parent_invariants.emplace_back(invariant_parent); } } - for (const auto& node : erase) + for (const auto& node : removed_parent_invariants) { - roots.erase(node); + invariant_outer_parents.erase(node); } - // We are adding to the graph from smallest area -> largest area. This means locator will always be the largest polygon in the graph so far. - // No polygon in the graph is big enough to contain locator, so it must be a root. - roots.emplace(locator); + + // the current extrusion line is now an invariant parent + invariant_outer_parents.emplace(extrusion_line); } + const std::vector outer_walls + = extrusion_lines + | ranges::views::filter(&ExtrusionLine::is_outer_wall) + | ranges::views::addressof + | ranges::to_vector; + std::unordered_multimap order; // find for each line the closest outer line - std::unordered_map min_depth; - std::unordered_map min_node; - for (const LineLoc* root_node : locator_view - | rv::filter( - [](const auto& locator) - { - return locator.is_outer; - }) - | rv::addressof) + std::unordered_map min_depth; + std::unordered_map min_node; + for (const ExtrusionLine* outer_wall : outer_walls) { - const std::function update_nodes = [&root_node, &min_depth, &min_node](const auto& current_node, auto depth) + const std::function update_nodes = [&outer_wall, &min_depth, &min_node](const ExtrusionLine* current_node, const unsigned int depth) { if (min_depth.find(current_node) == min_depth.end() || depth < min_depth[current_node]) { min_depth[current_node] = depth; - min_node[current_node] = root_node; + min_node[current_node] = outer_wall; } }; - - actions::dfs_depth_state(root_node, graph, update_nodes); + actions::dfs_depth_state(outer_wall, graph, update_nodes); } - // perform a dfs from the root and all hole roots $r$ and set the order constraints for each polyline for which - // the depth is closest to root $r$ - for (const LineLoc* root_node : locator_view - | rv::filter( - [](const auto& locator) - { - return locator.is_outer; - }) - | rv::addressof) + // for each of the outer walls, perform a dfs until we have found a extrusion line that is + // not closest to the current outer wall. For each extrusion $e$ traversed in the dfs, add an + // order constraint between to $e$ and the previous node in the dfs traversal of $e$. + for (const ExtrusionLine* outer_wall : outer_walls) { - const std::function set_order_constraints - = [&order, &min_node, &root_node, &outer_to_inner](const auto& current_node, const auto& parent_node) + const std::function set_order_constraints + = [&order, &min_node, &outer_wall, &outer_to_inner](const auto& current_node, const auto& parent_node) { // if parent root is n - if (min_node[current_node] == root_node && parent_node != nullptr) + if (min_node[current_node] == outer_wall && parent_node != nullptr) { // flip the key values if we want to print from inner to outer walls if (outer_to_inner) { - order.insert(std::make_pair(parent_node->line, current_node->line)); + order.insert(std::make_pair(parent_node, current_node)); } else { - order.insert(std::make_pair(current_node->line, parent_node->line)); + order.insert(std::make_pair(current_node, parent_node)); } } }; - actions::dfs_parent_state(root_node, graph, set_order_constraints); + actions::dfs_parent_state(outer_wall, graph, set_order_constraints); } return order; From cb684d4e96a5a3da7d4c5e3a85220842a10d57ff Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Fri, 22 Dec 2023 15:11:01 +0000 Subject: [PATCH 187/218] Applied clang-format. --- include/utils/ExtrusionLine.h | 5 ++-- src/InsetOrderOptimizer.cpp | 55 +++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 908e1c79aa..921f69a699 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -5,8 +5,8 @@ #ifndef UTILS_EXTRUSION_LINE_H #define UTILS_EXTRUSION_LINE_H -#include #include +#include //#include //#include //#include @@ -242,7 +242,8 @@ struct ExtrusionLine { Polygon poly; - const auto add_line_direction = [&poly](const auto iterator){ + const auto add_line_direction = [&poly](const auto iterator) + { const auto window = iterator | ranges::views::sliding(2); for (const auto& element : iterator | ranges::views::sliding(2)) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 8c30d21a0a..e0ecb33a7b 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -3,8 +3,8 @@ #include "InsetOrderOptimizer.h" -#include #include +#include #include #include @@ -145,24 +145,32 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v } // view on the extrusion lines, sorted by area - const auto sorted_extrusion_lines = [&extrusion_lines](){ - auto extrusion_lines_area - = extrusion_lines - | ranges::views::addressof - | ranges::views::transform([](const ExtrusionLine* line) { - const auto poly = line->toPolygon(); - AABB aabb; - aabb.include(poly); - return std::make_pair(line, aabb.area()); - }) - | ranges::to_vector; - - ranges::sort(extrusion_lines_area, [](const auto& lhs, const auto& rhs) - { - return std::get<1>(lhs) < std::get<1>(rhs); - }); - - return extrusion_lines_area | ranges::views::transform([](const auto& pair) { return std::get<0>(pair); }); + const auto sorted_extrusion_lines = [&extrusion_lines]() + { + auto extrusion_lines_area = extrusion_lines | ranges::views::addressof + | ranges::views::transform( + [](const ExtrusionLine* line) + { + const auto poly = line->toPolygon(); + AABB aabb; + aabb.include(poly); + return std::make_pair(line, aabb.area()); + }) + | ranges::to_vector; + + ranges::sort( + extrusion_lines_area, + [](const auto& lhs, const auto& rhs) + { + return std::get<1>(lhs) < std::get<1>(rhs); + }); + + return extrusion_lines_area + | ranges::views::transform( + [](const auto& pair) + { + return std::get<0>(pair); + }); }(); // graph will contain the parent-child relationships between the extrusion lines @@ -209,11 +217,7 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v invariant_outer_parents.emplace(extrusion_line); } - const std::vector outer_walls - = extrusion_lines - | ranges::views::filter(&ExtrusionLine::is_outer_wall) - | ranges::views::addressof - | ranges::to_vector; + const std::vector outer_walls = extrusion_lines | ranges::views::filter(&ExtrusionLine::is_outer_wall) | ranges::views::addressof | ranges::to_vector; std::unordered_multimap order; @@ -222,7 +226,8 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v std::unordered_map min_node; for (const ExtrusionLine* outer_wall : outer_walls) { - const std::function update_nodes = [&outer_wall, &min_depth, &min_node](const ExtrusionLine* current_node, const unsigned int depth) + const std::function update_nodes + = [&outer_wall, &min_depth, &min_node](const ExtrusionLine* current_node, const unsigned int depth) { if (min_depth.find(current_node) == min_depth.end() || depth < min_depth[current_node]) { From dccf20f261446e061692886fac0319b037aa8506 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 16:11:47 +0100 Subject: [PATCH 188/218] remove commented imports CURA-11352 --- include/utils/ExtrusionLine.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 908e1c79aa..30ea3fbbdf 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -7,10 +7,6 @@ #include #include -//#include -//#include -//#include -//#include #include #include "ExtrusionJunction.h" From 2ccd94f65c1c2ba3d866fdc94408ff8315109a4d Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 16:12:09 +0100 Subject: [PATCH 189/218] remove commented imports CURA-11352 --- include/utils/ExtrusionLine.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 921f69a699..66b6c9ff1b 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -7,10 +7,6 @@ #include #include -//#include -//#include -//#include -//#include #include #include "ExtrusionJunction.h" From 8963d48681ddbf8bde43c4bab11806d89bdf76ba Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Fri, 22 Dec 2023 15:12:43 +0000 Subject: [PATCH 190/218] Applied clang-format. --- include/utils/ExtrusionLine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 66b6c9ff1b..a4d07828bd 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -5,9 +5,9 @@ #ifndef UTILS_EXTRUSION_LINE_H #define UTILS_EXTRUSION_LINE_H +#include #include #include -#include #include "ExtrusionJunction.h" #include "polygon.h" From c694f08bf68de8b940aa127d93d57db0ea345d09 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 17:04:06 +0100 Subject: [PATCH 191/218] Fix implementation CURA-11352 --- src/InsetOrderOptimizer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index e0ecb33a7b..3366378d8d 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -170,7 +170,8 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v [](const auto& pair) { return std::get<0>(pair); - }); + }) + | ranges::to_vector; }(); // graph will contain the parent-child relationships between the extrusion lines From 97ac0f286c9bc20a0e0299a1cb7dc61e60d2d553 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Fri, 22 Dec 2023 16:06:45 +0000 Subject: [PATCH 192/218] Applied clang-format. --- src/InsetOrderOptimizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 3366378d8d..44c0fe06a3 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -171,7 +171,7 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v { return std::get<0>(pair); }) - | ranges::to_vector; + | ranges::to_vector; }(); // graph will contain the parent-child relationships between the extrusion lines From 7855d310e889902bca59a36ab469562dc710c404 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 17:35:48 +0100 Subject: [PATCH 193/218] Update comment CURA-11352 --- include/utils/ExtrusionLine.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index a4d07828bd..1570e0f1fb 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -230,9 +230,8 @@ struct ExtrusionLine } /*! - * Create a true-extrosion area polygo - * - * When this path is not closed the returned Polygon should be handled as a polyline, rather than a polygon. + * Create a true-extrusion area shape for the path; this means that each junction follows the bead-width + * set for that junction. */ Polygons toExtrusionPolygons() const { From 4e50a0f0102b13000f295fbccc49799c0ceacc2c Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 22 Dec 2023 17:50:48 +0100 Subject: [PATCH 194/218] update comments CURA-11352 --- src/InsetOrderOptimizer.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/InsetOrderOptimizer.cpp b/src/InsetOrderOptimizer.cpp index 44c0fe06a3..6fb12f141f 100644 --- a/src/InsetOrderOptimizer.cpp +++ b/src/InsetOrderOptimizer.cpp @@ -187,8 +187,10 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v Polygons hole_polygons; for (const auto& poly : extrusion_line->toExtrusionPolygons().splitIntoParts()) { + // drop first path, as this is the outer contour for (const auto& hole : poly.paths | ranges::views::drop(1)) { + // reverse the hole polygon to turn a hole into a polygon hole_polygons.emplace_back(hole | ranges::views::reverse | ranges::to_vector); } } @@ -220,44 +222,44 @@ InsetOrderOptimizer::value_type InsetOrderOptimizer::getRegionOrder(const std::v const std::vector outer_walls = extrusion_lines | ranges::views::filter(&ExtrusionLine::is_outer_wall) | ranges::views::addressof | ranges::to_vector; - std::unordered_multimap order; - - // find for each line the closest outer line + // find for each line the closest outer line, and store this in closest_outer_wall_line + std::unordered_map closest_outer_wall_line; std::unordered_map min_depth; - std::unordered_map min_node; for (const ExtrusionLine* outer_wall : outer_walls) { const std::function update_nodes - = [&outer_wall, &min_depth, &min_node](const ExtrusionLine* current_node, const unsigned int depth) + = [&outer_wall, &min_depth, &closest_outer_wall_line](const ExtrusionLine* current_line, const unsigned int depth) { - if (min_depth.find(current_node) == min_depth.end() || depth < min_depth[current_node]) + if (min_depth.find(current_line) == min_depth.end() || depth < min_depth[current_line]) { - min_depth[current_node] = depth; - min_node[current_node] = outer_wall; + min_depth[current_line] = depth; + closest_outer_wall_line[current_line] = outer_wall; } }; actions::dfs_depth_state(outer_wall, graph, update_nodes); } - // for each of the outer walls, perform a dfs until we have found a extrusion line that is - // not closest to the current outer wall. For each extrusion $e$ traversed in the dfs, add an - // order constraint between to $e$ and the previous node in the dfs traversal of $e$. + // for each of the outer walls, perform a dfs until we have found an extrusion line that is + // _not_ closest to the current outer wall, then stop the dfs traversal for that branch. For + // each extrusion $e$ traversed in the dfs, add an order constraint between to $e$ and the + // previous line in the dfs traversal of $e$. + std::unordered_multimap order; for (const ExtrusionLine* outer_wall : outer_walls) { const std::function set_order_constraints - = [&order, &min_node, &outer_wall, &outer_to_inner](const auto& current_node, const auto& parent_node) + = [&order, &closest_outer_wall_line, &outer_wall, &outer_to_inner](const auto& current_line, const auto& parent_line) { - // if parent root is n - if (min_node[current_node] == outer_wall && parent_node != nullptr) + // if the closest + if (closest_outer_wall_line[current_line] == outer_wall && parent_line != nullptr) { // flip the key values if we want to print from inner to outer walls if (outer_to_inner) { - order.insert(std::make_pair(parent_node, current_node)); + order.insert(std::make_pair(parent_line, current_line)); } else { - order.insert(std::make_pair(current_node, parent_node)); + order.insert(std::make_pair(current_line, parent_line)); } } }; From f5524a076004f11d0bfba88b0ecb48edc54d8ca8 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 2 Jan 2024 10:07:39 +0100 Subject: [PATCH 195/218] Remove unused variable CURA-11098 --- src/support.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/support.cpp b/src/support.cpp index 236c0f16ae..c8e20ca6b6 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -908,12 +908,7 @@ Polygons AreaSupport::generateVaryingXYDisallowedArea(const SliceMeshStorage& st const auto delta_point_next = window[1]; const auto dist2 = LinearAlg2D::getDist2FromLineSegment(delta_point, current_point, delta_point_next); - - if (dist2 < min_dist2) - { - min_dist2 = dist2; - min_point = LinearAlg2D::getClosestOnLineSegment(current_point, delta_point, delta_point_next); - } + min_dist2 = std::min(min_dist2, dist2); } } From acc083c7d194d87c855c60688941ade84b050a42 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 2 Jan 2024 10:08:05 +0100 Subject: [PATCH 196/218] Remove unused imports CURA-11098 --- src/support.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/support.cpp b/src/support.cpp index c8e20ca6b6..5db274bfdd 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -8,7 +8,6 @@ #include // ifstream.good() #include // pair -#include #include #include #include @@ -22,7 +21,6 @@ #include #include "Application.h" //To get settings. -#include "BoostInterface.hpp" #include "ExtruderTrain.h" #include "SkeletalTrapezoidation.h" #include "Slice.h" @@ -37,9 +35,7 @@ #include "slicer.h" #include "utils/Simplify.h" #include "utils/ThreadPool.h" -#include "utils/VoronoiUtils.h" #include "utils/math.h" -#include "utils/views/get.h" namespace cura { From 4aa6baa69992f35831b3bf7e73b214178d40500a Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 2 Jan 2024 10:12:17 +0100 Subject: [PATCH 197/218] Remove unused variable CURA-11352 --- include/utils/ExtrusionLine.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index 1570e0f1fb..a3d46eb6cb 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -239,8 +239,6 @@ struct ExtrusionLine const auto add_line_direction = [&poly](const auto iterator) { - const auto window = iterator | ranges::views::sliding(2); - for (const auto& element : iterator | ranges::views::sliding(2)) { const ExtrusionJunction& j1 = element[0]; From a30b6645db7c2cde2744879b9a01f5551815ea91 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 2 Jan 2024 10:45:11 +0100 Subject: [PATCH 198/218] Remove unit test constraint This constraint isn't true anymore --- tests/WallsComputationTest.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/WallsComputationTest.cpp b/tests/WallsComputationTest.cpp index a45cb5464a..3f58b3de1d 100644 --- a/tests/WallsComputationTest.cpp +++ b/tests/WallsComputationTest.cpp @@ -212,13 +212,6 @@ TEST_F(WallsComputationTest, WallToolPathsGetWeakOrder) } } EXPECT_GT(order.size(), 0) << "There should be ordered pairs!"; - std::unordered_set has_order_info(part.wall_toolpaths.size()); - for (auto [from, to] : order) - { - has_order_info.emplace(from); - has_order_info.emplace(to); - } - EXPECT_EQ(has_order_info.size(), n_paths) << "Every path should have order information."; } } // namespace cura From 88903746ebbf3d5c4e2e33185ef5c7120b54b7cb Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Thu, 4 Jan 2024 14:27:04 +0100 Subject: [PATCH 199/218] Prevent divide by zero issues --- include/utils/ExtrusionLine.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/utils/ExtrusionLine.h b/include/utils/ExtrusionLine.h index a3d46eb6cb..4be41d1da9 100644 --- a/include/utils/ExtrusionLine.h +++ b/include/utils/ExtrusionLine.h @@ -247,6 +247,12 @@ struct ExtrusionLine const auto dir = j2.p_ - j1.p_; const auto normal = turn90CCW(dir); const auto mag = vSize(normal); + + if (mag <= 5) + { + continue; + } + poly.emplace_back(j1.p_ + normal * j1.w_ / mag); poly.emplace_back(j2.p_ + normal * j2.w_ / mag); } From 139743fbb67efd44f0964a711be19e6e4701f772 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 8 Jan 2024 13:45:48 +0100 Subject: [PATCH 200/218] Allow printing walls on all raft layers --- src/FffGcodeWriter.cpp | 61 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index d520bb94da..ed0414dee4 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -572,6 +572,8 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr int infill_multiplier = 1; // rafts use single lines constexpr int extra_infill_shift = 0; constexpr bool fill_gaps = true; + constexpr bool retract_before_outer_wall = false; + constexpr coord_t wipe_dist = 0; Polygons raft_polygons; // should remain empty, since we only have the lines pattern for the raft... std::optional last_planned_position = std::optional(); @@ -606,8 +608,6 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) AngleDegrees fill_angle = (num_surface_layers + num_interface_layers) % 2 ? 45 : 135; // 90 degrees rotated from the interface layer. constexpr bool zig_zaggify_infill = false; constexpr bool connect_polygons = true; // causes less jerks, so better adhesion - constexpr bool retract_before_outer_wall = false; - constexpr coord_t wipe_dist = 0; const size_t wall_line_count = base_settings.get("raft_base_wall_count"); const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. @@ -769,7 +769,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) constexpr bool zig_zaggify_infill = true; constexpr bool connect_polygons = true; // why not? - constexpr int wall_line_count = 0; + const size_t wall_line_count = interface_settings.get("raft_interface_wall_count"); const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. const Point2LL infill_origin = Point2LL(); constexpr bool skip_stitching = false; @@ -809,8 +809,31 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) skip_some_zags, zag_skip_count, pocket_size); - std::vector raft_paths; // Should remain empty, since we have no walls. + std::vector raft_paths; infill_comp.generate(raft_paths, raft_polygons, raft_lines, interface_settings, layer_nr, SectionType::ADHESION); + if (! raft_paths.empty()) + { + const GCodePathConfig& config = gcode_layer.configs_storage_.raft_interface_config; + const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); + InsetOrderOptimizer wall_orderer( + *this, + storage, + gcode_layer, + interface_settings, + interface_extruder_nr, + config, + config, + config, + config, + retract_before_outer_wall, + wipe_dist, + wipe_dist, + interface_extruder_nr, + interface_extruder_nr, + z_seam_config, + raft_paths); + wall_orderer.addToLayer(); + } gcode_layer.addLinesByOptimizer(raft_lines, gcode_layer.configs_storage_.raft_interface_config, SpaceFillType::Lines, false, 0, 1.0, last_planned_position); raft_polygons.clear(); @@ -882,13 +905,13 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. raft_outline_path = storage.raftOutline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. - const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); + const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_surface_config.getLineWidth(); Polygons raft_lines; AngleDegrees fill_angle = (num_surface_layers - raft_surface_layer) % 2 ? 45 : 135; // Alternate between -45 and +45 degrees, ending up 90 degrees rotated from the default skin angle. constexpr bool zig_zaggify_infill = true; - constexpr size_t wall_line_count = 0; + const size_t wall_line_count = surface_settings.get("raft_surface_wall_count"); const coord_t small_area_width = 0; // A raft never has a small region due to the large horizontal expansion. const Point2LL& infill_origin = Point2LL(); constexpr bool skip_stitching = false; @@ -930,9 +953,33 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) zag_skip_count, pocket_size); - std::vector raft_paths; // Should remain empty, since we have no walls. + std::vector raft_paths; infill_comp.generate(raft_paths, raft_polygons, raft_lines, surface_settings, layer_nr, SectionType::ADHESION); + if (! raft_paths.empty()) + { + const GCodePathConfig& config = gcode_layer.configs_storage_.raft_surface_config; + const ZSeamConfig z_seam_config(EZSeamType::SHORTEST, gcode_layer.getLastPlannedPositionOrStartingPosition(), EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE, false); + InsetOrderOptimizer wall_orderer( + *this, + storage, + gcode_layer, + surface_settings, + surface_extruder_nr, + config, + config, + config, + config, + retract_before_outer_wall, + wipe_dist, + wipe_dist, + surface_extruder_nr, + surface_extruder_nr, + z_seam_config, + raft_paths); + wall_orderer.addToLayer(); + } + const auto wipe_dist = 0; const auto spiralize = false; const auto flow_ratio = 1.0_r; From abbe58fb11e988b04e5345b7520f10cc91774638 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 8 Jan 2024 13:52:49 +0100 Subject: [PATCH 201/218] Split up raft margin setting per raft-type Added the following settings - raft_base_margin - raft_interface_margin - raft_surface_margin since these are all child settings of raft_margin, the raft_margin setting should now not be used anymore CURA-11395 --- include/LayerPlan.h | 3 +- include/raft.h | 16 +++++++ include/sliceDataStorage.h | 6 ++- src/FffGcodeWriter.cpp | 6 +-- src/LayerPlan.cpp | 33 +++++++++---- src/raft.cpp | 62 +++++++++++++++++++++---- src/sliceDataStorage.cpp | 43 ++++++++++++++--- src/support.cpp | 6 +-- stress_benchmark/resources/001.settings | 4 +- stress_benchmark/resources/002.settings | 8 +++- stress_benchmark/resources/003.settings | 8 +++- stress_benchmark/resources/004.settings | 8 +++- stress_benchmark/resources/005.settings | 8 +++- stress_benchmark/resources/006.settings | 8 +++- stress_benchmark/resources/007.settings | 8 +++- stress_benchmark/resources/008.settings | 8 +++- stress_benchmark/resources/009.settings | 8 +++- stress_benchmark/resources/010.settings | 8 +++- stress_benchmark/resources/011.settings | 8 +++- stress_benchmark/resources/012.settings | 4 +- stress_benchmark/resources/013.settings | 4 +- stress_benchmark/resources/014.settings | 4 +- stress_benchmark/resources/015.settings | 4 +- stress_benchmark/resources/016.settings | 4 +- stress_benchmark/resources/017.settings | 4 +- stress_benchmark/resources/018.settings | 4 +- stress_benchmark/resources/019.settings | 4 +- stress_benchmark/resources/020.settings | 4 +- stress_benchmark/resources/021.settings | 4 +- stress_benchmark/resources/022.settings | 4 +- stress_benchmark/resources/023.settings | 4 +- stress_benchmark/resources/024.settings | 4 +- stress_benchmark/resources/025.settings | 4 +- stress_benchmark/resources/026.settings | 4 +- stress_benchmark/resources/027.settings | 4 +- stress_benchmark/resources/028.settings | 4 +- stress_benchmark/resources/029.settings | 4 +- stress_benchmark/resources/030.settings | 4 +- stress_benchmark/resources/031.settings | 4 +- stress_benchmark/resources/032.settings | 4 +- stress_benchmark/resources/033.settings | 4 +- stress_benchmark/resources/034.settings | 4 +- stress_benchmark/resources/035.settings | 4 +- stress_benchmark/resources/036.settings | 4 +- stress_benchmark/resources/037.settings | 4 +- stress_benchmark/resources/038.settings | 4 +- stress_benchmark/resources/039.settings | 4 +- stress_benchmark/resources/040.settings | 4 +- stress_benchmark/resources/041.settings | 4 +- stress_benchmark/resources/042.settings | 4 +- stress_benchmark/resources/043.settings | 4 +- stress_benchmark/resources/044.settings | 4 +- stress_benchmark/resources/045.settings | 4 +- stress_benchmark/resources/046.settings | 4 +- stress_benchmark/resources/047.settings | 4 +- stress_benchmark/resources/048.settings | 4 +- stress_benchmark/resources/049.settings | 4 +- stress_benchmark/resources/050.settings | 4 +- stress_benchmark/resources/051.settings | 4 +- stress_benchmark/resources/052.settings | 4 +- stress_benchmark/resources/053.settings | 4 +- stress_benchmark/resources/054.settings | 4 +- stress_benchmark/resources/055.settings | 4 +- stress_benchmark/resources/056.settings | 4 +- stress_benchmark/resources/057.settings | 4 +- stress_benchmark/resources/058.settings | 4 +- stress_benchmark/resources/059.settings | 4 +- stress_benchmark/resources/060.settings | 4 +- stress_benchmark/resources/061.settings | 4 +- stress_benchmark/resources/062.settings | 4 +- stress_benchmark/resources/063.settings | 4 +- stress_benchmark/resources/064.settings | 4 +- stress_benchmark/resources/065.settings | 4 +- stress_benchmark/resources/066.settings | 4 +- stress_benchmark/resources/067.settings | 4 +- tests/test_global_settings.txt | 4 +- 76 files changed, 378 insertions(+), 109 deletions(-) diff --git a/include/LayerPlan.h b/include/LayerPlan.h index d978cbdbd7..1d3b3628a3 100644 --- a/include/LayerPlan.h +++ b/include/LayerPlan.h @@ -13,6 +13,7 @@ #include "pathPlanning/GCodePath.h" #include "pathPlanning/NozzleTempInsert.h" #include "pathPlanning/TimeMaterialEstimates.h" +#include "raft.h" #include "settings/PathConfigStorage.h" #include "settings/types/LayerIndex.h" #include "utils/ExtrusionJunction.h" @@ -63,7 +64,7 @@ class LayerPlan : public NoCopy const SliceDataStorage& storage_; //!< The polygon data obtained from FffPolygonProcessor const LayerIndex layer_nr_; //!< The layer number of this layer plan const bool is_initial_layer_; //!< Whether this is the first layer (which might be raft) - const bool is_raft_layer_; //!< Whether this is a layer which is part of the raft + const Raft::LayerType layer_type_; //!< Which part of the raft, airgap or model this layer is. coord_t layer_thickness_; std::vector layer_start_pos_per_extruder_; //!< The starting position of a layer for each extruder diff --git a/include/raft.h b/include/raft.h index 1019bef761..11f0fffdf6 100644 --- a/include/raft.h +++ b/include/raft.h @@ -4,6 +4,7 @@ #ifndef RAFT_H #define RAFT_H +#include "settings/types/LayerIndex.h" #include "utils/Coord_t.h" namespace cura @@ -54,6 +55,21 @@ class Raft */ static size_t getTotalExtraLayers(); + enum LayerType { + RaftBase, + RaftInterface, + RaftSurface, + Airgap, + Model + }; + + /*! + * \brief Get the type of layer at the given layer index. + * \param layer_index The layer index to get the type of. + * \return The type of layer at the given layer index. + */ + static LayerType getLayerType(LayerIndex layer_index); + }; }//namespace cura diff --git a/include/sliceDataStorage.h b/include/sliceDataStorage.h index 74d2047336..e18a3783d3 100644 --- a/include/sliceDataStorage.h +++ b/include/sliceDataStorage.h @@ -355,7 +355,11 @@ class SliceDataStorage : public NoCopy std::vector skirt_brim[MAX_EXTRUDERS]; //!< Skirt/brim polygons per extruder, ordered from inner to outer polygons. Polygons support_brim; //!< brim lines for support, going from the edge of the support inward. \note Not ordered by inset. - Polygons raftOutline; // Storage for the outline of the raft. Will be filled with lines when the GCode is generated. + + // Storage for the outline of the raft-parts. Will be filled with lines when the GCode is generated. + Polygons raftBaseOutline; + Polygons raftInterfaceOutline; + Polygons raftSurfaceOutline; int max_print_height_second_to_last_extruder; //!< Used in multi-extrusion: the layer number beyond which all models are printed with the same extruder std::vector max_print_height_per_extruder; //!< For each extruder the highest layer number at which it is used. diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp index d520bb94da..037a5e7456 100644 --- a/src/FffGcodeWriter.cpp +++ b/src/FffGcodeWriter.cpp @@ -630,7 +630,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) }; std::vector raft_outline_paths; - raft_outline_paths.emplace_back(ParameterizedRaftPath{ line_spacing, storage.raftOutline }); + raft_outline_paths.emplace_back(ParameterizedRaftPath{ line_spacing, storage.raftBaseOutline }); if (storage.primeTower.enabled_) { const Polygons& raft_outline_prime_tower = storage.primeTower.getOuterPoly(layer_nr); @@ -761,7 +761,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) Polygons raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. - raft_outline_path = storage.raftOutline.offset(-small_offset); + raft_outline_path = storage.raftInterfaceOutline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); Polygons raft_lines; @@ -880,7 +880,7 @@ void FffGcodeWriter::processRaft(const SliceDataStorage& storage) Polygons raft_outline_path; const coord_t small_offset = gcode_layer.configs_storage_.raft_interface_config.getLineWidth() / 2; // Do this manually because of micron-movement created in corners when insetting a polygon that was offset with round joint type. - raft_outline_path = storage.raftOutline.offset(-small_offset); + raft_outline_path = storage.raftSurfaceOutline.offset(-small_offset); raft_outline_path = Simplify(interface_settings).polygon(raft_outline_path); // Remove those micron-movements. const coord_t infill_outline_width = gcode_layer.configs_storage_.raft_interface_config.getLineWidth(); Polygons raft_lines; diff --git a/src/LayerPlan.cpp b/src/LayerPlan.cpp index 7d4ede0d0f..4f498caffd 100644 --- a/src/LayerPlan.cpp +++ b/src/LayerPlan.cpp @@ -95,7 +95,7 @@ LayerPlan::LayerPlan( , storage_(storage) , layer_nr_(layer_nr) , is_initial_layer_(layer_nr == 0 - static_cast(Raft::getTotalExtraLayers())) - , is_raft_layer_(layer_nr < 0 - static_cast(Raft::getFillerLayerCount())) + , layer_type_(Raft::getLayerType(layer_nr)) , layer_thickness_(layer_thickness) , has_prime_tower_planned_per_extruder_(Application::getInstance().current_slice_->scene.extruders.size(), false) , current_mesh_(nullptr) @@ -124,11 +124,12 @@ LayerPlan::LayerPlan( layer_start_pos_per_extruder_.emplace_back(extruder.settings_.get("layer_start_x"), extruder.settings_.get("layer_start_y")); } extruder_plans_.reserve(Application::getInstance().current_slice_->scene.extruders.size()); + const auto is_raft_layer = layer_type_ == Raft::LayerType::RaftBase || layer_type_ == Raft::LayerType::RaftInterface || layer_type_ == Raft::LayerType::RaftSurface; extruder_plans_.emplace_back( current_extruder, layer_nr, is_initial_layer_, - is_raft_layer_, + is_raft_layer, layer_thickness, fan_speed_layer_time_settings_per_extruder[current_extruder], storage.retraction_wipe_config_per_extruder[current_extruder].retraction_config); @@ -156,12 +157,25 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) const CombingMode mesh_combing_mode = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("retraction_combing"); if (mesh_combing_mode != CombingMode::OFF && (layer_nr_ >= 0 || mesh_combing_mode != CombingMode::NO_SKIN)) { - if (layer_nr_ < 0) - { - comb_boundary = storage_.raftOutline.offset(MM2INT(0.1)); - } - else + switch (layer_type_) { + case Raft::LayerType::RaftBase: + comb_boundary = storage_.raftBaseOutline.offset(MM2INT(0.1)); + break; + + case Raft::LayerType::RaftInterface: + comb_boundary = storage_.raftInterfaceOutline.offset(MM2INT(0.1)); + break; + + case Raft::LayerType::RaftSurface: + comb_boundary = storage_.raftSurfaceOutline.offset(MM2INT(0.1)); + break; + + case Raft::LayerType::Airgap: + // do nothing for airgap + break; + + case Raft::LayerType::Model: for (const std::shared_ptr& mesh_ptr : storage_.meshes) { const auto& mesh = *mesh_ptr; @@ -216,6 +230,7 @@ Polygons LayerPlan::computeCombBoundary(const CombBoundary boundary_type) } } } + break; } } return comb_boundary; @@ -255,11 +270,13 @@ bool LayerPlan::setExtruder(const size_t extruder_nr) { // first extruder plan in a layer might be empty, cause it is made with the last extruder planned in the previous layer extruder_plans_.back().extruder_nr_ = extruder_nr; } + + const auto is_raft_layer = layer_type_ == Raft::LayerType::RaftBase || layer_type_ == Raft::LayerType::RaftInterface || layer_type_ == Raft::LayerType::RaftSurface; extruder_plans_.emplace_back( extruder_nr, layer_nr_, is_initial_layer_, - is_raft_layer_, + is_raft_layer, layer_thickness_, fan_speed_layer_time_settings_per_extruder_[extruder_nr], storage_.retraction_wipe_config_per_extruder[extruder_nr].retraction_config); diff --git a/src/raft.cpp b/src/raft.cpp index 0bdc72bbfe..b42e3e2491 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -19,36 +19,50 @@ void Raft::generate(SliceDataStorage& storage) { assert(storage.raftOutline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; - const coord_t distance = settings.get("raft_margin"); constexpr bool include_support = true; constexpr bool dont_include_prime_tower = false; // Prime tower raft will be handled separately in 'storage.primeRaftOutline'; see below. - storage.raftOutline = storage.getLayerOutlines(0, include_support, dont_include_prime_tower).offset(distance, ClipperLib::jtRound); + + storage.raftBaseOutline = storage.raftSurfaceOutline = storage.raftInterfaceOutline = storage.getLayerOutlines(0, include_support, dont_include_prime_tower); + storage.raftBaseOutline = storage.raftBaseOutline.offset(settings.get("raft_base_margin"), ClipperLib::jtRound); + storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(settings.get("raft_interface_margin"), ClipperLib::jtRound); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(settings.get("raft_surface_margin"), ClipperLib::jtRound); + const coord_t shield_line_width_layer0 = settings.get("skirt_brim_line_width"); + const coord_t max_raft_distance = std::max(std::max(settings.get("raft_base_margin"), settings.get("raft_interface_margin")), settings.get("raft_surface_margin")); if (storage.draft_protection_shield.size() > 0) { Polygons draft_shield_raft = storage.draft_protection_shield .offset(shield_line_width_layer0) // start half a line width outside shield - .difference(storage.draft_protection_shield.offset(-distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield - storage.raftOutline = storage.raftOutline.unionPolygons(draft_shield_raft); + .difference(storage.draft_protection_shield.offset(-max_raft_distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield + storage.raftBaseOutline = storage.raftBaseOutline.unionPolygons(draft_shield_raft); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.unionPolygons(draft_shield_raft); + storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(draft_shield_raft); } if (storage.oozeShield.size() > 0 && storage.oozeShield[0].size() > 0) { const Polygons& ooze_shield = storage.oozeShield[0]; Polygons ooze_shield_raft = ooze_shield .offset(shield_line_width_layer0) // start half a line width outside shield - .difference(ooze_shield.offset(-distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield - storage.raftOutline = storage.raftOutline.unionPolygons(ooze_shield_raft); + .difference(ooze_shield.offset(-max_raft_distance - shield_line_width_layer0 / 2, ClipperLib::jtRound)); // end distance inside shield + storage.raftBaseOutline = storage.raftBaseOutline.unionPolygons(ooze_shield_raft); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.unionPolygons(ooze_shield_raft); + storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } if (settings.get("raft_remove_inside_corners")) { - storage.raftOutline.makeConvex(); + storage.raftBaseOutline.makeConvex(); + storage.raftSurfaceOutline.makeConvex(); + storage.raftInterfaceOutline.makeConvex(); } else { const coord_t smoothing = settings.get("raft_smoothing"); - storage.raftOutline = storage.raftOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); // remove small holes and smooth inward corners + // remove small holes and smooth inward corners + storage.raftBaseOutline = storage.raftBaseOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); + storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); } if (storage.primeTower.enabled_ && ! storage.primeTower.would_have_actual_tower_) @@ -121,5 +135,37 @@ size_t Raft::getTotalExtraLayers() return 1 + interface_train.settings_.get("raft_interface_layers") + surface_train.settings_.get("raft_surface_layers") + getFillerLayerCount(); } +Raft::LayerType Raft::getLayerType(LayerIndex layer_index) +{ + const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; + const ExtruderTrain& base_train = mesh_group_settings.get("raft_base_extruder_nr"); + const ExtruderTrain& interface_train = mesh_group_settings.get("raft_interface_extruder_nr"); + const ExtruderTrain& surface_train = mesh_group_settings.get("raft_surface_extruder_nr"); + const auto airgap = Raft::getFillerLayerCount(); + const auto interface_layers = interface_train.settings_.get("raft_interface_layers"); + const auto surface_layers = surface_train.settings_.get("raft_surface_layers"); + + if (layer_index < - airgap - surface_layers - interface_layers) + { + return LayerType::RaftBase; + } + if (layer_index < - airgap - surface_layers) + { + return LayerType::RaftInterface; + } + if (layer_index < - airgap) + { + return LayerType::RaftSurface; + } + else if (layer_index < 0) + { + return LayerType::Airgap; + } + else + { + return LayerType::Model; + } +} + } // namespace cura diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 94e2ccf16f..1af95d5027 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -271,13 +271,41 @@ Polygons const { const Settings& mesh_group_settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings; - if (layer_nr < 0 && layer_nr < -static_cast(Raft::getFillerLayerCount())) - { // when processing raft - if (include_support && (extruder_nr == -1 || extruder_nr == int(mesh_group_settings.get("adhesion_extruder_nr").extruder_nr_))) + + const auto layer_type = Raft::getLayerType(layer_nr); + switch (layer_type) + { + case Raft::LayerType::RaftBase: + case Raft::LayerType::RaftInterface: + case Raft::LayerType::RaftSurface: + { + const Polygons* raftOutline; + bool use_current_extruder_for_raft = extruder_nr == -1; + + switch (layer_type) + { + case Raft::LayerType::RaftBase: + raftOutline = &raftBaseOutline; + use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_base_extruder_nr").extruder_nr_); + break; + case Raft::LayerType::RaftInterface: + raftOutline = &raftInterfaceOutline; + use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_interface_extruder_nr").extruder_nr_); + break; + case Raft::LayerType::RaftSurface: + raftOutline = &raftSurfaceOutline; + use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_); + break; + default: + assert(false << "unreachable due to outer switch statement"); + return Polygons(); + } + + if (include_support && use_current_extruder_for_raft) { if (external_polys_only) { - std::vector parts = raftOutline.splitIntoParts(); + std::vector parts = raftOutline->splitIntoParts(); Polygons result; for (PolygonsPart& part : parts) { @@ -287,16 +315,17 @@ Polygons } else { - return raftOutline; + return *raftOutline; } } else { return Polygons(); } + break; } - else - { + case Raft::LayerType::Airgap: + case Raft::LayerType::Model: Polygons total; if (layer_nr >= 0) { diff --git a/src/support.cpp b/src/support.cpp index 5db274bfdd..09aff457c7 100644 --- a/src/support.cpp +++ b/src/support.cpp @@ -539,9 +539,9 @@ Polygons AreaSupport::join(const SliceDataStorage& storage, const Polygons& supp break; case EPlatformAdhesion::RAFT: { - adhesion_size = std::max({ mesh_group_settings.get("raft_base_extruder_nr").settings_.get("raft_margin"), - mesh_group_settings.get("raft_interface_extruder_nr").settings_.get("raft_margin"), - mesh_group_settings.get("raft_surface_extruder_nr").settings_.get("raft_margin") }); + adhesion_size = std::max({ mesh_group_settings.get("raft_base_extruder_nr").settings_.get("raft_base_margin"), + mesh_group_settings.get("raft_interface_extruder_nr").settings_.get("raft_interface_margin"), + mesh_group_settings.get("raft_surface_extruder_nr").settings_.get("raft_surface_margin") }); break; } case EPlatformAdhesion::NONE: diff --git a/stress_benchmark/resources/001.settings b/stress_benchmark/resources/001.settings index d56461c776..d72d076797 100644 --- a/stress_benchmark/resources/001.settings +++ b/stress_benchmark/resources/001.settings @@ -502,7 +502,9 @@ acceleration_infill=300 support_skip_some_zags=False material_end_of_filament_purge_speed=0.5 machine_max_jerk_e=5.0 -raft_margin=3 +raft_base_margin=3 +raft_interface_margin=3 +raft_surface_margin=3 support_interface_angles=[] support_roof_height=1.015 smooth_spiralized_contours=True diff --git a/stress_benchmark/resources/002.settings b/stress_benchmark/resources/002.settings index c5ec85db58..c9dfb14cc0 100644 --- a/stress_benchmark/resources/002.settings +++ b/stress_benchmark/resources/002.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.2 material_bed_temperature_layer_0=50 machine_max_jerk_e=5 -raft_margin=5 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1057,7 +1059,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.2 command_line_settings=0 -raft_margin=5 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 material_end_of_filament_purge_speed=0.5 speed_support=25.0 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/003.settings b/stress_benchmark/resources/003.settings index d0fd7a001a..b6aa5b0d7a 100644 --- a/stress_benchmark/resources/003.settings +++ b/stress_benchmark/resources/003.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.12 material_bed_temperature_layer_0=65 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1058,7 +1060,9 @@ bridge_skin_density_3=80 min_feature_size=0.105 infill_sparse_thickness=0.12 command_line_settings=0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_end_of_filament_purge_speed=0.5 speed_support=25.0 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/004.settings b/stress_benchmark/resources/004.settings index 4683743db7..a4c2afe92e 100644 --- a/stress_benchmark/resources/004.settings +++ b/stress_benchmark/resources/004.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.1 material_bed_temperature_layer_0=70 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1058,7 +1060,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.1 command_line_settings=0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_end_of_filament_purge_speed=0.5 speed_support=30 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/005.settings b/stress_benchmark/resources/005.settings index b4ee5d4563..f54b1d867c 100644 --- a/stress_benchmark/resources/005.settings +++ b/stress_benchmark/resources/005.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.2 material_bed_temperature_layer_0=55 machine_max_jerk_e=5 -raft_margin=5.0 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1059,7 +1061,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.2 command_line_settings=0 -raft_margin=5.0 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 material_end_of_filament_purge_speed=0.5 speed_support=25.0 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/006.settings b/stress_benchmark/resources/006.settings index ec75660851..956d6691a6 100644 --- a/stress_benchmark/resources/006.settings +++ b/stress_benchmark/resources/006.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.2 material_bed_temperature_layer_0=60 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1059,7 +1061,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.2 command_line_settings=0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_end_of_filament_purge_speed=0.5 speed_support=25.0 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/007.settings b/stress_benchmark/resources/007.settings index 635226ed8c..424a7b4afa 100644 --- a/stress_benchmark/resources/007.settings +++ b/stress_benchmark/resources/007.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.2 material_bed_temperature_layer_0=60 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1059,7 +1061,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.2 command_line_settings=0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_end_of_filament_purge_speed=0.5 speed_support=40.0 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/008.settings b/stress_benchmark/resources/008.settings index f4771e572b..cfcd6b234c 100644 --- a/stress_benchmark/resources/008.settings +++ b/stress_benchmark/resources/008.settings @@ -370,7 +370,9 @@ support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 acceleration_support_roof=1000 support_roof_offset=0.0 wipe_retraction_prime_speed=45 @@ -899,7 +901,9 @@ wall_line_width_0=0.4 support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_break_preparation_temperature=210 wall_transition_filter_deviation=0.1 support_tree_max_diameter_increase_by_merges_when_support_to_model=1 diff --git a/stress_benchmark/resources/009.settings b/stress_benchmark/resources/009.settings index f4771e572b..cfcd6b234c 100644 --- a/stress_benchmark/resources/009.settings +++ b/stress_benchmark/resources/009.settings @@ -370,7 +370,9 @@ support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 acceleration_support_roof=1000 support_roof_offset=0.0 wipe_retraction_prime_speed=45 @@ -899,7 +901,9 @@ wall_line_width_0=0.4 support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_break_preparation_temperature=210 wall_transition_filter_deviation=0.1 support_tree_max_diameter_increase_by_merges_when_support_to_model=1 diff --git a/stress_benchmark/resources/010.settings b/stress_benchmark/resources/010.settings index f4771e572b..cfcd6b234c 100644 --- a/stress_benchmark/resources/010.settings +++ b/stress_benchmark/resources/010.settings @@ -370,7 +370,9 @@ support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 acceleration_support_roof=1000 support_roof_offset=0.0 wipe_retraction_prime_speed=45 @@ -899,7 +901,9 @@ wall_line_width_0=0.4 support_tree_top_rate=10 cross_infill_pocket_size=6.0 material_end_of_filament_purge_speed=0.5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_break_preparation_temperature=210 wall_transition_filter_deviation=0.1 support_tree_max_diameter_increase_by_merges_when_support_to_model=1 diff --git a/stress_benchmark/resources/011.settings b/stress_benchmark/resources/011.settings index 3f63e86a10..08b6ec47db 100644 --- a/stress_benchmark/resources/011.settings +++ b/stress_benchmark/resources/011.settings @@ -83,7 +83,9 @@ ironing_line_spacing=0.1 support_infill_sparse_thickness=0.2 material_bed_temperature_layer_0=60 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 machine_scale_fan_speed_zero_to_one=False wall_x_material_flow=100 cool_fan_speed=100.0 @@ -1059,7 +1061,9 @@ bridge_skin_density_3=80 min_feature_size=0.1 infill_sparse_thickness=0.2 command_line_settings=0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 material_end_of_filament_purge_speed=0.5 speed_support=60 machine_extruder_cooling_fan_number=0 diff --git a/stress_benchmark/resources/012.settings b/stress_benchmark/resources/012.settings index 712087c5e2..521724273d 100644 --- a/stress_benchmark/resources/012.settings +++ b/stress_benchmark/resources/012.settings @@ -28,7 +28,9 @@ material_initial_print_temperature=250 jerk_skirt_brim=12.5 roofing_monotonic=True machine_max_jerk_e=5.0 -raft_margin=3 +raft_base_margin=3 +raft_interface_margin=3 +raft_surface_margin=3 bottom_thickness=1.0 skirt_height=3 speed_travel_layer_0=250.0 diff --git a/stress_benchmark/resources/013.settings b/stress_benchmark/resources/013.settings index dd1893e2c9..311beb6893 100644 --- a/stress_benchmark/resources/013.settings +++ b/stress_benchmark/resources/013.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/014.settings b/stress_benchmark/resources/014.settings index 3838f85463..93487b5295 100644 --- a/stress_benchmark/resources/014.settings +++ b/stress_benchmark/resources/014.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.02 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/015.settings b/stress_benchmark/resources/015.settings index b2a53600c9..1159c55eba 100644 --- a/stress_benchmark/resources/015.settings +++ b/stress_benchmark/resources/015.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.02 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/016.settings b/stress_benchmark/resources/016.settings index af2f42cf1e..de11857273 100644 --- a/stress_benchmark/resources/016.settings +++ b/stress_benchmark/resources/016.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=5 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/017.settings b/stress_benchmark/resources/017.settings index 02d045445e..76a4b98128 100644 --- a/stress_benchmark/resources/017.settings +++ b/stress_benchmark/resources/017.settings @@ -134,7 +134,9 @@ raft_interface_jerk=12.0 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.12 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/018.settings b/stress_benchmark/resources/018.settings index 2b377d53e0..4c6b5a3bf1 100644 --- a/stress_benchmark/resources/018.settings +++ b/stress_benchmark/resources/018.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=5.0 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/019.settings b/stress_benchmark/resources/019.settings index 8910e83a35..443bd2d9a1 100644 --- a/stress_benchmark/resources/019.settings +++ b/stress_benchmark/resources/019.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/020.settings b/stress_benchmark/resources/020.settings index 87cecf33c7..d96be4bd5a 100644 --- a/stress_benchmark/resources/020.settings +++ b/stress_benchmark/resources/020.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/021.settings b/stress_benchmark/resources/021.settings index 8ddb9175ff..802d2c4733 100644 --- a/stress_benchmark/resources/021.settings +++ b/stress_benchmark/resources/021.settings @@ -135,7 +135,9 @@ raft_interface_jerk=30 material_shrinkage_percentage=100.1 support_interface_wall_count=1 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.08 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/022.settings b/stress_benchmark/resources/022.settings index 6d484adf38..1384179d85 100644 --- a/stress_benchmark/resources/022.settings +++ b/stress_benchmark/resources/022.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15.0 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.084 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/023.settings b/stress_benchmark/resources/023.settings index abc56c6905..2313a61291 100644 --- a/stress_benchmark/resources/023.settings +++ b/stress_benchmark/resources/023.settings @@ -134,7 +134,9 @@ raft_interface_jerk=10.0 material_shrinkage_percentage=100.0 support_interface_wall_count=1 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.044000000000000004 small_feature_max_length=15.707963267948966 diff --git a/stress_benchmark/resources/024.settings b/stress_benchmark/resources/024.settings index 05c420b03e..15d687c588 100644 --- a/stress_benchmark/resources/024.settings +++ b/stress_benchmark/resources/024.settings @@ -135,7 +135,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=1 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.08 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/025.settings b/stress_benchmark/resources/025.settings index a6e3d3500e..60b63ed7ab 100644 --- a/stress_benchmark/resources/025.settings +++ b/stress_benchmark/resources/025.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.02 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/026.settings b/stress_benchmark/resources/026.settings index a008515e9f..92acf19566 100644 --- a/stress_benchmark/resources/026.settings +++ b/stress_benchmark/resources/026.settings @@ -135,7 +135,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.2 support_interface_wall_count=1 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.08 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/027.settings b/stress_benchmark/resources/027.settings index 1b4b00078a..8617f7f696 100644 --- a/stress_benchmark/resources/027.settings +++ b/stress_benchmark/resources/027.settings @@ -135,7 +135,9 @@ raft_interface_jerk=50.0 material_shrinkage_percentage=100.3 support_interface_wall_count=1 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.08 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/028.settings b/stress_benchmark/resources/028.settings index 7f958d05c2..0ffc6d9b51 100644 --- a/stress_benchmark/resources/028.settings +++ b/stress_benchmark/resources/028.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.1 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/029.settings b/stress_benchmark/resources/029.settings index 823bf8129b..5b9c43af5e 100644 --- a/stress_benchmark/resources/029.settings +++ b/stress_benchmark/resources/029.settings @@ -134,7 +134,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=15.707963267948966 diff --git a/stress_benchmark/resources/030.settings b/stress_benchmark/resources/030.settings index f003931b0a..47809b68eb 100644 --- a/stress_benchmark/resources/030.settings +++ b/stress_benchmark/resources/030.settings @@ -135,7 +135,9 @@ raft_interface_jerk=20 material_shrinkage_percentage=100.2 support_interface_wall_count=1 machine_max_jerk_e=5.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.08 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/031.settings b/stress_benchmark/resources/031.settings index 35ea2a8526..31984edfe1 100644 --- a/stress_benchmark/resources/031.settings +++ b/stress_benchmark/resources/031.settings @@ -134,7 +134,9 @@ raft_interface_jerk=8 material_shrinkage_percentage=100.0 support_interface_wall_count=0 machine_max_jerk_e=5 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 roofing_monotonic=True skin_overlap_mm=0.04 small_feature_max_length=0.0 diff --git a/stress_benchmark/resources/032.settings b/stress_benchmark/resources/032.settings index 8187ab3099..16d3b15c9c 100644 --- a/stress_benchmark/resources/032.settings +++ b/stress_benchmark/resources/032.settings @@ -555,7 +555,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=1000 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/033.settings b/stress_benchmark/resources/033.settings index 5783e17291..efb082178b 100644 --- a/stress_benchmark/resources/033.settings +++ b/stress_benchmark/resources/033.settings @@ -557,7 +557,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=20 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=3000 support_roof_wall_count=0 raft_jerk=20 diff --git a/stress_benchmark/resources/034.settings b/stress_benchmark/resources/034.settings index 0ed9af0382..ab7970bc26 100644 --- a/stress_benchmark/resources/034.settings +++ b/stress_benchmark/resources/034.settings @@ -554,7 +554,9 @@ wipe_pause=0 material_standby_temperature=180 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=5 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/035.settings b/stress_benchmark/resources/035.settings index 0106e70349..186d401196 100644 --- a/stress_benchmark/resources/035.settings +++ b/stress_benchmark/resources/035.settings @@ -556,7 +556,9 @@ wipe_pause=0 material_standby_temperature=180 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/036.settings b/stress_benchmark/resources/036.settings index 496ddb57a3..c81e9a4567 100644 --- a/stress_benchmark/resources/036.settings +++ b/stress_benchmark/resources/036.settings @@ -555,7 +555,9 @@ wipe_pause=0 material_standby_temperature=180 jerk_wall=12.0 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=12.0 diff --git a/stress_benchmark/resources/037.settings b/stress_benchmark/resources/037.settings index 4a40bf459b..3a1ca85c98 100644 --- a/stress_benchmark/resources/037.settings +++ b/stress_benchmark/resources/037.settings @@ -555,7 +555,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=350 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/038.settings b/stress_benchmark/resources/038.settings index 853b097d2d..789165b2a9 100644 --- a/stress_benchmark/resources/038.settings +++ b/stress_benchmark/resources/038.settings @@ -556,7 +556,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=5.0 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/039.settings b/stress_benchmark/resources/039.settings index 3810b98181..b8183c4b0d 100644 --- a/stress_benchmark/resources/039.settings +++ b/stress_benchmark/resources/039.settings @@ -556,7 +556,9 @@ wipe_pause=0 material_standby_temperature=180.0 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/040.settings b/stress_benchmark/resources/040.settings index 9df0af97c1..f74194fa38 100644 --- a/stress_benchmark/resources/040.settings +++ b/stress_benchmark/resources/040.settings @@ -556,7 +556,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=20 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=3000 support_roof_wall_count=0 raft_jerk=20 diff --git a/stress_benchmark/resources/041.settings b/stress_benchmark/resources/041.settings index 6054309199..0f3eaf0020 100644 --- a/stress_benchmark/resources/041.settings +++ b/stress_benchmark/resources/041.settings @@ -559,7 +559,9 @@ wipe_pause=0 material_standby_temperature=180.0 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=1 raft_jerk=8 diff --git a/stress_benchmark/resources/042.settings b/stress_benchmark/resources/042.settings index 91100ebe88..10f61fa229 100644 --- a/stress_benchmark/resources/042.settings +++ b/stress_benchmark/resources/042.settings @@ -557,7 +557,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/043.settings b/stress_benchmark/resources/043.settings index 6e142cc7e7..85b1c44f4f 100644 --- a/stress_benchmark/resources/043.settings +++ b/stress_benchmark/resources/043.settings @@ -558,7 +558,9 @@ wipe_pause=0 material_standby_temperature=100 jerk_wall=20 machine_nozzle_cool_down_speed=0.75 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=3500 support_roof_wall_count=1 raft_jerk=20 diff --git a/stress_benchmark/resources/044.settings b/stress_benchmark/resources/044.settings index db0ea47a59..05e2be11ef 100644 --- a/stress_benchmark/resources/044.settings +++ b/stress_benchmark/resources/044.settings @@ -558,7 +558,9 @@ wipe_pause=0 material_standby_temperature=100 jerk_wall=20 machine_nozzle_cool_down_speed=0.75 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=3500 support_roof_wall_count=1 raft_jerk=20 diff --git a/stress_benchmark/resources/045.settings b/stress_benchmark/resources/045.settings index c93fd544aa..601a64d4c9 100644 --- a/stress_benchmark/resources/045.settings +++ b/stress_benchmark/resources/045.settings @@ -558,7 +558,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=20 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=3000 support_roof_wall_count=0 raft_jerk=20 diff --git a/stress_benchmark/resources/046.settings b/stress_benchmark/resources/046.settings index 2ebb338bdb..ba6d8b93b2 100644 --- a/stress_benchmark/resources/046.settings +++ b/stress_benchmark/resources/046.settings @@ -557,7 +557,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=5 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=1500 support_roof_wall_count=0 raft_jerk=5 diff --git a/stress_benchmark/resources/047.settings b/stress_benchmark/resources/047.settings index 49e632dc16..c1439409f0 100644 --- a/stress_benchmark/resources/047.settings +++ b/stress_benchmark/resources/047.settings @@ -557,7 +557,9 @@ wipe_pause=0 material_standby_temperature=175 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=1800 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/048.settings b/stress_benchmark/resources/048.settings index 73eacc8380..62bc6888fa 100644 --- a/stress_benchmark/resources/048.settings +++ b/stress_benchmark/resources/048.settings @@ -555,7 +555,9 @@ wipe_pause=0 material_standby_temperature=180 jerk_wall=8 machine_nozzle_cool_down_speed=2.0 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 raft_acceleration=500 support_roof_wall_count=0 raft_jerk=8 diff --git a/stress_benchmark/resources/049.settings b/stress_benchmark/resources/049.settings index 8a534c14c4..4b0f97c5cc 100644 --- a/stress_benchmark/resources/049.settings +++ b/stress_benchmark/resources/049.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=205.0 layer_0_z_overlap=0.15 support_roof_enable=True acceleration_wall_x_roofing=500 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/050.settings b/stress_benchmark/resources/050.settings index bee0e8f4ce..f1fa5a28e8 100644 --- a/stress_benchmark/resources/050.settings +++ b/stress_benchmark/resources/050.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=220 layer_0_z_overlap=0.15 support_roof_enable=False acceleration_wall_x_roofing=1000 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.2 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/051.settings b/stress_benchmark/resources/051.settings index fd55479c67..1d7a79f521 100644 --- a/stress_benchmark/resources/051.settings +++ b/stress_benchmark/resources/051.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=210.0 layer_0_z_overlap=0.15 support_roof_enable=True acceleration_wall_x_roofing=400.0 -raft_margin=0 +raft_base_margin=0 +raft_interface_margin=0 +raft_surface_margin=0 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/052.settings b/stress_benchmark/resources/052.settings index 629a0a2715..c46d63e5e4 100644 --- a/stress_benchmark/resources/052.settings +++ b/stress_benchmark/resources/052.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=200 layer_0_z_overlap=0.15 support_roof_enable=False acceleration_wall_x_roofing=500 -raft_margin=5 +raft_base_margin=5 +raft_interface_margin=5 +raft_surface_margin=5 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.28 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/053.settings b/stress_benchmark/resources/053.settings index 5f59343201..2e5e59b2b3 100644 --- a/stress_benchmark/resources/053.settings +++ b/stress_benchmark/resources/053.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=190 layer_0_z_overlap=0.15 support_roof_enable=False acceleration_wall_x_roofing=3000 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.1 machine_nozzle_head_distance=5 diff --git a/stress_benchmark/resources/054.settings b/stress_benchmark/resources/054.settings index 41766d28d4..ed5709fe6d 100644 --- a/stress_benchmark/resources/054.settings +++ b/stress_benchmark/resources/054.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=225.0 layer_0_z_overlap=0.15 support_roof_enable=False acceleration_wall_x_roofing=1800 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.2 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/055.settings b/stress_benchmark/resources/055.settings index d4d7856ea3..14025ad607 100644 --- a/stress_benchmark/resources/055.settings +++ b/stress_benchmark/resources/055.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=190 layer_0_z_overlap=0.15 support_roof_enable=False acceleration_wall_x_roofing=3000 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.2 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/056.settings b/stress_benchmark/resources/056.settings index ae77715c21..427a32768d 100644 --- a/stress_benchmark/resources/056.settings +++ b/stress_benchmark/resources/056.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=180 layer_0_z_overlap=0.15 support_roof_enable=True acceleration_wall_x_roofing=3000 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.1 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/057.settings b/stress_benchmark/resources/057.settings index e69a30998b..22c8b9dd7b 100644 --- a/stress_benchmark/resources/057.settings +++ b/stress_benchmark/resources/057.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=183 layer_0_z_overlap=0.15 support_roof_enable=True acceleration_wall_x_roofing=500 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.5 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/058.settings b/stress_benchmark/resources/058.settings index 146ed80f11..7562c7a7bd 100644 --- a/stress_benchmark/resources/058.settings +++ b/stress_benchmark/resources/058.settings @@ -67,7 +67,9 @@ material_initial_print_temperature=200 layer_0_z_overlap=0.15 support_roof_enable=True acceleration_wall_x_roofing=500 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tree_branch_diameter_angle=7 prime_tower_base_height=0.12 machine_nozzle_head_distance=3 diff --git a/stress_benchmark/resources/059.settings b/stress_benchmark/resources/059.settings index 878cc7f8b5..c8c547a1de 100644 --- a/stress_benchmark/resources/059.settings +++ b/stress_benchmark/resources/059.settings @@ -221,7 +221,9 @@ acceleration_support_bottom=500 bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=25 hole_xy_offset_max_diameter=0 cool_fan_full_layer=2 diff --git a/stress_benchmark/resources/060.settings b/stress_benchmark/resources/060.settings index 9fd982aca1..afff41c33d 100644 --- a/stress_benchmark/resources/060.settings +++ b/stress_benchmark/resources/060.settings @@ -221,7 +221,9 @@ acceleration_support_bottom=500 bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=20.0 hole_xy_offset_max_diameter=0 cool_fan_full_layer=4 diff --git a/stress_benchmark/resources/061.settings b/stress_benchmark/resources/061.settings index 3a05b93091..18d0f316fd 100644 --- a/stress_benchmark/resources/061.settings +++ b/stress_benchmark/resources/061.settings @@ -222,7 +222,9 @@ bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 quality_name=Draft -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=10.0 hole_xy_offset_max_diameter=0 cool_fan_full_layer=2 diff --git a/stress_benchmark/resources/062.settings b/stress_benchmark/resources/062.settings index d6c59d5fec..96d4a28dd1 100644 --- a/stress_benchmark/resources/062.settings +++ b/stress_benchmark/resources/062.settings @@ -221,7 +221,9 @@ acceleration_support_bottom=3000 bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=30.0 hole_xy_offset_max_diameter=0 cool_fan_full_layer=2 diff --git a/stress_benchmark/resources/063.settings b/stress_benchmark/resources/063.settings index 4757dbfedc..d300bfc633 100644 --- a/stress_benchmark/resources/063.settings +++ b/stress_benchmark/resources/063.settings @@ -222,7 +222,9 @@ bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 quality_name=Draft -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=75.0 hole_xy_offset_max_diameter=0 cool_fan_full_layer=2 diff --git a/stress_benchmark/resources/064.settings b/stress_benchmark/resources/064.settings index ad14e390a1..1739abbb7e 100644 --- a/stress_benchmark/resources/064.settings +++ b/stress_benchmark/resources/064.settings @@ -220,7 +220,9 @@ acceleration_support_bottom=400 bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=10 hole_xy_offset_max_diameter=0 cool_fan_full_layer=45 diff --git a/stress_benchmark/resources/065.settings b/stress_benchmark/resources/065.settings index e82e8ae600..a32ec18ddb 100644 --- a/stress_benchmark/resources/065.settings +++ b/stress_benchmark/resources/065.settings @@ -223,7 +223,9 @@ bridge_skin_density=80 raft_airgap=0 mold_angle=40 quality_name=Fine -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=10.0 roofing_angles=[] hole_xy_offset_max_diameter=0 diff --git a/stress_benchmark/resources/066.settings b/stress_benchmark/resources/066.settings index 3b324482ff..9a50e01066 100644 --- a/stress_benchmark/resources/066.settings +++ b/stress_benchmark/resources/066.settings @@ -223,7 +223,9 @@ bridge_skin_density=80 raft_airgap=0.3 mold_angle=40 quality_name=Fine -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=16.0 roofing_angles=[] hole_xy_offset_max_diameter=0 diff --git a/stress_benchmark/resources/067.settings b/stress_benchmark/resources/067.settings index 8fead7495b..f0aaccedf9 100644 --- a/stress_benchmark/resources/067.settings +++ b/stress_benchmark/resources/067.settings @@ -221,7 +221,9 @@ acceleration_support_bottom=500.0 bridge_skin_density=100 raft_airgap=0.3 mold_angle=40 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 speed_print_layer_0=25 roofing_angles=[45,135] hole_xy_offset_max_diameter=0 diff --git a/tests/test_global_settings.txt b/tests/test_global_settings.txt index cb0c373c6a..7861bc4139 100644 --- a/tests/test_global_settings.txt +++ b/tests/test_global_settings.txt @@ -260,7 +260,9 @@ jerk_ironing=5 retraction_combing_max_distance=0 acceleration_layer_0=500 coasting_min_volume=0.8 -raft_margin=15 +raft_base_margin=15 +raft_interface_margin=15 +raft_surface_margin=15 support_tower_diameter=3.0 cool_fan_speed_max=100 machine_endstop_positive_direction_x=False From 3bec150d36b09a28121a481b982d93fbf13067a2 Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Mon, 8 Jan 2024 13:45:56 +0000 Subject: [PATCH 202/218] Applied clang-format. --- include/raft.h | 16 ++++++++-------- src/raft.cpp | 9 +++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/include/raft.h b/include/raft.h index 11f0fffdf6..b6f837f53e 100644 --- a/include/raft.h +++ b/include/raft.h @@ -1,5 +1,5 @@ -//Copyright (c) 2018 Ultimaker B.V. -//CuraEngine is released under the terms of the AGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// CuraEngine is released under the terms of the AGPLv3 or higher. #ifndef RAFT_H #define RAFT_H @@ -30,7 +30,7 @@ class Raft /*! * \brief Get the amount of layers to fill the airgap and initial layer with * helper parts (support, prime tower, etc.). - * + * * The initial layer gets a separate filler layer because we don't want to * apply the layer_0_z_overlap to it. */ @@ -50,12 +50,13 @@ class Raft /*! * \brief Get the total amount of extra layers below zero because there is a * raft. - * + * * This includes the filler layers which are introduced in the air gap. */ static size_t getTotalExtraLayers(); - enum LayerType { + enum LayerType + { RaftBase, RaftInterface, RaftSurface, @@ -69,9 +70,8 @@ class Raft * \return The type of layer at the given layer index. */ static LayerType getLayerType(LayerIndex layer_index); - }; -}//namespace cura +} // namespace cura -#endif//RAFT_H +#endif // RAFT_H diff --git a/src/raft.cpp b/src/raft.cpp index b42e3e2491..7fb1e4dd8c 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -28,7 +28,8 @@ void Raft::generate(SliceDataStorage& storage) storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(settings.get("raft_surface_margin"), ClipperLib::jtRound); const coord_t shield_line_width_layer0 = settings.get("skirt_brim_line_width"); - const coord_t max_raft_distance = std::max(std::max(settings.get("raft_base_margin"), settings.get("raft_interface_margin")), settings.get("raft_surface_margin")); + const coord_t max_raft_distance + = std::max(std::max(settings.get("raft_base_margin"), settings.get("raft_interface_margin")), settings.get("raft_surface_margin")); if (storage.draft_protection_shield.size() > 0) { Polygons draft_shield_raft @@ -145,15 +146,15 @@ Raft::LayerType Raft::getLayerType(LayerIndex layer_index) const auto interface_layers = interface_train.settings_.get("raft_interface_layers"); const auto surface_layers = surface_train.settings_.get("raft_surface_layers"); - if (layer_index < - airgap - surface_layers - interface_layers) + if (layer_index < -airgap - surface_layers - interface_layers) { return LayerType::RaftBase; } - if (layer_index < - airgap - surface_layers) + if (layer_index < -airgap - surface_layers) { return LayerType::RaftInterface; } - if (layer_index < - airgap) + if (layer_index < -airgap) { return LayerType::RaftSurface; } From 88c255cec76611984257d65321ce29041b7d1235 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Mon, 8 Jan 2024 14:49:34 +0100 Subject: [PATCH 203/218] Make remove inside corners configurable per raft type CURA-11395 --- src/raft.cpp | 27 +++++++++++++++++++------ stress_benchmark/resources/001.settings | 4 +++- stress_benchmark/resources/002.settings | 4 +++- stress_benchmark/resources/003.settings | 4 +++- stress_benchmark/resources/004.settings | 4 +++- stress_benchmark/resources/005.settings | 4 +++- stress_benchmark/resources/006.settings | 4 +++- stress_benchmark/resources/007.settings | 4 +++- stress_benchmark/resources/008.settings | 4 +++- stress_benchmark/resources/009.settings | 4 +++- stress_benchmark/resources/010.settings | 4 +++- stress_benchmark/resources/011.settings | 4 +++- stress_benchmark/resources/012.settings | 4 +++- stress_benchmark/resources/013.settings | 4 +++- stress_benchmark/resources/014.settings | 4 +++- stress_benchmark/resources/015.settings | 4 +++- stress_benchmark/resources/016.settings | 4 +++- stress_benchmark/resources/017.settings | 4 +++- stress_benchmark/resources/018.settings | 4 +++- stress_benchmark/resources/019.settings | 4 +++- stress_benchmark/resources/020.settings | 4 +++- stress_benchmark/resources/021.settings | 4 +++- stress_benchmark/resources/022.settings | 4 +++- stress_benchmark/resources/023.settings | 4 +++- stress_benchmark/resources/024.settings | 4 +++- stress_benchmark/resources/025.settings | 4 +++- stress_benchmark/resources/026.settings | 4 +++- stress_benchmark/resources/027.settings | 4 +++- stress_benchmark/resources/028.settings | 4 +++- stress_benchmark/resources/029.settings | 4 +++- stress_benchmark/resources/030.settings | 4 +++- stress_benchmark/resources/031.settings | 4 +++- stress_benchmark/resources/032.settings | 4 +++- stress_benchmark/resources/033.settings | 4 +++- stress_benchmark/resources/034.settings | 4 +++- stress_benchmark/resources/035.settings | 4 +++- stress_benchmark/resources/036.settings | 4 +++- stress_benchmark/resources/037.settings | 4 +++- stress_benchmark/resources/038.settings | 4 +++- stress_benchmark/resources/039.settings | 4 +++- stress_benchmark/resources/040.settings | 4 +++- stress_benchmark/resources/041.settings | 4 +++- stress_benchmark/resources/042.settings | 4 +++- stress_benchmark/resources/043.settings | 4 +++- stress_benchmark/resources/044.settings | 4 +++- stress_benchmark/resources/045.settings | 4 +++- stress_benchmark/resources/046.settings | 4 +++- stress_benchmark/resources/047.settings | 4 +++- stress_benchmark/resources/048.settings | 4 +++- stress_benchmark/resources/049.settings | 4 +++- stress_benchmark/resources/050.settings | 4 +++- stress_benchmark/resources/051.settings | 4 +++- stress_benchmark/resources/052.settings | 4 +++- stress_benchmark/resources/053.settings | 4 +++- stress_benchmark/resources/054.settings | 4 +++- stress_benchmark/resources/055.settings | 4 +++- stress_benchmark/resources/056.settings | 4 +++- stress_benchmark/resources/057.settings | 4 +++- stress_benchmark/resources/058.settings | 4 +++- stress_benchmark/resources/059.settings | 4 +++- stress_benchmark/resources/060.settings | 4 +++- stress_benchmark/resources/061.settings | 4 +++- stress_benchmark/resources/062.settings | 4 +++- stress_benchmark/resources/063.settings | 4 +++- stress_benchmark/resources/064.settings | 4 +++- stress_benchmark/resources/065.settings | 4 +++- stress_benchmark/resources/066.settings | 4 +++- stress_benchmark/resources/067.settings | 4 +++- 68 files changed, 222 insertions(+), 73 deletions(-) diff --git a/src/raft.cpp b/src/raft.cpp index b42e3e2491..c299b79061 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -50,21 +50,36 @@ void Raft::generate(SliceDataStorage& storage) storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } - if (settings.get("raft_remove_inside_corners")) + if (settings.get("raft_base_remove_inside_corners")) { storage.raftBaseOutline.makeConvex(); - storage.raftSurfaceOutline.makeConvex(); - storage.raftInterfaceOutline.makeConvex(); } else { - const coord_t smoothing = settings.get("raft_smoothing"); - // remove small holes and smooth inward corners + const coord_t smoothing = settings.get("raft_base_smoothing"); storage.raftBaseOutline = storage.raftBaseOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); + } + + if (settings.get("raft_interface_remove_inside_corners")) + { + storage.raftInterfaceOutline.makeConvex(); + } + else + { + const coord_t smoothing = settings.get("raft_interface_smoothing"); storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); } + if (settings.get("raft_surface_remove_inside_corners")) + { + storage.raftSurfaceOutline.makeConvex(); + } + else + { + const coord_t smoothing = settings.get("raft_surface_smoothing"); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); + } + if (storage.primeTower.enabled_ && ! storage.primeTower.would_have_actual_tower_) { // Find out if the prime-tower part of the raft still needs to be printed, even if there is no actual tower. diff --git a/stress_benchmark/resources/001.settings b/stress_benchmark/resources/001.settings index d72d076797..71ee472bd9 100644 --- a/stress_benchmark/resources/001.settings +++ b/stress_benchmark/resources/001.settings @@ -271,7 +271,9 @@ infill_mesh_order=0 retraction_prime_speed=5 z_seam_type=sharpest_corner ironing_only_highest_layer=False -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False acceleration_topbottom=300 machine_settings=0 travel_retract_before_outer_wall=False diff --git a/stress_benchmark/resources/002.settings b/stress_benchmark/resources/002.settings index c9dfb14cc0..c63aba30f3 100644 --- a/stress_benchmark/resources/002.settings +++ b/stress_benchmark/resources/002.settings @@ -598,7 +598,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/003.settings b/stress_benchmark/resources/003.settings index b6aa5b0d7a..1a0de365f5 100644 --- a/stress_benchmark/resources/003.settings +++ b/stress_benchmark/resources/003.settings @@ -599,7 +599,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/004.settings b/stress_benchmark/resources/004.settings index a4c2afe92e..74603b80f0 100644 --- a/stress_benchmark/resources/004.settings +++ b/stress_benchmark/resources/004.settings @@ -599,7 +599,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/005.settings b/stress_benchmark/resources/005.settings index f54b1d867c..4352f108a2 100644 --- a/stress_benchmark/resources/005.settings +++ b/stress_benchmark/resources/005.settings @@ -600,7 +600,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/006.settings b/stress_benchmark/resources/006.settings index 956d6691a6..9a94d8f6da 100644 --- a/stress_benchmark/resources/006.settings +++ b/stress_benchmark/resources/006.settings @@ -600,7 +600,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/007.settings b/stress_benchmark/resources/007.settings index 424a7b4afa..4e98a3d2e7 100644 --- a/stress_benchmark/resources/007.settings +++ b/stress_benchmark/resources/007.settings @@ -600,7 +600,9 @@ support_bottom_wall_count=0 jerk_wall_x=8 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/008.settings b/stress_benchmark/resources/008.settings index cfcd6b234c..b4aca3d5ff 100644 --- a/stress_benchmark/resources/008.settings +++ b/stress_benchmark/resources/008.settings @@ -347,7 +347,9 @@ wall_0_material_flow=100 meshfix_maximum_extrusion_area_deviation=50000 wall_0_wipe_dist=0.2 ironing_only_highest_layer=False -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False machine_max_feedrate_e=45 prime_tower_line_width=0.4 wall_line_width_x=0.4 diff --git a/stress_benchmark/resources/009.settings b/stress_benchmark/resources/009.settings index cfcd6b234c..b4aca3d5ff 100644 --- a/stress_benchmark/resources/009.settings +++ b/stress_benchmark/resources/009.settings @@ -347,7 +347,9 @@ wall_0_material_flow=100 meshfix_maximum_extrusion_area_deviation=50000 wall_0_wipe_dist=0.2 ironing_only_highest_layer=False -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False machine_max_feedrate_e=45 prime_tower_line_width=0.4 wall_line_width_x=0.4 diff --git a/stress_benchmark/resources/010.settings b/stress_benchmark/resources/010.settings index cfcd6b234c..b4aca3d5ff 100644 --- a/stress_benchmark/resources/010.settings +++ b/stress_benchmark/resources/010.settings @@ -347,7 +347,9 @@ wall_0_material_flow=100 meshfix_maximum_extrusion_area_deviation=50000 wall_0_wipe_dist=0.2 ironing_only_highest_layer=False -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False machine_max_feedrate_e=45 prime_tower_line_width=0.4 wall_line_width_x=0.4 diff --git a/stress_benchmark/resources/011.settings b/stress_benchmark/resources/011.settings index 08b6ec47db..c789ab5a63 100644 --- a/stress_benchmark/resources/011.settings +++ b/stress_benchmark/resources/011.settings @@ -601,7 +601,9 @@ support_bottom_wall_count=0 jerk_wall_x=20 draft_shield_height_limitation=full bridge_sparse_infill_max_density=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False cooling=0 infill_support_angle=40 diff --git a/stress_benchmark/resources/012.settings b/stress_benchmark/resources/012.settings index 521724273d..db4584485c 100644 --- a/stress_benchmark/resources/012.settings +++ b/stress_benchmark/resources/012.settings @@ -590,7 +590,9 @@ jerk_infill=12.5 draft_shield_height_limitation=full layer_height_0=0.2 jerk_print=12.5 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_pattern=lines infill_support_angle=40 raft_base_acceleration=300 diff --git a/stress_benchmark/resources/013.settings b/stress_benchmark/resources/013.settings index 311beb6893..692c6164cc 100644 --- a/stress_benchmark/resources/013.settings +++ b/stress_benchmark/resources/013.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=55 raft_base_speed=16.875 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/014.settings b/stress_benchmark/resources/014.settings index 93487b5295..77d3f128f7 100644 --- a/stress_benchmark/resources/014.settings +++ b/stress_benchmark/resources/014.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=50 raft_base_speed=30.0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/015.settings b/stress_benchmark/resources/015.settings index 1159c55eba..55af6339c5 100644 --- a/stress_benchmark/resources/015.settings +++ b/stress_benchmark/resources/015.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=0 raft_base_speed=37.5 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/016.settings b/stress_benchmark/resources/016.settings index de11857273..fed8689b55 100644 --- a/stress_benchmark/resources/016.settings +++ b/stress_benchmark/resources/016.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=18.75 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/017.settings b/stress_benchmark/resources/017.settings index 76a4b98128..d63440f363 100644 --- a/stress_benchmark/resources/017.settings +++ b/stress_benchmark/resources/017.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.42 support_skip_zag_per_mm=20 support_angle=40 raft_base_speed=18.75 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.38 hole_xy_offset=0 diff --git a/stress_benchmark/resources/018.settings b/stress_benchmark/resources/018.settings index 4c6b5a3bf1..64168b1780 100644 --- a/stress_benchmark/resources/018.settings +++ b/stress_benchmark/resources/018.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=65.0 raft_base_speed=18.75 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/019.settings b/stress_benchmark/resources/019.settings index 443bd2d9a1..e1a9b826ee 100644 --- a/stress_benchmark/resources/019.settings +++ b/stress_benchmark/resources/019.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=30.0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/020.settings b/stress_benchmark/resources/020.settings index d96be4bd5a..a38b801b56 100644 --- a/stress_benchmark/resources/020.settings +++ b/stress_benchmark/resources/020.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.8 support_skip_zag_per_mm=20 support_angle=55 raft_base_speed=30.0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.8 hole_xy_offset=0 diff --git a/stress_benchmark/resources/021.settings b/stress_benchmark/resources/021.settings index 802d2c4733..8f09ee7382 100644 --- a/stress_benchmark/resources/021.settings +++ b/stress_benchmark/resources/021.settings @@ -215,7 +215,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=60 raft_base_speed=15 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/022.settings b/stress_benchmark/resources/022.settings index 1384179d85..ca4041d688 100644 --- a/stress_benchmark/resources/022.settings +++ b/stress_benchmark/resources/022.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.42000000000000004 support_skip_zag_per_mm=20 support_angle=50 raft_base_speed=12.0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.42000000000000004 hole_xy_offset=0 diff --git a/stress_benchmark/resources/023.settings b/stress_benchmark/resources/023.settings index 2313a61291..c630167843 100644 --- a/stress_benchmark/resources/023.settings +++ b/stress_benchmark/resources/023.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.44 support_skip_zag_per_mm=20 support_angle=50 raft_base_speed=56.25 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=True roofing_line_width=0.44 hole_xy_offset=0 diff --git a/stress_benchmark/resources/024.settings b/stress_benchmark/resources/024.settings index 15d687c588..4ccc228f0e 100644 --- a/stress_benchmark/resources/024.settings +++ b/stress_benchmark/resources/024.settings @@ -215,7 +215,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=26.25 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/025.settings b/stress_benchmark/resources/025.settings index 60b63ed7ab..70275e935e 100644 --- a/stress_benchmark/resources/025.settings +++ b/stress_benchmark/resources/025.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=50 raft_base_speed=22.5 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/026.settings b/stress_benchmark/resources/026.settings index 92acf19566..83110138e7 100644 --- a/stress_benchmark/resources/026.settings +++ b/stress_benchmark/resources/026.settings @@ -215,7 +215,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=15 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/027.settings b/stress_benchmark/resources/027.settings index 8617f7f696..6dccc78fad 100644 --- a/stress_benchmark/resources/027.settings +++ b/stress_benchmark/resources/027.settings @@ -215,7 +215,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=15 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/028.settings b/stress_benchmark/resources/028.settings index 0ffc6d9b51..7e1d34e6f2 100644 --- a/stress_benchmark/resources/028.settings +++ b/stress_benchmark/resources/028.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=50 raft_base_speed=22.5 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/029.settings b/stress_benchmark/resources/029.settings index 5b9c43af5e..2863e74b64 100644 --- a/stress_benchmark/resources/029.settings +++ b/stress_benchmark/resources/029.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=60 raft_base_speed=56.25 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=True roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/030.settings b/stress_benchmark/resources/030.settings index 47809b68eb..fda295d176 100644 --- a/stress_benchmark/resources/030.settings +++ b/stress_benchmark/resources/030.settings @@ -215,7 +215,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=60 raft_base_speed=15 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/031.settings b/stress_benchmark/resources/031.settings index 31984edfe1..40d89ac715 100644 --- a/stress_benchmark/resources/031.settings +++ b/stress_benchmark/resources/031.settings @@ -214,7 +214,9 @@ support_interface_line_width=0.4 support_skip_zag_per_mm=20 support_angle=45 raft_base_speed=18.75 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False ironing_only_highest_layer=False roofing_line_width=0.4 hole_xy_offset=0 diff --git a/stress_benchmark/resources/032.settings b/stress_benchmark/resources/032.settings index 16d3b15c9c..d27cae81b7 100644 --- a/stress_benchmark/resources/032.settings +++ b/stress_benchmark/resources/032.settings @@ -443,7 +443,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=7 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/033.settings b/stress_benchmark/resources/033.settings index efb082178b..e061183e7e 100644 --- a/stress_benchmark/resources/033.settings +++ b/stress_benchmark/resources/033.settings @@ -445,7 +445,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/034.settings b/stress_benchmark/resources/034.settings index ab7970bc26..ef2d14e75c 100644 --- a/stress_benchmark/resources/034.settings +++ b/stress_benchmark/resources/034.settings @@ -442,7 +442,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=5 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/035.settings b/stress_benchmark/resources/035.settings index 186d401196..07cfade33e 100644 --- a/stress_benchmark/resources/035.settings +++ b/stress_benchmark/resources/035.settings @@ -444,7 +444,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/036.settings b/stress_benchmark/resources/036.settings index c81e9a4567..5a87f6f72f 100644 --- a/stress_benchmark/resources/036.settings +++ b/stress_benchmark/resources/036.settings @@ -443,7 +443,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/037.settings b/stress_benchmark/resources/037.settings index 3a1ca85c98..c3b00ba245 100644 --- a/stress_benchmark/resources/037.settings +++ b/stress_benchmark/resources/037.settings @@ -443,7 +443,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/038.settings b/stress_benchmark/resources/038.settings index 789165b2a9..4fa621641d 100644 --- a/stress_benchmark/resources/038.settings +++ b/stress_benchmark/resources/038.settings @@ -444,7 +444,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=5.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/039.settings b/stress_benchmark/resources/039.settings index b8183c4b0d..be719c02d9 100644 --- a/stress_benchmark/resources/039.settings +++ b/stress_benchmark/resources/039.settings @@ -444,7 +444,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/040.settings b/stress_benchmark/resources/040.settings index f74194fa38..86c045c3f9 100644 --- a/stress_benchmark/resources/040.settings +++ b/stress_benchmark/resources/040.settings @@ -443,7 +443,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/041.settings b/stress_benchmark/resources/041.settings index 0f3eaf0020..68d1e291d4 100644 --- a/stress_benchmark/resources/041.settings +++ b/stress_benchmark/resources/041.settings @@ -447,7 +447,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/042.settings b/stress_benchmark/resources/042.settings index 10f61fa229..6407e893e6 100644 --- a/stress_benchmark/resources/042.settings +++ b/stress_benchmark/resources/042.settings @@ -444,7 +444,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/043.settings b/stress_benchmark/resources/043.settings index 85b1c44f4f..74cf037495 100644 --- a/stress_benchmark/resources/043.settings +++ b/stress_benchmark/resources/043.settings @@ -446,7 +446,9 @@ multiple_mesh_overlap=0 z_seam_type=sharpest_corner prime_tower_base_size=3 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.8 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/044.settings b/stress_benchmark/resources/044.settings index 05e2be11ef..6c76fcfa34 100644 --- a/stress_benchmark/resources/044.settings +++ b/stress_benchmark/resources/044.settings @@ -446,7 +446,9 @@ multiple_mesh_overlap=0 z_seam_type=sharpest_corner prime_tower_base_size=3 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.2 diff --git a/stress_benchmark/resources/045.settings b/stress_benchmark/resources/045.settings index 601a64d4c9..442c9a56b7 100644 --- a/stress_benchmark/resources/045.settings +++ b/stress_benchmark/resources/045.settings @@ -445,7 +445,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/046.settings b/stress_benchmark/resources/046.settings index ba6d8b93b2..8d590679fb 100644 --- a/stress_benchmark/resources/046.settings +++ b/stress_benchmark/resources/046.settings @@ -445,7 +445,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/047.settings b/stress_benchmark/resources/047.settings index c1439409f0..0d58cef982 100644 --- a/stress_benchmark/resources/047.settings +++ b/stress_benchmark/resources/047.settings @@ -445,7 +445,9 @@ multiple_mesh_overlap=0.15 z_seam_type=sharpest_corner prime_tower_base_size=4.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/048.settings b/stress_benchmark/resources/048.settings index 62bc6888fa..d293d5f621 100644 --- a/stress_benchmark/resources/048.settings +++ b/stress_benchmark/resources/048.settings @@ -443,7 +443,9 @@ multiple_mesh_overlap=0.15 z_seam_type=back prime_tower_base_size=8.0 material_print_temp_wait=True -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wall_distribution_count=1 support_roof_offset=0.0 material_shrinkage_percentage_z=100.0 diff --git a/stress_benchmark/resources/049.settings b/stress_benchmark/resources/049.settings index 4b0f97c5cc..cc70c56c37 100644 --- a/stress_benchmark/resources/049.settings +++ b/stress_benchmark/resources/049.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=1.800018000180002 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=40 material_anti_ooze_retracted_position=-4 layer_height=0.12 diff --git a/stress_benchmark/resources/050.settings b/stress_benchmark/resources/050.settings index f1fa5a28e8..a16b860daf 100644 --- a/stress_benchmark/resources/050.settings +++ b/stress_benchmark/resources/050.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=0.8 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=50 material_anti_ooze_retracted_position=-4 layer_height=0.2 diff --git a/stress_benchmark/resources/051.settings b/stress_benchmark/resources/051.settings index 1d7a79f521..78c8abbd15 100644 --- a/stress_benchmark/resources/051.settings +++ b/stress_benchmark/resources/051.settings @@ -225,7 +225,9 @@ support_bottom_line_distance=0.5 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=20.0 material_anti_ooze_retracted_position=-4 layer_height=0.12 diff --git a/stress_benchmark/resources/052.settings b/stress_benchmark/resources/052.settings index c46d63e5e4..dfab6c8c61 100644 --- a/stress_benchmark/resources/052.settings +++ b/stress_benchmark/resources/052.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=2.8800288002880032 support_enable=True adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=45 material_anti_ooze_retracted_position=-4 layer_height=0.28 diff --git a/stress_benchmark/resources/053.settings b/stress_benchmark/resources/053.settings index 2e5e59b2b3..b8cdb66682 100644 --- a/stress_benchmark/resources/053.settings +++ b/stress_benchmark/resources/053.settings @@ -225,7 +225,9 @@ support_bottom_line_distance=0.4 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=25 material_anti_ooze_retracted_position=-4 layer_height=0.1 diff --git a/stress_benchmark/resources/054.settings b/stress_benchmark/resources/054.settings index ed5709fe6d..4903e9647f 100644 --- a/stress_benchmark/resources/054.settings +++ b/stress_benchmark/resources/054.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=0.4 support_enable=True adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=25 material_anti_ooze_retracted_position=-4 layer_height=0.2 diff --git a/stress_benchmark/resources/055.settings b/stress_benchmark/resources/055.settings index 14025ad607..6868231de8 100644 --- a/stress_benchmark/resources/055.settings +++ b/stress_benchmark/resources/055.settings @@ -225,7 +225,9 @@ support_bottom_line_distance=0.35 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=50 material_anti_ooze_retracted_position=-4 layer_height=0.2 diff --git a/stress_benchmark/resources/056.settings b/stress_benchmark/resources/056.settings index 427a32768d..8973474b86 100644 --- a/stress_benchmark/resources/056.settings +++ b/stress_benchmark/resources/056.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=0.4 support_enable=False adhesion_extruder_nr=0 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=60 material_anti_ooze_retracted_position=-4 layer_height=0.1 diff --git a/stress_benchmark/resources/057.settings b/stress_benchmark/resources/057.settings index 22c8b9dd7b..bb247ec669 100644 --- a/stress_benchmark/resources/057.settings +++ b/stress_benchmark/resources/057.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=5.333333333333333 support_enable=True adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=70 material_anti_ooze_retracted_position=-4 layer_height=0.5 diff --git a/stress_benchmark/resources/058.settings b/stress_benchmark/resources/058.settings index 7562c7a7bd..39446ad26e 100644 --- a/stress_benchmark/resources/058.settings +++ b/stress_benchmark/resources/058.settings @@ -224,7 +224,9 @@ support_bottom_line_distance=2.4000240002400024 support_enable=False adhesion_extruder_nr=-1 print_temperature=210 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False wipe_retraction_retract_speed=45 material_anti_ooze_retracted_position=-4 layer_height=0.12 diff --git a/stress_benchmark/resources/059.settings b/stress_benchmark/resources/059.settings index c8c547a1de..97eb1229c2 100644 --- a/stress_benchmark/resources/059.settings +++ b/stress_benchmark/resources/059.settings @@ -192,7 +192,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=10 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=grid xy_offset=0 prime_tower_brim_enable=True diff --git a/stress_benchmark/resources/060.settings b/stress_benchmark/resources/060.settings index afff41c33d..f07e7c3030 100644 --- a/stress_benchmark/resources/060.settings +++ b/stress_benchmark/resources/060.settings @@ -192,7 +192,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=10 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=grid xy_offset=0 prime_tower_brim_enable=True diff --git a/stress_benchmark/resources/061.settings b/stress_benchmark/resources/061.settings index 18d0f316fd..9a2e6f80a8 100644 --- a/stress_benchmark/resources/061.settings +++ b/stress_benchmark/resources/061.settings @@ -192,7 +192,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=1.0 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=concentric xy_offset=0 prime_tower_brim_enable=False diff --git a/stress_benchmark/resources/062.settings b/stress_benchmark/resources/062.settings index 96d4a28dd1..19969a024d 100644 --- a/stress_benchmark/resources/062.settings +++ b/stress_benchmark/resources/062.settings @@ -192,7 +192,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=1.0 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=concentric xy_offset=0 prime_tower_brim_enable=False diff --git a/stress_benchmark/resources/063.settings b/stress_benchmark/resources/063.settings index d300bfc633..f31688e84e 100644 --- a/stress_benchmark/resources/063.settings +++ b/stress_benchmark/resources/063.settings @@ -192,7 +192,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=1.0 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=concentric xy_offset=0 prime_tower_brim_enable=False diff --git a/stress_benchmark/resources/064.settings b/stress_benchmark/resources/064.settings index 1739abbb7e..7cf1a24790 100644 --- a/stress_benchmark/resources/064.settings +++ b/stress_benchmark/resources/064.settings @@ -191,7 +191,9 @@ roofing_line_width=0.4 material_flow_layer_0=85 minimum_roof_area=2 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=grid xy_offset=0 prime_tower_brim_enable=True diff --git a/stress_benchmark/resources/065.settings b/stress_benchmark/resources/065.settings index a32ec18ddb..0515cd4b53 100644 --- a/stress_benchmark/resources/065.settings +++ b/stress_benchmark/resources/065.settings @@ -193,7 +193,9 @@ roofing_line_width=0.25 material_flow_layer_0=100 minimum_roof_area=1.0 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=zigzag xy_offset=-0.010000000000000002 prime_tower_brim_enable=True diff --git a/stress_benchmark/resources/066.settings b/stress_benchmark/resources/066.settings index 9a50e01066..79f3d54d8b 100644 --- a/stress_benchmark/resources/066.settings +++ b/stress_benchmark/resources/066.settings @@ -193,7 +193,9 @@ roofing_line_width=0.4 material_flow_layer_0=100 minimum_roof_area=1.0 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=zigzag xy_offset=-0.010000000000000002 prime_tower_brim_enable=False diff --git a/stress_benchmark/resources/067.settings b/stress_benchmark/resources/067.settings index f0aaccedf9..1f04d38ae0 100644 --- a/stress_benchmark/resources/067.settings +++ b/stress_benchmark/resources/067.settings @@ -192,7 +192,9 @@ roofing_line_width=0.45 material_flow_layer_0=100 minimum_roof_area=10 blackmagic=0 -raft_remove_inside_corners=False +raft_base_remove_inside_corners=False +raft_interface_remove_inside_corners=False +raft_surface_remove_inside_corners=False support_interface_pattern=grid xy_offset=0 prime_tower_brim_enable=False From 90aea70b334e6e92bac6f9c0ef020a3ec2bea455 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 08:51:58 +0100 Subject: [PATCH 204/218] Inherit secrets Contribute to CURA-11528 --- .github/workflows/unit-test-post.yml | 1 + .github/workflows/unit-test.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/unit-test-post.yml b/.github/workflows/unit-test-post.yml index d916418dd4..39268410d2 100644 --- a/.github/workflows/unit-test-post.yml +++ b/.github/workflows/unit-test-post.yml @@ -11,3 +11,4 @@ jobs: with: event: ${{ github.event.workflow_run.event }} conclusion: ${{ github.event.workflow_run.conclusion }} + secrets: inherit diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 8879bb28a1..66e7bc0f82 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -54,4 +54,5 @@ jobs: unit_test_cmd: 'ctest --output-junit engine_test.xml' unit_test_dir: 'build/Release' build: true + secrets: inherit From 68d0de9d4dab7ef05683d21c0514a2c1158e2af9 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 9 Jan 2024 09:19:42 +0100 Subject: [PATCH 205/218] Make switch state exhaustive CURA 11395 --- src/sliceDataStorage.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 1af95d5027..bb8182aaee 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -326,6 +326,7 @@ Polygons } case Raft::LayerType::Airgap: case Raft::LayerType::Model: + { Polygons total; if (layer_nr >= 0) { @@ -367,6 +368,10 @@ Polygons } return total; } + default: + assert(false << "unreachable as switch statement is exhaustive"); + return Polygons(); + } } std::vector SliceDataStorage::getExtrudersUsed() const From cf6f7723790391cb00d077bc2f640c2b69eb9f12 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 9 Jan 2024 09:23:09 +0100 Subject: [PATCH 206/218] Use lambda to avoid code duplication CURA 11395 --- src/raft.cpp | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/src/raft.cpp b/src/raft.cpp index 233f93a40b..a8a23cf21e 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -51,35 +51,19 @@ void Raft::generate(SliceDataStorage& storage) storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } - if (settings.get("raft_base_remove_inside_corners")) - { - storage.raftBaseOutline.makeConvex(); - } - else - { - const coord_t smoothing = settings.get("raft_base_smoothing"); - storage.raftBaseOutline = storage.raftBaseOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); - } - - if (settings.get("raft_interface_remove_inside_corners")) - { - storage.raftInterfaceOutline.makeConvex(); - } - else - { - const coord_t smoothing = settings.get("raft_interface_smoothing"); - storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); - } - - if (settings.get("raft_surface_remove_inside_corners")) - { - storage.raftSurfaceOutline.makeConvex(); - } - else - { - const coord_t smoothing = settings.get("raft_surface_smoothing"); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); - } + const auto remove_inside_corners = [&settings, &storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) { + if (remove_inside_corners) + { + outline.makeConvex(); + } + else + { + outline = outline.offset(smoothing, ClipperLib::jtRound).offset(-smoothing, ClipperLib::jtRound); + } + }; + remove_inside_corners(storage.raftBaseOutline, settings.get("raft_base_remove_inside_corners"), settings.get("raft_base_smoothing")); + remove_inside_corners(storage.raftInterfaceOutline, settings.get("raft_interface_remove_inside_corners"), settings.get("raft_interface_smoothing")); + remove_inside_corners(storage.raftSurfaceOutline, settings.get("raft_surface_remove_inside_corners"), settings.get("raft_surface_smoothing")); if (storage.primeTower.enabled_ && ! storage.primeTower.would_have_actual_tower_) { From 280612a5bcc94b8463a3edbdab1caab29689e73d Mon Sep 17 00:00:00 2001 From: casperlamboo Date: Tue, 9 Jan 2024 08:24:19 +0000 Subject: [PATCH 207/218] Applied clang-format. --- src/raft.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/raft.cpp b/src/raft.cpp index a8a23cf21e..edc5c51fb7 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -51,7 +51,8 @@ void Raft::generate(SliceDataStorage& storage) storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } - const auto remove_inside_corners = [&settings, &storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) { + const auto remove_inside_corners = [&settings, &storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) + { if (remove_inside_corners) { outline.makeConvex(); From 47f51d1eadf63a457d69ce033517f06b18945210 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 9 Jan 2024 09:30:12 +0100 Subject: [PATCH 208/218] Fix debug build --- src/raft.cpp | 4 +++- src/sliceDataStorage.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/raft.cpp b/src/raft.cpp index edc5c51fb7..9bb181cf5d 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -17,7 +17,9 @@ namespace cura void Raft::generate(SliceDataStorage& storage) { - assert(storage.raftOutline.size() == 0 && "Raft polygon isn't generated yet, so should be empty!"); + assert( + storage.raftBaseOutline.size() == 0 && storage.raftInterfaceOutline.size() == 0 && storage.raftSurfaceOutline.size() == 0 + && "Raft polygon isn't generated yet, so should be empty!"); const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; constexpr bool include_support = true; constexpr bool dont_include_prime_tower = false; // Prime tower raft will be handled separately in 'storage.primeRaftOutline'; see below. diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index bb8182aaee..24c4be9bda 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -297,7 +297,7 @@ Polygons use_current_extruder_for_raft |= extruder_nr == int(mesh_group_settings.get("raft_surface_extruder_nr").extruder_nr_); break; default: - assert(false << "unreachable due to outer switch statement"); + assert(false && "unreachable due to outer switch statement"); return Polygons(); } From 6670b80fff2722572a405bcd8d62cf9e4eef1b95 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 9 Jan 2024 09:53:25 +0100 Subject: [PATCH 209/218] Fix debug build --- src/sliceDataStorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sliceDataStorage.cpp b/src/sliceDataStorage.cpp index 24c4be9bda..e87250191b 100644 --- a/src/sliceDataStorage.cpp +++ b/src/sliceDataStorage.cpp @@ -369,7 +369,7 @@ Polygons return total; } default: - assert(false << "unreachable as switch statement is exhaustive"); + assert(false && "unreachable as switch statement is exhaustive"); return Polygons(); } } From 956d47aaf59f6be519126f1eddcbc77bef2ce8d4 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 9 Jan 2024 10:28:08 +0100 Subject: [PATCH 210/218] Avoid re-use of setting getters by storing setting-value in local variable CURA 11395 --- src/raft.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/raft.cpp b/src/raft.cpp index 9bb181cf5d..a4286c2ce5 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -23,15 +23,17 @@ void Raft::generate(SliceDataStorage& storage) const Settings& settings = Application::getInstance().current_slice_->scene.current_mesh_group->settings.get("raft_base_extruder_nr").settings_; constexpr bool include_support = true; constexpr bool dont_include_prime_tower = false; // Prime tower raft will be handled separately in 'storage.primeRaftOutline'; see below. + const auto raft_base_margin = settings.get("raft_base_margin"); + const auto raft_interface_margin = settings.get("raft_interface_margin"); + const auto raft_surface_margin = settings.get("raft_surface_margin"); storage.raftBaseOutline = storage.raftSurfaceOutline = storage.raftInterfaceOutline = storage.getLayerOutlines(0, include_support, dont_include_prime_tower); - storage.raftBaseOutline = storage.raftBaseOutline.offset(settings.get("raft_base_margin"), ClipperLib::jtRound); - storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(settings.get("raft_interface_margin"), ClipperLib::jtRound); - storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(settings.get("raft_surface_margin"), ClipperLib::jtRound); + storage.raftBaseOutline = storage.raftBaseOutline.offset(raft_base_margin, ClipperLib::jtRound); + storage.raftInterfaceOutline = storage.raftInterfaceOutline.offset(raft_interface_margin, ClipperLib::jtRound); + storage.raftSurfaceOutline = storage.raftSurfaceOutline.offset(raft_surface_margin, ClipperLib::jtRound); const coord_t shield_line_width_layer0 = settings.get("skirt_brim_line_width"); - const coord_t max_raft_distance - = std::max(std::max(settings.get("raft_base_margin"), settings.get("raft_interface_margin")), settings.get("raft_surface_margin")); + const coord_t max_raft_distance = std::max(std::max(raft_base_margin, raft_interface_margin), raft_surface_margin); if (storage.draft_protection_shield.size() > 0) { Polygons draft_shield_raft From 25870b875b37302cc9bdf20bce2c94473cb64e4f Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Tue, 9 Jan 2024 16:41:20 +0100 Subject: [PATCH 211/218] Remove unused environment variable attachment in lambda CURA 11395 --- src/raft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raft.cpp b/src/raft.cpp index a4286c2ce5..ee9281e92b 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -55,7 +55,7 @@ void Raft::generate(SliceDataStorage& storage) storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } - const auto remove_inside_corners = [&settings, &storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) + const auto remove_inside_corners = [&storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) { if (remove_inside_corners) { From c287580dee4342f95c48ebd469d3166f7d3aee34 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 9 Jan 2024 16:45:07 +0100 Subject: [PATCH 212/218] Code cleaning CURA-11395 --- src/raft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raft.cpp b/src/raft.cpp index ee9281e92b..2fb12e100b 100644 --- a/src/raft.cpp +++ b/src/raft.cpp @@ -55,7 +55,7 @@ void Raft::generate(SliceDataStorage& storage) storage.raftInterfaceOutline = storage.raftInterfaceOutline.unionPolygons(ooze_shield_raft); } - const auto remove_inside_corners = [&storage](Polygons& outline, bool remove_inside_corners, coord_t smoothing) + const auto remove_inside_corners = [](Polygons& outline, bool remove_inside_corners, coord_t smoothing) { if (remove_inside_corners) { From 2bc52f7ade897316730b4f337d37a78bd09a21ec Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 17:29:11 +0100 Subject: [PATCH 213/218] Add slicing time Contribute to CURA-11527 --- .github/workflows/gcodeanalyzer.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index b73d5900ad..722985afd9 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -179,7 +179,7 @@ jobs: run: | for file in `ls ../NightlyTestModels/*.stl`; do - ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode + ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> `basename $file .stl`.time done working-directory: CuraEngine @@ -190,6 +190,7 @@ jobs: import sys import os import json + import re from Charon.filetypes.GCodeFile import GCodeFile sys.path.append(".") @@ -204,6 +205,8 @@ jobs: if ext.lower() != ".gcode": continue infilename = os.path.join(folder_path, filename) + with open(infilename.split(".")[0] + ".time", "r") as f: + timer = float(re.match(r"^.*?cpu (\d+\.\d+)", f.read())[1]) frame = GCodeAnalyzer.DataFrame(infilename) @@ -291,6 +294,11 @@ jobs: "unit": "Celcius", "value": temperatures["50%"], }, + { + "name": f"Slicing time {basename}", + "unit": "s", + "value": timer, + }, ] with open("../output.json", "w") as outfile: From 085665f3ad83bca88b2a9d26e552d23b43dc981d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 17:42:13 +0100 Subject: [PATCH 214/218] use correct relative path Contribute to CURA-11527 --- .github/workflows/gcodeanalyzer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 722985afd9..fd3c171165 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -179,7 +179,7 @@ jobs: run: | for file in `ls ../NightlyTestModels/*.stl`; do - ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> `basename $file .stl`.time + ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> ../`basename $file .stl`.time done working-directory: CuraEngine From f61cffdfe6e9b853083e420b741de2b39eabc371 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 17:45:33 +0100 Subject: [PATCH 215/218] Alert on benchmark regression Very low tresshold to test things out Contribute to CURA-11527 --- .github/workflows/benchmark.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index adb24aa2ff..b843ffc052 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -55,4 +55,6 @@ jobs: output_file_path: "build/Release/benchmark_result.json" data_dir: "dev/bench" tool: "googlecpp" + alert_threshold: "101%" + alert_comment_cc_users: "@nallath, @jellespijker, @wawanbreton, @casperlamboo, @saumyaj3, @HellAholic" secrets: inherit From 2cf8adbe640bd9a4574d9ce125e1bbc04d8f7f8d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 17:51:59 +0100 Subject: [PATCH 216/218] use .time Contribute to CURA-11527 --- .github/workflows/gcodeanalyzer.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index fd3c171165..61a5c49a47 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -179,7 +179,7 @@ jobs: run: | for file in `ls ../NightlyTestModels/*.stl`; do - ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> ../`basename $file .stl`.time + ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> ../$file.time done working-directory: CuraEngine @@ -205,7 +205,7 @@ jobs: if ext.lower() != ".gcode": continue infilename = os.path.join(folder_path, filename) - with open(infilename.split(".")[0] + ".time", "r") as f: + with open(infilename + ".time", "r") as f: timer = float(re.match(r"^.*?cpu (\d+\.\d+)", f.read())[1]) frame = GCodeAnalyzer.DataFrame(infilename) From a0892ba96292d2e04e6684e8a0c035b9d96929f7 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 17:55:28 +0100 Subject: [PATCH 217/218] realistic alert value Contribute to CURA-11527 --- .github/workflows/benchmark.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index b843ffc052..30ce6205c6 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -55,6 +55,6 @@ jobs: output_file_path: "build/Release/benchmark_result.json" data_dir: "dev/bench" tool: "googlecpp" - alert_threshold: "101%" + alert_threshold: "125%" alert_comment_cc_users: "@nallath, @jellespijker, @wawanbreton, @casperlamboo, @saumyaj3, @HellAholic" secrets: inherit From 60c94ef84b35037e0c0bad93ef4ad9aff1b70fc5 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 9 Jan 2024 18:00:53 +0100 Subject: [PATCH 218/218] different relative path Contribute to CURA-11527 --- .github/workflows/gcodeanalyzer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gcodeanalyzer.yml b/.github/workflows/gcodeanalyzer.yml index 61a5c49a47..116937507c 100644 --- a/.github/workflows/gcodeanalyzer.yml +++ b/.github/workflows/gcodeanalyzer.yml @@ -179,7 +179,7 @@ jobs: run: | for file in `ls ../NightlyTestModels/*.stl`; do - ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> ../$file.time + ( time ./build/Release/CuraEngine slice --force-read-parent --force-read-nondefault -v -p -j ../Cura/resources/definitions/ultimaker_s3.def.json -l $file -o ../`basename $file .stl`.gcode ) 2> $file.time done working-directory: CuraEngine